Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
45f9785
Add channel and thread filtering to message broker (#293)
ptone Jun 2, 2026
d54278d
Fix test suite leaking Hub credentials, corrupting agent state (#296)
ptone Jun 2, 2026
e64a1a7
docs: document REGION and ZONE overrides in starter-hub README
ptone Jun 3, 2026
b2eaa59
fix: use sudo to check repository path existence in gce-demo-setup-re…
ptone Jun 3, 2026
5d21b25
cmd: fix nil-pointer panic in harness-config when Hub is disabled
ptone Jun 3, 2026
26caeb9
scripts/starter-hub: add MACHINE_TYPE override support to provision s…
ptone Jun 3, 2026
e4585dc
docs: add external channels, GCE hub setup, and multi-broker guides (…
zeroasterisk Jun 3, 2026
c5143bc
Add sort and filter to agent list view (#297)
ptone Jun 3, 2026
0ede010
Add prominent disconnected overlay to web terminal (#295)
ptone Jun 3, 2026
f7e0109
feat(store): Postgres backend — pgx driver, Ent schema parity, full s…
ptone Jun 5, 2026
b1f08a0
Restore contents of .scion as before the recent pull
ptone Jun 5, 2026
d1a01c7
Remove scratchpad markdown files as requested
ptone Jun 5, 2026
afaae9a
Organize developer tools into hack and fix build config
ptone Jun 5, 2026
36efc16
fix(sciontool/hub): prevent token-file test from clobbering live agen…
ptone Jun 5, 2026
eeee331
feat(hub): multi-node broker dispatch — affinity, durable intent, lif…
ptone Jun 5, 2026
02efd44
feat(runtime): NFS-coordinated workspace sharing across nodes (Model …
ptone Jun 5, 2026
3aab748
fix: prevent stale disconnect from marking reconnected broker offline…
ptone Jun 5, 2026
e04d431
feat: resource clone & delete with authz hardening (#301)
ptone Jun 5, 2026
0c5ba2d
fix: multi-node session fixes + Cloud Run deployment (#309)
ptone Jun 5, 2026
05ef2ba
Guard hub agent phase transitions against spurious session lifecycle …
ptone Jun 5, 2026
c177a86
Fix TestDeleteStopped_RequiresGroveContext failing in hub environment…
ptone Jun 5, 2026
2c3d45c
Fix agent list task overflow and unify action buttons (#311)
ptone Jun 5, 2026
ca7701b
feat(hub): auth proxy mode (Google IAP) (#310)
ptone Jun 5, 2026
6d2e868
fix: resolve workspace file browser to groves/ instead of projects/ (…
ptone Jun 5, 2026
59e7304
fix(hub): allow agents to create sub-agents (drop User FK on created_…
ptone Jun 6, 2026
fe5bc87
Add health-debug to sciontool and a feature to repair-inject auth int…
ptone Jun 6, 2026
41a40f1
Add Reset Auth button to agent detail page UI
Jun 6, 2026
9c6a131
fix: add more of the triage-remediation for broken auth during upgrad…
ptone Jun 6, 2026
87c0487
fix(hub): use deterministic UUID for plugin broker IDs to match α mig…
ptone Jun 6, 2026
a3a7530
fix(hub): address PR #319 review feedback (#319)
ptone Jun 6, 2026
a204880
fix(hub): multi-node session fixes — OAuth state_mismatch + shared si…
ptone Jun 6, 2026
e0d8fcb
build(deps-dev): bump postcss in /extras/agent-viz/web (#203)
dependabot[bot] Jun 6, 2026
6016dcd
fix(ci): apply gofmt to fix CI format check (#324)
ptone Jun 6, 2026
a12d276
feat: enforce unique agent slugs within a project (#325)
ptone Jun 6, 2026
d36ec50
feat: add project rename support (#326)
ptone Jun 6, 2026
69ca824
chore: remove spurious files and add commit guidelines (#329)
ptone Jun 6, 2026
1c74f56
fix: resolve hub auth token expiry deadlock after signing-key rotatio…
ptone Jun 6, 2026
a7aeb08
fix: update scion-env on GitHub token refresh to prevent gh CLI 401s …
ptone Jun 6, 2026
d9eb95c
docs: generate daily release notes for May 29 - June 5, 2026 (#331)
ptone Jun 6, 2026
056e8f6
Project visibility via membership (subtractive model) (#332)
ptone Jun 6, 2026
b232fbb
fix(ci): add missing !no_sqlite build tag to signing_key_shared_test.…
ptone Jun 6, 2026
2b71d8c
automation: add cloud run deploy pattern for hub (#330)
ptone Jun 7, 2026
003d2a0
Discord chat (#333)
ptone Jun 7, 2026
e01216e
feat: auto-prefix bare email recipients with user: in scion message (…
ptone Jun 7, 2026
ce31734
Scion/fix auth reset self heal (#337)
ptone Jun 7, 2026
5122e03
fix: align hubManagedProjectPath to prefer projects/ over groves/ (#338)
ptone Jun 7, 2026
050c65f
fix(scion-telegram): update group_links on supergroup migration inste…
ptone Jun 7, 2026
7e3c1db
Scion/harness refactor (#336)
ptone Jun 7, 2026
2c2db6f
fix: remove unused _linkedDiscordId property to fix typecheck CI (#340)
ptone Jun 7, 2026
b2b2ba2
fix(hub): carry channel and thread_id through outbound message API (#…
ptone Jun 7, 2026
c92d272
feat(agent-viz): add Agent Communications transcript panel (#342)
ngtanthanh-qc Jun 7, 2026
44b492f
Extract standalone provisionShared from nfsBackend.Provision
ptone Jun 7, 2026
3c4c97a
Remove Provision from WorkspaceBackend interface
ptone Jun 7, 2026
7928d2b
Retarget provisioning tests to call provisionShared directly
ptone Jun 7, 2026
f6f0913
Document Tier-3 mount-type seam for future vendor types
ptone Jun 7, 2026
7918a16
docs(runtime): drop stale Provision reference from localBackend comment
ptone Jun 7, 2026
3cee66c
Export provisionShared → ProvisionShared for CLI subcommand access
ptone Jun 7, 2026
552b52b
Add SentinelDir field to ProvisionInput for k8s mount constraint
ptone Jun 7, 2026
e5d440f
Add sciontool provision subcommand for k8s init container
ptone Jun 7, 2026
a719bae
Rewire buildPod init container to invoke sciontool provision
ptone Jun 7, 2026
d638b67
Delete retired shell scripts, update init-container tests
ptone Jun 7, 2026
6b7c6b3
Extract Tier-1 provisioning to config-free pkg/provision leaf package
ptone Jun 7, 2026
e28abcb
fix(provision): guard chown target against filesystem root in init-co…
ptone Jun 7, 2026
9db77e6
style(provision): rename stale 'nfsBackend.Provision:' log prefixes t…
ptone Jun 7, 2026
50c029e
fix(provision): propagate context.Context through provisioning path
ptone Jun 7, 2026
6029c60
fix(ci): resolve golangci-lint errcheck and gofmt failures (#346)
ptone Jun 7, 2026
0c1353e
Add cloudrun-volume and gke-shared-volume mount types (#169)
ptone Jun 7, 2026
6ecd613
Add Realize variants and backends for cloudrun-volume and gke-shared-…
ptone Jun 7, 2026
21d3743
Add Cloud Run runtime with broker-side direct provisioning (#169)
ptone Jun 7, 2026
4980b3b
docs(cloudrun): explain why SharingModeSharedPlain is fixed in provis…
ptone Jun 7, 2026
ba79900
fix: prevent test suite from leaking hub status updates and telemetry…
ptone Jun 7, 2026
00ddd69
feat(worktree): adapt Phase 1 onto pkg/provision (post-#169) (#350)
ptone Jun 7, 2026
013f186
feat(a2a-bridge): add gRPC transport
zeroasterisk Jun 5, 2026
8da17c0
fix(a2a-bridge): fix gRPC parsing, data loss, and validation
zeroasterisk Jun 6, 2026
d9d8ede
fix(a2a-bridge): fix 2 data-loss bugs in gRPC type translation
zeroasterisk Jun 6, 2026
72e92a4
fix(a2a-bridge): 4 bugs in gRPC server from round 3 review
zeroasterisk Jun 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
48 changes: 0 additions & 48 deletions .coordinator-state.md

This file was deleted.

90 changes: 90 additions & 0 deletions .design/a2a-grpc-transport.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# A2A Bridge: gRPC Transport

**Status:** Implementing
**Created:** 2026-06-05
**Related:** [a2a-bridge-design.md](./a2a-bridge-design.md), [a2a-multi-turn-lifecycle.md](./a2a-multi-turn-lifecycle.md)

---

## 1. Problem

The A2A bridge currently only supports JSON-RPC 2.0 over HTTP. The A2A protocol
specification defines three transport bindings: JSON-RPC, gRPC, and HTTP+JSON/REST.
The ITK compatibility tests exercise gRPC transport in their multi-hop traversal.
Without gRPC, the bridge cannot participate in cross-SDK interop scenarios that
use gRPC transport.

## 2. Design

### Approach: gRPC adapter over existing Bridge logic

The Bridge struct already implements all A2A operations (SendMessage, GetTask,
ListTasks, CancelTask, push notifications, streaming). The gRPC server is a thin
adapter that:

1. Receives gRPC requests
2. Translates protobuf messages to the bridge's internal types
3. Delegates to the same Bridge methods the JSON-RPC server uses
4. Translates responses back to protobuf

This avoids duplicating any business logic.

### Proto compilation

Use the official A2A proto from `a2aproject/A2A/specification/a2a.proto` as the
source. Compile with `protoc` + `protoc-gen-go` + `protoc-gen-go-grpc` to generate
Go code. Generated code goes in `internal/a2apb/`.

The proto has dependencies on `google/api/annotations.proto` etc. — use buf or
vendored google API protos.

### Server structure

```
extras/scion-a2a-bridge/
internal/
a2apb/ # generated protobuf Go code
bridge/
grpc_server.go # gRPC adapter implementing A2AServiceServer
```

### gRPC service methods → Bridge method mapping

| gRPC RPC | Bridge method |
|---|---|
| SendMessage | Bridge.SendMessage (blocking or non-blocking based on return_immediately) |
| SendStreamingMessage | Bridge.SendStreamingMessage |
| GetTask | Bridge.GetTask |
| ListTasks | Bridge.ListTasks |
| CancelTask | Bridge.CancelTask |
| SubscribeToTask | Bridge.SubscribeToTask |
| CreateTaskPushNotificationConfig | Bridge.SetPushNotificationConfig |
| GetTaskPushNotificationConfig | Bridge.GetPushNotificationConfig |
| ListTaskPushNotificationConfigs | Bridge.GetPushNotificationConfig |
| DeleteTaskPushNotificationConfig | Bridge.DeletePushNotificationConfig |
| GetExtendedAgentCard | Bridge.GenerateAgentCard |

### Configuration

Add to config:
```yaml
bridge:
grpc_listen_address: ":9443" # separate port for gRPC
```

### Startup

The main() function starts both HTTP and gRPC servers. gRPC is optional — only
started if grpc_listen_address is configured.

## 3. Scope

- In: gRPC server adapter, proto compilation, config, startup wiring
- Out: gRPC client (for making outbound A2A calls), TLS on gRPC (use reverse proxy)

## 4. Testing

- Test: each gRPC RPC maps correctly to Bridge method
- Test: protobuf ↔ internal type translation
- Test: streaming RPCs deliver events correctly
- Test: gRPC server starts and accepts connections
Loading