Skip to content

fix(t3): speak orchestration protocol 2 and pair in one click - #54

Merged
borght-dev merged 1 commit into
masterfrom
dispatch/00-t3-protocol
Oct 12, 2026
Merged

borght-dev merged 1 commit into
masterfrom
dispatch/00-t3-protocol

Conversation

@borght-dev

@borght-dev borght-dev commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Part 1 of 8 of Dispatch in BorgDock. The stack, bottom up: #54 → #55 → #56 → #57 → #58 → #59 → #60 → #61.

T3 Code moved to orchestration protocol 2. BorgDock still read the v1 projection tables in state.sqlite, which T3 stopped writing, and posted commands to an HTTP endpoint that no longer exists. The T3 strip on pull requests showed week-old threads and "Open a new thread in T3" failed.

This one stands on its own as a bug fix. The rest of the stack builds on it.

What changed

  • t3.rs is now a module: hosts, client, shell, desktop, commands.
  • Reads go over HTTP with the protocol header (/api/orchestration/shell, /threads/:id/bounded).
  • Commands go as Effect RPC over the WebSocket (launchThread, dispatchCommand, server.getConfig).
  • Projects are created through /api/projects/mutate.
  • BorgDock finds the installed build whatever its channel (Nightly, Alpha, stable) and opens a thread by passing a t3code://threads/... link as argument.
  • t3_probe reads authenticated instead of the status code, so an expired token no longer shows as paired.
  • Settings, Agents: Pair with T3 on this machine pairs in one click. T3's own CLI issues a session scoped to orchestration:read and orchestration:operate.

How I checked it

  • Read-only against T3 0.0.46-nightly with the ignored live test (cargo test --lib t3::commands::tests::live -- --ignored): shell, one thread detail, the first user message and server.getConfig.
  • Launching, answering and settling a thread have unit tests for the frames they send. I did not run them against the real T3, because they start agents and answer real questions.

🤖 Generated with Claude Code

T3 Code moved to orchestration protocol 2. BorgDock still read the v1
projection tables in state.sqlite, which T3 stopped writing, and posted
commands to an HTTP endpoint that no longer exists. The T3 strip on pull
requests showed week-old threads and "Open a new thread in T3" failed.

- Split t3.rs into a module: hosts, client, shell, desktop, commands.
- Read the shell and thread detail over HTTP with the protocol header.
- Send commands as Effect RPC over the WebSocket (launchThread,
  dispatchCommand, server.getConfig).
- Create projects through /api/projects/mutate.
- Find the installed build whatever its channel (Nightly, Alpha, stable)
  and open a thread through a t3code://threads link passed as argument.
- t3_probe reads `authenticated` instead of the status code, so an expired
  token no longer shows as paired.
- Pair with the local T3 in one click: T3's CLI issues a session scoped to
  orchestration:read and orchestration:operate.

Checked read-only against T3 0.0.46-nightly with the ignored live test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant