Support Codex subagent transcripts

This commit is contained in:
iris committed 2026-09-13 00:41:59 -04:00
1 parent 7d9df5d572
commit 83b113ef0f
6 files changed
+557 -38

No files matched your search

+17 -7
View File
@@ -270,6 +270,17 @@ also makes adoption safe: if a backend restart falls between the deltas and the
completion, the correction is still meaningful without process-local memory
of which item ids streamed.
**Codex subagents share that one app-server process** (2026-09-13). Every
thread in the session tree is multiplexed onto its stdout and identified by
the notification's `threadId`. `collabAgentToolCall` carries the spawn prompt;
`subAgentActivity` carries the child thread id, path and lifecycle. The driver
uses that child thread id as the existing `Subagents` registry key, routes the
child's ordinary items through a separate translator into its own transcript,
and keeps only the root thread's process state in `CodexDriver`. A child turn
ending does not finish the child: `completed` or `interrupted` activity does.
An `agentMessage` marked `delivery: async` is a peer message delivered to a
thread, never that thread's own assistant reply.
### The llama driver
One `llama-server` per session, started through the same `Transport` as any
@@ -877,13 +888,12 @@ session, which is what auto-resume needs.
model, with no process and no controls of its own.** Full design and wire
shape in `SUBAGENTS.md`, kept separate because the app half is being built
against it in parallel and it is the shared contract between the two. The
one-paragraph reason: a session's Task-tool helpers already speak the common
event model on the parent's own stdout (each line carrying
`parent_tool_use_id`), so giving each one its own small transcript — same
file format, same paging routes, same SSE stream, reused by addressing rather
than by copying — costs a routing step in the translator and a registry
(`session/subagent.rs`) rather than a second session type with a driver, a
process and a config entry it does not need.
one-paragraph reason: Claude's Task helpers and Codex's collaboration threads
already speak their parent's event stream with a child identifier, so giving
each one its own small transcript — same file format, same paging routes, same
SSE stream, reused by addressing rather than by copying — costs a routing step
in the translator and a registry (`session/subagent.rs`) rather than a second
session type with a driver, a process and a config entry it does not need.
### HTTP surface