diff --git a/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.i18n.yaml b/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.i18n.yaml index 3c44737efa..e597dd85f7 100644 --- a/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.i18n.yaml @@ -9,14 +9,14 @@ en: 45ad48d0442bbd54 zh: 46837f64f46568b8 /agent-note-tree-wide-agent-names/decision: - en: 53822735b4ce3e4e - zh: 316cb613b22a3e80 + en: b37f7932cbf0c1c0 + zh: 886744928086e4b1 /agent-note-tree-wide-agent-names/alternatives-considered: - en: 93964747050c9265 - zh: 2acb9708d145894b + en: 257d0ccc8ed226f9 + zh: b1579b5d0eb55431 /agent-note-tree-wide-agent-names/consequences: en: 7810ae426c76bfcd zh: 4b954c0f0672c534 /agent-note-tree-wide-agent-names/testing: - en: 4210801f0de47c2c - zh: fe4d154a15796478 + en: 74f23930617c785b + zh: 9c8802fab1c124cb diff --git a/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.md b/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.md index cbede93c82..452ccb4544 100644 --- a/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.md +++ b/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.md @@ -10,7 +10,7 @@ Session ids identify executions durably but make model coordination difficult to ## Decision -Keep Session ids for persistence and authorization. Model tools accept immutable names unique throughout one agent tree. A root-owned `subagent/named` event records each successful assignment; the projection excludes fork-inherited facts. The manager reserves names before asynchronous preparation and releases failed unpublished reservations. Committed names remain taken after settlement so delayed messages cannot reach a different agent. +Keep Session ids for persistence and authorization. Model tools accept immutable names unique throughout one agent tree. Existing parent catalog records carry each successful assignment; local child descriptors carry their own names. A root-scoped runtime index rebuilds from these catalogs, excluding fork-inherited facts. The manager reserves names before asynchronous preparation and releases failed unpublished reservations. Committed names remain taken after settlement so delayed messages cannot reach a different agent. This supersedes the name-free interface in [Agent Teams as subagents](2026-10-15-agent-teams-as-subagents.md). Its lineage authority and shared subagent lifecycle remain unchanged. Resolution never grants messaging, interruption, or task-assignment authority. Older unnamed descendants receive stable `legacy:` addresses; Team assignment also accepts such addresses for active historical members. @@ -20,7 +20,7 @@ This supersedes the name-free interface in [Agent Teams as subagents](2026-10-15 **Recyclable names.** Reuse could redirect queued or delayed work after the original agent settles. Retaining assignments keeps recipient identity stable. -**A second committed registry.** The root projection already reconstructs assignments after restart. A second cache would require synchronization and recovery; only unpublished reservations need separate state. +**Separate root assignment events.** Catalogs already record child creation, and cold recovery already reads the descriptor. Keeping names in those records avoids another event, projection, and publication step. The cost is one catalog traversal per live root; unreadable historical branches prevent initialization because uniqueness cannot be established. ## Consequences @@ -28,4 +28,4 @@ Creation requires a name and rejects duplicates before dispatch. Independent roo ## Testing -Name tests exercise concurrent duplicate rejection, failed-start release, nested-tree uniqueness, independent roots, retained projection state, invalid durable assignments, and legacy lookup. Recorded Headless and SDK sessions cover creation, messages, listing, and completion notices; Team tests preserve historical assignment without granting message authority. +Name tests exercise concurrent duplicate rejection, failed-start release, nested-tree uniqueness, independent roots, catalog reconstruction, unreadable historical branches, repeated child identities, invalid durable assignments, and legacy lookup. Recorded Headless and SDK sessions cover creation, messages, listing, and completion notices; Team tests preserve historical assignment without granting message authority. diff --git a/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.zh.md b/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.zh.md index 1e7d0480ee..a3723035b4 100644 --- a/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.zh.md +++ b/.agents/notes/implemented/architecture/2026-10-16-tree-wide-agent-names.zh.md @@ -10,7 +10,7 @@ Session id 提供持久执行身份,但模型协作时难以阅读。描述可 ## 决策 -持久化与授权保留 Session id。模型工具接受整棵 agent 树内唯一且不可变的名字。根拥有的 `subagent/named` 事件记录每次成功分配;投影排除分叉继承的事实。管理器在异步准备前预留名字,释放失败且未发布的预留。执行结束后已提交名字仍被占用,避免延迟消息到达其他 agent。 +持久化与授权保留 Session id。模型工具接受整棵 agent 树内唯一且不可变的名字。现有父级 catalog 记录每次成功分配;本地子级 descriptor 携带自身名字。根级运行时索引从这些 catalog 重建,排除分叉继承的事实。管理器在异步准备前预留名字,释放失败且未发布的预留。执行结束后已提交名字仍被占用,避免延迟消息到达其他 agent。 本决策取代 [Agent Teams 作为 subagent](2026-10-15-agent-teams-as-subagents.zh.md) 中不使用名字的接口。谱系权限与共享子代理生命周期保持不变。名字解析不授予消息、中断或任务分配权限。旧的无名后代获得稳定的 `legacy:` 地址;Team 分配任务也接受活跃历史成员的此类地址。 @@ -20,7 +20,7 @@ Session id 提供持久执行身份,但模型协作时难以阅读。描述可 **可回收的名字。** 原 agent 结束后复用名字,可能改变排队或延迟工作的接收方。保留分配使接收方身份稳定。 -**第二份已提交注册表。** 根投影已经可以在重启后重建分配。第二份缓存需要同步与恢复;只有未发布的预留需要独立状态。 +**独立的根级分配事件。** catalog 已记录子级创建,冷恢复也已读取 descriptor。将名字放入这些记录可省去另一个事件、投影与发布步骤。代价是每个在线根需要遍历一次 catalog;不可读历史分支会阻止初始化,因为此时无法确认唯一性。 ## 影响 @@ -28,4 +28,4 @@ Session id 提供持久执行身份,但模型协作时难以阅读。描述可 ## 测试 -命名测试覆盖并发重名拒绝、启动失败释放、嵌套树唯一性、独立根、保留的投影状态、无效持久化分配与旧地址查找。Headless 和 SDK 录制会话覆盖创建、消息、列表与完成通知;Team 测试保留历史任务分配,同时拒绝消息权限。 +命名测试覆盖并发重名拒绝、启动失败释放、嵌套树唯一性、独立根、catalog 重建、不可读历史分支、重复子级身份、无效持久化分配与旧地址查找。Headless 和 SDK 录制会话覆盖创建、消息、列表与完成通知;Team 测试保留历史任务分配,同时拒绝消息权限。 diff --git a/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/child.expected.jsonl b/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/child.expected.jsonl index 7bb44452de..fa9a8f954c 100644 --- a/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/child.expected.jsonl +++ b/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/child.expected.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}","parentSession":"{{sessionId}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Delegated write probe","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash","agentReasoningEffort":"low"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"write-probe","label":"Delegated write probe","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash","agentReasoningEffort":"low"}} {"type":"sandbox/mode","data":{"mode":"read-only","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Use the write tool exactly once with file_path set to exactly the relative path inherited.txt and content escaped. If the write is denied, reply with the single word CHILD_DENIED and the denial marker line; do not retry and do not request escalation. If it succeeds, reply CHILD_WROTE."},{"type":"text","text":"Your name is \"write-probe\". Your parent agent name is \"lead\". Before you finish, send your result to that agent with send_message({ name: \"lead\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn."}],"source":{"kind":"user"},"role":"user","id":"{{sessionId}}"}]}} diff --git a/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/parent.expected.jsonl b/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/parent.expected.jsonl index 2420e86e79..3f695e127e 100644 --- a/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/parent.expected.jsonl +++ b/apps/cli/tests/profiles/headless/tests/expected/subagent-inheritance/parent.expected.jsonl @@ -23,8 +23,7 @@ {"type":"session/title","data":{"title":"Tighten this session to read-only.","messageSeqs":[3],"source":{"kind":"fallback"}}} {"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"delegate-write","name":"subagent","arguments":"{\"name\":\"write-probe\",\"description\": \"Delegated write probe\", \"prompt\": \"Use the write tool exactly once with file_path set to exactly the relative path inherited.txt and content escaped. If the write is denied, reply with the single word CHILD_DENIED and the denial marker line; do not retry and do not request escalation. If it succeeds, reply CHILD_WROTE.\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"delegate-write","name":"subagent","args":["{\"name\":\"write-probe\",\"description\": \"Delegated write probe\", \"prompt\": \"Use the write tool exactly once with file_path set to exactly the relative path inherited.txt and content escaped. If the write is denied, reply with the single word CHILD_DENIED and the denial marker line; do not retry and do not request escalation. If it succeeds, reply CHILD_WROTE.\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"delegate-write","name":"subagent","arguments":"{\"name\":\"write-probe\",\"description\": \"Delegated write probe\", \"prompt\": \"Use the write tool exactly once with file_path set to exactly the relative path inherited.txt and content escaped. If the write is denied, reply with the single word CHILD_DENIED and the denial marker line; do not retry and do not request escalation. If it succeeds, reply CHILD_WROTE.\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":2,"step":1,"callId":"delegate-write","name":"subagent","arguments":"{\"name\":\"write-probe\",\"description\": \"Delegated write probe\", \"prompt\": \"Use the write tool exactly once with file_path set to exactly the relative path inherited.txt and content escaped. If the write is denied, reply with the single word CHILD_DENIED and the denial marker line; do not retry and do not request escalation. If it succeeds, reply CHILD_WROTE.\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"continuable","label":"Delegated write probe"}} -{"type":"subagent/named","data":{"name":"write-probe","id":"{{sessionId}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"continuable","label":"Delegated write probe","name":"write-probe"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent write-probe finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_DENIED [sandbox: file access denied under read-only mode]"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent write-probe finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}} {"type":"tool/result","data":{"turn":2,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"delegate-write"},"toolCallId":"delegate-write","content":[{"type":"text","text":"started subagent write-probe"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[23],"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} diff --git a/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/child.expected.jsonl b/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/child.expected.jsonl index 8be6658199..9376b18343 100644 --- a/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/child.expected.jsonl +++ b/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/child.expected.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}","parentSession":"{{sessionId}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Return child result","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"settlement-child","label":"Return child result","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"workspace-write","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Reply with exactly CHILD_RESULT and nothing else. Do not call send_message."},{"type":"text","text":"Your name is \"settlement-child\". Your parent agent name is \"lead\". Before you finish, send your result to that agent with send_message({ name: \"lead\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn."}],"source":{"kind":"user"},"role":"user","id":"{{sessionId}}"}]}} diff --git a/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/stream-json.expected.jsonl b/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/stream-json.expected.jsonl index f8fbb77c56..29e1bc4af4 100644 --- a/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/stream-json.expected.jsonl +++ b/apps/cli/tests/profiles/headless/tests/expected/subagent-settlement/stream-json.expected.jsonl @@ -12,18 +12,17 @@ {"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":14,"time":0,"data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"start-child","name":"subagent","arguments":"{\"name\":\"settlement-child\",\"description\":\"Return child result\",\"prompt\":\"Reply with exactly CHILD_RESULT and nothing else. Do not call send_message.\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"start-child","name":"subagent","args":["{\"name\":\"settlement-child\",\"description\":\"Return child result\",\"prompt\":\"Reply with exactly CHILD_RESULT and nothing else. Do not call send_message.\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"start-child","name":"subagent","arguments":"{\"name\":\"settlement-child\",\"description\":\"Return child result\",\"prompt\":\"Reply with exactly CHILD_RESULT and nothing else. Do not call send_message.\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"}} {"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"tool/call","seq":15,"time":0,"data":{"turn":1,"step":1,"callId":"start-child","name":"subagent","arguments":"{\"name\":\"settlement-child\",\"description\":\"Return child result\",\"prompt\":\"Reply with exactly CHILD_RESULT and nothing else. Do not call send_message.\"}"}}} {"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"session/title","seq":16,"time":0,"data":{"title":"Subagent settlement","messageSeqs":[8],"source":{"kind":"provider","provider":"session-title-first-prompt-llm","model":{"provider":"deepseek-official","model":"deepseek-v4-flash"}}}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":17,"time":0,"data":{"version":0,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"continuable","label":"Return child result"}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"subagent/named","seq":18,"time":0,"data":{"name":"settlement-child","id":"{{sessionId}}"}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":19,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"start-child"},"toolCallId":"start-child","content":[{"type":"text","text":"started subagent settlement-child"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/end","seq":20,"time":0,"data":{"turn":1,"step":1}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":21,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent settlement-child finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_RESULT"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent settlement-child finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/start","seq":22,"time":0,"data":{"turn":1,"step":2}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":23,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"STARTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["STARTED"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"STARTED"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/end","seq":24,"time":0,"data":{"turn":1,"step":2}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":25,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/start","seq":26,"time":0,"data":{"turn":1,"step":3}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"user/message","seq":27,"time":0,"data":{"content":[{"type":"text","text":"Background subagent settlement-child finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_RESULT"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent settlement-child finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":28,"time":0,"data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_RECEIVED_SETTLEMENT_NOTICE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PARENT_RECEIVED_SETTLEMENT_NOTICE"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_RECEIVED_SETTLEMENT_NOTICE"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/end","seq":29,"time":0,"data":{"turn":1,"step":3}}} -{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":30,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":17,"time":0,"data":{"version":0,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"continuable","label":"Return child result","name":"settlement-child"}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":18,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"start-child"},"toolCallId":"start-child","content":[{"type":"text","text":"started subagent settlement-child"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/end","seq":19,"time":0,"data":{"turn":1,"step":1}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":20,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent settlement-child finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_RESULT"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent settlement-child finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/start","seq":21,"time":0,"data":{"turn":1,"step":2}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":22,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"STARTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["STARTED"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"STARTED"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/end","seq":23,"time":0,"data":{"turn":1,"step":2}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":24,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/start","seq":25,"time":0,"data":{"turn":1,"step":3}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"user/message","seq":26,"time":0,"data":{"content":[{"type":"text","text":"Background subagent settlement-child finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_RESULT"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent settlement-child finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":27,"time":0,"data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_RECEIVED_SETTLEMENT_NOTICE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PARENT_RECEIVED_SETTLEMENT_NOTICE"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_RECEIVED_SETTLEMENT_NOTICE"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"step/end","seq":28,"time":0,"data":{"turn":1,"step":3}}} +{"type":"session_event","sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":29,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}} {"type":"result","sessionId":"{{sessionId}}","output":"PARENT_RECEIVED_SETTLEMENT_NOTICE","usage":{"inputTokens":30,"outputTokens":15}} diff --git a/docs/config-catalog.md b/docs/config-catalog.md index ce2f2c9c63..fafb4de67d 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -3312,7 +3312,7 @@ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist' - `inject`: `workingDirectory` - `refs`: `Volatile` (`@deepseek-ai/cordis`) -- `source`: [`packages/subagent/subagent/src/index.ts:188`](../packages/subagent/subagent/src/index.ts) +- `source`: [`packages/subagent/subagent/src/index.ts:187`](../packages/subagent/subagent/src/index.ts) ```ts config-catalog /** Host configuration for continuable subagent capacity. */ diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index 634e03aa2a..27c1c4cc57 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -3314,7 +3314,7 @@ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist' - `inject`: `workingDirectory` - `refs`: `Volatile` (`@deepseek-ai/cordis`) -- `source`: [`packages/subagent/subagent/src/index.ts:188`](../packages/subagent/subagent/src/index.ts) +- `source`: [`packages/subagent/subagent/src/index.ts:187`](../packages/subagent/subagent/src/index.ts) ```ts config-catalog /** Host configuration for continuable subagent capacity. */ diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index 6e1874169b..61f51dfbb8 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -68,10 +68,10 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `session/flush` | `parallel` | [`packages/core/session/src/index.ts:82`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-telemetry`](../packages/session/session-telemetry) | | `settings/document-updated` | `emit` | [`packages/settings/settings/src/types.ts:75`](../packages/settings/settings/src/types.ts) | [`settings`](../packages/settings/settings) (`emit`) | `remotes` | | `skills/change` | `emit` | [`packages/skill/skill/src/index.ts:296`](../packages/skill/skill/src/index.ts) | [`skill`](../packages/skill/skill) (`events.dispatch`) | - | -| `subagent/end` | `emit` | [`packages/subagent/subagent/src/index.ts:168`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code), `server` | -| `subagent/provider-added` | `emit` | [`packages/subagent/subagent/src/index.ts:144`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`emit`) | [`tool-subagent`](../packages/subagent/tool-subagent) | -| `subagent/provider-removed` | `emit` | [`packages/subagent/subagent/src/index.ts:150`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`tool-subagent`](../packages/subagent/tool-subagent) | -| `subagent/start` | `emit` | [`packages/subagent/subagent/src/index.ts:160`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code) | +| `subagent/end` | `emit` | [`packages/subagent/subagent/src/index.ts:167`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code), `server` | +| `subagent/provider-added` | `emit` | [`packages/subagent/subagent/src/index.ts:143`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`emit`) | [`tool-subagent`](../packages/subagent/tool-subagent) | +| `subagent/provider-removed` | `emit` | [`packages/subagent/subagent/src/index.ts:149`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`tool-subagent`](../packages/subagent/tool-subagent) | +| `subagent/start` | `emit` | [`packages/subagent/subagent/src/index.ts:159`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code) | | `system-prompt/assemble` | `waterfall` | [`packages/core/system-prompt/src/index.ts:31`](../packages/core/system-prompt/src/index.ts) | [`system-prompt`](../packages/core/system-prompt) (`waterfall`) | [`agent`](../packages/core/agent), `browser-use-runtime`, [`session-reference`](../packages/context/session-reference), [`working-directory`](../packages/session/working-directory) | | `system-prompt/change` | `emit` | [`packages/core/system-prompt/src/index.ts:37`](../packages/core/system-prompt/src/index.ts) | [`system-prompt`](../packages/core/system-prompt) (`emit`) | - | | `tools/change` | `emit` | [`packages/core/tools/src/index.ts:209`](../packages/core/tools/src/index.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`), [`tools`](../packages/core/tools) (`emit`) | `browser-use-runtime`, [`tool-subagent`](../packages/subagent/tool-subagent) | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index 514ac4b369..9b16b69863 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -70,10 +70,10 @@ | `session/flush` | `parallel` | [`packages/core/session/src/index.ts:82`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-telemetry`](../packages/session/session-telemetry) | | `settings/document-updated` | `emit` | [`packages/settings/settings/src/types.ts:75`](../packages/settings/settings/src/types.ts) | [`settings`](../packages/settings/settings) (`emit`) | `remotes` | | `skills/change` | `emit` | [`packages/skill/skill/src/index.ts:296`](../packages/skill/skill/src/index.ts) | [`skill`](../packages/skill/skill) (`events.dispatch`) | - | -| `subagent/end` | `emit` | [`packages/subagent/subagent/src/index.ts:168`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code), `server` | -| `subagent/provider-added` | `emit` | [`packages/subagent/subagent/src/index.ts:144`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`emit`) | [`tool-subagent`](../packages/subagent/tool-subagent) | -| `subagent/provider-removed` | `emit` | [`packages/subagent/subagent/src/index.ts:150`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`tool-subagent`](../packages/subagent/tool-subagent) | -| `subagent/start` | `emit` | [`packages/subagent/subagent/src/index.ts:160`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code) | +| `subagent/end` | `emit` | [`packages/subagent/subagent/src/index.ts:167`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code), `server` | +| `subagent/provider-added` | `emit` | [`packages/subagent/subagent/src/index.ts:143`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`emit`) | [`tool-subagent`](../packages/subagent/tool-subagent) | +| `subagent/provider-removed` | `emit` | [`packages/subagent/subagent/src/index.ts:149`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`tool-subagent`](../packages/subagent/tool-subagent) | +| `subagent/start` | `emit` | [`packages/subagent/subagent/src/index.ts:159`](../packages/subagent/subagent/src/index.ts) | [`subagent`](../packages/subagent/subagent) (`events.dispatch`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code) | | `system-prompt/assemble` | `waterfall` | [`packages/core/system-prompt/src/index.ts:31`](../packages/core/system-prompt/src/index.ts) | [`system-prompt`](../packages/core/system-prompt) (`waterfall`) | [`agent`](../packages/core/agent), `browser-use-runtime`, [`session-reference`](../packages/context/session-reference), [`working-directory`](../packages/session/working-directory) | | `system-prompt/change` | `emit` | [`packages/core/system-prompt/src/index.ts:37`](../packages/core/system-prompt/src/index.ts) | [`system-prompt`](../packages/core/system-prompt) (`emit`) | - | | `tools/change` | `emit` | [`packages/core/tools/src/index.ts:209`](../packages/core/tools/src/index.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`), [`tools`](../packages/core/tools) (`emit`) | `browser-use-runtime`, [`tool-subagent`](../packages/subagent/tool-subagent) | diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index d10ef5870f..317ecb221c 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -9,8 +9,8 @@ en: 1387c4505dde2faf zh: 48570fa1c13d6910 /session-persistence-event-catalog/persistence-type-fingerprints: - en: 703191ea7dd30cc8 - zh: c85ffc80d296778d + en: 541a6a6bbaacc9f3 + zh: 38421568ddcd7edc /session-persistence-event-catalog/event-envelope: en: 689f781d95689e20 zh: 602f6a7f0835d698 @@ -207,17 +207,14 @@ en: 9630752e97ddbfbc zh: 9630752e97ddbfbc /session-persistence-event-catalog/events/subagent/subagent-catalog-log-only: - en: 0ef7504e93df1ac0 - zh: d8bf76a1b1e7c362 + en: ccea188bb51257f7 + zh: a420777f39b1267a /session-persistence-event-catalog/events/subagent/subagent-descriptor-log-only: - en: f5d53639dc5afdfc - zh: 8c553e7397d08832 + en: f2354265e5e83c41 + zh: 07f6085094d93a8c /session-persistence-event-catalog/events/subagent/subagent-model-selection-policy-log-only: - en: 68c666987d376151 - zh: 7c56ceb033c53de7 -/session-persistence-event-catalog/events/subagent/subagent-named-log-only: - en: 6255823943d4f0da - zh: 14a3a543a2e0e887 + en: cdf085d18fae747a + zh: 83cd5cf56fef4050 /session-persistence-event-catalog/events/system: en: 8cac41d2fb575975 zh: 8cac41d2fb575975 @@ -783,11 +780,8 @@ en: e932f06c949f5f6c zh: e932f06c949f5f6c /session-persistence-event-catalog/resolved-persistence-types/subagent-model-selection-policy: - en: 257216410047d2eb - zh: 257216410047d2eb -/session-persistence-event-catalog/resolved-persistence-types/subagent-named: - en: bcfc29bf1001dc32 - zh: bcfc29bf1001dc32 + en: 25ccd80df944ac00 + zh: 25ccd80df944ac00 /session-persistence-event-catalog/resolved-persistence-types/success: en: 801923015f7dc7e4 zh: 801923015f7dc7e4 @@ -1002,11 +996,11 @@ en: 09c25cb603f1253e zh: be9ac4ac394dc1fc /session-persistence-event-catalog/resolved-persistence-types/contextsnapshotsection~2: - en: 6e11a7855b002f20 - zh: d752566bb2b75948 + en: 18ba78f1c09f8ce4 + zh: bb25525c98390983 /session-persistence-event-catalog/resolved-persistence-types/continuablesubagentdescriptordata: - en: 586743dfeab78c55 - zh: 26ccef4a02dd7a58 + en: 00a190e8b2924d6b + zh: e16fd9662f9d576a /session-persistence-event-catalog/resolved-persistence-types/deepseeksearchllmrequest: en: db71ecccc1e5409e zh: 7b55744e022dc102 @@ -1152,11 +1146,11 @@ en: 6d66ffc1b393f2f2 zh: ef6cb30b71f287e7 /session-persistence-event-catalog/resolved-persistence-types/oneshotscheduledispatchchange: - en: a3300babe57b6b67 - zh: 4aaf06a149b399c3 + en: 352ab4eeff1a826a + zh: a7b455502209d71d /session-persistence-event-catalog/resolved-persistence-types/oneshotsubagentdescriptordata: - en: 9ba0cfd5ee9d6a38 - zh: 1414fd7468c42651 + en: cbdc7b3ccf47f431 + zh: 225cad538533df9c /session-persistence-event-catalog/resolved-persistence-types/optionalsessionseq: en: 6d4afd6c237b50fd zh: ec07f774c853f27b @@ -1227,17 +1221,14 @@ en: ecc15ebadb77afdf zh: 97ac27d6a4175f6f /session-persistence-event-catalog/resolved-persistence-types/streamchunk: - en: 6a9cc39c2df1b476 - zh: 697ea4d14d77f59c + en: 6aae1eda92bd99f8 + zh: 9d0e99b0973a61f9 /session-persistence-event-catalog/resolved-persistence-types/subagentcatalogevent: - en: 4da876322ab7a590 - zh: 67992071915ab925 + en: 683a4141073c2129 + zh: b6da55c4453fea4e /session-persistence-event-catalog/resolved-persistence-types/subagentdescriptordata: - en: 648c373bb4d7017b - zh: c7b729e5435d3b48 -/session-persistence-event-catalog/resolved-persistence-types/subagentnamedata: - en: 12db98d0b0b894f3 - zh: 1d0fd64e438dde78 + en: 82593fafcbd124ef + zh: 12e173bc8d37aa8a /session-persistence-event-catalog/resolved-persistence-types/subagentsettledmessagesource: en: d34acab659e74957 zh: 25cabc6c9fb44a7e @@ -1428,26 +1419,26 @@ en: 4c4656bdb9474d3d zh: 3585f5d187dcc494 /session-persistence-event-catalog/resolved-persistence-types/capturedformatversion-capturedthroughseq-compacted-inputindex~2: - en: de1d59e9edd58a7d - zh: 0e29b8e80db664dc + en: 5e8d485a4be13016 + zh: 06a70e1bcb33df05 /session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode: - en: 2ef977cb4a83bb0a - zh: 893fded259888650 + en: f70f3b54996ce8e3 + zh: e6971aebbfd0f473 /session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~2: - en: 669e284c656449c7 - zh: e40ac8cb904bd983 + en: 68832495ea0b43e2 + zh: 51facc74e1b14279 /session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~3: - en: 1dc667423caefb33 - zh: bd38fa2473673d14 + en: 360b5f9fcae761d2 + zh: e3b3f583167faf74 /session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~4: - en: dc8738014c719f4e - zh: c773fd60c0090231 + en: b6c2acdbe1c54b3d + zh: 0184ea4c441ca760 /session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~5: - en: 43cf5cd666b591a0 - zh: 7c7a3011f8681f12 + en: 6ec49d6ace5cd81a + zh: 0553312656cb235b /session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~6: - en: a1f188c9058cf621 - zh: eb43c0f045fb9afb + en: c4e434da2a56e7fa + zh: 6b7af90f05fc0de6 /session-persistence-event-catalog/resolved-persistence-types/code-name-reason: en: 404a76066a59f3c6 zh: ec9d510bdbac9786 @@ -2058,20 +2049,17 @@ en: 7fc233c4a569dae2 zh: bc2b3fed4a397c00 /session-persistence-event-catalog/resolved-persistence-types/type-step-start: - en: bb27281e17bb5e4f - zh: b53e3fc8d916118b + en: 99c10de419e3c82d + zh: b265a110a62c319a /session-persistence-event-catalog/resolved-persistence-types/type-subagent-catalog: - en: 0f697ddcde1625dd - zh: 0dd87d2e108c5312 + en: cf422933dcf279d5 + zh: 8b64a47b5bfb7976 /session-persistence-event-catalog/resolved-persistence-types/type-subagent-descriptor: - en: 2adab4361a5b558d - zh: 7f2a8da669f9e117 + en: b2c38b4af277a0dd + zh: e25c39e65bc3bf59 /session-persistence-event-catalog/resolved-persistence-types/type-subagent-model-selection-policy: - en: ba25b6c68d971788 - zh: 4c5ca166b4739cce -/session-persistence-event-catalog/resolved-persistence-types/type-subagent-named: - en: 4b4ecf7269d7daf5 - zh: 78ce0a540ad8141a + en: 9dd6539f4a5d9d16 + zh: d886630b70a4bce8 /session-persistence-event-catalog/resolved-persistence-types/type-system-message: en: 7fb45f52932f268b zh: 5019109b99274589 diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 01ea3e772b..6273e0082e 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -61,10 +61,9 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:session/title-llm-request` | event | `79a4c87f8bfb4d6d05cd9952b99210d6a7db3b478c4a01d94b4c50602308c056` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-79a4c87f8bfb4d6d05cd9952b99210d6a7db3b478c4a01d94b4c50602308c056) | | `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) | | `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) | -| `event:subagent/catalog` | event | `53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac) | -| `event:subagent/descriptor` | event | `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` | [`{ type: "subagent/descriptor" }`](#persistence-type-sha256-b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5) | +| `event:subagent/catalog` | event | `8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3) | +| `event:subagent/descriptor` | event | `194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc` | [`{ type: "subagent/descriptor" }`](#persistence-type-sha256-194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc) | | `event:subagent/model-selection-policy` | event | `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | [`{ type: "subagent/model-selection-policy" }`](#persistence-type-sha256-a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc) | -| `event:subagent/named` | event | `273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6` | [`{ type: "subagent/named" }`](#persistence-type-sha256-273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6) | | `event:system/message` | event | `69081694be231d56fd9580ba14645fd5e35373202605d5c5c841a9435b5fa3b1` | [`{ type: "system/message" }`](#persistence-type-sha256-69081694be231d56fd9580ba14645fd5e35373202605d5c5c841a9435b5fa3b1) | | `event:team/member` | event | `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc` | [`{ type: "team/member" }`](#persistence-type-sha256-4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc) | | `event:team/message/delivered` | event | `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb` | [`{ type: "team/message/delivered" }`](#persistence-type-sha256-48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb) | @@ -939,7 +938,7 @@ Source: [`packages/core/session/src/types.ts:300`](../packages/core/session/src/ 'subagent/catalog': SubagentCatalogEvent ``` -Source: [`packages/subagent/subagent/src/catalog.ts:45`](../packages/subagent/subagent/src/catalog.ts) +Source: [`packages/subagent/subagent/src/catalog.ts:48`](../packages/subagent/subagent/src/catalog.ts) @@ -956,7 +955,7 @@ Source: [`packages/subagent/subagent/src/catalog.ts:45`](../packages/subagent/su 'subagent/descriptor': SubagentDescriptorData ``` -Source: [`packages/subagent/subagent/src/descriptor.ts:38`](../packages/subagent/subagent/src/descriptor.ts) +Source: [`packages/subagent/subagent/src/descriptor.ts:39`](../packages/subagent/subagent/src/descriptor.ts) @@ -977,20 +976,6 @@ Source: [`packages/subagent/subagent/src/descriptor.ts:38`](../packages/subagent Source: [`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts) - - -#### `subagent/named` — log-only - -```ts persistence-catalog -/** - * A tree-wide agent name, retained after its execution ends. - * @param data - the name and durable child identity. - */ -'subagent/named': SubagentNameData -``` - -Source: [`packages/subagent/subagent/src/names.ts:26`](../packages/subagent/subagent/src/names.ts) - ### `system/*` @@ -2624,14 +2609,6 @@ SHA-256: `0a8a062bc9c3c0d97fd97742262f2ea53dd32297f834e81114870d38ac3dc6da` `"subagent/model-selection-policy"` - - -### `"subagent/named"` - -SHA-256: `fdca5e24e7a0bb1af1f3536b8c85787ca1dbca2802f632bf4a5347a2ba62fdb1` - -`"subagent/named"` - ### `"success"` @@ -3338,7 +3315,7 @@ SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262` Array of [`ContextSnapshotSection`](#persistence-type-sha256-86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219). - + @@ -3346,9 +3323,9 @@ Array of [`ContextSnapshotSection`](#persistence-type-sha256-86e1e384495ee09ac2d ### `ContinuableSubagentDescriptorData` -SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f` +SHA-256: `f37e394b9557d1a228d6b2f29f9586c394d75fe9578ebb25aa143565aba50182` -Sources: [`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagent/subagent/src/descriptor.ts) +Sources: [`packages/subagent/subagent/src/descriptor.ts:78`](../packages/subagent/subagent/src/descriptor.ts) | Property | Presence | Type | |---|---|---| @@ -3357,6 +3334,7 @@ Sources: [`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagen | `agentReasoningEffort` | optional | `string` | | `label` | required | `string` | | `mode` | required | `"continuable"` | +| `name` | optional | `string` | | `persona` | optional | `string` | | `provider` | required | `string` | | `toolFilter` | optional | [`ToolRestriction`](#persistence-type-sha256-3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f) | @@ -4378,7 +4356,7 @@ Sources: [`packages/schedule/schedule/src/types.ts:237`](../packages/schedule/sc | `operation` | required | `"dispatch"` | | `version` | required | `1` | - + @@ -4386,14 +4364,15 @@ Sources: [`packages/schedule/schedule/src/types.ts:237`](../packages/schedule/sc ### `OneShotSubagentDescriptorData` -SHA-256: `5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564` +SHA-256: `f73798a0676cd6a7d7890fcd09bf2a9cd8ad0967b6c7afd7d3edd3f5fbc1c124` -Sources: [`packages/subagent/subagent/src/descriptor.ts:61`](../packages/subagent/subagent/src/descriptor.ts) +Sources: [`packages/subagent/subagent/src/descriptor.ts:67`](../packages/subagent/subagent/src/descriptor.ts) | Property | Presence | Type | |---|---|---| | `label` | optional | `string` | | `mode` | required | `"one-shot"` | +| `name` | optional | `string` | | `provider` | required | `string` | | `version` | required | `number` | @@ -4833,7 +4812,7 @@ One of: - [`{ type: "finish" }`](#persistence-type-sha256-a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1) - [`{ type: "usage" }`](#persistence-type-sha256-f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515) - + @@ -4841,20 +4820,20 @@ One of: ### `SubagentCatalogEvent` -SHA-256: `f731ffe80810b0289b3e694d8f40af6f01865c02a622ee457be90ca808b66e87` +SHA-256: `d356f2b4478fe252cf18d8017a277417a9d1b1f88b7bbdfbf5600092a7b7a09d` -Sources: [`packages/subagent/subagent/src/catalog.ts:29`](../packages/subagent/subagent/src/catalog.ts) +Sources: [`packages/subagent/subagent/src/catalog.ts:30`](../packages/subagent/subagent/src/catalog.ts) One of: -- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499) -- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd) +- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-d64be7afff109c07a5496c2d7d0f7c84d145e9abddbe4f340c15d84d42ea4b05) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-6b70feb8fff1ac400560495d7e0156daed0e4cf2f73f0439f2e3b5d7038b2512) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-4237004e46a01bdef8c8923aa7d5c1d90cf1cd5467dca15dd0da5668b4d43b69) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-d452d8c6f47c6fa32773048a0cb44b825ca2d8e7aa28abb5f6f1afb1b965ba3a) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-3ec336899b3fcfeaeb163a3fc407e6ad3108993d9925ef439fe3fbb3cd6d3c25) +- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-9f808a869b1ef076e20a960c51b0c1c919b03025fa2661516cc36b3f452f60ee) - + @@ -4862,31 +4841,14 @@ One of: ### `SubagentDescriptorData` -SHA-256: `86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde` +SHA-256: `e17928cecf8a76d8a2f4574d1bf86e5451d1af445032e5626e0711bfe0392509` -Sources: [`packages/subagent/subagent/src/descriptor.ts:89`](../packages/subagent/subagent/src/descriptor.ts) +Sources: [`packages/subagent/subagent/src/descriptor.ts:95`](../packages/subagent/subagent/src/descriptor.ts) One of: -- [`ContinuableSubagentDescriptorData`](#persistence-type-sha256-6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f) -- [`OneShotSubagentDescriptorData`](#persistence-type-sha256-5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564) - - - - - - - -### `SubagentNameData` - -SHA-256: `b0b7b7f4d127101c49bfd0128e6f37c4627ebbc8baddf5b2e9edff1dac8c84b8` - -Sources: [`packages/subagent/subagent/src/names.ts:15`](../packages/subagent/subagent/src/names.ts) - -| Property | Presence | Type | -|---|---|---| -| `id` | required | `string` | -| `name` | required | `string` | +- [`ContinuableSubagentDescriptorData`](#persistence-type-sha256-f37e394b9557d1a228d6b2f29f9586c394d75fe9578ebb25aa143565aba50182) +- [`OneShotSubagentDescriptorData`](#persistence-type-sha256-f73798a0676cd6a7d7890fcd09bf2a9cd8ad0967b6c7afd7d3edd3f5fbc1c124) @@ -5921,11 +5883,11 @@ SHA-256: `df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18` Array of [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }`](#persistence-type-sha256-4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4). - + ### `{ childCreatedAt, childId, label, mode, … }` -SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd` +SHA-256: `9f808a869b1ef076e20a960c51b0c1c919b03025fa2661516cc36b3f452f60ee` | Property | Presence | Type | |---|---|---| @@ -5933,13 +5895,14 @@ SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd` | `childId` | required | `string` | | `label` | required | `string` | | `mode` | required | `"continuable"` | +| `name` | optional | `string` | | `version` | required | `0` | - + ### `{ childCreatedAt, childId, label, mode, … }` -SHA-256: `e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187` +SHA-256: `d64be7afff109c07a5496c2d7d0f7c84d145e9abddbe4f340c15d84d42ea4b05` | Property | Presence | Type | |---|---|---| @@ -5947,27 +5910,14 @@ SHA-256: `e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187` | `childId` | required | `string` | | `label` | required | `string` | | `mode` | required | `"continuable"` | +| `name` | optional | `string` | | `version` | required | `1` | - + ### `{ childCreatedAt, childId, label?, mode, … }` -SHA-256: `5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694` - -| Property | Presence | Type | -|---|---|---| -| `childCreatedAt` | required | `number` | -| `childId` | required | `string` | -| `label` | optional | `string` | -| `mode` | required | `"one-shot"` | -| `version` | required | `0` | - - - -### `{ childCreatedAt, childId, label?, mode, … }` - -SHA-256: `a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499` +SHA-256: `3ec336899b3fcfeaeb163a3fc407e6ad3108993d9925ef439fe3fbb3cd6d3c25` | Property | Presence | Type | |---|---|---| @@ -5975,13 +5925,14 @@ SHA-256: `a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499` | `childId` | required | `string` | | `label` | optional | `string` | | `mode` | required | `"unknown"` | +| `name` | optional | `string` | | `version` | required | `1` | - + ### `{ childCreatedAt, childId, label?, mode, … }` -SHA-256: `b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a` +SHA-256: `4237004e46a01bdef8c8923aa7d5c1d90cf1cd5467dca15dd0da5668b4d43b69` | Property | Presence | Type | |---|---|---| @@ -5989,13 +5940,14 @@ SHA-256: `b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a` | `childId` | required | `string` | | `label` | optional | `string` | | `mode` | required | `"one-shot"` | -| `version` | required | `1` | +| `name` | optional | `string` | +| `version` | required | `0` | - + ### `{ childCreatedAt, childId, label?, mode, … }` -SHA-256: `cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09` +SHA-256: `6b70feb8fff1ac400560495d7e0156daed0e4cf2f73f0439f2e3b5d7038b2512` | Property | Presence | Type | |---|---|---| @@ -6003,8 +5955,24 @@ SHA-256: `cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09` | `childId` | required | `string` | | `label` | optional | `string` | | `mode` | required | `"external"` | +| `name` | optional | `string` | | `version` | required | `2` | + + +### `{ childCreatedAt, childId, label?, mode, … }` + +SHA-256: `d452d8c6f47c6fa32773048a0cb44b825ca2d8e7aa28abb5f6f1afb1b965ba3a` + +| Property | Presence | Type | +|---|---|---| +| `childCreatedAt` | required | `number` | +| `childId` | required | `string` | +| `label` | optional | `string` | +| `mode` | required | `"one-shot"` | +| `name` | optional | `string` | +| `version` | required | `1` | + ### `{ code, name, reason? }` @@ -8671,33 +8639,33 @@ SHA-256: `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | `time` | required | `number` | | `type` | required | `"step/start"` | - + ### `{ type: "subagent/catalog" }` -SHA-256: `53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac` +SHA-256: `8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3` | Property | Presence | Type | |---|---|---| -| `data` | required | [`SubagentCatalogEvent`](#persistence-type-sha256-f731ffe80810b0289b3e694d8f40af6f01865c02a622ee457be90ca808b66e87) | +| `data` | required | [`SubagentCatalogEvent`](#persistence-type-sha256-d356f2b4478fe252cf18d8017a277417a9d1b1f88b7bbdfbf5600092a7b7a09d) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | | `type` | required | `"subagent/catalog"` | - + ### `{ type: "subagent/descriptor" }` -SHA-256: `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` +SHA-256: `194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc` | Property | Presence | Type | |---|---|---| -| `data` | required | [`SubagentDescriptorData`](#persistence-type-sha256-86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde) | +| `data` | required | [`SubagentDescriptorData`](#persistence-type-sha256-e17928cecf8a76d8a2f4574d1bf86e5451d1af445032e5626e0711bfe0392509) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | @@ -8719,22 +8687,6 @@ SHA-256: `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | `time` | required | `number` | | `type` | required | `"subagent/model-selection-policy"` | - - - - -### `{ type: "subagent/named" }` - -SHA-256: `273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6` - -| Property | Presence | Type | -|---|---|---| -| `data` | required | [`SubagentNameData`](#persistence-type-sha256-b0b7b7f4d127101c49bfd0128e6f37c4627ebbc8baddf5b2e9edff1dac8c84b8) | -| `ignorable` | optional | `true` | -| `seq` | required | `number` | -| `time` | required | `number` | -| `type` | required | `"subagent/named"` | - diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index e07c0ad810..d2276c296c 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -63,10 +63,9 @@ | `event:session/title-llm-request` | event | `79a4c87f8bfb4d6d05cd9952b99210d6a7db3b478c4a01d94b4c50602308c056` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-79a4c87f8bfb4d6d05cd9952b99210d6a7db3b478c4a01d94b4c50602308c056) | | `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) | | `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) | -| `event:subagent/catalog` | event | `53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac) | -| `event:subagent/descriptor` | event | `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` | [`{ type: "subagent/descriptor" }`](#persistence-type-sha256-b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5) | +| `event:subagent/catalog` | event | `8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3) | +| `event:subagent/descriptor` | event | `194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc` | [`{ type: "subagent/descriptor" }`](#persistence-type-sha256-194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc) | | `event:subagent/model-selection-policy` | event | `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | [`{ type: "subagent/model-selection-policy" }`](#persistence-type-sha256-a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc) | -| `event:subagent/named` | event | `273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6` | [`{ type: "subagent/named" }`](#persistence-type-sha256-273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6) | | `event:system/message` | event | `69081694be231d56fd9580ba14645fd5e35373202605d5c5c841a9435b5fa3b1` | [`{ type: "system/message" }`](#persistence-type-sha256-69081694be231d56fd9580ba14645fd5e35373202605d5c5c841a9435b5fa3b1) | | `event:team/member` | event | `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc` | [`{ type: "team/member" }`](#persistence-type-sha256-4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc) | | `event:team/message/delivered` | event | `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb` | [`{ type: "team/message/delivered" }`](#persistence-type-sha256-48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb) | @@ -941,7 +940,7 @@ export type SessionEvent = { 'subagent/catalog': SubagentCatalogEvent ``` -来源:[`packages/subagent/subagent/src/catalog.ts:45`](../packages/subagent/subagent/src/catalog.ts) +来源:[`packages/subagent/subagent/src/catalog.ts:48`](../packages/subagent/subagent/src/catalog.ts) @@ -958,7 +957,7 @@ export type SessionEvent = { 'subagent/descriptor': SubagentDescriptorData ``` -来源:[`packages/subagent/subagent/src/descriptor.ts:38`](../packages/subagent/subagent/src/descriptor.ts) +来源:[`packages/subagent/subagent/src/descriptor.ts:39`](../packages/subagent/subagent/src/descriptor.ts) @@ -979,20 +978,6 @@ export type SessionEvent = { 来源:[`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts) - - -#### `subagent/named` — log-only - -```ts persistence-catalog -/** - * A tree-wide agent name, retained after its execution ends. - * @param data - the name and durable child identity. - */ -'subagent/named': SubagentNameData -``` - -来源:[`packages/subagent/subagent/src/names.ts:26`](../packages/subagent/subagent/src/names.ts) - ### `system/*` @@ -2626,14 +2611,6 @@ SHA-256: `0a8a062bc9c3c0d97fd97742262f2ea53dd32297f834e81114870d38ac3dc6da` `"subagent/model-selection-policy"` - - -### `"subagent/named"` - -SHA-256: `fdca5e24e7a0bb1af1f3536b8c85787ca1dbca2802f632bf4a5347a2ba62fdb1` - -`"subagent/named"` - ### `"success"` @@ -3340,7 +3317,7 @@ SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262` [`ContextSnapshotSection`](#persistence-type-sha256-86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219) 的数组。 - + @@ -3348,9 +3325,9 @@ SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262` ### `ContinuableSubagentDescriptorData` -SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f` +SHA-256: `f37e394b9557d1a228d6b2f29f9586c394d75fe9578ebb25aa143565aba50182` -来源:[`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagent/subagent/src/descriptor.ts) +来源:[`packages/subagent/subagent/src/descriptor.ts:78`](../packages/subagent/subagent/src/descriptor.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -3359,6 +3336,7 @@ SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f` | `agentReasoningEffort` | 可选 | `string` | | `label` | 必需 | `string` | | `mode` | 必需 | `"continuable"` | +| `name` | 可选 | `string` | | `persona` | 可选 | `string` | | `provider` | 必需 | `string` | | `toolFilter` | 可选 | [`ToolRestriction`](#persistence-type-sha256-3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f) | @@ -4380,7 +4358,7 @@ SHA-256: `8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af` | `operation` | 必需 | `"dispatch"` | | `version` | 必需 | `1` | - + @@ -4388,14 +4366,15 @@ SHA-256: `8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af` ### `OneShotSubagentDescriptorData` -SHA-256: `5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564` +SHA-256: `f73798a0676cd6a7d7890fcd09bf2a9cd8ad0967b6c7afd7d3edd3f5fbc1c124` -来源:[`packages/subagent/subagent/src/descriptor.ts:61`](../packages/subagent/subagent/src/descriptor.ts) +来源:[`packages/subagent/subagent/src/descriptor.ts:67`](../packages/subagent/subagent/src/descriptor.ts) | 属性 | 存在性 | 类型 | |---|---|---| | `label` | 可选 | `string` | | `mode` | 必需 | `"one-shot"` | +| `name` | 可选 | `string` | | `provider` | 必需 | `string` | | `version` | 必需 | `number` | @@ -4835,7 +4814,7 @@ SHA-256: `47e9095591ae36e7c39ee62553097772f2bfa16304536a72dbbc3f691f605180` - [`{ type: "finish" }`](#persistence-type-sha256-a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1) - [`{ type: "usage" }`](#persistence-type-sha256-f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515) - + @@ -4843,20 +4822,20 @@ SHA-256: `47e9095591ae36e7c39ee62553097772f2bfa16304536a72dbbc3f691f605180` ### `SubagentCatalogEvent` -SHA-256: `f731ffe80810b0289b3e694d8f40af6f01865c02a622ee457be90ca808b66e87` +SHA-256: `d356f2b4478fe252cf18d8017a277417a9d1b1f88b7bbdfbf5600092a7b7a09d` -来源:[`packages/subagent/subagent/src/catalog.ts:29`](../packages/subagent/subagent/src/catalog.ts) +来源:[`packages/subagent/subagent/src/catalog.ts:30`](../packages/subagent/subagent/src/catalog.ts) 以下类型之一: -- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a) -- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499) -- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd) +- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-d64be7afff109c07a5496c2d7d0f7c84d145e9abddbe4f340c15d84d42ea4b05) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-6b70feb8fff1ac400560495d7e0156daed0e4cf2f73f0439f2e3b5d7038b2512) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-4237004e46a01bdef8c8923aa7d5c1d90cf1cd5467dca15dd0da5668b4d43b69) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-d452d8c6f47c6fa32773048a0cb44b825ca2d8e7aa28abb5f6f1afb1b965ba3a) +- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-3ec336899b3fcfeaeb163a3fc407e6ad3108993d9925ef439fe3fbb3cd6d3c25) +- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-9f808a869b1ef076e20a960c51b0c1c919b03025fa2661516cc36b3f452f60ee) - + @@ -4864,31 +4843,14 @@ SHA-256: `f731ffe80810b0289b3e694d8f40af6f01865c02a622ee457be90ca808b66e87` ### `SubagentDescriptorData` -SHA-256: `86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde` +SHA-256: `e17928cecf8a76d8a2f4574d1bf86e5451d1af445032e5626e0711bfe0392509` -来源:[`packages/subagent/subagent/src/descriptor.ts:89`](../packages/subagent/subagent/src/descriptor.ts) +来源:[`packages/subagent/subagent/src/descriptor.ts:95`](../packages/subagent/subagent/src/descriptor.ts) 以下类型之一: -- [`ContinuableSubagentDescriptorData`](#persistence-type-sha256-6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f) -- [`OneShotSubagentDescriptorData`](#persistence-type-sha256-5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564) - - - - - - - -### `SubagentNameData` - -SHA-256: `b0b7b7f4d127101c49bfd0128e6f37c4627ebbc8baddf5b2e9edff1dac8c84b8` - -来源:[`packages/subagent/subagent/src/names.ts:15`](../packages/subagent/subagent/src/names.ts) - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `id` | 必需 | `string` | -| `name` | 必需 | `string` | +- [`ContinuableSubagentDescriptorData`](#persistence-type-sha256-f37e394b9557d1a228d6b2f29f9586c394d75fe9578ebb25aa143565aba50182) +- [`OneShotSubagentDescriptorData`](#persistence-type-sha256-f73798a0676cd6a7d7890fcd09bf2a9cd8ad0967b6c7afd7d3edd3f5fbc1c124) @@ -5923,11 +5885,11 @@ SHA-256: `df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18` [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }`](#persistence-type-sha256-4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4) 的数组。 - + ### `{ childCreatedAt, childId, label, mode, … }` -SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd` +SHA-256: `9f808a869b1ef076e20a960c51b0c1c919b03025fa2661516cc36b3f452f60ee` | 属性 | 存在性 | 类型 | |---|---|---| @@ -5935,13 +5897,14 @@ SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd` | `childId` | 必需 | `string` | | `label` | 必需 | `string` | | `mode` | 必需 | `"continuable"` | +| `name` | 可选 | `string` | | `version` | 必需 | `0` | - + ### `{ childCreatedAt, childId, label, mode, … }` -SHA-256: `e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187` +SHA-256: `d64be7afff109c07a5496c2d7d0f7c84d145e9abddbe4f340c15d84d42ea4b05` | 属性 | 存在性 | 类型 | |---|---|---| @@ -5949,27 +5912,14 @@ SHA-256: `e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187` | `childId` | 必需 | `string` | | `label` | 必需 | `string` | | `mode` | 必需 | `"continuable"` | +| `name` | 可选 | `string` | | `version` | 必需 | `1` | - + ### `{ childCreatedAt, childId, label?, mode, … }` -SHA-256: `5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694` - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `childCreatedAt` | 必需 | `number` | -| `childId` | 必需 | `string` | -| `label` | 可选 | `string` | -| `mode` | 必需 | `"one-shot"` | -| `version` | 必需 | `0` | - - - -### `{ childCreatedAt, childId, label?, mode, … }` - -SHA-256: `a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499` +SHA-256: `3ec336899b3fcfeaeb163a3fc407e6ad3108993d9925ef439fe3fbb3cd6d3c25` | 属性 | 存在性 | 类型 | |---|---|---| @@ -5977,13 +5927,14 @@ SHA-256: `a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499` | `childId` | 必需 | `string` | | `label` | 可选 | `string` | | `mode` | 必需 | `"unknown"` | +| `name` | 可选 | `string` | | `version` | 必需 | `1` | - + ### `{ childCreatedAt, childId, label?, mode, … }` -SHA-256: `b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a` +SHA-256: `4237004e46a01bdef8c8923aa7d5c1d90cf1cd5467dca15dd0da5668b4d43b69` | 属性 | 存在性 | 类型 | |---|---|---| @@ -5991,13 +5942,14 @@ SHA-256: `b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a` | `childId` | 必需 | `string` | | `label` | 可选 | `string` | | `mode` | 必需 | `"one-shot"` | -| `version` | 必需 | `1` | +| `name` | 可选 | `string` | +| `version` | 必需 | `0` | - + ### `{ childCreatedAt, childId, label?, mode, … }` -SHA-256: `cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09` +SHA-256: `6b70feb8fff1ac400560495d7e0156daed0e4cf2f73f0439f2e3b5d7038b2512` | 属性 | 存在性 | 类型 | |---|---|---| @@ -6005,8 +5957,24 @@ SHA-256: `cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09` | `childId` | 必需 | `string` | | `label` | 可选 | `string` | | `mode` | 必需 | `"external"` | +| `name` | 可选 | `string` | | `version` | 必需 | `2` | + + +### `{ childCreatedAt, childId, label?, mode, … }` + +SHA-256: `d452d8c6f47c6fa32773048a0cb44b825ca2d8e7aa28abb5f6f1afb1b965ba3a` + +| 属性 | 存在性 | 类型 | +|---|---|---| +| `childCreatedAt` | 必需 | `number` | +| `childId` | 必需 | `string` | +| `label` | 可选 | `string` | +| `mode` | 必需 | `"one-shot"` | +| `name` | 可选 | `string` | +| `version` | 必需 | `1` | + ### `{ code, name, reason? }` @@ -8673,33 +8641,33 @@ SHA-256: `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | `time` | 必需 | `number` | | `type` | 必需 | `"step/start"` | - + ### `{ type: "subagent/catalog" }` -SHA-256: `53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac` +SHA-256: `8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`SubagentCatalogEvent`](#persistence-type-sha256-f731ffe80810b0289b3e694d8f40af6f01865c02a622ee457be90ca808b66e87) | +| `data` | 必需 | [`SubagentCatalogEvent`](#persistence-type-sha256-d356f2b4478fe252cf18d8017a277417a9d1b1f88b7bbdfbf5600092a7b7a09d) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | | `type` | 必需 | `"subagent/catalog"` | - + ### `{ type: "subagent/descriptor" }` -SHA-256: `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` +SHA-256: `194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`SubagentDescriptorData`](#persistence-type-sha256-86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde) | +| `data` | 必需 | [`SubagentDescriptorData`](#persistence-type-sha256-e17928cecf8a76d8a2f4574d1bf86e5451d1af445032e5626e0711bfe0392509) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | @@ -8721,22 +8689,6 @@ SHA-256: `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | `time` | 必需 | `number` | | `type` | 必需 | `"subagent/model-selection-policy"` | - - - - -### `{ type: "subagent/named" }` - -SHA-256: `273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6` - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `data` | 必需 | [`SubagentNameData`](#persistence-type-sha256-b0b7b7f4d127101c49bfd0128e6f37c4627ebbc8baddf5b2e9edff1dac8c84b8) | -| `ignorable` | 可选 | `true` | -| `seq` | 必需 | `number` | -| `time` | 必需 | `number` | -| `type` | 必需 | `"subagent/named"` | - diff --git a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.i18n.yaml b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.i18n.yaml index ce87995972..47ad19cc94 100644 --- a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.i18n.yaml +++ b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.i18n.yaml @@ -9,8 +9,8 @@ en: a5bae46eec7e5c5b zh: 190923c7b9b397d9 /2026-10-16-tree-wide-agent-names/summary: - en: 3f16c8de27431ce8 - zh: d3db668518da7e37 + en: 6e23ea12e89a6757 + zh: ac9d622b031d0ef7 /2026-10-16-tree-wide-agent-names/table-of-contents: en: 6cf314a069ceb451 zh: 9adff678e9ecab3b @@ -18,11 +18,11 @@ en: 6907136f28e48c90 zh: 02f8298485f3d8e7 /2026-10-16-tree-wide-agent-names/compatibility: - en: fbdcc4f1b829bb9c - zh: 2454c11be18019c7 + en: 545b22f47bd00215 + zh: 95226d0985a2fb8e /2026-10-16-tree-wide-agent-names/verification: - en: 1b417eb5cdfa4ce6 - zh: ec3f2dfcddd16b25 + en: 5e054e311823a97b + zh: 7162121924d879e7 /2026-10-16-tree-wide-agent-names/dev-note: en: b75c8458928b72b9 zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.md b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.md index 8c2afd21d0..84536b2799 100644 --- a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.md +++ b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.md @@ -9,7 +9,7 @@ English | [中文](2026-10-16-tree-wide-agent-names.zh.md) ## Summary -Records immutable tree-wide agent names in the root Session. +Stores immutable tree-wide agent names in existing subagent catalog and descriptor records. ## Table of Contents @@ -26,21 +26,25 @@ schemaVersion: 1 id: 2026-10-16-tree-wide-agent-names baseline: false changes: - - root: "event:subagent/named" - previous: null - after: "273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6" + - root: "event:subagent/catalog" + previous: "2026-09-19-external-subagent-catalog" + after: "8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3" + decision: same-version + - root: "event:subagent/descriptor" + previous: "2026-09-11-initial" + after: "194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc" decision: same-version ``` ## Compatibility -New readers accept older Sessions without assignments and expose stable legacy addresses. Older readers reject the new non-ignorable subagent/named discriminator instead of silently losing identity; existing catalog records and Session ids are unchanged. No writer format bump is needed. +New readers accept earlier field-free catalogs and descriptors and expose stable legacy addresses. Older catalog readers reject the added name field through their strict event schema; older descriptor readers reject the unknown field and cannot cold-resume that child. Neither reader silently assigns a different identity. Session ids, event discriminators, and writer format remain unchanged. Existing projection checkpoints are invalidated by their state-version increments. Names remain reserved after settlement; external caller-delivered executions now also publish catalog entries. ## Verification -The names.spec.ts and tool-team.spec.ts tests passed (33 cases); names.ts reached 100% statement, branch, function, and line coverage. Headless and TypeScript SDK replay exercised named creation, messages, discovery, and completion. +Focused catalog, descriptor, continuation, and Team tests passed. The names and continuation tests exercised concurrent catalog reconstruction, cold name recovery, unreadable historical branches, failed-start release, fork isolation, and repeated child-id rejection; names.ts reached 100% statement, branch, function, and line coverage. ## Dev Note diff --git a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.schema.json b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.schema.json index 80f2da85f3..162d8b0c37 100644 --- a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.schema.json +++ b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.schema.json @@ -2,11 +2,11 @@ "formatVersion": 2, "roots": [ { - "key": "event:subagent/named", + "key": "event:subagent/catalog", "kind": "event", - "event": "subagent/named", + "event": "subagent/catalog", "surface": false, - "digest": "273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6", + "digest": "8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3", "schema": { "root": 0, "nodes": [ @@ -20,23 +20,246 @@ }, { "name": "ignorable", - "type": 3, + "type": 17, "optional": true }, { "name": "seq", - "type": 4, + "type": 3, "optional": false }, { "name": "time", - "type": 4, + "type": 3, "optional": false }, { "name": "type", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 7, + 9, + 12, + 14, + 15 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "childCreatedAt", + "type": 3, + "optional": false + }, + { + "name": "childId", + "type": 4, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": false + }, + { + "name": "mode", "type": 5, "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "version", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "continuable" + }, + { + "kind": "literal", + "value": 0 + }, + { + "kind": "object", + "properties": [ + { + "name": "childCreatedAt", + "type": 3, + "optional": false + }, + { + "name": "childId", + "type": 4, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": false + }, + { + "name": "mode", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "version", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "childCreatedAt", + "type": 3, + "optional": false + }, + { + "name": "childId", + "type": 4, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": true + }, + { + "name": "mode", + "type": 10, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "version", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "external" + }, + { + "kind": "literal", + "value": 2 + }, + { + "kind": "object", + "properties": [ + { + "name": "childCreatedAt", + "type": 3, + "optional": false + }, + { + "name": "childId", + "type": 4, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": true + }, + { + "name": "mode", + "type": 13, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "version", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "one-shot" + }, + { + "kind": "object", + "properties": [ + { + "name": "childCreatedAt", + "type": 3, + "optional": false + }, + { + "name": "childId", + "type": 4, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": true + }, + { + "name": "mode", + "type": 13, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "version", + "type": 8, + "optional": false } ], "indices": [] @@ -45,13 +268,151 @@ "kind": "object", "properties": [ { - "name": "id", - "type": 2, + "name": "childCreatedAt", + "type": 3, + "optional": false + }, + { + "name": "childId", + "type": 4, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": true + }, + { + "name": "mode", + "type": 16, "optional": false }, { "name": "name", - "type": 2, + "type": 4, + "optional": true + }, + { + "name": "version", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "unknown" + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "subagent/catalog" + } + ] + } + }, + { + "key": "event:subagent/descriptor", + "kind": "event", + "event": "subagent/descriptor", + "surface": false, + "digest": "194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 10, + "optional": true + }, + { + "name": "seq", + "type": 7, + "optional": false + }, + { + "name": "time", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 8 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "agentModel", + "type": 3, + "optional": true + }, + { + "name": "agentProvider", + "type": 3, + "optional": true + }, + { + "name": "agentReasoningEffort", + "type": 3, + "optional": true + }, + { + "name": "label", + "type": 3, + "optional": false + }, + { + "name": "mode", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 3, + "optional": true + }, + { + "name": "persona", + "type": 3, + "optional": true + }, + { + "name": "provider", + "type": 3, + "optional": false + }, + { + "name": "toolFilter", + "type": 5, + "optional": true + }, + { + "name": "version", + "type": 7, "optional": false } ], @@ -63,15 +424,74 @@ }, { "kind": "literal", - "value": true + "value": "continuable" + }, + { + "kind": "object", + "properties": [ + { + "name": "allow", + "type": 6, + "optional": true + }, + { + "name": "deny", + "type": 6, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 }, { "kind": "primitive", "type": "number" }, + { + "kind": "object", + "properties": [ + { + "name": "label", + "type": 3, + "optional": true + }, + { + "name": "mode", + "type": 9, + "optional": false + }, + { + "name": "name", + "type": 3, + "optional": true + }, + { + "name": "provider", + "type": 3, + "optional": false + }, + { + "name": "version", + "type": 7, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", - "value": "subagent/named" + "value": "one-shot" + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "subagent/descriptor" } ] } diff --git a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.zh.md b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.zh.md index a1154dc5a0..fd12aa587f 100644 --- a/docs/persistence-changes/2026-10-16-tree-wide-agent-names.zh.md +++ b/docs/persistence-changes/2026-10-16-tree-wide-agent-names.zh.md @@ -9,7 +9,7 @@ kind: persistence-change ## 概述 -在根 Session 记录整棵树内唯一且不可变的 agent 名字。 +在现有 subagent catalog 和 descriptor 记录中保存不可变的树内唯一名字。 ## 目录 @@ -26,21 +26,25 @@ schemaVersion: 1 id: 2026-10-16-tree-wide-agent-names baseline: false changes: - - root: "event:subagent/named" - previous: null - after: "273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6" + - root: "event:subagent/catalog" + previous: "2026-09-19-external-subagent-catalog" + after: "8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3" + decision: same-version + - root: "event:subagent/descriptor" + previous: "2026-09-11-initial" + after: "194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc" decision: same-version ``` ## 兼容性 -新读取方接受没有名字分配的旧 Session,并公开稳定的旧地址。旧读取方拒绝新的非可忽略 subagent/named 判别值,避免静默丢失身份;现有目录记录与 Session id 不变。无需提升写入格式版本。 +新读取方接受早期不含名字的 catalog 和 descriptor,并公开稳定的旧地址。旧 catalog 读取方通过严格事件 schema 拒绝新增的 name 字段;旧 descriptor 读取方拒绝未知字段,无法冷恢复该子级。两种读取方都不会静默分配其他身份。Session id、事件判别字段与写入格式不变。现有投影检查点通过状态版本递增失效。执行结束后名字仍被占用;采用 caller 交付的外部执行现在也发布 catalog 条目。 ## 验证 -names.spec.ts 与 tool-team.spec.ts 的 33 个用例通过;names.ts 的语句、分支、函数与行覆盖率均为 100%。Headless 与 TypeScript SDK 回放覆盖按名字创建、消息、发现和完成通知。 +聚焦的 catalog、descriptor、continuation 与 Team 测试通过。命名与继续执行测试覆盖并发 catalog 重建、冷恢复名字、不可读历史分支、启动失败释放、分叉隔离与重复 child-id 拒绝;names.ts 的语句、分支、函数和行覆盖率均为 100%。 ## 开发备注 diff --git a/docs/persistence-changes/historical-formats/README.i18n.yaml b/docs/persistence-changes/historical-formats/README.i18n.yaml index 9c8279cc2b..e24f17e991 100644 --- a/docs/persistence-changes/historical-formats/README.i18n.yaml +++ b/docs/persistence-changes/historical-formats/README.i18n.yaml @@ -15,8 +15,8 @@ en: 14c57f30e676f6e3 zh: b1a0ccf26fab3727 /session-persistence-formats/format-references: - en: 57e3fe7dd9e36b70 - zh: 2dac8a29964d982f + en: 43a4a6600fa37a1a + zh: 72174fab8355c344 /session-persistence-formats/scope-and-evidence: en: b220062139ddac1e zh: 7c4c0efe05dafa9c diff --git a/docs/persistence-changes/historical-formats/README.md b/docs/persistence-changes/historical-formats/README.md index 42fa40c74c..2bc0daa565 100644 --- a/docs/persistence-changes/historical-formats/README.md +++ b/docs/persistence-changes/historical-formats/README.md @@ -32,7 +32,7 @@ The index is generated from validated snapshots and the current writer constant. | 1 | PR #3349 | [V1](v1.md) | [JSON](v1.schema.json) | 54 / 415 | | 2 | `dsh-v0.1.3-alpha.2` | [V2](v2.md) | [JSON](v2.schema.json) | 56 / 435 | | 3 | PR #4320 | [V3](v3.md) | [JSON](v3.schema.json) | 60 / 467 | -| 4 | Current checkout | [Current catalog](../../persistence-catalog.md) | [JSON](../../persistence-schema.json) | 66 / 615 | +| 4 | Current checkout | [Current catalog](../../persistence-catalog.md) | [JSON](../../persistence-schema.json) | 65 / 612 | diff --git a/docs/persistence-changes/historical-formats/README.zh.md b/docs/persistence-changes/historical-formats/README.zh.md index fdcb780700..15b08f318d 100644 --- a/docs/persistence-changes/historical-formats/README.zh.md +++ b/docs/persistence-changes/historical-formats/README.zh.md @@ -32,7 +32,7 @@ description: "查找从 V0 到工作区写入器版本的每个 Session 格式 | 1 | PR #3349 | [V1](v1.zh.md) | [JSON](v1.schema.json) | 54 / 415 | | 2 | `dsh-v0.1.3-alpha.2` | [V2](v2.zh.md) | [JSON](v2.schema.json) | 56 / 435 | | 3 | PR #4320 | [V3](v3.zh.md) | [JSON](v3.schema.json) | 60 / 467 | -| 4 | 当前工作树 | [当前目录](../../persistence-catalog.zh.md) | [JSON](../../persistence-schema.json) | 66 / 615 | +| 4 | 当前工作树 | [当前目录](../../persistence-catalog.zh.md) | [JSON](../../persistence-schema.json) | 65 / 612 | diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index 63d1aa221d..53b5ce4cc3 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -15367,7 +15367,7 @@ "kind": "event", "event": "subagent/catalog", "surface": false, - "digest": "53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac", + "digest": "8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3", "schema": { "root": 0, "nodes": [ @@ -15436,6 +15436,11 @@ "type": 5, "optional": false }, + { + "name": "name", + "type": 4, + "optional": true + }, { "name": "version", "type": 6, @@ -15483,6 +15488,11 @@ "type": 5, "optional": false }, + { + "name": "name", + "type": 4, + "optional": true + }, { "name": "version", "type": 8, @@ -15518,6 +15528,11 @@ "type": 10, "optional": false }, + { + "name": "name", + "type": 4, + "optional": true + }, { "name": "version", "type": 11, @@ -15557,6 +15572,11 @@ "type": 13, "optional": false }, + { + "name": "name", + "type": 4, + "optional": true + }, { "name": "version", "type": 6, @@ -15592,6 +15612,11 @@ "type": 13, "optional": false }, + { + "name": "name", + "type": 4, + "optional": true + }, { "name": "version", "type": 8, @@ -15623,6 +15648,11 @@ "type": 16, "optional": false }, + { + "name": "name", + "type": 4, + "optional": true + }, { "name": "version", "type": 8, @@ -15651,7 +15681,7 @@ "kind": "event", "event": "subagent/descriptor", "surface": false, - "digest": "b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5", + "digest": "194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc", "schema": { "root": 0, "nodes": [ @@ -15721,6 +15751,11 @@ "type": 4, "optional": false }, + { + "name": "name", + "type": 3, + "optional": true + }, { "name": "persona", "type": 3, @@ -15789,6 +15824,11 @@ "type": 9, "optional": false }, + { + "name": "name", + "type": 3, + "optional": true + }, { "name": "provider", "type": 3, @@ -15907,81 +15947,6 @@ ] } }, - { - "key": "event:subagent/named", - "kind": "event", - "event": "subagent/named", - "surface": false, - "digest": "273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 3, - "optional": true - }, - { - "name": "seq", - "type": 4, - "optional": false - }, - { - "name": "time", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "id", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "literal", - "value": "subagent/named" - } - ] - } - }, { "key": "event:system/message", "kind": "event", @@ -22641,11 +22606,6 @@ "packages/subagent/tool-subagent/src/model-selection-state.ts:17" ] }, - { - "digest": "0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd", - "names": [], - "sources": [] - }, { "digest": "0e7b2a97f54f1afdb8cdfad1635abe9145327db539bfb69b4045c19d8c17755d", "names": [], @@ -22837,6 +22797,11 @@ "names": [], "sources": [] }, + { + "digest": "194530445ad15cc68b8a708321a4d8d118dfe54600864fcb965ffca9b1afb8cc", + "names": [], + "sources": [] + }, { "digest": "1986c2664009c99155e44795676c887fa67f7c55cd2d5e6b648ff763e0ab033a", "names": [], @@ -23071,11 +23036,6 @@ "names": [], "sources": [] }, - { - "digest": "273f07aea05d56ffbb8b43508bcfb4a20cce230819feadb3fe740bceb8b12ca6", - "names": [], - "sources": [] - }, { "digest": "2765e9119edf5816ac1ab4c95c5ee32c90403f3742962eff11544f7752d59d2e", "names": [], @@ -23425,6 +23385,11 @@ "packages/compaction/compaction/src/types.ts:24" ] }, + { + "digest": "3ec336899b3fcfeaeb163a3fc407e6ad3108993d9925ef439fe3fbb3cd6d3c25", + "names": [], + "sources": [] + }, { "digest": "3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796", "names": [], @@ -23454,6 +23419,11 @@ "names": [], "sources": [] }, + { + "digest": "4237004e46a01bdef8c8923aa7d5c1d90cf1cd5467dca15dd0da5668b4d43b69", + "names": [], + "sources": [] + }, { "digest": "42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f", "names": [], @@ -23760,11 +23730,6 @@ "packages/core/session/src/types.ts:274" ] }, - { - "digest": "53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac", - "names": [], - "sources": [] - }, { "digest": "53cf1704ae0709c7678bcf070c83c619fc48ca1b5c173b74cfa8702f22a8e492", "names": [], @@ -23909,11 +23874,6 @@ "names": [], "sources": [] }, - { - "digest": "5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694", - "names": [], - "sources": [] - }, { "digest": "5d7a64ed6aac5551ebf998dc25e1e7b48a144769913f89702840180e61dc3995", "names": [], @@ -23950,15 +23910,6 @@ "names": [], "sources": [] }, - { - "digest": "5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564", - "names": [ - "packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData" - ], - "sources": [ - "packages/subagent/subagent/src/descriptor.ts:61" - ] - }, { "digest": "6085488d223aeffdef51d7ae17655fc26ab22ee13cbed82a50e62e2b6fb5b918", "names": [], @@ -23998,15 +23949,6 @@ "names": [], "sources": [] }, - { - "digest": "6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f", - "names": [ - "packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData" - ], - "sources": [ - "packages/subagent/subagent/src/descriptor.ts:72" - ] - }, { "digest": "6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25", "names": [ @@ -24094,6 +24036,11 @@ "names": [], "sources": [] }, + { + "digest": "6b70feb8fff1ac400560495d7e0156daed0e4cf2f73f0439f2e3b5d7038b2512", + "names": [], + "sources": [] + }, { "digest": "6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25", "names": [ @@ -24491,6 +24438,11 @@ "names": [], "sources": [] }, + { + "digest": "8521c4e8b3ddb8a7835fe8e707061bf4a9a52b9e4c2e98e5fc5fef2ac4998ff3", + "names": [], + "sources": [] + }, { "digest": "854db3efdfb0cd39d30953b28703e519c121f1115cebfffc40369fe86c406dd1", "names": [], @@ -24516,15 +24468,6 @@ "names": [], "sources": [] }, - { - "digest": "86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde", - "names": [ - "packages/subagent/subagent/src/descriptor.ts#SubagentDescriptorData" - ], - "sources": [ - "packages/subagent/subagent/src/descriptor.ts:89" - ] - }, { "digest": "86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219", "names": [ @@ -24855,6 +24798,11 @@ "names": [], "sources": [] }, + { + "digest": "9f808a869b1ef076e20a960c51b0c1c919b03025fa2661516cc36b3f452f60ee", + "names": [], + "sources": [] + }, { "digest": "a0a2e5c42e1c929445ecd1cd70f49be6b66441894ec72c08e8ae332821d4a3cb", "names": [], @@ -24865,11 +24813,6 @@ "names": [], "sources": [] }, - { - "digest": "a0f25b5aeeebf2bf1542ce67726b095e3b139a39c71861d57e827f12dea1f499", - "names": [], - "sources": [] - }, { "digest": "a0f906856fc06f1c6f2083eb970e5a657a82b1a84c06c095445e5d6d161cda80", "names": [], @@ -25151,15 +25094,6 @@ "packages/attachment/attachment/src/types.ts:11" ] }, - { - "digest": "b0b7b7f4d127101c49bfd0128e6f37c4627ebbc8baddf5b2e9edff1dac8c84b8", - "names": [ - "packages/subagent/subagent/src/names.ts#SubagentNameData" - ], - "sources": [ - "packages/subagent/subagent/src/names.ts:15" - ] - }, { "digest": "b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081", "names": [ @@ -25268,11 +25202,6 @@ "packages/schedule/schedule/src/types.ts:167" ] }, - { - "digest": "b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a", - "names": [], - "sources": [] - }, { "digest": "b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0", "names": [], @@ -25300,11 +25229,6 @@ "names": [], "sources": [] }, - { - "digest": "b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5", - "names": [], - "sources": [] - }, { "digest": "b815d7b91cdd9fc6ccc7dcba05cfc5ce1d55fab5fc0c0801803cd3630cedb602", "names": [], @@ -25526,11 +25450,6 @@ "names": [], "sources": [] }, - { - "digest": "cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09", - "names": [], - "sources": [] - }, { "digest": "cbca49bde16b656d5b8fbe4a8a507769f7b594c6287782b809c03814941bc5e3", "names": [], @@ -25591,6 +25510,20 @@ "names": [], "sources": [] }, + { + "digest": "d356f2b4478fe252cf18d8017a277417a9d1b1f88b7bbdfbf5600092a7b7a09d", + "names": [ + "packages/subagent/subagent/src/catalog.ts#SubagentCatalogEvent" + ], + "sources": [ + "packages/subagent/subagent/src/catalog.ts:30" + ] + }, + { + "digest": "d452d8c6f47c6fa32773048a0cb44b825ca2d8e7aa28abb5f6f1afb1b965ba3a", + "names": [], + "sources": [] + }, { "digest": "d4b739491689cc6bb13d07ffac1a32239875abda364c0d5edd8f74faf5e9c00d", "names": [], @@ -25618,6 +25551,11 @@ "names": [], "sources": [] }, + { + "digest": "d64be7afff109c07a5496c2d7d0f7c84d145e9abddbe4f340c15d84d42ea4b05", + "names": [], + "sources": [] + }, { "digest": "d66e11dddf5dfa3c71547e2cbd7b0608824cd8d6243fc16f532017ff28e8fba5", "names": [], @@ -25756,9 +25694,13 @@ "sources": [] }, { - "digest": "e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187", - "names": [], - "sources": [] + "digest": "e17928cecf8a76d8a2f4574d1bf86e5451d1af445032e5626e0711bfe0392509", + "names": [ + "packages/subagent/subagent/src/descriptor.ts#SubagentDescriptorData" + ], + "sources": [ + "packages/subagent/subagent/src/descriptor.ts:95" + ] }, { "digest": "e2d0367e5716bc188435e51718ebff8ce873190625fa93b1c5331102d98758fa", @@ -26034,6 +25976,15 @@ "packages/llm/llm/src/types.ts:414" ] }, + { + "digest": "f37e394b9557d1a228d6b2f29f9586c394d75fe9578ebb25aa143565aba50182", + "names": [ + "packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData" + ], + "sources": [ + "packages/subagent/subagent/src/descriptor.ts:78" + ] + }, { "digest": "f4a66f654996c093aae700ea4c434ff2ee3569fea9c0e5813ccf6afdccabd163", "names": [], @@ -26096,12 +26047,12 @@ "sources": [] }, { - "digest": "f731ffe80810b0289b3e694d8f40af6f01865c02a622ee457be90ca808b66e87", + "digest": "f73798a0676cd6a7d7890fcd09bf2a9cd8ad0967b6c7afd7d3edd3f5fbc1c124", "names": [ - "packages/subagent/subagent/src/catalog.ts#SubagentCatalogEvent" + "packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData" ], "sources": [ - "packages/subagent/subagent/src/catalog.ts:29" + "packages/subagent/subagent/src/descriptor.ts:67" ] }, { @@ -26206,11 +26157,6 @@ "names": [], "sources": [] }, - { - "digest": "fdca5e24e7a0bb1af1f3536b8c85787ca1dbca2802f632bf4a5347a2ba62fdb1", - "names": [], - "sources": [] - }, { "digest": "fe1a7acdeed4d0f5ab483396eaa5b3dc97263b7c10eb4da2f0028cb01728bfc9", "names": [], diff --git a/docs/subsystems/subagent.i18n.yaml b/docs/subsystems/subagent.i18n.yaml index 43a690ae52..b727e8b815 100644 --- a/docs/subsystems/subagent.i18n.yaml +++ b/docs/subsystems/subagent.i18n.yaml @@ -27,5 +27,5 @@ en: d8ce7969b65ad86e zh: d39dac6592681bf2 /subagents/agent-names: - en: 934e8a775e67a697 - zh: df4c9f5d0f5c0171 + en: be722521c97cfed4 + zh: 8ba72ed741ca6e6a diff --git a/docs/subsystems/subagent.md b/docs/subsystems/subagent.md index 1b164454d4..05d840c934 100644 --- a/docs/subsystems/subagent.md +++ b/docs/subsystems/subagent.md @@ -398,23 +398,7 @@ type SubagentDescendantListEntry = SubagentListEntry & { ## Agent names -Names are unique in one live subagent tree; the root is `lead`. The root Session owns immutable assignments and the projection excludes inherited facts. See the [naming rules](../../packages/subagent/subagent/README.md#local-and-external-children). - -```ts type-equiv -/** One immutable name assigned in the root Session before child publication. */ -interface SubagentNameData { - readonly name: string - readonly id: SessionId -} -``` - -```ts type-equiv -/** Root-owned name assignments, excluding fork-inherited events. */ -interface SubagentNamesState { - readonly inheritedEventCount: SessionLogOffset - readonly entries: readonly SubagentNameData[] -} -``` +Names are unique in one live subagent tree; the root is `lead`. Parent catalogs retain immutable assignments; local descriptors carry each child’s own name. A runtime index shares reservations across the tree and rebuilds from catalogs. See the [naming rules](../../packages/subagent/subagent/README.md#local-and-external-children). @@ -469,12 +453,11 @@ startActivation(spec: SubagentActivationSpec & { readonly childId: SessionId }): startActivation(spec: SubagentActivationSpec): Promise /** - * Read a model-facing name in the caller's tree, retaining legacy addresses for older unnamed children. - * @param caller - exact live Agent selecting the tree. - * @param id - target identity; omission selects the caller. + * Read an Agent's own descriptor-backed name, retaining legacy addresses for older children. + * @param agent - exact live Agent whose name is requested. * @returns lead, the immutable assigned name, or a legacy address. */ -nameOf(caller: Agent, id: SessionId = caller.id): string +nameOf(agent: Agent): string /** * Resolve a tree-wide name without granting authority to act on its Agent. diff --git a/docs/subsystems/subagent.zh.md b/docs/subsystems/subagent.zh.md index b1b5ac8fb7..0aa3f222ca 100644 --- a/docs/subsystems/subagent.zh.md +++ b/docs/subsystems/subagent.zh.md @@ -400,23 +400,7 @@ type SubagentDescendantListEntry = SubagentListEntry & { ## Agent 名字 -名字在一棵在线子代理树内唯一;根名为 `lead`。根 Session 拥有不可变的名字分配,投影排除继承的事实。详见[命名规则](../../packages/subagent/subagent/README.zh.md#local-and-external-children)。 - -```ts type-equiv -/** One immutable name assigned in the root Session before child publication. */ -interface SubagentNameData { - readonly name: string - readonly id: SessionId -} -``` - -```ts type-equiv -/** Root-owned name assignments, excluding fork-inherited events. */ -interface SubagentNamesState { - readonly inheritedEventCount: SessionLogOffset - readonly entries: readonly SubagentNameData[] -} -``` +名字在一棵在线子代理树内唯一;根名为 `lead`。父级 catalog 保留不可变的名字分配;本地 descriptor 携带子级自身名字。运行时索引在树内共享预留,并从 catalog 重建。详见[命名规则](../../packages/subagent/subagent/README.zh.md#local-and-external-children)。 @@ -471,12 +455,11 @@ startActivation(spec: SubagentActivationSpec & { readonly childId: SessionId }): startActivation(spec: SubagentActivationSpec): Promise /** - * Read a model-facing name in the caller's tree, retaining legacy addresses for older unnamed children. - * @param caller - exact live Agent selecting the tree. - * @param id - target identity; omission selects the caller. + * Read an Agent's own descriptor-backed name, retaining legacy addresses for older children. + * @param agent - exact live Agent whose name is requested. * @returns lead, the immutable assigned name, or a legacy address. */ -nameOf(caller: Agent, id: SessionId = caller.id): string +nameOf(agent: Agent): string /** * Resolve a tree-wide name without granting authority to act on its Agent. diff --git a/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.i18n.yaml b/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.i18n.yaml index fd94f27e4b..a5a67ae34a 100644 --- a/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.i18n.yaml +++ b/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.i18n.yaml @@ -9,8 +9,8 @@ en: e2fd55138832d6e1 zh: 5fc33b77673c6ea0 /agent-teams-uses-subagents-and-unique-agent-names/change: - en: 955ec629b091e254 - zh: 219985a87010acca + en: 12a436db46a7ecf2 + zh: 8cdb01c672e5a89a /agent-teams-uses-subagents-and-unique-agent-names/migration: - en: b971e8801c9b5590 - zh: a3656d78aad1a5c1 + en: a8ea422f5ee85d68 + zh: ef992d42c3d1538a diff --git a/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.md b/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.md index 13965e1468..14f52a4892 100644 --- a/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.md +++ b/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.md @@ -16,7 +16,7 @@ The experimental Agent Teams plugins share agent creation, discovery, messaging, - The Team profile no longer disables the subagent tools. Team adds only task tools, `wait_agent`, and collaboration guidance. - `agent-team` rejects `maxMembers`, `maxMessageBytes`, and `disposalTimeoutMs`; `tool-agent-team` rejects `interrupt`, `freshProvider`, and `forkProvider`. - `ctx.agentTeams` removes `spawnTeammate()`, `sendMessage()`, `interrupt()`, and `listMembers()`. Host task views retain `ownerId` Session identities; model-facing task results expose `ownerName`, and task `owner` arguments use names. The root agent is always `lead`. -- Historical Team roster and mailbox records remain readable. Names in those records are historical data and do not resolve message recipients or task owners. Subagent catalog payloads are unchanged. New names are recorded in the root Session and remain reserved after settlement; older unnamed children receive `legacy:` addresses during discovery. +- Historical Team roster and mailbox records remain readable. Names in those records are historical data and do not resolve message recipients or task owners. New catalog and descriptor records include names, which remain reserved after settlement; older unnamed children receive `legacy:` addresses during discovery. ## Migration @@ -24,4 +24,4 @@ The experimental Agent Teams plugins share agent creation, discovery, messaging, 2. Replace `spawn_teammate({ name, description, prompt, context })` with `subagent({ name, description, prompt })`, or `subagent_fork` for inherited conversation history. Choose a unique lower-case name with letters, digits, underscores, or hyphens; start with a letter. `lead` and `unowned` are reserved. Duplicate names fail before creation. 3. Use `send_message({ name, message })` and `interrupt_agent({ name })`. Discover parent and sibling names with `list_agents`. 4. Pass member names to task `owner` fields and read `ownerName` in tool results. Use `lead` for the root agent. -5. Replace removed service calls with `ctx.subagents.startActivation()`, `sendMessage()`, `interrupt()`, and `listChildren()`. Supply `name` to `startActivation()`; host control APIs still use Session ids. Start a Team-enabled profile and verify that a child's description appears in the Team panel and that a name-addressed message reaches it. +5. Replace removed service calls with `ctx.subagents.startActivation()`, `sendMessage()`, `interrupt()`, and `listChildren()`. Supply `name` to `startActivation()`; host control APIs still use Session ids. After restart, creation requires readable descendant catalogs; restore any unavailable branch before retrying. Start a Team-enabled profile and verify that a child's description appears in the Team panel and that a name-addressed message reaches it. diff --git a/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.zh.md b/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.zh.md index 2b99211444..ed9f64f013 100644 --- a/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.zh.md +++ b/docs/upgrade-guide/v0.2.1-alpha.4/agent-team-subagents/guide.zh.md @@ -16,7 +16,7 @@ description: "Agent Teams 使用标准 subagent 工具与唯一 agent 名字;T - Team profile 不再禁用 subagent 工具。Team 只增加任务工具、`wait_agent` 和协作指引。 - `agent-team` 拒绝 `maxMembers`、`maxMessageBytes` 与 `disposalTimeoutMs`;`tool-agent-team` 拒绝 `interrupt`、`freshProvider` 与 `forkProvider`。 - `ctx.agentTeams` 移除 `spawnTeammate()`、`sendMessage()`、`interrupt()` 与 `listMembers()`。宿主任务视图保留 `ownerId` Session 身份;面向模型的任务结果公开 `ownerName`,任务 `owner` 参数使用名字。根 agent 始终名为 `lead`。 -- 历史 Team 成员列表和邮箱记录仍可读取。其中的名字属于历史数据,不解析消息接收方或任务负责人。subagent 目录载荷不变。新名字记录在根 Session 中,执行结束后仍被占用;旧的无名子级在发现时获得 `legacy:` 地址。 +- 历史 Team 成员列表和邮箱记录仍可读取。其中的名字属于历史数据,不解析消息接收方或任务负责人。新的 catalog 和 descriptor 记录包含名字,执行结束后仍被占用;旧的无名子级在发现时获得 `legacy:` 地址。 ## 迁移 @@ -24,4 +24,4 @@ description: "Agent Teams 使用标准 subagent 工具与唯一 agent 名字;T 2. 将 `spawn_teammate({ name, description, prompt, context })` 改为 `subagent({ name, description, prompt })`,需要继承会话历史时使用 `subagent_fork`。选择唯一的小写名字,只含字母、数字、下划线或连字符,并以字母开头。`lead` 和 `unowned` 为保留名。重名在创建前失败。 3. 使用 `send_message({ name, message })` 与 `interrupt_agent({ name })`。通过 `list_agents` 发现父级和同级名字。 4. 向任务 `owner` 字段传成员名字,读取工具结果中的 `ownerName`。根 agent 使用 `lead`。 -5. 将移除的服务调用改为 `ctx.subagents.startActivation()`、`sendMessage()`、`interrupt()` 与 `listChildren()`。向 `startActivation()` 提供 `name`;宿主控制 API 仍使用 Session id。启动启用 Team 的 profile,确认子级描述出现在 Team 面板,并且按名字发送的消息能够到达。 +5. 将移除的服务调用改为 `ctx.subagents.startActivation()`、`sendMessage()`、`interrupt()` 与 `listChildren()`。向 `startActivation()` 提供 `name`;宿主控制 API 仍使用 Session id。重启后创建子级要求后代 catalog 可读;先恢复不可用分支,再重试。启动启用 Team 的 profile,确认子级描述出现在 Team 面板,并且按名字发送的消息能够到达。 diff --git a/packages/core/session/src/known-event-types.ts b/packages/core/session/src/known-event-types.ts index 84607e67f1..a0f5c17795 100644 --- a/packages/core/session/src/known-event-types.ts +++ b/packages/core/session/src/known-event-types.ts @@ -62,7 +62,6 @@ export const KNOWN_SESSION_EVENT_TYPES: ReadonlySet = new Set([ 'subagent/catalog', 'subagent/descriptor', 'subagent/model-selection-policy', - 'subagent/named', 'system/message', 'team/member', 'team/message/delivered', diff --git a/packages/experimental/tool-agent-team/src/index.ts b/packages/experimental/tool-agent-team/src/index.ts index 4fb423494d..0ee5f4308b 100644 --- a/packages/experimental/tool-agent-team/src/index.ts +++ b/packages/experimental/tool-agent-team/src/index.ts @@ -95,10 +95,28 @@ function jsonOutput(schema: S): { } } -/** Project durable task ownership to the names used by collaboration tools. */ -function namedTask(ctx: Context, caller: Agent, task: TeamTaskView) { - const { ownerId, ...view } = task - return { ...view, ...ownerId === undefined ? {} : { ownerName: ctx.subagents.nameOf(caller, ownerId) } } +type NamedTaskView = Omit & { readonly ownerName?: string } + +/** Project task owners from live descriptors or the Team’s direct-child catalog. */ +async function namedTasks(ctx: Context, caller: Agent, tasks: readonly TeamTaskView[], signal: AbortSignal): Promise { + const { root } = ctx.agentTeams.membership(caller) + const names = new Map([[root.id, 'lead']]) + const missing = new Set() + for (const { ownerId } of tasks) { + if (ownerId === undefined || names.has(ownerId)) continue + const agent = ctx.agents.get(ownerId) + if (agent === undefined) missing.add(ownerId) + else names.set(ownerId, ctx.subagents.nameOf(agent)) + } + if (missing.size > 0) { + for (const entry of await ctx.subagents.listChildren(root.id, signal)) { + names.set(entry.id, entry.name ?? `legacy:${entry.id}`) + } + } + return tasks.map(({ ownerId, ...view }) => ({ + ...view, + ...ownerId === undefined ? {} : { ownerName: names.get(ownerId) ?? `legacy:${ownerId}` }, + })) } /** Recover the exact caller guaranteed by Agent-scoped tool discovery. */ @@ -128,7 +146,7 @@ function install(agent: Agent, ctx: Context): () => void { const { role, root } = ctx.agentTeams.membership(agent) return role === 'lead' ? 'You are the Team Lead. Your name is lead.' - : `Your name is ${JSON.stringify(ctx.subagents.nameOf(agent))}. You are a teammate in the Team led by ${JSON.stringify(ctx.subagents.nameOf(agent, root.id))}.` + : `Your name is ${JSON.stringify(ctx.subagents.nameOf(agent))}. You are a teammate in the Team led by ${JSON.stringify(ctx.subagents.nameOf(root))}.` }, })) @@ -181,12 +199,13 @@ function install(agent: Agent, ctx: Context): () => void { output: jsonOutput(TASK_VIEW_SCHEMA), async execute(args, exec) { const caller = callingAgent(exec.agent, 'team_task_create') - return namedTask(ctx, caller, await ctx.agentTeams.createTask(caller, { + const task = await ctx.agentTeams.createTask(caller, { subject: args.subject, description: args.description, ...args.blocked_by === undefined ? {} : { blockedBy: args.blocked_by.map(TeamTaskId) }, ...args.write_scopes === undefined ? {} : { writeScopes: args.write_scopes }, - })) + }) + return (await namedTasks(ctx, caller, [task], exec.signal))[0] as NamedTaskView }, }))) @@ -205,10 +224,10 @@ function install(agent: Agent, ctx: Context): () => void { limit: { type: 'integer', description: 'Number of rows, 1 through 100. Defaults to 50.' }, }, output: jsonOutput(TASK_LIST_VALUE_SCHEMA), - execute(args, exec) { + async execute(args, exec) { const status = args.status const caller = callingAgent(exec.agent, 'team_task_list') - const filtered = ctx.agentTeams.listTasks(caller).map(task => namedTask(ctx, caller, task)).filter(task => + const filtered = (await namedTasks(ctx, caller, ctx.agentTeams.listTasks(caller), exec.signal)).filter(task => (status === undefined || task.status === status) && (args.owner === undefined || (args.owner === 'unowned' ? task.ownerName === undefined : task.ownerName === args.owner)) && (args.ready === undefined || task.ready === args.ready)) @@ -230,9 +249,10 @@ function install(agent: Agent, ctx: Context): () => void { task_id: { type: 'string', required: true, description: 'Shared task id.' }, }, output: jsonOutput(TASK_VIEW_SCHEMA), - execute(args, exec) { + async execute(args, exec) { const caller = callingAgent(exec.agent, 'team_task_get') - return Promise.resolve(namedTask(ctx, caller, ctx.agentTeams.getTask(caller, TeamTaskId(args.task_id)))) + const task = ctx.agentTeams.getTask(caller, TeamTaskId(args.task_id)) + return (await namedTasks(ctx, caller, [task], exec.signal))[0] as NamedTaskView }, }))) @@ -259,10 +279,12 @@ function install(agent: Agent, ctx: Context): () => void { const caller = callingAgent(exec.agent, 'team_task_update') // Team authorizes historical members that predate subagent catalogs. const legacyId = args.owner?.startsWith('legacy:') ? SessionId(args.owner.slice('legacy:'.length)) : undefined + const { root } = ctx.agentTeams.membership(caller) + const historical = legacyId !== undefined && legacyId !== root.id + && !(await ctx.subagents.listChildren(root.id, exec.signal)).some(entry => entry.id === legacyId && entry.name !== undefined) const owner = args.owner === undefined ? undefined - : legacyId !== undefined && ctx.subagents.nameOf(caller, legacyId) === args.owner ? legacyId - : await ctx.subagents.resolveName(caller, args.owner, exec.signal) - return namedTask(ctx, caller, await ctx.agentTeams.updateTask(caller, { + : historical ? legacyId : await ctx.subagents.resolveName(caller, args.owner, exec.signal) + const task = await ctx.agentTeams.updateTask(caller, { taskId: TeamTaskId(args.task_id), expectedRevision: args.expected_revision, action: args.action, @@ -271,7 +293,8 @@ function install(agent: Agent, ctx: Context): () => void { ...args.blocked_by === undefined ? {} : { blockedBy: args.blocked_by.map(TeamTaskId) }, ...args.write_scopes === undefined ? {} : { writeScopes: args.write_scopes }, ...owner === undefined ? {} : { owner }, - })) + }) + return (await namedTasks(ctx, caller, [task], exec.signal))[0] as NamedTaskView }, }))) } catch (error: unknown) { diff --git a/packages/experimental/tool-agent-team/tests/tool-team.spec.ts b/packages/experimental/tool-agent-team/tests/tool-team.spec.ts index f23dd92591..980f083156 100644 --- a/packages/experimental/tool-agent-team/tests/tool-team.spec.ts +++ b/packages/experimental/tool-agent-team/tests/tool-team.spec.ts @@ -368,7 +368,7 @@ describe('dsh-tool-team', () => { expected_revision: task.revision, action: 'claim', }) - expect(JSON.parse(text(claimed))).toMatchObject({ status: 'in_progress', ownerName: ctx.subagents.nameOf(lead, childId) }) + expect(JSON.parse(text(claimed))).toMatchObject({ status: 'in_progress', ownerName: ctx.subagents.nameOf(ctx.agents.get(childId)!) }) const stale = await execute(ctx, lead, 'team_task_update', { task_id: task.id, expected_revision: task.revision, @@ -448,7 +448,7 @@ describe('dsh-tool-team', () => { task_id: first.id, expected_revision: dependency.revision, action: 'reassign', - owner: ctx.subagents.nameOf(lead, childId), + owner: ctx.subagents.nameOf(ctx.agents.get(childId)!), })).isError).toBe(true) const wait = execute(ctx, lead, 'wait_agent', {}) @@ -466,13 +466,31 @@ describe('dsh-tool-team', () => { await waitNoAgent(ctx, childId) }) - it('reassigns by a historical member address without granting message authority', async () => { + it('retains a settled task owner’s catalog name and rejects its legacy alias', async () => { + const { ctx, lead } = await setup([textResponse('done')]) + const id = await spawn(ctx, lead, 'reviewer', 'review') + await waitNoAgent(ctx, id) + const [entry] = await ctx.subagents.listChildren(lead.id) + const task = await ctx.agentTeams.createTask(lead, { subject: 'Review', description: 'Review history' }) + const updated = await execute(ctx, lead, 'team_task_update', { + task_id: task.id, expected_revision: task.revision, action: 'reassign', owner: entry!.name, + }) + expect(JSON.parse(text(updated))).toMatchObject({ ownerName: entry!.name }) + expect(JSON.parse(text(await execute(ctx, lead, 'team_task_list', {})))) + .toMatchObject({ tasks: [{ ownerName: entry!.name }] }) + expect((await execute(ctx, lead, 'team_task_update', { + task_id: task.id, expected_revision: 2, action: 'reassign', owner: `legacy:${id}`, + })).isError).toBe(true) + }) + + it.each([false, true])('reassigns historical members without message authority (cataloged: %s)', async (cataloged) => { const { ctx, lead } = await setup([]) const id = SessionId('historical-worker') for (const phase of ['provisioning', 'active'] as const) lead.session.append('team/member', { version: 2, teamId: TeamId(lead.id), member: { id, name: 'old-name', description: 'historical member', provider: 'spawn', context: 'fresh', phase }, }) + if (cataloged) lead.session.append('subagent/catalog', { version: 0, childId: id, childCreatedAt: 1, mode: 'continuable', label: 'Old child' }) const created = await ctx.agentTeams.createTask(lead, { subject: 'Review', description: 'Review history' }) expect(JSON.parse(text(await execute(ctx, lead, 'team_task_update', { task_id: created.id, expected_revision: created.revision, action: 'reassign', owner: 'legacy:historical-worker', diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 888e4a96d9..2c5aad4c56 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -3018,9 +3018,9 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ returns: 'activation with a message id only for local children.', }, { - signature: 'nameOf(caller: Agent, id: SessionId = caller.id): string', - description: 'Read a model-facing name in the caller\'s tree, retaining legacy addresses for older unnamed children.', - parameters: [{ name: 'caller', description: 'exact live Agent selecting the tree.' }, { name: 'id', description: 'target identity; omission selects the caller.' }], + signature: 'nameOf(agent: Agent): string', + description: 'Read an Agent\'s own descriptor-backed name, retaining legacy addresses for older children.', + parameters: [{ name: 'agent', description: 'exact live Agent whose name is requested.' }], returns: 'lead, the immutable assigned name, or a legacy address.', }, { @@ -7810,7 +7810,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SubagentCatalogEntry', - declaration: 'export type SubagentCatalogEntry = {\n readonly id: SessionId;\n readonly createdAt: number;\n} & ({\n readonly mode: \'one-shot\';\n readonly label?: string;\n} | {\n readonly mode: \'external\';\n readonly label?: string;\n} | {\n readonly mode: \'continuable\';\n readonly label: string;\n} | {\n readonly mode: \'unknown\';\n readonly label?: string;\n});', + declaration: 'export type SubagentCatalogEntry = {\n readonly name?: string;\n readonly id: SessionId;\n readonly createdAt: number;\n} & ({\n readonly mode: \'one-shot\';\n readonly label?: string;\n} | {\n readonly mode: \'external\';\n readonly label?: string;\n} | {\n readonly mode: \'continuable\';\n readonly label: string;\n} | {\n readonly mode: \'unknown\';\n readonly label?: string;\n});', }, { name: 'SubagentCatalogRow', @@ -7830,7 +7830,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SubagentListEntry', - declaration: 'export type SubagentListEntry = SubagentCatalogRow & {\n readonly kind: \'child\';\n readonly hasChildren: boolean;\n} | {\n readonly kind: \'diagnostic\';\n readonly id: SessionId;\n readonly reason: \'corrupt\' | \'unsupported\' | \'unavailable\';\n};', + declaration: 'export type SubagentListEntry = {\n readonly name?: string;\n} & (SubagentCatalogRow & {\n readonly kind: \'child\';\n readonly hasChildren: boolean;\n} | {\n readonly kind: \'diagnostic\';\n readonly id: SessionId;\n readonly reason: \'corrupt\' | \'unsupported\' | \'unavailable\';\n});', }, { name: 'SubagentPromptReceipt', @@ -7870,7 +7870,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SubagentRuntime', - declaration: 'export class SubagentRuntime extends TypertRemoteService {\n static Config;\n static inject;\n constructor(ctx: Context, private config: Config);\n resolveMaxDepth(configured?: number | \'provider-managed\'): number | undefined;\n startActivation(spec: SubagentActivationSpec & {\n readonly childId: SessionId;\n }): Promise;\n startActivation(spec: SubagentActivationSpec): Promise;\n async startActivation(spec: SubagentActivationSpec): Promise;\n nameOf(caller: Agent, id: SessionId = caller.id): string;\n resolveName(caller: Agent, name: string, signal?: AbortSignal): Promise;\n async waitForChildren(parent: Agent): Promise;\n async sendMessage(sender: Agent, targetId: SessionId, content: ContentBlock[], options: SubagentSendMessageOptions): Promise;\n interrupt(targetSessionId: SessionId, authority: SubagentInterruptAuthority): void;\n async drainDescendants(parents: readonly Agent[]): Promise;\n async drainChildren(parent: Agent, childIds: readonly SessionId[]): Promise;\n listChildren(parentSessionId: SessionId, signal?: AbortSignal): Promise;\n listDescendants(rootSessionId: SessionId, signal?: AbortSignal): Promise;\n @Remote(\'prompt\')\n async prompt(request: SubagentPromptRequest, signal: AbortSignal): Promise;\n startActivation(spec: SubagentActivationSpec): Promise;\n async startActivation(spec: SubagentActivationSpec): Promise;\n nameOf(agent: Agent): string;\n resolveName(caller: Agent, name: string, signal?: AbortSignal): Promise;\n async waitForChildren(parent: Agent): Promise;\n async sendMessage(sender: Agent, targetId: SessionId, content: ContentBlock[], options: SubagentSendMessageOptions): Promise;\n interrupt(targetSessionId: SessionId, authority: SubagentInterruptAuthority): void;\n async drainDescendants(parents: readonly Agent[]): Promise;\n async drainChildren(parent: Agent, childIds: readonly SessionId[]): Promise;\n listChildren(parentSessionId: SessionId, signal?: AbortSignal): Promise;\n listDescendants(rootSessionId: SessionId, signal?: AbortSignal): Promise;\n @Remote(\'prompt\')\n async prompt(request: SubagentPromptRequest, signal: AbortSignal): Promise;\n @Remote(\'interru /* …truncated — full shape in source */', }, { name: 'SubagentSendMessageOptions', diff --git a/packages/subagent/subagent/README.i18n.yaml b/packages/subagent/subagent/README.i18n.yaml index 3201620685..896c730034 100644 --- a/packages/subagent/subagent/README.i18n.yaml +++ b/packages/subagent/subagent/README.i18n.yaml @@ -27,8 +27,8 @@ en: c888e23af70b5635 zh: f9be27ef7833c4fc /deepseek-ai-dsh-subagent/use-this-package/local-and-external-children: - en: bd9389d8daac973d - zh: 942a10b183cacc47 + en: 897193865a39a0a0 + zh: bb20de7e8096982a /deepseek-ai-dsh-subagent/use-this-package/child-presets: en: a740e5e9bdd661d9 zh: 712a5458fc8b3615 @@ -51,8 +51,8 @@ en: f78c5e931f3a3676 zh: 3c63f637dbaa8101 /deepseek-ai-dsh-subagent/understand-the-implementation/activation-settlement: - en: 3cac7a3d58cda7ea - zh: 74e3234e5101bd1d + en: 380832cc7cbfc56e + zh: 3178545826c48afd /deepseek-ai-dsh-subagent/understand-the-implementation/restoring-child-composition: en: d338e68edd438f57 zh: 0496090cc567b19d diff --git a/packages/subagent/subagent/README.md b/packages/subagent/subagent/README.md index 1405400040..89f135b02a 100644 --- a/packages/subagent/subagent/README.md +++ b/packages/subagent/subagent/README.md @@ -61,7 +61,7 @@ At capacity, creation or cold resume rejects with `ACTIVATION_LIMIT_REACHED` (br `startActivation({ name, provider, label, request, signal, delivery })` returns `{ childId, name, messageId?, result, dispose }`. Supplying `childId` selects a local backend and guarantees `messageId`. Local children accept later messages and can cold-resume; external children expose one execution and reject continuation. `request.agentOptions` overrides supported child model settings. `delivery: 'parent'` supplies the model-facing completion notice; `delivery: 'caller'` lets workflows await the result without a parent notice or initial return guidance. Local parent delivery requires persistence; caller delivery can use an ephemeral local session. Cold resume requires persistence and Session query. -Agent names are immutable and unique throughout one agent tree; its root is `lead`. Creation requires a lower-case letter followed by lower-case letters, digits, underscores, or hyphens; `lead` and `unowned` are reserved. `SubagentNames` reserves before asynchronous preparation, releases failed unpublished starts, and records successful assignments as `subagent/named` in the root Session. The `subagentNames` projection retains assignments after settlement and restart and excludes fork-inherited events. `nameOf()` and `resolveName()` translate between names and stable Session ids without granting operation authority. Older unnamed descendants use `legacy:` addresses. +Agent names are immutable and unique throughout one agent tree; its root is `lead`. Creation requires a lower-case letter followed by lower-case letters, digits, underscores, or hyphens; `lead` and `unowned` are reserved. Each parent catalog records its children’s names, including external executions with caller delivery; local child descriptors carry the same name for recovery. A root-scoped runtime index reserves names before asynchronous preparation, releases failed unpublished starts, and retains committed assignments after settlement. It rebuilds from catalogs once per live root, excluding inherited entries; an unreadable branch prevents initialization. `nameOf(agent)` reads the Agent’s own name, and `resolveName()` resolves tree names without granting operation authority. Older unnamed descendants use `legacy:` addresses. ### Child presets @@ -123,7 +123,7 @@ The manager reserves child identity and capacity, materializes a local Agent or A local Agent failure without a subsequently committed `turn/end` settles as `error` after its owned descendants finish. Unclaimed input cannot keep that failed activation resident. A later committed turn ending supersedes the live failure and supplies the recovered outcome. -Successful local creation appends a `subagent/catalog` fact to the parent Session regardless of result delivery. External creation appends a catalog fact only with `delivery: 'parent'`; caller-owned external executions retain their caller's membership records. External entries use `mode: 'external'` to identify children without a local Session. Catalog entries record membership once at creation and carry no execution status. Complete results go to the caller or the parent completion notice. Projections exclude inherited facts. Direct lists read one parent projection, so completed local workflow children remain discoverable and can be opened or continued. Catalog payload v0 records local modes; v1 also accepts unknown mode; v2 records external executions. Readers support all three versions. Historical migration appends a v1 `subagent/catalog` from a readable child header when its descriptor is unavailable; local creation retains v0. Its `mode: 'unknown'` projection keeps the child visible without claiming continuation support; an existing complete entry remains authoritative. +Successful local and external creation appends a `subagent/catalog` fact to the parent Session regardless of result delivery. External entries use `mode: 'external'` to identify children without a local Session. Catalog entries record membership once at creation and carry no execution status. Complete results go to the caller or the parent completion notice. Projections exclude inherited facts. Direct lists read one parent projection, so completed local workflow children remain discoverable and can be opened or continued. Catalog payload v0 records local modes; v1 also accepts unknown mode; v2 records external executions. Readers support all three versions. Historical migration appends a v1 `subagent/catalog` from a readable child header when its descriptor is unavailable; local creation retains v0. Its `mode: 'unknown'` projection keeps the child visible without claiming continuation support; an existing complete entry remains authoritative. ### Restoring child composition diff --git a/packages/subagent/subagent/README.zh.md b/packages/subagent/subagent/README.zh.md index 795a7ffc1c..ab17003f20 100644 --- a/packages/subagent/subagent/README.zh.md +++ b/packages/subagent/subagent/README.zh.md @@ -61,7 +61,7 @@ kind: "package-reference" `startActivation({ name, provider, label, request, signal, delivery })` 返回 `{ childId, name, messageId?, result, dispose }`。提供 `childId` 会选择本地后端,并保证返回 `messageId`。本地子级接受后续消息,支持冷恢复;外部子级只执行一次,拒绝继续执行。`request.agentOptions` 覆盖受支持的子级模型设置。`delivery: 'parent'` 提供面向模型的完成通知;`delivery: 'caller'` 允许 workflow 等待结果,不发送父级通知或初始返回指引。本地 parent 交付要求持久化;caller 交付可使用临时本地会话。冷恢复要求持久化和 Session query。 -agent 名字不可变,在整棵 agent 树内唯一;根名为 `lead`。创建时必须以小写字母开头,后续只能包含小写字母、数字、下划线或连字符;`lead` 和 `unowned` 为保留名。`SubagentNames` 在异步准备前预留名字,释放失败且未发布的启动,并将成功分配作为 `subagent/named` 记录在根 Session 中。`subagentNames` 投影在结束和重启后保留分配,排除分叉继承的事件。`nameOf()` 和 `resolveName()` 在名字与稳定 Session id 之间转换,不授予操作权限。旧的无名后代使用 `legacy:` 地址。 +agent 名字不可变,在整棵 agent 树内唯一;根名为 `lead`。创建时必须以小写字母开头,后续只能包含小写字母、数字、下划线或连字符;`lead` 和 `unowned` 为保留名。每个父级 catalog 记录其子级名字,包括采用 caller 交付的外部执行;本地子级 descriptor 携带相同名字供恢复使用。根级运行时索引在异步准备前预留名字,释放失败且未发布的启动,并在执行结束后保留已提交分配。每个在线根从 catalog 重建一次索引,排除继承条目;不可读分支会阻止初始化。`nameOf(agent)` 读取 Agent 自身名字,`resolveName()` 解析树内名字,不授予操作权限。旧的无名后代使用 `legacy:` 地址。 ### 子级 preset @@ -123,7 +123,7 @@ agent 名字不可变,在整棵 agent 树内唯一;根名为 `lead`。创建 本地 Agent 发生失败且后续没有成功提交 `turn/end` 时,会在所拥有的后代结束后以 `error` 结算。未认领的输入不会使该失败 activation 一直驻留。后续成功提交的轮次结束记录会取代实时失败,提供恢复后的结果。 -本地创建成功后,无论结果交付给谁,都会向父 Session 追加 `subagent/catalog` 事实。外部创建仅在使用 `delivery: 'parent'` 时追加目录事实;调用方拥有的外部执行保留调用方自己的成员记录。外部条目以 `mode: 'external'` 标记没有本地 Session 的子级。目录仅在创建时记录一次成员关系,不携带执行状态。完整结果交给调用方或父级完成通知。投影排除继承事实。直接列表读取一个父级投影,因此已完成的本地工作流子级仍可被发现、打开或继续。Catalog 载荷 v0 记录本地模式,v1 还接受未知模式,v2 记录外部执行,读取器支持三版。历史迁移在 descriptor 不可用时根据可读子 header 追加 v1 `subagent/catalog`;本地创建保留 v0。其 `mode: 'unknown'` 投影让子会话保持可见,但不表示支持继续执行;已有完整条目仍具有权威性。 +本地或外部创建成功后,无论结果交付给谁,都会向父 Session 追加 `subagent/catalog` 事实。外部条目以 `mode: 'external'` 标记没有本地 Session 的子级。目录仅在创建时记录一次成员关系,不携带执行状态。完整结果交给调用方或父级完成通知。投影排除继承事实。直接列表读取一个父级投影,因此已完成的本地工作流子级仍可被发现、打开或继续。Catalog 载荷 v0 记录本地模式,v1 还接受未知模式,v2 记录外部执行,读取器支持三版。历史迁移在 descriptor 不可用时根据可读子 header 追加 v1 `subagent/catalog`;本地创建保留 v0。其 `mode: 'unknown'` 投影让子会话保持可见,但不表示支持继续执行;已有完整条目仍具有权威性。 ### 恢复子级组装 diff --git a/packages/subagent/subagent/src/catalog.ts b/packages/subagent/subagent/src/catalog.ts index 2e89bcf7dd..3ab098c2ad 100644 --- a/packages/subagent/subagent/src/catalog.ts +++ b/packages/subagent/subagent/src/catalog.ts @@ -16,6 +16,7 @@ import type { } from '@deepseek-ai/dsh-session' import type { ProjectionDefinition, SessionProjectionRegistry } from '@deepseek-ai/dsh-session-projection' import type { SubagentCatalogEntry } from './projection-types.ts' +import { subagentNameSchema } from './descriptor.ts' import { SubagentError } from './error.ts' /** Catalog payload version emitted by local child creation. */ @@ -28,6 +29,8 @@ type KnownCatalogMode = /** Parent catalog v0 records local modes, v1 adds unknown children, and v2 records external executions. */ export type SubagentCatalogEvent = & { + /** Immutable tree-wide name; absent in older catalogs. */ + readonly name?: string readonly childId: SessionId readonly childCreatedAt: number } & ( @@ -55,6 +58,7 @@ export interface SubagentCatalogState { const sessionIdSchema = z.string() as unknown as z.ZodType const oneShotCatalogSchema = z.object({ version: z.union([z.literal(0), z.literal(1)]), + name: subagentNameSchema.optional(), childId: sessionIdSchema, childCreatedAt: z.number().int().nonnegative(), mode: z.literal('one-shot'), @@ -62,6 +66,7 @@ const oneShotCatalogSchema = z.object({ }).strict() const continuableCatalogSchema = z.object({ version: z.union([z.literal(0), z.literal(1)]), + name: subagentNameSchema.optional(), childId: sessionIdSchema, childCreatedAt: z.number().int().nonnegative(), mode: z.literal('continuable'), @@ -127,7 +132,7 @@ export const subagentCatalogProjectionDefinition = { if (event.type !== 'subagent/catalog' || event.seq < state.inheritedEventCount) return state return { ...state, head: appendChunkedList(state.head, eventDataSchema.parse(event.data)) } }, - stateVersion: 6, + stateVersion: 7, wire: { viewSchema, view: subagentCatalogEntries }, } satisfies ProjectionDefinition<'subagentCatalog', SubagentCatalogState> @@ -140,7 +145,7 @@ export const subagentCatalogProjectionDefinition = { export function establishCatalogChild( parent: Session, child: SessionHeader, - descriptor: { readonly mode: 'continuable'; readonly label: string }, + descriptor: { readonly mode: 'continuable'; readonly label: string; readonly name?: string }, ): void { parent.append('subagent/catalog', { version: SUBAGENT_CATALOG_VERSION, @@ -148,6 +153,7 @@ export function establishCatalogChild( childCreatedAt: child.createdAt, mode: descriptor.mode, label: descriptor.label, + ...descriptor.name === undefined ? {} : { name: descriptor.name }, }) } @@ -159,14 +165,16 @@ const EXTERNAL_SUBAGENT_CATALOG_VERSION = 2 * @param parent - durable direct parent receiving the discovery fact. * @param childId - identity returned by the external provider. * @param label - display label assigned by the caller. + * @param name - immutable tree-wide name assigned at creation. */ -export function establishExternalCatalogChild(parent: Session, childId: SessionId, label: string): void { +export function establishExternalCatalogChild(parent: Session, childId: SessionId, label: string, name: string): void { parent.append('subagent/catalog', { version: EXTERNAL_SUBAGENT_CATALOG_VERSION, childId, childCreatedAt: Date.now(), mode: 'external', label, + name, }) } diff --git a/packages/subagent/subagent/src/control-types.ts b/packages/subagent/subagent/src/control-types.ts index 528692a0a5..6ef49db9c0 100644 --- a/packages/subagent/subagent/src/control-types.ts +++ b/packages/subagent/subagent/src/control-types.ts @@ -56,7 +56,10 @@ export type SubagentCatalogRow = * One recursive catalog row. Traversal may also return diagnostics for * unknown catalog modes or unreadable child catalogs. */ -export type SubagentListEntry = +export type SubagentListEntry = { + /** Immutable name from the parent catalog; absent for older children. */ + readonly name?: string +} & ( | SubagentCatalogRow & { readonly kind: 'child' /** Whether the child catalog contains a direct child. */ @@ -74,6 +77,7 @@ export type SubagentListEntry = */ readonly reason: 'corrupt' | 'unsupported' | 'unavailable' } +) /** Durable parent/child browsing address; unknown mode is resolved when child history is read. */ export type SubagentAddress = diff --git a/packages/subagent/subagent/src/descriptor.ts b/packages/subagent/subagent/src/descriptor.ts index 4b68a64852..603cf89033 100644 --- a/packages/subagent/subagent/src/descriptor.ts +++ b/packages/subagent/subagent/src/descriptor.ts @@ -21,6 +21,7 @@ * @module @deepseek-ai/dsh-subagent/descriptor */ +import { z } from 'zod' import { snapshotJsonValue } from '@deepseek-ai/dsh-util-values' import type { SessionEvent } from '@deepseek-ai/dsh-session' import type { ReasoningEffortId } from '@deepseek-ai/dsh-llm' @@ -47,8 +48,13 @@ declare module '@deepseek-ai/dsh-session/types' { */ export const SUBAGENT_DESCRIPTOR_VERSION = 3 +/** Persisted and requested agent names; root and task-filter words are reserved. */ +export const subagentNameSchema = z.string().regex(/^[a-z][a-z0-9_-]*$/).refine(value => value !== 'lead' && value !== 'unowned') + /** Fields shared by every supported `subagent/descriptor` payload. */ interface SubagentDescriptorBase { + /** Immutable tree-wide name; absent in older descriptors. */ + readonly name?: string /** Descriptor format version ({@link SUBAGENT_DESCRIPTOR_VERSION}). */ readonly version: number /** Whether the child is a terminal one-shot run or a resumable conversation. */ @@ -98,6 +104,7 @@ const DESCRIPTOR_BASE_KEYS = [ 'mode', 'provider', 'label', + 'name', ] as const const ONE_SHOT_DESCRIPTOR_KEYS = new Set(DESCRIPTOR_BASE_KEYS) const CONTINUABLE_DESCRIPTOR_KEYS = new Set([ @@ -184,6 +191,7 @@ function parseSubagentDescriptor(value: unknown): SubagentDescriptorData | undef mode === 'one-shot' ? ONE_SHOT_DESCRIPTOR_KEYS : CONTINUABLE_DESCRIPTOR_KEYS, 'payload', ) + const name = value['name'] === undefined ? undefined : subagentNameSchema.parse(value['name']) const provider = value['provider'] if (typeof provider !== 'string') { throw new Error('persisted subagent descriptor provider must be a string') @@ -194,6 +202,7 @@ function parseSubagentDescriptor(value: unknown): SubagentDescriptorData | undef version: SUBAGENT_DESCRIPTOR_VERSION, mode, provider, + ...name === undefined ? {} : { name }, ...label !== undefined ? { label } : {}, } } @@ -213,6 +222,7 @@ function parseSubagentDescriptor(value: unknown): SubagentDescriptorData | undef mode, provider, label, + ...name === undefined ? {} : { name }, ...agentProvider !== undefined ? { agentProvider } : {}, ...agentModel !== undefined ? { agentModel } : {}, ...agentReasoningEffort !== undefined ? { agentReasoningEffort } : {}, @@ -234,6 +244,7 @@ export function snapshotSubagentDescriptor( version: SUBAGENT_DESCRIPTOR_VERSION, mode: input.mode, provider: input.provider, + ...input.name === undefined ? {} : { name: subagentNameSchema.parse(input.name) }, label: input.label, ...input.agentProvider !== undefined ? { agentProvider: input.agentProvider } : {}, ...input.agentModel !== undefined ? { agentModel: input.agentModel } : {}, diff --git a/packages/subagent/subagent/src/index.ts b/packages/subagent/subagent/src/index.ts index 3056cd53ec..ffe80e6a84 100644 --- a/packages/subagent/subagent/src/index.ts +++ b/packages/subagent/subagent/src/index.ts @@ -75,7 +75,6 @@ import { installSubagentArchiveAdmission } from './archive-admission.ts' import type { SubagentCatalogEntry } from './projection-types.ts' import { subagentIdentityProjectionDefinition, subagentTimingProjectionDefinition } from './projection.ts' import { subagentCatalogProjectionDefinition } from './catalog.ts' -import { subagentNamesProjectionDefinition } from './names.ts' import { deliverSubagentPrompt } from './internal.ts' export type {} from './catalog.ts' @@ -228,7 +227,6 @@ export class SubagentRuntime extends TypertRemoteService { }) ctx.inject(['sessionProjections'], (projectionCtx) => { projectionCtx.sessionProjections.register(subagentCatalogProjectionDefinition) - projectionCtx.sessionProjections.register(subagentNamesProjectionDefinition) projectionCtx.sessionProjections.register(subagentTimingProjectionDefinition) projectionCtx.sessionProjections.register(subagentIdentityProjectionDefinition) }) @@ -287,13 +285,12 @@ export class SubagentRuntime extends TypertRemoteService { } /** - * Read a model-facing name in the caller's tree, retaining legacy addresses for older unnamed children. - * @param caller - exact live Agent selecting the tree. - * @param id - target identity; omission selects the caller. + * Read an Agent's own descriptor-backed name, retaining legacy addresses for older children. + * @param agent - exact live Agent whose name is requested. * @returns lead, the immutable assigned name, or a legacy address. */ - nameOf(caller: Agent, id: SessionId = caller.id): string { - return this.requireManager().names.nameOf(caller, id) + nameOf(agent: Agent): string { + return this.requireManager().names.nameOf(agent) } /** diff --git a/packages/subagent/subagent/src/list-children.ts b/packages/subagent/subagent/src/list-children.ts index 0a737b98d7..09d263c686 100644 --- a/packages/subagent/subagent/src/list-children.ts +++ b/packages/subagent/subagent/src/list-children.ts @@ -102,13 +102,15 @@ export async function listDescendants( const code = error instanceof Error && 'code' in error ? error.code : undefined result.push({ kind: 'diagnostic', id: entry.id, parentId, depth, + ...entry.name === undefined ? {} : { name: entry.name }, reason: code === 'SESSION_QUERY_CORRUPT_SESSION' || code === 'SESSION_QUERY_SOURCE_CONFLICT' ? 'corrupt' : 'unavailable', }) continue } if (entry.mode === 'unknown') { - result.push({ kind: 'diagnostic', id: entry.id, parentId, depth, reason: 'unsupported' }) + result.push({ kind: 'diagnostic', id: entry.id, parentId, depth, + ...entry.name === undefined ? {} : { name: entry.name }, reason: 'unsupported' }) } else { const { createdAt: _createdAt, ...identity } = entry result.push({ diff --git a/packages/subagent/subagent/src/manager.ts b/packages/subagent/subagent/src/manager.ts index 1755557b44..d015230bb6 100644 --- a/packages/subagent/subagent/src/manager.ts +++ b/packages/subagent/subagent/src/manager.ts @@ -392,7 +392,6 @@ export class SubagentManager { assertSubagentMaxDepth(request.maxDepth) const childId = spec.childId ?? brandString(randomUUID()) this.assertChildIdAvailable(childId) - using reservation = this.names.reserve(parent, spec.name) const childDepth = resolveChildDepth(parent, request.maxDepth) // Snapshot before any await: invalid descriptor JSON rejects the call // before a child exists, and the detached value is what reaches the log. @@ -402,6 +401,7 @@ export class SubagentManager { const agentReasoningEffort = agentOptions.reasoningEffort const descriptor = snapshotSubagentDescriptor({ mode: 'continuable', + name: spec.name, provider: spec.provider, label: spec.label, ...agentProvider !== undefined ? { agentProvider } : {}, @@ -417,6 +417,8 @@ export class SubagentManager { // but the service is also callable outside a turn. const releaseHold = this.holdOwnership(parent, childId) try { + using reservation = await this.names.reserve(parent, spec.name, spec.signal, childId) + this.assertAdmitting(parent) const cwd = await this.resolveDirectory(request, spec.signal) const prepared = await this.host.prepareContinuable(spec.provider, { sessionId: childId, @@ -474,8 +476,7 @@ export class SubagentManager { { source: { kind: 'user' }, signal: spec.signal, delivery: 'queue' }, parent, () => { - establishCatalogChild(parent.session, childHeader, descriptor) - reservation.commit(childId) + reservation.commit(childId, () => { establishCatalogChild(parent.session, childHeader, descriptor) }) }, ) }) @@ -503,11 +504,12 @@ export class SubagentManager { async startExternal(spec: SubagentActivationSpec): Promise { const parent = spec.request.parent this.assertAdmitting(parent) - using reservation = this.names.reserve(parent, spec.name) const pendingId = brandString(randomUUID()) const releaseHold = this.holdOwnership(parent, pendingId) let activation: Activation | undefined try { + using reservation = await this.names.reserve(parent, spec.name, spec.signal) + this.assertAdmitting(parent) const cwd = await this.resolveDirectory(spec.request, spec.signal) activation = await this.materialize({ kind: 'external', @@ -524,10 +526,8 @@ export class SubagentManager { this.assertAdmitting(parent) this.assertLiveParent(parent, activation.childId) spec.signal.throwIfAborted() - if (spec.delivery === 'parent') { - establishExternalCatalogChild(parent.session, activation.childId, spec.label) - } - reservation.commit(activation.childId) + const childId = activation.childId + reservation.commit(childId, () => { establishExternalCatalogChild(parent.session, childId, spec.label, spec.name) }) this.announce(activation) return this.receipt(activation) } catch (error: unknown) { @@ -1391,7 +1391,7 @@ export class SubagentManager { } activation = await this.materialize({ kind: 'local', - name: this.names.nameOf(parent, childId), + name: descriptor.name ?? `legacy:${childId}`, childId, provider: descriptor.provider, parent, diff --git a/packages/subagent/subagent/src/names.ts b/packages/subagent/subagent/src/names.ts index d4a2244956..408d5f4b95 100644 --- a/packages/subagent/subagent/src/names.ts +++ b/packages/subagent/subagent/src/names.ts @@ -1,141 +1,135 @@ -/** Durable tree-wide agent names and unpublished creation reservations. +/** Root-scoped name reservations reconstructed from parent-owned catalogs. * @module @deepseek-ai/dsh-subagent/names */ import type { Context } from '@deepseek-ai/cordis' import type { Agent } from '@deepseek-ai/dsh-agent' -import { SessionId, SessionLogOffset } from '@deepseek-ai/dsh-session' -import type { Session, SessionEvent, SessionHeader } from '@deepseek-ai/dsh-session' -import type { ProjectionDefinition } from '@deepseek-ai/dsh-session-projection' -import { z } from 'zod' +import type { SessionId } from '@deepseek-ai/dsh-session' +import { liveCatalogEntries } from './catalog.ts' +import { subagentNameSchema } from './descriptor.ts' import { SubagentError } from './error.ts' -import { listDescendants } from './list-children.ts' +import { listChildren } from './list-children.ts' -/** One immutable name assigned in the root Session before child publication. */ -export interface SubagentNameData { - readonly name: string - readonly id: SessionId +interface NameEntry { + readonly id: SessionId | undefined + readonly committed: boolean } -declare module '@deepseek-ai/dsh-session/types' { - interface SessionEventMap { - /** - * A tree-wide agent name, retained after its execution ends. - * @param data - the name and durable child identity. - */ - 'subagent/named': SubagentNameData - } -} - -/** Root-owned name assignments, excluding fork-inherited events. */ -export interface SubagentNamesState { - readonly inheritedEventCount: SessionLogOffset - readonly entries: readonly SubagentNameData[] -} - -declare module '@deepseek-ai/dsh-session-projection/types' { - interface SessionProjectionStateMap { - subagentNames: SubagentNamesState - } -} - -const nameSchema = z.string().regex(/^[a-z][a-z0-9_-]*$/).refine(value => value !== 'lead' && value !== 'unowned') -const entrySchema = z.object({ name: nameSchema, id: z.string().transform(SessionId) }).strict() - -const stateSchema: z.ZodType = z.object({ - inheritedEventCount: z.number().int().nonnegative().transform(SessionLogOffset), - entries: z.array(entrySchema), -}).strict().refine(state => new Set(state.entries.map(entry => entry.name)).size === state.entries.length - && new Set(state.entries.map(entry => entry.id)).size === state.entries.length, 'duplicate persisted agent name or identity') - -/** Host-only name projection; corrupt duplicate assignments reject restoration. */ -export const subagentNamesProjectionDefinition = { - key: 'subagentNames', - stateVersion: 0, - stateSchema, - init: (_header: SessionHeader, inheritedEventCount: SessionLogOffset): SubagentNamesState => ({ inheritedEventCount, entries: [] }), - apply: (state, event: SessionEvent) => { - if (event.type !== 'subagent/named' || event.seq < state.inheritedEventCount) return state - const entry = entrySchema.parse(event.data) - if (state.entries.some(existing => existing.name === entry.name || existing.id === entry.id)) { - throw new SubagentError('duplicate persisted agent name or identity; restore a valid Session log', 'CORRUPT_AGENT_NAMES') - } - return { ...state, entries: [...state.entries, entry] } - }, -} satisfies ProjectionDefinition<'subagentNames', SubagentNamesState> - -/** Owns creation reservations; committed assignments come only from the root projection. */ +/** Committed identities and unpublished reservations shared by one live root. */ export class SubagentNames { - private readonly pending = new WeakMap>() + private readonly trees = new WeakMap>() /** @param ctx - subagent service context with live Agents and Session projections. */ constructor(private readonly ctx: Context) {} /** - * Reserve a unique name before asynchronous child preparation. + * Reserve a name and any known local identity before child preparation. * @param parent - exact live spawning Agent. * @param name - explicit lower-case name; lead and unowned are reserved. - * @returns a publication operation and an idempotent unpublished-reservation release. - * @throws when the name is invalid, taken, or the live tree is unavailable. + * @param signal - cancellation while rebuilding historical assignments. + * @param id - reserved local identity, when the provider does not allocate it. + * @returns a catalog publication operation and unpublished-reservation release. + * @throws when the name or identity is taken, invalid, or cannot be checked. */ - reserve(parent: Agent, name: string): { commit(id: SessionId): void; [Symbol.dispose](): void } { - if (!nameSchema.safeParse(name).success) { + async reserve(parent: Agent, name: string, signal: AbortSignal, id?: SessionId): Promise<{ + commit(id: SessionId, publish: () => void): void + [Symbol.dispose](): void + }> { + if (!subagentNameSchema.safeParse(name).success) { throw new SubagentError('agent name must start with a lower-case letter and contain only lower-case letters, digits, underscores, or hyphens; lead and unowned are reserved', 'INVALID_AGENT_NAME') } const root = this.rootOf(parent) - let pending = this.pending.get(root.session) - if (pending === undefined) { - pending = new Set() - this.pending.set(root.session, pending) - } - if (pending.has(name) || this.entries(root.session).some(entry => entry.name === name)) { + const names = await this.index(root, signal) + signal.throwIfAborted() + if (this.rootOf(parent) !== root) throw new SubagentError('agent tree changed during creation', 'AGENT_TREE_UNAVAILABLE') + if (names.has(name)) { throw new SubagentError(`agent name "${name}" is already in use in this tree; choose another name`, 'DUPLICATE_AGENT_NAME') } - pending.add(name) + const checkId = (candidate: SessionId): void => { + for (const [other, value] of names) { + if (other !== name && value.id === candidate) throw new SubagentError(`subagent "${candidate}" already exists`, 'DUPLICATE_CHILD') + } + } + if (id !== undefined) checkId(id) + names.set(name, { id, committed: false }) + let committed = false return { - commit: (id) => { + commit: (childId, publish) => { if (this.rootOf(parent) !== root) throw new SubagentError('agent tree changed during creation', 'AGENT_TREE_UNAVAILABLE') - root.session.append('subagent/named', { name, id }) + checkId(childId) + publish() + names.set(name, { id: childId, committed: true }) + committed = true }, - [Symbol.dispose]: () => { pending.delete(name) }, + [Symbol.dispose]: () => { if (!committed) names.delete(name) }, } } /** - * Read an agent's model-facing name in the caller's tree. - * @param caller - exact live Agent selecting the tree. - * @param id - target identity; defaults to the caller. - * @returns lead, an assigned name, or a stable legacy address for an older unnamed identity. + * Read an Agent's name from its own descriptor projection. + * @param agent - exact live Agent. + * @returns lead for roots, the descriptor name, or an older child's legacy address. */ - nameOf(caller: Agent, id: SessionId = caller.id): string { - const root = this.rootOf(caller) - if (id === root.id) return 'lead' - return this.entries(root.session).find(entry => entry.id === id)?.name ?? `legacy:${id}` + nameOf(agent: Agent): string { + if (this.ctx.agents.get(agent.id) !== agent) { + throw new SubagentError('agent naming requires the exact live caller', 'UNAUTHORIZED') + } + if (agent.session.header.origin !== 'subagent') return 'lead' + const state = this.ctx.get('sessionProjections')?.stateOf(agent.session, 'subagent') + if (state === undefined) throw new SubagentError('agent names require the subagent identity projection', 'CONTINUATION_UNAVAILABLE') + const identity = state.identity + return identity !== undefined && agent.session.isOwnSeq(identity.seq) && identity.name !== undefined + ? identity.name : `legacy:${agent.id}` } /** - * Resolve a name without granting message, interrupt, or assignment authority. + * Resolve a name without granting messaging, interruption, or assignment authority. * @param caller - exact live Agent selecting the tree. - * @param name - assigned name or a legacy address returned by discovery. - * @param signal - cancellation during legacy catalog discovery. - * @returns the durable identity; the consuming operation still authorizes access. - * @throws when the name is absent from the caller's tree. + * @param name - assigned name or an older child's legacy address. + * @param signal - cancellation while rebuilding historical assignments. + * @returns the durable identity for the consuming operation to authorize. + * @throws when the name is absent or historical catalogs cannot be read. */ async resolve(caller: Agent, name: string, signal?: AbortSignal): Promise { signal?.throwIfAborted() const root = this.rootOf(caller) if (name === 'lead') return root.id - const entries = this.entries(root.session) - const entry = entries.find(candidate => candidate.name === name) - if (entry !== undefined) return entry.id - if (name.startsWith('legacy:')) { - const id = SessionId(name.slice('legacy:'.length)) - if (!entries.some(candidate => candidate.id === id) - && (await listDescendants(this.ctx, root.id, signal)).some(candidate => candidate.id === id)) return id - } + const entry = (await this.index(root, signal)).get(name) + if (entry?.committed && entry.id !== undefined) return entry.id throw new SubagentError(`agent name "${name}" was not found; use list_agents to discover available names`, 'AGENT_NAME_NOT_FOUND') } + /** Rebuild once per live root; concurrent readers adopt the first completed index. */ + private async index(root: Agent, signal?: AbortSignal): Promise> { + signal?.throwIfAborted() + const existing = this.trees.get(root) + if (existing !== undefined) return existing + const names = new Map([['lead', { id: root.id, committed: true }]]) + const ids = new Set([root.id]) + const pending = [...liveCatalogEntries(this.ctx.get('sessionProjections'), root.session)] + for (const entry of pending) { + signal?.throwIfAborted() + const name = entry.name ?? `legacy:${entry.id}` + if (names.get(name)?.id === entry.id) continue + if (names.has(name) || ids.has(entry.id)) { + throw new SubagentError('duplicate cataloged agent name or identity; restore valid subagent catalogs', 'CORRUPT_AGENT_NAMES') + } + names.set(name, { id: entry.id, committed: true }) + ids.add(entry.id) + if (entry.mode !== 'external') { + const live = this.ctx.get('sessions')?.get(entry.id) + pending.push(...(live === undefined + ? await listChildren(this.ctx, entry.id, signal) + : liveCatalogEntries(this.ctx.get('sessionProjections'), live))) + } + } + signal?.throwIfAborted() + this.rootOf(root) + const shared = this.trees.get(root) ?? names + this.trees.set(root, shared) + return shared + } + /** Resolve only uninterrupted live subagent ancestry, never a fork's inherited parent. */ private rootOf(caller: Agent): Agent { if (this.ctx.agents.get(caller.id) !== caller) { @@ -154,11 +148,4 @@ export class SubagentNames { } return root } - - /** Read the authoritative root projection without keeping a second name index. */ - private entries(root: Session): readonly SubagentNameData[] { - const state = this.ctx.get('sessionProjections')?.stateOf(root, 'subagentNames') - if (state === undefined) throw new SubagentError('agent names require the subagentNames projection', 'CONTINUATION_UNAVAILABLE') - return state.entries - } } diff --git a/packages/subagent/subagent/src/projection-types.ts b/packages/subagent/subagent/src/projection-types.ts index c8d1b472a7..092b1214f8 100644 --- a/packages/subagent/subagent/src/projection-types.ts +++ b/packages/subagent/subagent/src/projection-types.ts @@ -9,6 +9,8 @@ import type { SessionId, SessionSeq } from '@deepseek-ai/dsh-session/types' /** One current direct-child discovery row materialized from parent facts. */ export type SubagentCatalogEntry = & { + /** Immutable name, absent for historical unnamed children. */ + readonly name?: string readonly id: SessionId readonly createdAt: number } @@ -43,7 +45,10 @@ export interface SubagentTimingProjection { * Label strength follows the descriptor schema: a continuable child always * carries one, a one-shot child may omit it. */ -export type SubagentIdentityProjection = +export type SubagentIdentityProjection = { + /** Immutable name from the descriptor, absent for historical children. */ + readonly name?: string +} & ( | { /** A terminal one-shot child. */ mode: 'one-shot' @@ -65,6 +70,7 @@ export type SubagentIdentityProjection = /** Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof. */ seq: SessionSeq } +) declare module '@deepseek-ai/dsh-session-projection/types' { interface SessionProjectionMap { diff --git a/packages/subagent/subagent/src/projection.ts b/packages/subagent/subagent/src/projection.ts index 541721f2c1..34a1703fdf 100644 --- a/packages/subagent/subagent/src/projection.ts +++ b/packages/subagent/subagent/src/projection.ts @@ -9,7 +9,7 @@ import { z } from 'zod' import { SessionSeq } from '@deepseek-ai/dsh-session' import type { ProjectionDefinition } from '@deepseek-ai/dsh-session-projection' import type { SessionEvent } from '@deepseek-ai/dsh-session' -import { foldSubagentDescriptor } from './descriptor.ts' +import { foldSubagentDescriptor, subagentNameSchema } from './descriptor.ts' import type { SubagentDescriptorData } from './descriptor.ts' import type { SubagentIdentityProjection, SubagentTimingProjection } from './projection-types.ts' @@ -127,11 +127,13 @@ interface IdentityState { const identityValueSchema = z.discriminatedUnion('mode', [ z.object({ mode: z.literal('one-shot'), + name: subagentNameSchema.optional(), label: z.string().optional(), seq: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).transform(SessionSeq), }).strict(), z.object({ mode: z.literal('continuable'), + name: subagentNameSchema.optional(), label: z.string(), seq: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).transform(SessionSeq), }).strict(), @@ -154,13 +156,13 @@ function descriptorIdentity(event: SessionEvent): SubagentIdentityProjection | u descriptor = undefined } if (descriptor === undefined) return undefined - return descriptor.mode === 'one-shot' - ? { - mode: 'one-shot', - ...descriptor.label !== undefined ? { label: descriptor.label } : {}, - seq: event.seq, - } - : { mode: 'continuable', label: descriptor.label, seq: event.seq } + return { + ...descriptor.name === undefined ? {} : { name: descriptor.name }, + ...descriptor.mode === 'one-shot' + ? { mode: 'one-shot', ...descriptor.label === undefined ? {} : { label: descriptor.label } } as const + : { mode: 'continuable', label: descriptor.label } as const, + seq: event.seq, + } } /** @@ -184,7 +186,5 @@ export const subagentIdentityProjectionDefinition = { return identity === undefined ? {} : { identity } }, wire: { viewSchema: identitySchema, view: state => state.identity ?? null }, - // Bumped when the identity gained its `seq` field: an older checkpoint row - // would replay into a value the schema rejects, so it must refold instead. - stateVersion: 2, + stateVersion: 3, } satisfies ProjectionDefinition<'subagent', IdentityState> diff --git a/packages/subagent/subagent/tests/activation-policy.spec.ts b/packages/subagent/subagent/tests/activation-policy.spec.ts index 4cb2e27062..38d9d44005 100644 --- a/packages/subagent/subagent/tests/activation-policy.spec.ts +++ b/packages/subagent/subagent/tests/activation-policy.spec.ts @@ -194,7 +194,7 @@ describe('in-process policy inheritance', () => { .join('\n') expect(systemText).not.toContain('Approval prompts are disabled') expect(systemText).not.toContain('You are a delegated subagent') - expect(parent.session.snapshotEvents().filter(event => event.type !== 'subagent/catalog' && event.type !== 'subagent/named')).toHaveLength(parentLogLength) + expect(parent.session.snapshotEvents().filter(event => event.type !== 'subagent/catalog')).toHaveLength(parentLogLength) } finally { await run.dispose() } diff --git a/packages/subagent/subagent/tests/catalog.spec.ts b/packages/subagent/subagent/tests/catalog.spec.ts index d14f35d4f7..ce68cc47a8 100644 --- a/packages/subagent/subagent/tests/catalog.spec.ts +++ b/packages/subagent/subagent/tests/catalog.spec.ts @@ -12,6 +12,7 @@ import { import type { SessionEvent, SessionHeader } from '@deepseek-ai/dsh-session' import { establishExternalCatalogChild, + establishCatalogChild, liveCatalogEntries, subagentCatalogProjectionDefinition, } from '../src/catalog.ts' @@ -72,12 +73,12 @@ describe('subagent catalog projection', () => { await ctx.plugin(SessionStore) const parent = ctx.sessions.create(header.id) const before = Date.now() - establishExternalCatalogChild(parent, SessionId('external'), 'External work') + establishExternalCatalogChild(parent, SessionId('external'), 'External work', 'worker') const events = parent.snapshotEvents() expect(events).toHaveLength(1) expect(events[0]).toMatchObject({ type: 'subagent/catalog', - data: { version: 2, childId: 'external', mode: 'external', label: 'External work' }, + data: { version: 2, childId: 'external', mode: 'external', label: 'External work', name: 'worker' }, }) const entries = subagentCatalogProjectionDefinition.wire.view(fold(events)) expect(entries).toHaveLength(1) @@ -88,6 +89,24 @@ describe('subagent catalog projection', () => { } }) + it('preserves a field-free historical descriptor when establishing its catalog', async () => { + const ctx = new Context() + try { + await ctx.plugin(SessionStore) + const parent = ctx.sessions.create(header.id) + establishCatalogChild(parent, { ...header, id: SessionId('legacy') }, { mode: 'continuable', label: 'Old child' }) + expect(subagentCatalogProjectionDefinition.wire.view(fold(parent.snapshotEvents()))) + .toEqual([{ id: 'legacy', createdAt: 0, mode: 'continuable', label: 'Old child' }]) + } finally { + await ctx.fiber.dispose() + } + }) + + it('rejects reserved names in persisted catalog entries', () => { + const event = fact(0, 'child', 1, { mode: 'continuable', label: 'Review' }) + expect(() => fold([{ ...event, data: { ...event.data, name: 'lead' } }])).toThrow() + }) + it('publishes detached catalog views and changes only for new own facts', async () => { const ctx = new Context() try { diff --git a/packages/subagent/subagent/tests/continuation-presets.spec.ts b/packages/subagent/subagent/tests/continuation-presets.spec.ts index 9cb78d5690..b2b077baf0 100644 --- a/packages/subagent/subagent/tests/continuation-presets.spec.ts +++ b/packages/subagent/subagent/tests/continuation-presets.spec.ts @@ -172,6 +172,7 @@ describe('continuable child presets', () => { mode: 'continuable', provider: 'separate', label: 'preset work', + name: started.name, agentProvider: 'mock', agentModel: 'mock', }) diff --git a/packages/subagent/subagent/tests/continuation.spec.ts b/packages/subagent/subagent/tests/continuation.spec.ts index ae70db6be2..8150bbe417 100644 --- a/packages/subagent/subagent/tests/continuation.spec.ts +++ b/packages/subagent/subagent/tests/continuation.spec.ts @@ -28,6 +28,7 @@ import type { SubagentRunEndInfo, SubagentRunInfo } from '../src/index.ts' import type { SubagentPromptRequestId } from '../src/control-types.ts' import * as activationResults from '../src/activation.ts' import { requireLocalActivation } from '../src/activation.ts' +import { SubagentNames } from '../src/names.ts' import { TestSessionQuery } from './test-session-query.ts' import { loadStoredSession } from './persistence-helpers.ts' import { @@ -563,6 +564,10 @@ describe('SubagentRuntime.startActivation', () => { childId: reservedId, })).rejects.toMatchObject({ code: 'DUPLICATE_CHILD' }) expect(ctx.agents.get(reservedId)).toBeUndefined() + const other = await ctx.agentLoop.create(SessionId('other-root'), { provider: 'mock', model: 'mock' }) + await expect(ctx.subagents.startActivation({ + delivery: 'parent', ...startSpec(other), childId: reservedId, + })).rejects.toMatchObject({ code: 'DUPLICATE_CHILD' }) }) it('rejects reserved child ids for an external backend before dispatch', async () => { @@ -600,6 +605,7 @@ describe('SubagentRuntime.startActivation', () => { expect(descriptorIndex).toBeLessThan(turnStartIndex) const descriptor = loaded.events[descriptorIndex] as SessionEvent<'subagent/descriptor'> expect(descriptor.data).toEqual({ + name: started.name, version: SUBAGENT_DESCRIPTOR_VERSION, mode: 'continuable', provider: 'spawn', @@ -796,6 +802,7 @@ describe('SubagentRuntime.startActivation', () => { const descriptor = child.session.snapshotEvents().find(event => event.type === 'subagent/descriptor') expect(descriptor?.data).toEqual({ + name: started.name, version: SUBAGENT_DESCRIPTOR_VERSION, mode: 'continuable', provider: 'spawn', @@ -1038,12 +1045,37 @@ describe('direct-child Queue residency routing', () => { const started = await ctx.subagents.startActivation({ ...startSpec(parent), delivery: 'parent' }) await waitNoActivation(ctx, started.childId) + const restored = new SubagentNames(ctx) + const observe = vi.spyOn(ctx.sessionQuery, 'observeSession') + const reservations = await Promise.allSettled([ + restored.reserve(parent, 'next', new AbortController().signal), + restored.reserve(parent, 'next', new AbortController().signal), + ]) + try { + expect(reservations.filter(result => result.status === 'fulfilled')).toHaveLength(1) + const rejected = reservations.filter(result => result.status === 'rejected') + expect(rejected).toHaveLength(1) + for (const result of rejected) expect(result.reason).toMatchObject({ code: 'DUPLICATE_AGENT_NAME' }) + expect(await restored.resolve(parent, started.name)).toBe(started.childId) + const reads = observe.mock.calls.length + expect(reads).toBe(2) + expect(await restored.resolve(parent, started.name)).toBe(started.childId) + expect(observe).toHaveBeenCalledTimes(reads) + } finally { + for (const result of reservations) if (result.status === 'fulfilled') result.value[Symbol.dispose]() + observe.mockRestore() + } + const names: string[] = [] + ctx.on('agent/created', ({ agent }) => { + if (agent.id === started.childId) names.push(ctx.subagents.nameOf(agent)) + }) const messageId = await queuePrompt(ctx, parent, started.childId, message('continue please')) expect(messageId).toBeTypeOf('string') await waitNoActivation(ctx, started.childId) const loaded = await loadStoredSession(ctx.sessionPersistence, started.childId) expect(userTexts(loaded.events)).toEqual(['child task', 'continue please']) + expect(names).toEqual([started.name]) // One descriptor only: cold resume never re-seeds it. expect(loaded.events.filter(event => event.type === 'subagent/descriptor')).toHaveLength(1) }) diff --git a/packages/subagent/subagent/tests/external-activation.spec.ts b/packages/subagent/subagent/tests/external-activation.spec.ts index d26d8186e1..3b7852f604 100644 --- a/packages/subagent/subagent/tests/external-activation.spec.ts +++ b/packages/subagent/subagent/tests/external-activation.spec.ts @@ -149,7 +149,7 @@ describe('external subagent activations', () => { await expect(waiting).resolves.toBe(true) await activation.dispose() expect(backend.dispose).toHaveBeenCalledTimes(1) - expect(fixture.records()).toEqual([]) + expect(fixture.records()).toMatchObject([{ id: activation.childId, name: activation.name, mode: 'external' }]) expect(fixture.parent.inbox.nextTurn).toEqual([]) }) @@ -286,7 +286,7 @@ describe('external subagent activations', () => { backend.result.resolve(failed) await expect(activation.result).resolves.toEqual(failed) await activation.dispose() - expect(fixture.records()).toMatchObject(delivery === 'parent' ? [{ id: activation.childId, mode: 'external' }] : []) + expect(fixture.records()).toMatchObject([{ id: activation.childId, name: activation.name, mode: 'external' }]) if (delivery === 'caller') { expect(fixture.parent.inbox.nextTurn).toEqual([]) } else { @@ -318,9 +318,9 @@ describe('external subagent activations', () => { expect((error as Error).message).not.toContain('/private/path') await expect(activation.result).resolves.toEqual(completed) expect(activation.dispose()).toBe(disposal) - expect(fixture.records()).toMatchObject(delivery === 'parent' ? [{ - id: activation.childId, mode: 'external', - }] : []) + expect(fixture.records()).toMatchObject([{ + id: activation.childId, name: activation.name, mode: 'external', + }]) expect(ended).toHaveBeenCalledExactlyOnceWith(expect.objectContaining({ stopReason: 'error' })) if (delivery === 'parent') { expect(fixture.parent.inbox.nextTurn).toHaveLength(1) diff --git a/packages/subagent/subagent/tests/list-children.spec.ts b/packages/subagent/subagent/tests/list-children.spec.ts index 6a2b99473c..f4eedfe257 100644 --- a/packages/subagent/subagent/tests/list-children.spec.ts +++ b/packages/subagent/subagent/tests/list-children.spec.ts @@ -71,8 +71,9 @@ async function startChild( ctx: Context, parent: Agent, label: string, + name = `child-${randomUUID()}`, ): Promise { - const started = await ctx.subagents.startActivation({ name: `child-${randomUUID()}`, delivery: 'parent', + const started = await ctx.subagents.startActivation({ name, delivery: 'parent', provider: 'spawn', label, request: { prompt: [{ type: 'text', text: `task: ${label}` }], parent }, @@ -123,18 +124,18 @@ describe('SubagentRuntime.listChildren', () => { signal: testSignal, }) expect(await ctx.subagents.listChildren(parent.id)).toMatchObject([ - { id: callerOwned.childId, label: 'spawn', mode: 'continuable' }, + { id: callerOwned.childId, name: callerOwned.name, label: 'spawn', mode: 'continuable' }, ]) await callerOwned.result await callerOwned.dispose() - const continuableId = await startChild(ctx, parent, 'continuable child') + const continuableId = await startChild(ctx, parent, 'continuable child', 'continuable') const listSessions = vi.spyOn(ctx.sessionQuery, 'listSessions') const observeSession = vi.spyOn(ctx.sessionQuery, 'observeSession') const children = await ctx.subagents.listChildren(parent.id) expect(children.map(({ createdAt: _createdAt, ...child }) => child)).toEqual([ - { id: callerOwned.childId, label: 'spawn', mode: 'continuable' }, - { id: continuableId, label: 'continuable child', mode: 'continuable' }, + { id: callerOwned.childId, name: callerOwned.name, label: 'spawn', mode: 'continuable' }, + { id: continuableId, name: 'continuable', label: 'continuable child', mode: 'continuable' }, ]) expect(children.every(child => Number.isFinite(child.createdAt))).toBe(true) expect(listSessions).not.toHaveBeenCalled() @@ -331,18 +332,18 @@ describe('SubagentRuntime.listDescendants', () => { expect(ctx.sessions.get(id)).toBeUndefined() }) - it('traverses one-shot and unknown-mode catalog entries to reach continuable children', async () => { + it.each([false, true])('traverses one-shot and unknown-mode entries (named: %s)', async (named) => { const { ctx, parent } = await setup([]) const once = ctx.sessions.create(SessionId('once')) const unknown = ctx.sessions.create(SessionId('unknown')) const leaf = ctx.sessions.create(SessionId('leaf')) catalog(parent.session, [child('once', 'one-shot')]) - catalog(once, [child('unknown', 'unknown')]) + catalog(once, [{ ...child('unknown', 'unknown'), ...named ? { name: 'future-child' } : {} }]) catalog(unknown, [child('leaf')]) const rows = await ctx.subagents.listDescendants(parent.id) expect(rows).toHaveLength(3) expect(rows[0]).toMatchObject({ kind: 'child', id: once.id, hasChildren: true }) - expect(rows[1]).toEqual({ kind: 'diagnostic', id: unknown.id, reason: 'unsupported', parentId: once.id, depth: 2 }) + expect(rows[1]).toEqual({ kind: 'diagnostic', id: unknown.id, ...named ? { name: 'future-child' } : {}, reason: 'unsupported', parentId: once.id, depth: 2 }) expect(rows[2]).toMatchObject({ kind: 'child', id: leaf.id, parentId: unknown.id, depth: 3 }) }) @@ -387,7 +388,7 @@ describe('SubagentRuntime.listDescendants', () => { const branch = ctx.sessions.create(SessionId('branch')) const hidden = ctx.sessions.create(SessionId('hidden')) const sibling = ctx.sessions.create(SessionId('sibling')) - catalog(parent.session, [child('branch'), child('sibling')]) + catalog(parent.session, [{ ...child('branch'), name: 'broken-branch' }, child('sibling')]) catalog(branch, [child('hidden')]) const observe = ctx.sessionQuery.observeSession.bind(ctx.sessionQuery) vi.spyOn(ctx.sessionQuery, 'observeSession').mockImplementation((id, options) => { @@ -398,7 +399,7 @@ describe('SubagentRuntime.listDescendants', () => { return observe(id, options) }) const rows = await ctx.subagents.listDescendants(parent.id) - expect(rows[0]).toEqual({ kind: 'diagnostic', id: branch.id, parentId: parent.id, depth: 1, reason }) + expect(rows[0]).toEqual({ kind: 'diagnostic', id: branch.id, name: 'broken-branch', parentId: parent.id, depth: 1, reason }) expect(rows[1]).toMatchObject({ kind: 'child', id: sibling.id }) expect(rows.some(row => row.id === hidden.id)).toBe(false) }) diff --git a/packages/subagent/subagent/tests/names.spec.ts b/packages/subagent/subagent/tests/names.spec.ts index 54260d13f1..e14e73765c 100644 --- a/packages/subagent/subagent/tests/names.spec.ts +++ b/packages/subagent/subagent/tests/names.spec.ts @@ -1,13 +1,21 @@ import { describe, expect, it, onTestFinished, vi } from 'vitest' import { Context } from '@deepseek-ai/cordis' -import { SessionId, SessionLogOffset, SessionSeq } from '@deepseek-ai/dsh-session' +import AgentLoop from '@deepseek-ai/dsh-agent-loop' +import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-testkit' +import { Session, SessionId } from '@deepseek-ai/dsh-session' import SessionProjectionRegistry from '@deepseek-ai/dsh-session-projection' +import * as SubagentSpawn from '@deepseek-ai/dsh-subagent-spawn-in-process' +import { MockAdapter, textResponse } from '../../../core/agent-loop/tests/mock-adapter.ts' import SubagentRuntime from '../src/index.ts' -import { SubagentNames, subagentNamesProjectionDefinition } from '../src/names.ts' +import { SubagentNames } from '../src/names.ts' +import { establishCatalogChild, establishExternalCatalogChild } from '../src/catalog.ts' +import { snapshotSubagentDescriptor } from '../src/descriptor.ts' import { externalTestParent } from './external-activation-helpers.ts' import { mountWorkingDirectoryFixture } from './working-directory-fixture.ts' import { TestSessionQuery } from './test-session-query.ts' +const signal = new AbortController().signal + async function setup() { const ctx = new Context() const parent = await externalTestParent(ctx) @@ -24,39 +32,45 @@ describe('tree-wide agent names', () => { const other = await externalTestParent(ctx) expect(names.nameOf(parent)).toBe('lead') expect(await names.resolve(other, 'lead')).toBe(other.id) - using first = names.reserve(parent, 'reviewer') - first.commit(SessionId('first')) - using second = names.reserve(other, 'reviewer') - second.commit(SessionId('second')) - expect(await names.resolve(parent, 'reviewer')).toBe('first') - expect(await names.resolve(other, 'reviewer')).toBe('second') + for (const root of [parent, other]) { + using reservation = await names.reserve(root, 'reviewer', signal) + reservation.commit(SessionId('child'), () => { establishExternalCatalogChild(root.session, SessionId('child'), 'Review', 'reviewer') }) + expect(await names.resolve(root, 'reviewer')).toBe('child') + } }) it.each(['lead', 'unowned', '', 'Reviewer', 'has space', '1worker', 'legacy:old'])( - 'rejects invalid or reserved creation name %j before writing a fact', async (name) => { + 'rejects invalid name %j without writing a creation record', async (name) => { const { parent, names } = await setup() const seq = parent.session.seq - expect(() => names.reserve(parent, name)).toThrow(expect.objectContaining({ code: 'INVALID_AGENT_NAME' })) + await expect(names.reserve(parent, name, signal)).rejects.toMatchObject({ code: 'INVALID_AGENT_NAME' }) expect(parent.session.seq).toBe(seq) }, ) - it('rejects duplicates across nested parents and retains assignments after release', async () => { + it('rebuilds nested assignments from catalogs and reads the child name from its descriptor', async () => { const { ctx, parent, names } = await setup() const session = ctx.sessions.create(SessionId('nested'), { meta: { origin: 'subagent', parentSession: parent.id } }) const nested = { ...parent, id: session.id, session } onTestFinished(ctx.agents.enter(nested, undefined)) + const descriptor = snapshotSubagentDescriptor({ mode: 'continuable', provider: 'spawn', label: 'Review', name: 'reviewer' }) + session.append('subagent/descriptor', descriptor) { - using reservation = names.reserve(parent, 'reviewer') - expect(() => names.reserve(nested, 'reviewer')).toThrow(expect.objectContaining({ code: 'DUPLICATE_AGENT_NAME' })) - reservation.commit(session.id) + using reservation = await names.reserve(parent, 'reviewer', signal, session.id) + await expect(names.resolve(parent, 'reviewer')).rejects.toMatchObject({ code: 'AGENT_NAME_NOT_FOUND' }) + await expect(names.reserve(nested, 'reviewer', signal)).rejects.toMatchObject({ code: 'DUPLICATE_AGENT_NAME' }) + reservation.commit(session.id, () => { establishCatalogChild(parent.session, session.header, descriptor) }) + } + { + using reservation = await names.reserve(nested, 'writer', signal) + reservation.commit(SessionId('external'), () => { establishExternalCatalogChild(session, SessionId('external'), 'Write', 'writer') }) } expect(names.nameOf(nested)).toBe('reviewer') - expect(() => names.reserve(nested, 'reviewer')).toThrow(expect.objectContaining({ code: 'DUPLICATE_AGENT_NAME' })) - expect(await names.resolve(nested, 'lead')).toBe(parent.id) - const restoredManager = new SubagentNames(ctx) - expect(await restoredManager.resolve(parent, 'reviewer')).toBe(session.id) - expect(() => restoredManager.reserve(parent, 'reviewer')).toThrow(expect.objectContaining({ code: 'DUPLICATE_AGENT_NAME' })) + const restored = new SubagentNames(ctx) + expect(await restored.resolve(nested, 'writer')).toBe('external') + expect(await restored.resolve(parent, 'reviewer')).toBe(session.id) + await expect(restored.reserve(parent, 'writer', signal)).rejects.toMatchObject({ code: 'DUPLICATE_AGENT_NAME' }) + await expect(restored.reserve(parent, 'another', signal, session.id)).rejects.toMatchObject({ code: 'DUPLICATE_CHILD' }) }) it('releases failed startup reservations and refuses a concurrent duplicate before provider dispatch', async () => { @@ -70,13 +84,11 @@ describe('tree-wide agent names', () => { }) ctx.subagents.registerProvider({ name: 'external', inheritsParentContext: false, - capabilities: { agentOptions: false, agentPreset: false, outputSchema: false, depthLimit: false }, - start, + capabilities: { agentOptions: false, agentPreset: false, outputSchema: false, depthLimit: false }, start, }) const spec = { name: 'reviewer', provider: 'external', label: 'review', delivery: 'caller' as const, - request: { parent, prompt: [{ type: 'text' as const, text: 'Review' }] }, - signal: new AbortController().signal, + request: { parent, prompt: [{ type: 'text' as const, text: 'Review' }] }, signal, } const first = ctx.subagents.startActivation(spec) const rejected = expect(first).rejects.toThrow('provider failed') @@ -90,69 +102,141 @@ describe('tree-wide agent names', () => { } await expect(ctx.subagents.startActivation(spec)).rejects.toThrow('provider failed') expect(start).toHaveBeenCalledTimes(2) - expect(parent.session.snapshotEvents().filter(event => event.type === 'subagent/named')).toEqual([]) + expect(parent.session.snapshotEvents().filter(event => event.type === 'subagent/catalog')).toEqual([]) }) - it('resolves historical addresses only for unnamed descendants in the same tree', async () => { + it('rejects reuse of a disposed ephemeral local identity before publishing another child', async () => { + const ctx = new Context() + onTestFinished(() => ctx.fiber.dispose()) + await mountAgentLoopTestDependencies(ctx) + await ctx.plugin(AgentLoop, { agents: [] }) + await mountWorkingDirectoryFixture(ctx) + await ctx.plugin(SubagentRuntime) + await ctx.plugin(SubagentSpawn, { providerName: 'spawn' }) + ctx.llm.registerAdapter(['mock'], new MockAdapter([textResponse('done')])) + const parent = await ctx.agentLoop.create(SessionId('root'), { provider: 'mock', model: 'mock' }) + const start = (name: string) => ctx.subagents.startActivation({ + name, childId: SessionId('ephemeral-child'), provider: 'spawn', label: 'Check', delivery: 'caller', signal, + request: { parent, prompt: [{ type: 'text', text: 'Reply' }] }, + }) + const first = await start('first') + await first.result + expect(ctx.agents.get(first.childId)).toBeUndefined() + expect(ctx.sessions.get(first.childId)).toBeUndefined() + const before = parent.session.snapshotEvents() + await expect(start('second')).rejects.toMatchObject({ code: 'DUPLICATE_CHILD' }) + expect(parent.session.snapshotEvents()).toEqual(before) + expect(await ctx.subagents.resolveName(parent, 'first')).toBe(first.childId) + }) + + it('resolves only cataloged legacy addresses and rejects cancellation', async () => { const { ctx, parent, names } = await setup() const child = ctx.sessions.create(SessionId('old-child'), { meta: { origin: 'subagent', parentSession: parent.id } }) - parent.session.append('subagent/catalog', { - version: 0, childId: child.id, childCreatedAt: 0, mode: 'continuable', label: 'Old child', - }) - expect(names.nameOf(parent, child.id)).toBe('legacy:old-child') + parent.session.append('subagent/catalog', { version: 0, childId: child.id, childCreatedAt: 0, mode: 'continuable', label: 'Old child' }) expect(await names.resolve(parent, 'legacy:old-child')).toBe(child.id) await expect(names.resolve(parent, 'legacy:missing')).rejects.toMatchObject({ code: 'AGENT_NAME_NOT_FOUND' }) await expect(names.resolve(parent, 'missing')).rejects.toMatchObject({ code: 'AGENT_NAME_NOT_FOUND' }) - using reservation = names.reserve(parent, 'reviewer') - reservation.commit(child.id) - await expect(names.resolve(parent, 'legacy:old-child')).rejects.toMatchObject({ code: 'AGENT_NAME_NOT_FOUND' }) - const aborted = AbortSignal.abort(new Error('cancel lookup')) - await expect(names.resolve(parent, 'lead', aborted)).rejects.toThrow('cancel lookup') + await expect(names.resolve(parent, 'lead', AbortSignal.abort(new Error('cancel lookup')))).rejects.toThrow('cancel lookup') + const agent = { ...parent, id: child.id, session: child } + onTestFinished(ctx.agents.enter(agent, undefined)) + expect(names.nameOf(agent)).toBe('legacy:old-child') }) - it('rejects stale callers and a detached child instead of treating it as a new root', async () => { + it('does not initialize a partial index when a historical branch cannot be read', async () => { const { ctx, parent, names } = await setup() - expect(() => names.nameOf({ ...parent })).toThrow(expect.objectContaining({ code: 'UNAUTHORIZED' })) - const session = ctx.sessions.create(SessionId('orphan'), { - meta: { origin: 'subagent', parentSession: SessionId('missing') }, - }) - const child = { ...parent, id: session.id, session } - onTestFinished(ctx.agents.enter(child, undefined)) - expect(() => names.nameOf(child)).toThrow(expect.objectContaining({ code: 'AGENT_TREE_UNAVAILABLE' })) + parent.session.append('subagent/catalog', { version: 0, childId: SessionId('missing'), childCreatedAt: 0, mode: 'continuable', label: 'Missing', name: 'reviewer' }) + await expect(names.reserve(parent, 'writer', signal)).rejects.toThrow() + const restored = ctx.sessions.create(SessionId('missing'), { meta: { origin: 'subagent', parentSession: parent.id } }) + establishExternalCatalogChild(restored, SessionId('writer-child'), 'Write', 'writer') + await expect(names.reserve(parent, 'writer', signal)).rejects.toMatchObject({ code: 'DUPLICATE_AGENT_NAME' }) + expect(await names.resolve(parent, 'writer')).toBe('writer-child') }) - it('refuses publication after ancestor replacement and missing naming state', async () => { + it.each(['name', 'identity'])('rejects duplicate cataloged %s when rebuilding', async (duplicate) => { + const { parent, names } = await setup() + establishExternalCatalogChild(parent.session, SessionId('first'), 'Review', 'reviewer') + establishExternalCatalogChild(parent.session, SessionId(duplicate === 'identity' ? 'first' : 'second'), 'Write', duplicate === 'name' ? 'reviewer' : 'writer') + await expect(names.reserve(parent, 'another', signal)).rejects.toMatchObject({ code: 'CORRUPT_AGENT_NAMES' }) + }) + + it('refuses publication after ancestor replacement and releases the uncommitted name', async () => { const { ctx, parent, names } = await setup() + { + using reservation = await names.reserve(parent, 'reviewer', signal) + const get = ctx.agents.get.bind(ctx.agents) + const lookup = vi.spyOn(ctx.agents, 'get').mockImplementation(id => id === parent.id ? { ...parent } : get(id)) + const publish = vi.fn() + expect(() => { reservation.commit(SessionId('child'), publish) }).toThrow(expect.objectContaining({ code: 'UNAUTHORIZED' })) + expect(publish).not.toHaveBeenCalled() + lookup.mockRestore() + } + using retry = await names.reserve(parent, 'reviewer', signal) + expect(() => { retry.commit(SessionId('child'), () => { throw new Error('append failed') }) }).toThrow('append failed') + }) + + it.each(['reserve', 'publish'] as const)('rejects an ancestry change during %s', async (phase) => { + const { ctx, parent, names } = await setup() + const otherRoot = await externalTestParent(ctx) const session = ctx.sessions.create(SessionId('nested'), { meta: { origin: 'subagent', parentSession: parent.id } }) const child = { ...parent, id: session.id, session } onTestFinished(ctx.agents.enter(child, undefined)) - using reservation = names.reserve(child, 'reviewer') + const pending = names.reserve(child, 'reviewer', signal) + const reservation = phase === 'publish' ? await pending : undefined + const replacement = { ...parent, session: Session.create(parent.id, undefined, { + ...parent.session.header, origin: 'subagent', parentSession: otherRoot.id, + }) } const get = ctx.agents.get.bind(ctx.agents) - const replacement = { ...parent } const lookup = vi.spyOn(ctx.agents, 'get').mockImplementation(id => id === parent.id ? replacement : get(id)) - expect(() => { reservation.commit(SessionId('new-child')) }).toThrow(expect.objectContaining({ code: 'AGENT_TREE_UNAVAILABLE' })) - lookup.mockRestore() - const state = vi.spyOn(ctx.sessionProjections, 'stateOf').mockReturnValue(undefined) - expect(() => names.reserve(parent, 'other')).toThrow(expect.objectContaining({ code: 'CONTINUATION_UNAVAILABLE' })) - state.mockRestore() - const orphan = ctx.sessions.create(SessionId('no-parent'), { meta: { origin: 'subagent' } }) - const detached = { ...parent, id: orphan.id, session: orphan } - onTestFinished(ctx.agents.enter(detached, undefined)) - expect(() => names.nameOf(detached)).toThrow(expect.objectContaining({ code: 'AGENT_TREE_UNAVAILABLE' })) - }) - - it('ignores fork-inherited names and refuses duplicate durable names or identities', async () => { - const { parent } = await setup() - const event = { type: 'subagent/named' as const, seq: SessionSeq(0), time: 0, data: { name: 'reviewer', id: SessionId('child') } } - const inherited = subagentNamesProjectionDefinition.init(parent.session.header, SessionLogOffset(1)) - expect(subagentNamesProjectionDefinition.apply(inherited, event)).toBe(inherited) - const empty = subagentNamesProjectionDefinition.init(parent.session.header, SessionLogOffset(0)) - const state = subagentNamesProjectionDefinition.apply(empty, event) - expect(subagentNamesProjectionDefinition.stateSchema.parse(JSON.parse(JSON.stringify(state)))).toEqual(state) - for (const data of [{ name: 'reviewer', id: SessionId('other') }, { name: 'writer', id: SessionId('child') }]) { - expect(subagentNamesProjectionDefinition.stateSchema.safeParse({ ...state, entries: [...state.entries, data] }).success).toBe(false) - expect(() => subagentNamesProjectionDefinition.apply(state, { ...event, data, seq: SessionSeq(1) })) - .toThrow(expect.objectContaining({ code: 'CORRUPT_AGENT_NAMES' })) + try { + if (reservation === undefined) { + await expect(pending).rejects.toMatchObject({ code: 'AGENT_TREE_UNAVAILABLE' }) + } else { + const publish = vi.fn() + expect(() => { reservation.commit(SessionId('child'), publish) }) + .toThrow(expect.objectContaining({ code: 'AGENT_TREE_UNAVAILABLE' })) + expect(publish).not.toHaveBeenCalled() + } + } finally { + reservation?.[Symbol.dispose]() + lookup.mockRestore() } }) + + it('accepts repeated identical catalog facts and isolates fork-inherited assignments', async () => { + const { ctx, parent, names } = await setup() + establishExternalCatalogChild(parent.session, SessionId('old'), 'Review', 'reviewer') + establishExternalCatalogChild(parent.session, SessionId('old'), 'Review', 'reviewer') + expect(await names.resolve(parent, 'reviewer')).toBe('old') + const fork = ctx.sessions.fork(parent.session, undefined, SessionId('fork')) + const agent = { ...parent, id: fork.id, session: fork } + onTestFinished(ctx.agents.enter(agent, undefined)) + expect(names.nameOf(agent)).toBe('lead') + using reservation = await names.reserve(agent, 'reviewer', signal) + reservation.commit(SessionId('new'), () => { establishExternalCatalogChild(fork, SessionId('new'), 'Review', 'reviewer') }) + expect(await names.resolve(agent, 'reviewer')).toBe('new') + }) + + it('rejects a subagent header without a parent', async () => { + const { ctx, parent, names } = await setup() + const session = ctx.sessions.create(SessionId('orphan'), { meta: { origin: 'subagent' } }) + const child = { ...parent, id: session.id, session } + onTestFinished(ctx.agents.enter(child, undefined)) + await expect(names.reserve(child, 'writer', signal)).rejects.toMatchObject({ code: 'AGENT_TREE_UNAVAILABLE' }) + }) + + it('rejects stale callers, detached children, and a missing identity projection', async () => { + const { ctx, parent, names } = await setup() + expect(() => names.nameOf({ ...parent })).toThrow(expect.objectContaining({ code: 'UNAUTHORIZED' })) + const session = ctx.sessions.create(SessionId('orphan'), { meta: { origin: 'subagent', parentSession: SessionId('missing') } }) + const child = { ...parent, id: session.id, session } + onTestFinished(ctx.agents.enter(child, undefined)) + expect(names.nameOf(child)).toBe('legacy:orphan') + await expect(names.reserve(child, 'writer', signal)).rejects.toMatchObject({ code: 'AGENT_TREE_UNAVAILABLE' }) + const nestedSession = ctx.sessions.create(SessionId('nested'), { meta: { origin: 'subagent', parentSession: parent.id } }) + const nested = { ...parent, id: nestedSession.id, session: nestedSession } + onTestFinished(ctx.agents.enter(nested, undefined)) + const state = vi.spyOn(ctx.sessionProjections, 'stateOf').mockReturnValue(undefined) + expect(() => names.nameOf(nested)).toThrow(expect.objectContaining({ code: 'CONTINUATION_UNAVAILABLE' })) + state.mockRestore() + }) }) diff --git a/packages/subagent/subagent/tests/service.spec.ts b/packages/subagent/subagent/tests/service.spec.ts index d0778ea4c5..afd2632c26 100644 --- a/packages/subagent/subagent/tests/service.spec.ts +++ b/packages/subagent/subagent/tests/service.spec.ts @@ -308,16 +308,23 @@ describe('SubagentRuntime', () => { expect(runIds[0]).toBe(runIds[1]) }) - it('mints distinct lifecycle identities when provider and child ids repeat', async () => { + it('mints distinct lifecycle identities when provider and child ids repeat across roots', async () => { const { ctx, subagents } = await service() - subagents.registerProvider(new StubProvider('reused')) + subagents.registerProvider({ + name: 'reused', capabilities: NO_CAPS, inheritsParentContext: false, + start: async () => ({ + id: SessionId('reused-child'), + result: Promise.resolve({ output: [], stopReason: 'completed' }), + async dispose() {}, + }), + }) const runIds: string[] = [] ctx.on('subagent/start', info => void runIds.push(info.runId)) const first = await start(subagents, 'reused', baseRequest()) await first.result await first.dispose() - const second = await start(subagents, 'reused', baseRequest()) + const second = await start(subagents, 'reused', baseRequest({ parent: fakeParent('parent-2') })) await Promise.all([first.result, second.result]) expect(runIds).toHaveLength(2) @@ -465,8 +472,8 @@ describe('subagent descriptors', () => { provider: 'spawn', } expect(foldSubagentDescriptor([event(minimal)])).toEqual(minimal) - expect(foldSubagentDescriptor([event({ ...minimal, label: 'child work' })])) - .toEqual({ ...minimal, label: 'child work' }) + expect(foldSubagentDescriptor([event({ ...minimal, label: 'child work', name: 'worker' })])) + .toEqual({ ...minimal, label: 'child work', name: 'worker' }) expect(snapshotSubagentDescriptor({ mode: 'continuable', provider: 'spawn', label: 'child', })).toEqual({ version: SUBAGENT_DESCRIPTOR_VERSION, mode: 'continuable', provider: 'spawn', label: 'child' }) @@ -522,6 +529,7 @@ describe('subagent descriptors', () => { }) it.each([ + ['invalid name', { version: SUBAGENT_DESCRIPTOR_VERSION, mode: 'one-shot', provider: 'spawn', name: 'lead' }, 'Invalid input'], ['string payload', 'invalid', 'payload must be an object'], ['null payload', null, 'payload must be an object'], ['array payload', [], 'payload must be an object'], diff --git a/packages/subagent/subagent/tests/timing-projection.spec.ts b/packages/subagent/subagent/tests/timing-projection.spec.ts index 40b21431ec..6a427da10d 100644 --- a/packages/subagent/subagent/tests/timing-projection.spec.ts +++ b/packages/subagent/subagent/tests/timing-projection.spec.ts @@ -29,13 +29,13 @@ function fold(events: SessionEvent[]) { } describe('subagent timing projection', () => { - it('preserves historical one-shot identity without inventing a label', () => { + it.each([undefined, 'historical child'])('preserves historical one-shot identity (label: %s)', (label) => { const descriptor = { ...event('subagent/descriptor', 1, 110), - data: { version: SUBAGENT_DESCRIPTOR_VERSION, mode: 'one-shot', provider: 'spawn' }, + data: { version: SUBAGENT_DESCRIPTOR_VERSION, mode: 'one-shot', provider: 'spawn', ...label === undefined ? {} : { label } }, } as SessionEvent const state = subagentIdentityProjectionDefinition.apply(subagentIdentityProjectionDefinition.init(), descriptor) - expect(subagentIdentityProjectionDefinition.wire.view(state)).toEqual({ mode: 'one-shot', seq: 1 }) + expect(subagentIdentityProjectionDefinition.wire.view(state)).toEqual({ mode: 'one-shot', seq: 1, ...label === undefined ? {} : { label } }) }) it('registers with the optional session projection registry', async () => { diff --git a/packages/subagent/tool-subagent-control/src/list-agents.ts b/packages/subagent/tool-subagent-control/src/list-agents.ts index 78d5bbf746..f6b4043af0 100644 --- a/packages/subagent/tool-subagent-control/src/list-agents.ts +++ b/packages/subagent/tool-subagent-control/src/list-agents.ts @@ -51,14 +51,14 @@ function project( ): ListAgentsEntry | undefined { const at = { parent: nameOf(entry.parentId), depth: entry.depth } if (entry.kind === 'diagnostic') { - return { kind: 'diagnostic', name: nameOf(entry.id), reason: entry.reason, ...at } + return { kind: 'diagnostic', name: entry.name ?? `legacy:${entry.id}`, reason: entry.reason, ...at } } // One-shot children cannot be continued by send_message, so the model // never selects them; discovery still traversed them for descendants. if (entry.mode !== 'continuable') return undefined return { kind: 'child', - name: nameOf(entry.id), + name: entry.name ?? `legacy:${entry.id}`, label: entry.label, status: statusOf(agents, entry.id), ...at, @@ -78,13 +78,13 @@ async function family(ctx: Context, caller: Agent, signal: AbortSignal): Promise ? ctx.agents.get(header.parentSession) : undefined if (parent === undefined) return [] - const rows: ListAgentsEntry[] = [{ kind: 'parent', name: ctx.subagents.nameOf(caller, parent.id), status: statusOf(ctx.agents, parent.id) }] + const rows: ListAgentsEntry[] = [{ kind: 'parent', name: ctx.subagents.nameOf(parent), status: statusOf(ctx.agents, parent.id) }] const children = await ctx.subagents.listChildren(parent.id, signal) const own = children.find(entry => entry.id === caller.id) if (own?.mode !== 'continuable') return [] for (const entry of children) { if (entry.id === caller.id || entry.mode !== 'continuable') continue - rows.push({ kind: 'sibling', name: ctx.subagents.nameOf(caller, entry.id), label: entry.label, status: statusOf(ctx.agents, entry.id) }) + rows.push({ kind: 'sibling', name: entry.name ?? `legacy:${entry.id}`, label: entry.label, status: statusOf(ctx.agents, entry.id) }) } return rows } @@ -168,10 +168,12 @@ export function apply(ctx: Context): void { } const adjacent = await family(ctx, parent, exec.signal) const entries = await ctx.subagents.listDescendants(parent.id, exec.signal) + const names = new Map(entries.map(entry => [entry.id, entry.name ?? `legacy:${entry.id}`])) + names.set(parent.id, ctx.subagents.nameOf(parent)) return [ ...adjacent, ...entries - .map(entry => project(ctx.agents, entry, id => ctx.subagents.nameOf(parent, id))) + .map(entry => project(ctx.agents, entry, id => names.get(id) as string)) .filter(entry => entry !== undefined), ] }, diff --git a/packages/subagent/tool-subagent-control/tests/list-agents.spec.ts b/packages/subagent/tool-subagent-control/tests/list-agents.spec.ts index 0efb83f921..b22847834e 100644 --- a/packages/subagent/tool-subagent-control/tests/list-agents.spec.ts +++ b/packages/subagent/tool-subagent-control/tests/list-agents.spec.ts @@ -178,6 +178,7 @@ describe('dsh-tool-subagent-control/list-agents', () => { }, { id: started.childId, + name: started.name, createdAt: 2, label: 'real child', mode: 'continuable', @@ -228,10 +229,6 @@ describe('dsh-tool-subagent-control/list-agents', () => { it('reports an unreadable historical branch alongside a settled continuable child', async () => { const { ctx, parent } = await setup([textResponse('done')]) - parent.session.append('subagent/catalog', { - version: 1, childId: SessionId('historical-one-shot'), childCreatedAt: 1, - mode: 'one-shot', label: 'finished once', - }) const started = await ctx.subagents.startActivation({ name: `child-${randomUUID()}`, delivery: 'parent', provider: 'spawn', label: 'summarize the doc', @@ -239,11 +236,15 @@ describe('dsh-tool-subagent-control/list-agents', () => { signal: testToolSignal, }) await waitNoActivation(ctx, started.childId) + parent.session.append('subagent/catalog', { + version: 1, childId: SessionId('historical-one-shot'), childCreatedAt: 1, + mode: 'one-shot', label: 'finished once', + }) const result = await callTool(ctx, 'list_agents', {}, parent) expect(result.isError).toBe(false) expect(text(result)).toBe( - 'legacy:historical-one-shot [diagnostic: unavailable] parent=lead depth=1\n' - + `${started.name} [inactive] parent=lead depth=1 — summarize the doc`, + `${started.name} [inactive] parent=lead depth=1 — summarize the doc\n` + + 'legacy:historical-one-shot [diagnostic: unavailable] parent=lead depth=1', ) }) @@ -381,7 +382,7 @@ describe('dsh-tool-subagent-control/list-agents', () => { { chunks: textResponse('delta'), gate: releaseDelta.promise }, ]) const { ctx, parent } = await setupWith(adapter) - const start = async (label: string) => (await ctx.subagents.startActivation({ name: `child-${randomUUID()}`, + const start = async (label: string) => (await ctx.subagents.startActivation({ name: label.split(' ')[0]!, delivery: 'caller', provider: 'spawn', label, request: { prompt: [{ type: 'text', text: label }], parent }, signal: testToolSignal, })).childId @@ -398,25 +399,31 @@ describe('dsh-tool-subagent-control/list-agents', () => { expect(fromAlpha.isError).toBe(false) expect(text(fromAlpha)).toBe([ 'lead [inactive] — your parent', - `${ctx.subagents.nameOf(parent, beta)} [inactive] — sibling: beta task`, - `${ctx.subagents.nameOf(parent, gamma)} [inactive] — sibling: gamma task`, - `${ctx.subagents.nameOf(parent, delta)} [running] — sibling: delta task`, + 'beta [inactive] — sibling: beta task', + 'gamma [inactive] — sibling: gamma task', + 'delta [running] — sibling: delta task', ].join('\n')) const fromDelta = await callTool(ctx, 'list_agents', {}, ctx.agents.get(delta)) expect(text(fromDelta)).toBe([ 'lead [inactive] — your parent', - `${ctx.subagents.nameOf(parent, alpha)} [running] — sibling: alpha task`, - `${ctx.subagents.nameOf(parent, beta)} [inactive] — sibling: beta task`, - `${ctx.subagents.nameOf(parent, gamma)} [inactive] — sibling: gamma task`, + 'alpha [running] — sibling: alpha task', + 'beta [inactive] — sibling: beta task', + 'gamma [inactive] — sibling: gamma task', ].join('\n')) const fromParent = await callTool(ctx, 'list_agents', {}, parent) expect(text(fromParent)).toBe([ - `${ctx.subagents.nameOf(parent, alpha)} [running] parent=lead depth=1 — alpha task`, - `${ctx.subagents.nameOf(parent, beta)} [inactive] parent=lead depth=1 — beta task`, - `${ctx.subagents.nameOf(parent, gamma)} [inactive] parent=lead depth=1 — gamma task`, - `${ctx.subagents.nameOf(parent, delta)} [running] parent=lead depth=1 — delta task`, + 'alpha [running] parent=lead depth=1 — alpha task', + 'beta [inactive] parent=lead depth=1 — beta task', + 'gamma [inactive] parent=lead depth=1 — gamma task', + 'delta [running] parent=lead depth=1 — delta task', ].join('\n')) + const entries = await ctx.subagents.listChildren(parent.id) + const legacy = vi.spyOn(ctx.subagents, 'listChildren').mockResolvedValue(entries.map(({ name: _name, ...entry }) => entry)) + expect(text(await callTool(ctx, 'list_agents', {}, ctx.agents.get(alpha)))) + .toContain(`legacy:${beta} [inactive] — sibling: beta task`) + legacy.mockRestore() + const catalog = vi.spyOn(ctx.subagents, 'listChildren').mockResolvedValue([]) expect(text(await callTool(ctx, 'list_agents', {}, ctx.agents.get(alpha)))).toBe('(no subagents)') catalog.mockRestore() diff --git a/packages/subagent/tool-subagent/tests/tool-subagent.spec.ts b/packages/subagent/tool-subagent/tests/tool-subagent.spec.ts index 4f2446a6fa..36931bd614 100644 --- a/packages/subagent/tool-subagent/tests/tool-subagent.spec.ts +++ b/packages/subagent/tool-subagent/tests/tool-subagent.spec.ts @@ -785,7 +785,7 @@ describe('dsh-tool-subagent local activation', () => { signal, callId: ToolCallId(callId), name: 'subagent_gated', - arguments: { name: `child-${randomUUID()}`, description, prompt: 'work' }, + arguments: { name: callId, description, prompt: 'work' }, agent: parent, }) const cancelledResult = execute('continuable-cancelled', 'cancelled sibling', cancelled.signal) @@ -805,7 +805,7 @@ describe('dsh-tool-subagent local activation', () => { expect(succeeded.isError ? undefined : succeeded.value).toEqual({ kind: 'activation', - name: ctx.subagents.nameOf(parent, survivingChildId), + name: 'continuable-surviving', }) await vi.waitFor(() => { expect(ctx.agents.get(survivingChildId!)).toBeUndefined() diff --git a/packages/test-support/session-snapshot/README.i18n.yaml b/packages/test-support/session-snapshot/README.i18n.yaml index 25d99fa433..0b536bfd3c 100644 --- a/packages/test-support/session-snapshot/README.i18n.yaml +++ b/packages/test-support/session-snapshot/README.i18n.yaml @@ -18,8 +18,8 @@ en: 594ad1f3e6f02054 zh: 7ca4f565976704be /deepseek-ai-dsh-session-snapshot/use-this-package/writing-a-snapshot-suite: - en: 79fb42dbf18674de - zh: cf61f69241da899d + en: a87a7c21770a70c9 + zh: 9eccb02644ccc088 /deepseek-ai-dsh-session-snapshot/use-this-package/record-replay-and-refresh: en: 2bea67c686715289 zh: aecc6ea7b4ae5623 diff --git a/packages/test-support/session-snapshot/README.md b/packages/test-support/session-snapshot/README.md index 3e0c4311d9..c99a071ad5 100644 --- a/packages/test-support/session-snapshot/README.md +++ b/packages/test-support/session-snapshot/README.md @@ -70,7 +70,7 @@ defineAcpSnapshotSuite({ Each recorded-session directory carries a closed `snapshot.yml` manifest plus canonical parent and contiguous child roles. Parent filenames are `session[.vN].jsonl`; children are `session.[.vN].jsonl`; v0 omits `.v0`, positive versions use lowercase `.vN`, and every filename agrees with its header. A role may retain older generations, but the harness selects the numerically highest one. An owning manifest may declare `sessionFormat.version` plus one or more closed `coverage` names to keep that historical generation as an explicit migration fixture. Without that declaration, record and refresh write the current generation; replay independently accepts the retained V3 baseline or the current generation for each parent/child role under the [corpus policy](../../../snapshots/AGENTS.md). An explicit `sessionFormat.version` requires every selected role to match that version. The manifest also names the scenario, shipped profile, composition/header class, recording source, and only the replay, platform, permission, environment, workspace, or input facts the completed Session cannot reconstruct. Storage guards check tool results and portable paths in every selected parent and child role. Prompt/schema scrubbing, message identity, and prompt-before-request ordering apply to current generations; retained predecessors keep their historical representation. The adapter registers expected-output, Session-log, and optional `workspace.expected/` comparisons; guards reject orphan directories, missing roles, noncanonical names, absolute paths, malformed manifests, and platform-specific separators. -`normalizeSessionSnapshot` retains the complete Session header and event payloads but omits top-level `seq`/`time` envelopes from committed fixtures after normalizing paths and scrubbing system-prompt text and tool schemas; it also normalizes embedded stream clocks and historical packed-row `seq0`/`time0` envelopes, and catalog child-creation clocks. In `subagent/named` events, names matching the generated `workflow--` format retain their ordinal while the embedded run identity receives a typed workflow token. Event order and source-event reference order are preserved. Record and refresh write top-level `sourceEventSeqs` as expanded arrays. Replay synthesizes the top-level envelopes in memory, while runtime persistence continues to write complete logs. Multi-session comparison validates expected and harvested logs through the strict build-static Session format catalog before identity redaction and normalization; source filenames cannot alter format validation. A retained historical replay input is not the native current-format writer-output oracle: structural migration preserves request meaning but can produce a different event layout. Normalization preserves unexpected request-header fields, including `system`, so regressions remain visible. Versionless protocol-adapter unit fixtures remain outside the released Session format corpus. Fixtures in the [current writer format](../../../docs/session-format-status.md) use one row per event; retained v0/v1 fixtures may use canonical packed rows. The [temporary repository migrator](../../../scripts/migrate-packed-session-fixtures.ts) (`pnpm run migrate:packed-session-fixtures`) rewrites older historical layouts, and its [removal proposal](../../../.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.md) owns its deletion. +`normalizeSessionSnapshot` retains the complete Session header and event payloads but omits top-level `seq`/`time` envelopes from committed fixtures after normalizing paths and scrubbing system-prompt text and tool schemas; it also normalizes embedded stream clocks and historical packed-row `seq0`/`time0` envelopes, and catalog child-creation clocks. In `subagent/catalog` / `subagent/descriptor` events, names matching the generated `workflow--` format retain their ordinal while the embedded run identity receives a typed workflow token. Event order and source-event reference order are preserved. Record and refresh write top-level `sourceEventSeqs` as expanded arrays. Replay synthesizes the top-level envelopes in memory, while runtime persistence continues to write complete logs. Multi-session comparison validates expected and harvested logs through the strict build-static Session format catalog before identity redaction and normalization; source filenames cannot alter format validation. A retained historical replay input is not the native current-format writer-output oracle: structural migration preserves request meaning but can produce a different event layout. Normalization preserves unexpected request-header fields, including `system`, so regressions remain visible. Versionless protocol-adapter unit fixtures remain outside the released Session format corpus. Fixtures in the [current writer format](../../../docs/session-format-status.md) use one row per event; retained v0/v1 fixtures may use canonical packed rows. The [temporary repository migrator](../../../scripts/migrate-packed-session-fixtures.ts) (`pnpm run migrate:packed-session-fixtures`) rewrites older historical layouts, and its [removal proposal](../../../.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.md) owns its deletion. Spill scenarios save through the real local provider under a private temporary root. Their fixture adapter exposes fixed-length logical locators and maps only this run’s saved locators back to real files for retrieval, preserving preview budgets without writing into a shared logical path. Known snapshot spill paths normalize to stable locator tokens, including paths quoted inside JSON omission notices with JSON-escaped Windows separators. Refresh extraction preserves the matched serialized path spelling for literal replacement. Normalization changes only the locator: saved byte lengths and omission counts remain comparison evidence. diff --git a/packages/test-support/session-snapshot/README.zh.md b/packages/test-support/session-snapshot/README.zh.md index 58638d31a2..5eb5a0aa5c 100644 --- a/packages/test-support/session-snapshot/README.zh.md +++ b/packages/test-support/session-snapshot/README.zh.md @@ -70,7 +70,7 @@ defineAcpSnapshotSuite({ 每个已记录 Session 目录携带封闭的 `snapshot.yml` manifest,以及规范 parent 与连续 child 角色。parent 文件名是 `session[.vN].jsonl`;child 是 `session.[.vN].jsonl`;v0 省略 `.v0`,正版本使用小写 `.vN`,且每个文件名与其 header 一致。一个角色可以保留旧 generation,但 harness 会选择数值最高的一项。拥有 fixture 的 manifest 可以声明 `sessionFormat.version` 与一个或多个封闭 `coverage` 名称,把该历史 generation 保留为显式迁移 fixture。未声明时,record 与 refresh 写入当前 generation;replay 按[语料策略](../../../snapshots/AGENTS.md)对每个 parent/child 角色独立接受保留的 V3 基线或当前 generation。显式声明 `sessionFormat.version` 时,每个选定角色都必须匹配该版本。manifest 还会指名场景、随附 profile、组合/header 类别、录制来源,以及已完成 Session 无法重建的 replay、平台、权限、环境、workspace 或输入事实。存储保护检查每个选定 parent 与 child 角色的工具结果和可移植路径。提示词/schema 擦除、消息身份及提示词先于请求的顺序检查适用于当前 generation;保留的前代维持其历史表示。适配器注册预期输出、Session 日志与可选 `workspace.expected/` 比较;保护会拒绝遗留目录、缺失角色、非规范名称、绝对路径、格式错误的 manifest 与平台专用分隔符。 -`normalizeSessionSnapshot` 在规范化路径并擦除系统提示文本与工具 schema 后,会保留完整 Session header 与事件 payload,但从已提交 fixture 中省略顶层 `seq`/`time` envelope;它还会规范化嵌入式 stream clock 与历史 packed-row 的 `seq0`/`time0` envelope 与 catalog child 创建时钟。在 `subagent/named` 事件中,符合自动生成格式 `workflow--` 的名称保留序号,其中的运行身份替换为带类型的 workflow token。事件顺序与来源事件引用的顺序保持不变。录制与刷新会将顶层 `sourceEventSeqs` 以展开数组的形式写入 fixture。Replay 只在内存中合成顶层 envelope,而运行时持久化仍写入完整日志。多 Session 比较会先通过严格的构建期静态 Session 格式目录校验预期日志与收集日志,再进行身份脱敏与规范化;来源文件名不能改变格式校验。保留的历史 replay 输入不是原生当前格式 writer 输出的比较基准:结构迁移保留请求含义,但可以产生不同的事件布局。归一化保留意外的 request-header 字段(包括 `system`),使回归保持可见。无版本的协议适配器单元测试 fixture 不属于已发布 Session 格式语料。[当前写入器格式](../../../docs/session-format-status.zh.md)的 fixture 每个事件占一行;保留的 v0/v1 fixture 可以使用规范 packed row。[临时仓库迁移器](../../../scripts/migrate-packed-session-fixtures.ts)(`pnpm run migrate:packed-session-fixtures`)会改写更旧的历史布局,由其[移除提案](../../../.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.zh.md)负责删除该迁移器。 +`normalizeSessionSnapshot` 在规范化路径并擦除系统提示文本与工具 schema 后,会保留完整 Session header 与事件 payload,但从已提交 fixture 中省略顶层 `seq`/`time` envelope;它还会规范化嵌入式 stream clock 与历史 packed-row 的 `seq0`/`time0` envelope 与 catalog child 创建时钟。在 `subagent/catalog` / `subagent/descriptor` 事件中,符合自动生成格式 `workflow--` 的名称保留序号,其中的运行身份替换为带类型的 workflow token。事件顺序与来源事件引用的顺序保持不变。录制与刷新会将顶层 `sourceEventSeqs` 以展开数组的形式写入 fixture。Replay 只在内存中合成顶层 envelope,而运行时持久化仍写入完整日志。多 Session 比较会先通过严格的构建期静态 Session 格式目录校验预期日志与收集日志,再进行身份脱敏与规范化;来源文件名不能改变格式校验。保留的历史 replay 输入不是原生当前格式 writer 输出的比较基准:结构迁移保留请求含义,但可以产生不同的事件布局。归一化保留意外的 request-header 字段(包括 `system`),使回归保持可见。无版本的协议适配器单元测试 fixture 不属于已发布 Session 格式语料。[当前写入器格式](../../../docs/session-format-status.zh.md)的 fixture 每个事件占一行;保留的 v0/v1 fixture 可以使用规范 packed row。[临时仓库迁移器](../../../scripts/migrate-packed-session-fixtures.ts)(`pnpm run migrate:packed-session-fixtures`)会改写更旧的历史布局,由其[移除提案](../../../.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.zh.md)负责删除该迁移器。 spill 场景通过真实本地提供方保存到私有临时根目录。fixture 适配器提供固定长度的逻辑定位符,并仅将本次运行已保存的定位符映射回实际文件以供检索,在不写入共享逻辑路径的情况下保留预览预算。已知的快照 spill 路径会规范化为稳定的定位符 token,包括 JSON 省略通知中带引号、使用 JSON 转义 Windows 分隔符的路径。刷新提取会保留匹配路径的序列化写法,以便进行字面替换。规范化只改变定位符:保存字节数与省略计数仍作为比较证据。 diff --git a/packages/test-support/session-snapshot/src/identity.ts b/packages/test-support/session-snapshot/src/identity.ts index d3a1dc0661..51d9218a4f 100644 --- a/packages/test-support/session-snapshot/src/identity.ts +++ b/packages/test-support/session-snapshot/src/identity.ts @@ -110,7 +110,7 @@ export function redactSessionSnapshotIds(logs: readonly string[]): string[] { claim(record.data.item.version, 'id') } // Workflow-owned children embed their run identity even when the caller does not log workflow progress. - if (record.type === 'subagent/named' && isRecord(record.data) && typeof record.data.name === 'string') { + if ((record.type === 'subagent/catalog' || record.type === 'subagent/descriptor') && isRecord(record.data) && typeof record.data.name === 'string') { const workflow = WORKFLOW_AGENT_NAME_RE.exec(record.data.name) if (workflow !== null) claim(workflow[1], 'workflow') } diff --git a/packages/test-support/session-snapshot/tests/identity.spec.ts b/packages/test-support/session-snapshot/tests/identity.spec.ts index 9cc828a8ab..677d467084 100644 --- a/packages/test-support/session-snapshot/tests/identity.spec.ts +++ b/packages/test-support/session-snapshot/tests/identity.spec.ts @@ -13,13 +13,13 @@ describe('session snapshot identity redaction', () => { it('preserves workflow child ordinals and explicit names while redacting generated run identities', () => { const source = [ { type: 'session', id: parentId }, - { type: 'subagent/named', data: { id: childId, name: `workflow-${runId}-1` } }, - { type: 'subagent/named', data: { id: otherId, name: `workflow-${runId}-2` } }, - { type: 'subagent/named', data: { name: 'researcher' } }, - { type: 'subagent/named', data: { name: `researcher-${proseUuid}` } }, + { type: 'subagent/catalog', data: { id: childId, name: `workflow-${runId}-1` } }, + { type: 'subagent/descriptor', data: { name: `workflow-${runId}-2` } }, + { type: 'subagent/catalog', data: { name: 'researcher' } }, + { type: 'subagent/catalog', data: { name: `researcher-${proseUuid}` } }, { type: 'example', data: { name: `workflow-${proseUuid}-1` } }, - { type: 'subagent/named', data: {} }, - { type: 'subagent/named' }, + { type: 'subagent/catalog', data: {} }, + { type: 'subagent/catalog' }, ].map(record => JSON.stringify(record)).join('\n') const [output] = redactSessionSnapshotIds([source]) expect(output).toContain('"name":"workflow-{{workflow:1}}-1"') diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/result.json b/scripts/snapshots/python-sdk-single-exe/advanced/result.json index 9ebac48d0e..ca2ee5706f 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/result.json +++ b/scripts/snapshots/python-sdk-single-exe/advanced/result.json @@ -894,21 +894,13 @@ "childId": "{{child-1}}", "childCreatedAt": 0, "mode": "continuable", - "label": "Check direct child" - } - }, - { - "type": "subagent/named", - "seq": 38, - "time": 0, - "data": { - "name": "direct-child", - "id": "{{child-1}}" + "label": "Check direct child", + "name": "direct-child" } }, { "type": "tool/result", - "seq": 39, + "seq": 38, "time": 0, "data": { "turn": 1, @@ -937,7 +929,7 @@ }, { "type": "step/end", - "seq": 40, + "seq": 39, "time": 0, "data": { "turn": 1, @@ -946,7 +938,7 @@ }, { "type": "step/start", - "seq": 41, + "seq": 40, "time": 0, "data": { "turn": 1, @@ -955,17 +947,17 @@ }, { "type": "session-log-deepseek/delivery-accepted", - "seq": 42, + "seq": 41, "time": 0, "data": { "sessionId": "{{parent}}", "sessionFormatVersion": 4, - "throughSeq": 41 + "throughSeq": 40 } }, { "type": "agent/inbox/spliced", - "seq": 43, + "seq": 42, "time": 0, "data": { "target": "next-step", @@ -1000,7 +992,7 @@ }, { "type": "assistant/message", - "seq": 44, + "seq": 43, "time": 0, "data": { "turn": 1, @@ -1124,7 +1116,7 @@ }, { "type": "tool/call", - "seq": 45, + "seq": 44, "time": 0, "data": { "turn": 1, @@ -1136,7 +1128,7 @@ }, { "type": "tool-workflow/run-start", - "seq": 46, + "seq": 45, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -1145,28 +1137,20 @@ }, { "type": "subagent/catalog", - "seq": 47, + "seq": 46, "time": 0, "data": { "version": 0, "childId": "{{child-2}}", "childCreatedAt": 0, "mode": "continuable", - "label": "advanced-exe-snapshot child 1" - } - }, - { - "type": "subagent/named", - "seq": 48, - "time": 0, - "data": { - "name": "workflow-{{workflow-run}}-1", - "id": "{{child-2}}" + "label": "advanced-exe-snapshot child 1", + "name": "workflow-{{workflow-run}}-1" } }, { "type": "tool-workflow/agent-start", - "seq": 49, + "seq": 47, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -1178,7 +1162,7 @@ }, { "type": "tool-workflow/agent-end", - "seq": 50, + "seq": 48, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -1188,7 +1172,7 @@ }, { "type": "tool-workflow/run-end", - "seq": 51, + "seq": 49, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -1197,7 +1181,7 @@ }, { "type": "tool/result", - "seq": 52, + "seq": 50, "time": 0, "data": { "turn": 1, @@ -1220,13 +1204,13 @@ } }, "sourceEventSeqs": [ - 45 + 44 ], "surfaceOp": "append" }, { "type": "step/end", - "seq": 53, + "seq": 51, "time": 0, "data": { "turn": 1, @@ -1235,7 +1219,7 @@ }, { "type": "agent/inbox/spliced", - "seq": 54, + "seq": 52, "time": 0, "data": { "target": "next-step", @@ -1246,7 +1230,7 @@ }, { "type": "step/start", - "seq": 55, + "seq": 53, "time": 0, "data": { "turn": 1, @@ -1255,7 +1239,7 @@ }, { "type": "user/message", - "seq": 56, + "seq": 54, "time": 0, "data": { "content": [ @@ -1285,17 +1269,17 @@ }, { "type": "session-log-deepseek/delivery-accepted", - "seq": 57, + "seq": 55, "time": 0, "data": { "sessionId": "{{parent}}", "sessionFormatVersion": 4, - "throughSeq": 56 + "throughSeq": 54 } }, { "type": "assistant/message", - "seq": 58, + "seq": 56, "time": 0, "data": { "turn": 1, @@ -1403,7 +1387,7 @@ }, { "type": "step/end", - "seq": 59, + "seq": 57, "time": 0, "data": { "turn": 1, @@ -1412,7 +1396,7 @@ }, { "type": "command/run", - "seq": 60, + "seq": 58, "time": 0, "data": { "commandId": "{{command:1}}", @@ -1424,7 +1408,7 @@ }, { "type": "feedback/record", - "seq": 61, + "seq": 59, "time": 0, "data": { "text": "The session needs a clearer explanation." @@ -1432,7 +1416,7 @@ }, { "type": "command/done", - "seq": 62, + "seq": 60, "time": 0, "data": { "commandId": "{{command:1}}", @@ -1442,7 +1426,7 @@ }, { "type": "feedback/record", - "seq": 63, + "seq": 61, "time": 0, "data": { "category": "other" @@ -1450,7 +1434,7 @@ }, { "type": "feedback/message-put", - "seq": 64, + "seq": 62, "time": 0, "data": { "sessionId": "{{parent}}", @@ -1467,7 +1451,7 @@ }, { "type": "feedback/message-put", - "seq": 65, + "seq": 63, "time": 0, "data": { "sessionId": "{{parent}}", @@ -1483,7 +1467,7 @@ }, { "type": "feedback/message-delete", - "seq": 66, + "seq": 64, "time": 0, "data": { "sessionId": "{{parent}}", @@ -1492,7 +1476,7 @@ }, { "type": "turn/end", - "seq": 67, + "seq": 65, "time": 0, "data": { "turn": 1, @@ -2726,22 +2710,8 @@ "childId": "{{child-1}}", "childCreatedAt": 0, "mode": "continuable", - "label": "Check direct child" - } - } - } - }, - { - "method": "session.event", - "payload": { - "sessionId": "{{parent}}", - "event": { - "type": "subagent/named", - "seq": 38, - "time": 0, - "data": { - "name": "direct-child", - "id": "{{child-1}}" + "label": "Check direct child", + "name": "direct-child" } } } @@ -2752,7 +2722,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool/result", - "seq": 39, + "seq": 38, "time": 0, "data": { "turn": 1, @@ -2787,7 +2757,7 @@ "sessionId": "{{parent}}", "event": { "type": "step/end", - "seq": 40, + "seq": 39, "time": 0, "data": { "turn": 1, @@ -2802,7 +2772,7 @@ "sessionId": "{{parent}}", "event": { "type": "step/start", - "seq": 41, + "seq": 40, "time": 0, "data": { "turn": 1, @@ -2817,12 +2787,12 @@ "sessionId": "{{parent}}", "event": { "type": "session-log-deepseek/delivery-accepted", - "seq": 42, + "seq": 41, "time": 0, "data": { "sessionId": "{{parent}}", "sessionFormatVersion": 4, - "throughSeq": 41 + "throughSeq": 40 } } } @@ -3216,7 +3186,7 @@ "sessionId": "{{parent}}", "event": { "type": "agent/inbox/spliced", - "seq": 43, + "seq": 42, "time": 0, "data": { "target": "next-step", @@ -3274,7 +3244,7 @@ "sessionId": "{{parent}}", "event": { "type": "assistant/message", - "seq": 44, + "seq": 43, "time": 0, "data": { "turn": 1, @@ -3404,7 +3374,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool/call", - "seq": 45, + "seq": 44, "time": 0, "data": { "turn": 1, @@ -3422,7 +3392,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool-workflow/run-start", - "seq": 46, + "seq": 45, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -3559,29 +3529,15 @@ "sessionId": "{{parent}}", "event": { "type": "subagent/catalog", - "seq": 47, + "seq": 46, "time": 0, "data": { "version": 0, "childId": "{{child-2}}", "childCreatedAt": 0, "mode": "continuable", - "label": "advanced-exe-snapshot child 1" - } - } - } - }, - { - "method": "session.event", - "payload": { - "sessionId": "{{parent}}", - "event": { - "type": "subagent/named", - "seq": 48, - "time": 0, - "data": { - "name": "workflow-{{workflow-run}}-1", - "id": "{{child-2}}" + "label": "advanced-exe-snapshot child 1", + "name": "workflow-{{workflow-run}}-1" } } } @@ -3592,7 +3548,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool-workflow/agent-start", - "seq": 49, + "seq": 47, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -4010,7 +3966,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool-workflow/agent-end", - "seq": 50, + "seq": 48, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -4026,7 +3982,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool-workflow/run-end", - "seq": 51, + "seq": 49, "time": 0, "data": { "runId": "{{workflow-run}}", @@ -4041,7 +3997,7 @@ "sessionId": "{{parent}}", "event": { "type": "tool/result", - "seq": 52, + "seq": 50, "time": 0, "data": { "turn": 1, @@ -4064,7 +4020,7 @@ } }, "sourceEventSeqs": [ - 45 + 44 ], "surfaceOp": "append" } @@ -4076,7 +4032,7 @@ "sessionId": "{{parent}}", "event": { "type": "step/end", - "seq": 53, + "seq": 51, "time": 0, "data": { "turn": 1, @@ -4091,7 +4047,7 @@ "sessionId": "{{parent}}", "event": { "type": "agent/inbox/spliced", - "seq": 54, + "seq": 52, "time": 0, "data": { "target": "next-step", @@ -4108,7 +4064,7 @@ "sessionId": "{{parent}}", "event": { "type": "step/start", - "seq": 55, + "seq": 53, "time": 0, "data": { "turn": 1, @@ -4123,7 +4079,7 @@ "sessionId": "{{parent}}", "event": { "type": "user/message", - "seq": 56, + "seq": 54, "time": 0, "data": { "content": [ @@ -4159,12 +4115,12 @@ "sessionId": "{{parent}}", "event": { "type": "session-log-deepseek/delivery-accepted", - "seq": 57, + "seq": 55, "time": 0, "data": { "sessionId": "{{parent}}", "sessionFormatVersion": 4, - "throughSeq": 56 + "throughSeq": 54 } } } @@ -4175,7 +4131,7 @@ "sessionId": "{{parent}}", "event": { "type": "assistant/message", - "seq": 58, + "seq": 56, "time": 0, "data": { "turn": 1, @@ -4289,7 +4245,7 @@ "sessionId": "{{parent}}", "event": { "type": "step/end", - "seq": 59, + "seq": 57, "time": 0, "data": { "turn": 1, @@ -4304,7 +4260,7 @@ "sessionId": "{{parent}}", "event": { "type": "command/run", - "seq": 60, + "seq": 58, "time": 0, "data": { "commandId": "{{command:1}}", @@ -4322,7 +4278,7 @@ "sessionId": "{{parent}}", "event": { "type": "feedback/record", - "seq": 61, + "seq": 59, "time": 0, "data": { "text": "The session needs a clearer explanation." @@ -4336,7 +4292,7 @@ "sessionId": "{{parent}}", "event": { "type": "command/done", - "seq": 62, + "seq": 60, "time": 0, "data": { "commandId": "{{command:1}}", @@ -4352,7 +4308,7 @@ "sessionId": "{{parent}}", "event": { "type": "feedback/record", - "seq": 63, + "seq": 61, "time": 0, "data": { "category": "other" @@ -4366,7 +4322,7 @@ "sessionId": "{{parent}}", "event": { "type": "feedback/message-put", - "seq": 64, + "seq": 62, "time": 0, "data": { "sessionId": "{{parent}}", @@ -4389,7 +4345,7 @@ "sessionId": "{{parent}}", "event": { "type": "feedback/message-put", - "seq": 65, + "seq": 63, "time": 0, "data": { "sessionId": "{{parent}}", @@ -4411,7 +4367,7 @@ "sessionId": "{{parent}}", "event": { "type": "feedback/message-delete", - "seq": 66, + "seq": 64, "time": 0, "data": { "sessionId": "{{parent}}", @@ -4426,7 +4382,7 @@ "sessionId": "{{parent}}", "event": { "type": "turn/end", - "seq": 67, + "seq": 65, "time": 0, "data": { "turn": 1, diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v4.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v4.jsonl index 5fd62366cf..ec7aa19d7d 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v4.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{child-1}}","createdAt":0,"cwd":"{{cwd}}","parentSession":"{{parent}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Check direct child","agentProvider":"deepseek-official","agentModel":"smoke-model","agentReasoningEffort":"high"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"direct-child","label":"Check direct child","agentProvider":"deepseek-official","agentModel":"smoke-model","agentReasoningEffort":"high"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v4.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v4.jsonl index 9c7213f1fd..1ff5ac6d4e 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v4.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{child-2}}","createdAt":0,"cwd":"{{cwd}}","parentSession":"{{parent}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"advanced-exe-snapshot child 1","agentProvider":"deepseek-official","agentModel":"smoke-model","agentReasoningEffort":"high"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"workflow-{{workflow-run}}-1","label":"advanced-exe-snapshot child 1","agentProvider":"deepseek-official","agentModel":"smoke-model","agentReasoningEffort":"high"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.v4.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.v4.jsonl index 8fec165e5b..e0714b6d87 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/session.v4.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.v4.jsonl @@ -36,27 +36,25 @@ {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":33}} {"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"name\": \"direct-child\", \"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-direct-child","args":["{\"name\": \"direct-child\", \"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"name\": \"direct-child\", \"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"advanced-direct-child","name":"subagent","arguments":"{\"name\": \"direct-child\", \"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{child-1}}","childCreatedAt":0,"mode":"continuable","label":"Check direct child"}} -{"type":"subagent/named","data":{"name":"direct-child","id":"{{child-1}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{child-1}}","childCreatedAt":0,"mode":"continuable","label":"Check direct child","name":"direct-child"}} {"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-direct-child"},"toolCallId":"advanced-direct-child","content":[{"type":"text","text":"started subagent direct-child"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[36],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"step/start","data":{"turn":1,"step":4}} -{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":41}} +{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":40}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent direct-child finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent direct-child finished and will do no further work unless you send it more.","senderSessionId":"{{child-1}}"},"role":"user","id":"{{messageId}}"}]}} {"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-workflow","args":["{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}} {"type":"tool-workflow/run-start","data":{"runId":"{{workflow-run}}","name":"advanced-exe-snapshot"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{child-2}}","childCreatedAt":0,"mode":"continuable","label":"advanced-exe-snapshot child 1"}} -{"type":"subagent/named","data":{"name":"workflow-{{workflow-run}}-1","id":"{{child-2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{child-2}}","childCreatedAt":0,"mode":"continuable","label":"advanced-exe-snapshot child 1","name":"workflow-{{workflow-run}}-1"}} {"type":"tool-workflow/agent-start","data":{"runId":"{{workflow-run}}","seq":1,"label":"workflow-child","phase":"Delegate","childId":"{{child-2}}"}} {"type":"tool-workflow/agent-end","data":{"runId":"{{workflow-run}}","seq":1,"outcome":"completed"}} {"type":"tool-workflow/run-end","data":{"runId":"{{workflow-run}}","stopReason":"completed"}} -{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-exe-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[45],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-exe-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[44],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":5}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent direct-child finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent direct-child finished and will do no further work unless you send it more.","senderSessionId":"{{child-1}}"},"role":"user","id":"{{messageId}}"},"surfaceOp":"append"} -{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":56}} +{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":54}} {"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}},"id":"{{message:1}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["ADVANCED_EXECUTABLE_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":5}} {"type":"command/run","data":{"commandId":"{{command:1}}","name":"feedback","source":{"kind":"user"}}} diff --git a/scripts/type-equiv.manifest.json b/scripts/type-equiv.manifest.json index e4e54158aa..637c9d7bf5 100644 --- a/scripts/type-equiv.manifest.json +++ b/scripts/type-equiv.manifest.json @@ -2481,16 +2481,6 @@ "doc": "docs/subsystems/boot.md", "symbol": "PendingModule", "source": "packages/boot/hmr/src/index.ts" - }, - { - "doc": "docs/subsystems/subagent.md", - "symbol": "SubagentNameData", - "source": "packages/subagent/subagent/src/names.ts" - }, - { - "doc": "docs/subsystems/subagent.md", - "symbol": "SubagentNamesState", - "source": "packages/subagent/subagent/src/names.ts" } ] } diff --git a/snapshots/sdk/subagent-activation-limit/session.1.v4.jsonl b/snapshots/sdk/subagent-activation-limit/session.1.v4.jsonl index ed474fe039..d0beb0df6b 100644 --- a/snapshots/sdk/subagent-activation-limit/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-activation-limit/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789000001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-activation-limit/session.v4.jsonl b/snapshots/sdk/subagent-activation-limit/session.v4.jsonl index f0f2ca2640..7d5c5dd1bd 100644 --- a/snapshots/sdk/subagent-activation-limit/session.v4.jsonl +++ b/snapshots/sdk/subagent-activation-limit/session.v4.jsonl @@ -12,19 +12,18 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Start one background subagent that","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_first","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808225,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123808225,"index":0,"dt":[],"id":"call_first","name":"subagent","args":["{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123808225,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_first","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123808225,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808225,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_first","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137130,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135137130,"index":0,"dt":[],"id":"call_first","name":"subagent","args":["{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135137130,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_first","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135137130,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137130,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_first","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_first"},"toolCallId":"call_first","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_over_capacity","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808264,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123808264,"index":0,"dt":[],"id":"call_over_capacity","name":"subagent","args":["{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792123808264,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_over_capacity","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123808264,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808264,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_over_capacity","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137170,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135137170,"index":0,"dt":[],"id":"call_over_capacity","name":"subagent","args":["{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792135137170,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_over_capacity","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135137170,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137170,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"call_over_capacity","name":"subagent","arguments":"{\"description\":\"Reply CHILD_OK\",\"prompt\":\"Reply with exactly CHILD_OK.\",\"name\":\"worker-2\"}"}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_over_capacity"},"toolCallId":"call_over_capacity","content":[{"type":"text","text":"Error: subagent limit reached (active child limit: 1); wait for an existing child to finish or complete this work with the current agents"}],"isError":true,"id":"{{message:7}}"},"error":{"name":"SubagentError","code":"ACTIVATION_LIMIT_REACHED"}},"sourceEventSeqs":[21],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_over_capacity"},"toolCallId":"call_over_capacity","content":[{"type":"text","text":"Error: subagent limit reached (active child limit: 1); wait for an existing child to finish or complete this work with the current agents"}],"isError":true,"id":"{{message:7}}"},"error":{"name":"SubagentError","code":"ACTIVATION_LIMIT_REACHED"}},"sourceEventSeqs":[20],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"step/start","data":{"turn":1,"step":3}} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"ROOT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808279,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123808279,"index":0,"dt":[],"texts":["ROOT_DONE"]},{"type":"chunk","time":1792123808279,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ROOT_DONE"}}},{"type":"chunk","time":1792123808279,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808279,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"ROOT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137185,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135137185,"index":0,"dt":[],"texts":["ROOT_DONE"]},{"type":"chunk","time":1792135137185,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ROOT_DONE"}}},{"type":"chunk","time":1792135137185,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137185,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:9}}"}]}} @@ -32,6 +31,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:9}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"LIMIT_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808319,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123808319,"index":0,"dt":[],"texts":["LIMIT_OK"]},{"type":"chunk","time":1792123808319,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"LIMIT_OK"}}},{"type":"chunk","time":1792123808319,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808319,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"LIMIT_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137227,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135137227,"index":0,"dt":[],"texts":["LIMIT_OK"]},{"type":"chunk","time":1792135137227,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"LIMIT_OK"}}},{"type":"chunk","time":1792135137227,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137227,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-continuable-inheritance/session.1.v4.jsonl b/snapshots/sdk/subagent-continuable-inheritance/session.1.v4.jsonl index 11e3a8c717..7c169933cb 100644 --- a/snapshots/sdk/subagent-continuable-inheritance/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-continuable-inheritance/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789000001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"read-only","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Reply with exactly the word CHILD_OK and nothing else."},{"type":"text","text":"Your name is \"worker-1\". Your parent agent name is \"lead\". Before you finish, send your result to that agent with send_message({ name: \"lead\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn."}],"source":{"kind":"user"},"role":"user","id":"{{message:8}}"}]}} diff --git a/snapshots/sdk/subagent-continuable-inheritance/session.v4.jsonl b/snapshots/sdk/subagent-continuable-inheritance/session.v4.jsonl index 145d3194bc..6e596be658 100644 --- a/snapshots/sdk/subagent-continuable-inheritance/session.v4.jsonl +++ b/snapshots/sdk/subagent-continuable-inheritance/session.v4.jsonl @@ -13,16 +13,15 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Follow these steps exactly, then","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123809613,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123809613,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123809613,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123809613,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123809613,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135138492,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135138492,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135138492,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135138492,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135138492,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_bg_start"},"toolCallId":"call_bg_start","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123809681,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123809681,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792123809681,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792123809681,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123809681,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135138557,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135138557,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792135138557,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792135138557,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135138557,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-continuable/session.1.v4.jsonl b/snapshots/sdk/subagent-continuable/session.1.v4.jsonl index 4089877d30..8a52bdd680 100644 --- a/snapshots/sdk/subagent-continuable/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-continuable/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789000001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-continuable/session.v4.jsonl b/snapshots/sdk/subagent-continuable/session.v4.jsonl index dec14af5e9..403be3ba70 100644 --- a/snapshots/sdk/subagent-continuable/session.v4.jsonl +++ b/snapshots/sdk/subagent-continuable/session.v4.jsonl @@ -12,29 +12,28 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Follow these steps exactly, then","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808892,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123808892,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123808892,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123808892,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808892,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137784,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135137784,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135137784,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135137784,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137784,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_bg_start"},"toolCallId":"call_bg_start","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_followup_1","name":"send_message","arguments":"{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808934,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123808934,"index":0,"dt":[],"id":"call_followup_1","name":"send_message","args":["{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123808934,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_followup_1","name":"send_message","arguments":"{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123808934,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808934,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_followup_1","name":"send_message","arguments":"{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137824,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135137824,"index":0,"dt":[],"id":"call_followup_1","name":"send_message","args":["{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135137824,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_followup_1","name":"send_message","arguments":"{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135137824,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137824,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"call_followup_1","name":"send_message","arguments":"{\"message\":\"Now reply with exactly SECOND_OK.\",\"name\":\"worker-1\"}"}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_followup_1"},"toolCallId":"call_followup_1","content":[{"type":"text","text":"message delivered to agent worker-1"}],"isError":false,"id":"{{message:7}}"}},"sourceEventSeqs":[21],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_followup_1"},"toolCallId":"call_followup_1","content":[{"type":"text","text":"message delivered to agent worker-1"}],"isError":false,"id":"{{message:7}}"}},"sourceEventSeqs":[20],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"step/start","data":{"turn":1,"step":3}} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_followup_2","name":"send_message","arguments":"{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808950,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123808950,"index":0,"dt":[],"id":"call_followup_2","name":"send_message","args":["{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123808950,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_followup_2","name":"send_message","arguments":"{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123808950,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808950,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_followup_2","name":"send_message","arguments":"{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137839,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135137839,"index":0,"dt":[],"id":"call_followup_2","name":"send_message","args":["{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135137839,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_followup_2","name":"send_message","arguments":"{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135137839,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137839,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"call_followup_2","name":"send_message","arguments":"{\"message\":\"Now reply with exactly THIRD_OK.\",\"name\":\"worker-1\"}"}} -{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"call_followup_2"},"toolCallId":"call_followup_2","content":[{"type":"text","text":"message delivered to agent worker-1"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[26],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"call_followup_2"},"toolCallId":"call_followup_2","content":[{"type":"text","text":"message delivered to agent worker-1"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[25],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"step/start","data":{"turn":1,"step":4}} -{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_followup_unknown","name":"send_message","arguments":"{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808966,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123808966,"index":0,"dt":[],"id":"call_followup_unknown","name":"send_message","args":["{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"]},{"type":"chunk","time":1792123808966,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_followup_unknown","name":"send_message","arguments":"{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"}}},{"type":"chunk","time":1792123808966,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808966,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_followup_unknown","name":"send_message","arguments":"{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137856,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135137856,"index":0,"dt":[],"id":"call_followup_unknown","name":"send_message","args":["{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"]},{"type":"chunk","time":1792135137856,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_followup_unknown","name":"send_message","arguments":"{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"}}},{"type":"chunk","time":1792135137856,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137856,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"call_followup_unknown","name":"send_message","arguments":"{\"message\":\"Please continue.\",\"name\":\"22222222-2222-4222-8222-222222222222\"}"}} -{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"call_followup_unknown"},"toolCallId":"call_followup_unknown","content":[{"type":"text","text":"Error: agent name \"22222222-2222-4222-8222-222222222222\" was not found; use list_agents to discover available names"}],"isError":true,"id":"{{message:11}}"},"error":{"name":"SubagentError","code":"AGENT_NAME_NOT_FOUND"}},"sourceEventSeqs":[31],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"call_followup_unknown"},"toolCallId":"call_followup_unknown","content":[{"type":"text","text":"Error: agent name \"22222222-2222-4222-8222-222222222222\" was not found; use list_agents to discover available names"}],"isError":true,"id":"{{message:11}}"},"error":{"name":"SubagentError","code":"AGENT_NAME_NOT_FOUND"}},"sourceEventSeqs":[30],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"step/start","data":{"turn":1,"step":5}} -{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123808983,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123808983,"index":0,"dt":[],"texts":["DONE"]},{"type":"chunk","time":1792123808983,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DONE"}}},{"type":"chunk","time":1792123808983,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123808983,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137872,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135137872,"index":0,"dt":[],"texts":["DONE"]},{"type":"chunk","time":1792135137872,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DONE"}}},{"type":"chunk","time":1792135137872,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137872,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":5}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"SECOND_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:13}}"}]}} @@ -42,6 +41,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"SECOND_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:13}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:14}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123809042,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123809042,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792123809042,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792123809042,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123809042,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:14}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135137923,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135137923,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792135137923,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792135137923,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135137923,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-dsh-sdk-diagnostic/notifications.expected.jsonl b/snapshots/sdk/subagent-dsh-sdk-diagnostic/notifications.expected.jsonl index 9395718dc3..da5b55a028 100644 --- a/snapshots/sdk/subagent-dsh-sdk-diagnostic/notifications.expected.jsonl +++ b/snapshots/sdk/subagent-dsh-sdk-diagnostic/notifications.expected.jsonl @@ -12,27 +12,25 @@ {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/delivery-accepted","seq":13,"time":0,"data":{"sessionId":"{{sessionId}}","sessionFormatVersion":4,"throughSeq":12}}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":14,"time":0,"data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","args":["{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/call","seq":15,"time":0,"data":{"turn":1,"step":1,"callId":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":16,"time":0,"data":{"version":2,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"external","label":"Observe first DSH SDK failure"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/named","seq":17,"time":0,"data":{"name":"worker-1","id":"{{sessionId}}"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":18,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":19,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_first"},"toolCallId":"call_dsh_sdk_first","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":20,"time":0,"data":{"turn":1,"step":1}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":21,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":22,"time":0,"data":{"turn":1,"step":2}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":23,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/delivery-accepted","seq":24,"time":0,"data":{"sessionId":"{{sessionId}}","sessionFormatVersion":4,"throughSeq":23}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":25,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","args":["{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/call","seq":26,"time":0,"data":{"turn":1,"step":2,"callId":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":27,"time":0,"data":{"version":2,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"external","label":"Observe second DSH SDK failure"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/named","seq":28,"time":0,"data":{"name":"worker-2","id":"{{sessionId}}"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":29,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":30,"time":0,"data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_second"},"toolCallId":"call_dsh_sdk_second","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[26],"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":31,"time":0,"data":{"turn":1,"step":2}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":32,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":33,"time":0,"data":{"turn":1,"step":3}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":34,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/delivery-accepted","seq":35,"time":0,"data":{"sessionId":"{{sessionId}}","sessionFormatVersion":4,"throughSeq":34}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":36,"time":0,"data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":37,"time":0,"data":{"turn":1,"step":3}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":38,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":16,"time":0,"data":{"version":2,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"external","label":"Observe first DSH SDK failure","name":"worker-1"}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":17,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":18,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_first"},"toolCallId":"call_dsh_sdk_first","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":19,"time":0,"data":{"turn":1,"step":1}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":20,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":21,"time":0,"data":{"turn":1,"step":2}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":22,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/delivery-accepted","seq":23,"time":0,"data":{"sessionId":"{{sessionId}}","sessionFormatVersion":4,"throughSeq":22}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":24,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","args":["{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/call","seq":25,"time":0,"data":{"turn":1,"step":2,"callId":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":26,"time":0,"data":{"version":2,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"external","label":"Observe second DSH SDK failure","name":"worker-2"}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":27,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":28,"time":0,"data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_second"},"toolCallId":"call_dsh_sdk_second","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[25],"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":29,"time":0,"data":{"turn":1,"step":2}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":30,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":31,"time":0,"data":{"turn":1,"step":3}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":32,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/delivery-accepted","seq":33,"time":0,"data":{"sessionId":"{{sessionId}}","sessionFormatVersion":4,"throughSeq":32}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":34,"time":0,"data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":35,"time":0,"data":{"turn":1,"step":3}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":36,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} {"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"idle"}} diff --git a/snapshots/sdk/subagent-dsh-sdk-diagnostic/session.v4.jsonl b/snapshots/sdk/subagent-dsh-sdk-diagnostic/session.v4.jsonl index c5ca885681..b005de5dd7 100644 --- a/snapshots/sdk/subagent-dsh-sdk-diagnostic/session.v4.jsonl +++ b/snapshots/sdk/subagent-dsh-sdk-diagnostic/session.v4.jsonl @@ -13,28 +13,26 @@ {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Observe the DSH SDK diagnostic","messageSeqs":[8],"source":{"kind":"fallback"}}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session:1}}","sessionFormatVersion":4,"throughSeq":12}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123810244,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123810244,"index":0,"dt":[],"id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","args":["{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123810244,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123810244,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123810244,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135139108,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135139108,"index":0,"dt":[],"id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","args":["{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135139108,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135139108,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135139108,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_dsh_sdk_first","name":"subagent_dsh_sdk","arguments":"{\"description\":\"Observe first DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792123810690,"mode":"external","label":"Observe first DSH SDK failure"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{id:1}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792135139552,"mode":"external","label":"Observe first DSH SDK failure","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_first"},"toolCallId":"call_dsh_sdk_first","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session:1}}","sessionFormatVersion":4,"throughSeq":23}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123810840,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123810840,"index":0,"dt":[],"id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","args":["{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792123810840,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123810840,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123810840,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session:1}}","sessionFormatVersion":4,"throughSeq":22}} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135139705,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135139705,"index":0,"dt":[],"id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","args":["{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792135139705,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135139705,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135139705,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"call_dsh_sdk_second","name":"subagent_dsh_sdk_second","arguments":"{\"description\":\"Observe second DSH SDK failure\",\"prompt\":\"Return the scripted DSH SDK failure.\",\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:2}}","childCreatedAt":1792123811291,"mode":"external","label":"Observe second DSH SDK failure"}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{id:2}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:2}}","childCreatedAt":1792135140143,"mode":"external","label":"Observe second DSH SDK failure","name":"worker-2"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{id:2}}"},"role":"user","id":"{{message:8}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_second"},"toolCallId":"call_dsh_sdk_second","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[26],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_dsh_sdk_second"},"toolCallId":"call_dsh_sdk_second","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[25],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":3}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial child loader answer"},{"type":"text","text":"Subagent failure (provider: DSH SDK; stage: session-run; category: child-error)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{id:2}}"},"role":"user","id":"{{message:8}}"},"surfaceOp":"append"} -{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session:1}}","sessionFormatVersion":4,"throughSeq":34}} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792123811439,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123811439,"index":0,"dt":[],"texts":["PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"]},{"type":"chunk","time":1792123811439,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}}},{"type":"chunk","time":1792123811439,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792123811439,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session:1}}","sessionFormatVersion":4,"throughSeq":32}} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792135140291,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135140291,"index":0,"dt":[],"texts":["PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"]},{"type":"chunk","time":1792135140291,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_DSH_SDK_DIAGNOSTIC"}}},{"type":"chunk","time":1792135140291,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792135140291,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-dsh-sdk-dynamic-route/notifications.expected.jsonl b/snapshots/sdk/subagent-dsh-sdk-dynamic-route/notifications.expected.jsonl index 31307da244..3e5b20b95a 100644 --- a/snapshots/sdk/subagent-dsh-sdk-dynamic-route/notifications.expected.jsonl +++ b/snapshots/sdk/subagent-dsh-sdk-dynamic-route/notifications.expected.jsonl @@ -11,15 +11,14 @@ {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session/title","seq":13,"time":0,"data":{"title":"Delegate once using the requested","messageSeqs":[9],"source":{"kind":"fallback"}}}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":14,"time":0,"data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"call-delegate","name":"subagent","args":["{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/call","seq":15,"time":0,"data":{"turn":1,"step":1,"callId":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":16,"time":0,"data":{"version":2,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"external","label":"route probe"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/named","seq":17,"time":0,"data":{"name":"worker-1","id":"{{sessionId}}"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":18,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished. It cannot receive follow-up messages.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":19,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call-delegate"},"toolCallId":"call-delegate","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":20,"time":0,"data":{"turn":1,"step":1}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":21,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":22,"time":0,"data":{"turn":1,"step":2}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":23,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-1 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished. It cannot receive follow-up messages.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":24,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":25,"time":0,"data":{"turn":1,"step":2}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":26,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":16,"time":0,"data":{"version":2,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"external","label":"route probe","name":"worker-1"}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":17,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished. It cannot receive follow-up messages.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":18,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call-delegate"},"toolCallId":"call-delegate","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":19,"time":0,"data":{"turn":1,"step":1}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":20,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":21,"time":0,"data":{"turn":1,"step":2}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":22,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-1 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished. It cannot receive follow-up messages.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":23,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{sessionId}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":24,"time":0,"data":{"turn":1,"step":2}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":25,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} {"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"idle"}} diff --git a/snapshots/sdk/subagent-dsh-sdk-dynamic-route/session.v4.jsonl b/snapshots/sdk/subagent-dsh-sdk-dynamic-route/session.v4.jsonl index 3a14fbf31a..d3652eba16 100644 --- a/snapshots/sdk/subagent-dsh-sdk-dynamic-route/session.v4.jsonl +++ b/snapshots/sdk/subagent-dsh-sdk-dynamic-route/session.v4.jsonl @@ -13,16 +13,15 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"mock-delegate"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"mock-delegate"}} {"type":"session/title","data":{"title":"Delegate once using the requested","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123811985,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123811985,"index":0,"dt":[],"id":"call-delegate","name":"subagent","args":["{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123811985,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123811985,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123811985,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135140836,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135140836,"index":0,"dt":[],"id":"call-delegate","name":"subagent","args":["{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135140836,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135140836,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135140836,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call-delegate","name":"subagent","arguments":"{\"description\":\"route probe\",\"prompt\":\"report your route and workspace\",\"provider\":\"mock\",\"model\":\"mock-routed\",\"reasoning_effort\":\"max\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792123812432,"mode":"external","label":"route probe"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{id:1}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792135141278,"mode":"external","label":"route probe","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished. It cannot receive follow-up messages.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call-delegate"},"toolCallId":"call-delegate","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished. It cannot receive follow-up messages.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123812569,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123812569,"index":0,"dt":[],"texts":["child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"]},{"type":"chunk","time":1792123812569,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}}},{"type":"chunk","time":1792123812569,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123812569,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"mock-delegate"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135141422,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135141422,"index":0,"dt":[],"texts":["child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"]},{"type":"chunk","time":1792135141422,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"child reported:\nchild route: mock/mock-routed/max/777; cwd: {{cwd}}"}}},{"type":"chunk","time":1792135141422,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135141422,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-fork-in-process/session.1.v4.jsonl b/snapshots/sdk/subagent-fork-in-process/session.1.v4.jsonl index f1516da155..545f6f5aac 100644 --- a/snapshots/sdk/subagent-fork-in-process/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-fork-in-process/session.1.v4.jsonl @@ -16,7 +16,7 @@ {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"session/end-seed","data":{"inherited":true}} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"fork","label":"Recall project codeword","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"fork","name":"worker-1","label":"Recall project codeword","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-fork-in-process/session.v4.jsonl b/snapshots/sdk/subagent-fork-in-process/session.v4.jsonl index d787cae760..ea067fdd3b 100644 --- a/snapshots/sdk/subagent-fork-in-process/session.v4.jsonl +++ b/snapshots/sdk/subagent-fork-in-process/session.v4.jsonl @@ -12,7 +12,7 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Remember this fact for later:","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to remember the codeword \"MARMALADE\" and reply with just \"OK\"."},{"type":"text","text":"OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2885,"outputTokens":25,"cacheReadTokens":0,"reasoningTokens":23},"stream":[{"type":"chunk","time":1792123813131,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123813131,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," remember"," the"," cod","ew","ord"," \"","M","ARM","AL","ADE","\""," and"," reply"," with"," just"," \"","OK","\"."]},{"type":"chunk","time":1792123813131,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123813131,"index":1,"dt":[],"texts":["OK"]},{"type":"chunk","time":1792123813131,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to remember the codeword \"MARMALADE\" and reply with just \"OK\"."}}},{"type":"chunk","time":1792123813131,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"OK"}}},{"type":"chunk","time":1792123813131,"chunk":{"type":"usage","usage":{"inputTokens":2885,"outputTokens":25,"cacheReadTokens":0,"reasoningTokens":23}}},{"type":"chunk","time":1792123813131,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to remember the codeword \"MARMALADE\" and reply with just \"OK\"."},{"type":"text","text":"OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2885,"outputTokens":25,"cacheReadTokens":0,"reasoningTokens":23},"stream":[{"type":"chunk","time":1792135141965,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135141965,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," remember"," the"," cod","ew","ord"," \"","M","ARM","AL","ADE","\""," and"," reply"," with"," just"," \"","OK","\"."]},{"type":"chunk","time":1792135141965,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135141965,"index":1,"dt":[],"texts":["OK"]},{"type":"chunk","time":1792135141965,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to remember the codeword \"MARMALADE\" and reply with just \"OK\"."}}},{"type":"chunk","time":1792135141965,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"OK"}}},{"type":"chunk","time":1792135141965,"chunk":{"type":"usage","usage":{"inputTokens":2885,"outputTokens":25,"cacheReadTokens":0,"reasoningTokens":23}}},{"type":"chunk","time":1792135141965,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Use the subagent_fork tool exactly once to delegate this subtask to a forked child agent: 'What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.' The forked child inherits this conversation, so it can answer. After the subagent returns, reply with the single word PARENT_DONE and stop. Do not use the bash tool."}],"source":{"kind":"user"},"role":"user","id":"{{message:5}}"}]}} @@ -20,16 +20,15 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Use the subagent_fork tool exactly once to delegate this subtask to a forked child agent: 'What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.' The forked child inherits this conversation, so it can answer. After the subagent returns, reply with the single word PARENT_DONE and stop. Do not use the bash tool."}],"source":{"kind":"user"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to use subagent_fork to delegate a question to a child agent. The child agent inherits this conversation and should be able to answer: the project codeword is MARMALADE. After the subagent returns, I should reply with PARENT_DONE."},{"type":"tool-call","id":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":158,"outputTokens":147,"cacheReadTokens":2816,"reasoningTokens":59},"stream":[{"type":"chunk","time":1792123813150,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123813150,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," use"," sub","agent","_f","ork"," to"," delegate"," a"," question"," to"," a"," child"," agent","."," The"," child"," agent"," inher","its"," this"," conversation"," and"," should"," be"," able"," to"," answer",":"," the"," project"," cod","ew","ord"," is"," MAR","M","AL","ADE","."," After"," the"," sub","agent"," returns",","," I"," should"," reply"," with"," PAR","ENT","_D","ONE","."]},{"type":"chunk","time":1792123813150,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123813150,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","args":["{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123813150,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to use subagent_fork to delegate a question to a child agent. The child agent inherits this conversation and should be able to answer: the project codeword is MARMALADE. After the subagent returns, I should reply with PARENT_DONE."}}},{"type":"chunk","time":1792123813150,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123813150,"chunk":{"type":"usage","usage":{"inputTokens":158,"outputTokens":147,"cacheReadTokens":2816,"reasoningTokens":59}}},{"type":"chunk","time":1792123813150,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to use subagent_fork to delegate a question to a child agent. The child agent inherits this conversation and should be able to answer: the project codeword is MARMALADE. After the subagent returns, I should reply with PARENT_DONE."},{"type":"tool-call","id":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":158,"outputTokens":147,"cacheReadTokens":2816,"reasoningTokens":59},"stream":[{"type":"chunk","time":1792135141984,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135141984,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," use"," sub","agent","_f","ork"," to"," delegate"," a"," question"," to"," a"," child"," agent","."," The"," child"," agent"," inher","its"," this"," conversation"," and"," should"," be"," able"," to"," answer",":"," the"," project"," cod","ew","ord"," is"," MAR","M","AL","ADE","."," After"," the"," sub","agent"," returns",","," I"," should"," reply"," with"," PAR","ENT","_D","ONE","."]},{"type":"chunk","time":1792135141984,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135141984,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","args":["{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135141985,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to use subagent_fork to delegate a question to a child agent. The child agent inherits this conversation and should be able to answer: the project codeword is MARMALADE. After the subagent returns, I should reply with PARENT_DONE."}}},{"type":"chunk","time":1792135141985,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135141985,"chunk":{"type":"usage","usage":{"inputTokens":158,"outputTokens":147,"cacheReadTokens":2816,"reasoningTokens":59}}},{"type":"chunk","time":1792135141985,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":2,"step":1,"callId":"call_00_sAtKUseRzHRBvL4CF7XF1334","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1783352137161,"mode":"continuable","label":"Recall project codeword"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1783352137161,"mode":"continuable","label":"Recall project codeword","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"MARMALADE"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} {"type":"tool/result","data":{"turn":2,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_sAtKUseRzHRBvL4CF7XF1334"},"toolCallId":"call_00_sAtKUseRzHRBvL4CF7XF1334","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:8}}"}},"sourceEventSeqs":[22],"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"MARMALADE"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The forked child agent correctly returned \"MARMALADE\". Now I need to reply with \"PARENT_DONE\"."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":65,"outputTokens":30,"cacheReadTokens":3072,"reasoningTokens":25},"stream":[{"type":"chunk","time":1792123813211,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123813211,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," for","ked"," child"," agent"," correctly"," returned"," \"","M","ARM","AL","ADE","\"."," Now"," I"," need"," to"," reply"," with"," \"","PAR","ENT","_D","ONE","\"."]},{"type":"chunk","time":1792123813211,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123813211,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123813211,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The forked child agent correctly returned \"MARMALADE\". Now I need to reply with \"PARENT_DONE\"."}}},{"type":"chunk","time":1792123813211,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123813211,"chunk":{"type":"usage","usage":{"inputTokens":65,"outputTokens":30,"cacheReadTokens":3072,"reasoningTokens":25}}},{"type":"chunk","time":1792123813211,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The forked child agent correctly returned \"MARMALADE\". Now I need to reply with \"PARENT_DONE\"."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":65,"outputTokens":30,"cacheReadTokens":3072,"reasoningTokens":25},"stream":[{"type":"chunk","time":1792135142054,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135142054,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," for","ked"," child"," agent"," correctly"," returned"," \"","M","ARM","AL","ADE","\"."," Now"," I"," need"," to"," reply"," with"," \"","PAR","ENT","_D","ONE","\"."]},{"type":"chunk","time":1792135142054,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135142054,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135142054,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The forked child agent correctly returned \"MARMALADE\". Now I need to reply with \"PARENT_DONE\"."}}},{"type":"chunk","time":1792135142054,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135142054,"chunk":{"type":"usage","usage":{"inputTokens":65,"outputTokens":30,"cacheReadTokens":3072,"reasoningTokens":25}}},{"type":"chunk","time":1792135142054,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":2}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-list-agents/session.1.v4.jsonl b/snapshots/sdk/subagent-list-agents/session.1.v4.jsonl index 2f39d4b5ab..9c388f9db0 100644 --- a/snapshots/sdk/subagent-list-agents/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-list-agents/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789000001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-list-agents/session.v4.jsonl b/snapshots/sdk/subagent-list-agents/session.v4.jsonl index 9246b00912..ee2e4082be 100644 --- a/snapshots/sdk/subagent-list-agents/session.v4.jsonl +++ b/snapshots/sdk/subagent-list-agents/session.v4.jsonl @@ -12,14 +12,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Call the subagent tool once","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123813741,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123813741,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123813742,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123813742,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123813742,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135142600,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135142600,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135142600,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135142600,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135142600,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_bg_start"},"toolCallId":"call_bg_start","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"STARTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123813796,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123813796,"index":0,"dt":[],"texts":["STARTED"]},{"type":"chunk","time":1792123813796,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"STARTED"}}},{"type":"chunk","time":1792123813796,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123813796,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"STARTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135142645,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135142645,"index":0,"dt":[],"texts":["STARTED"]},{"type":"chunk","time":1792135142645,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"STARTED"}}},{"type":"chunk","time":1792135142645,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135142645,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -27,7 +26,7 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123813820,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123813820,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792123813820,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792123813820,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123813820,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135142669,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135142669,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792135142669,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792135142669,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135142669,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Call list_agents once and observe the subagent you started. Then call interrupt_agent once with agent_id set to {{session:2}}. Then reply with the single word DONE. Do not call any other tool."}],"source":{"kind":"user"},"role":"user","id":"{{message:9}}"}]}} @@ -35,11 +34,11 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":3,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Call list_agents once and observe the subagent you started. Then call interrupt_agent once with agent_id set to {{session:2}}. Then reply with the single word DONE. Do not call any other tool."}],"source":{"kind":"user"},"role":"user","id":"{{message:9}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":3,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_list","name":"list_agents","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123813841,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123813841,"index":0,"dt":[],"id":"call_list","name":"list_agents","args":["{}"]},{"type":"chunk","time":1792123813841,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_list","name":"list_agents","arguments":"{}"}}},{"type":"chunk","time":1792123813841,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123813841,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":3,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_list","name":"list_agents","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135142692,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135142692,"index":0,"dt":[],"id":"call_list","name":"list_agents","args":["{}"]},{"type":"chunk","time":1792135142692,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_list","name":"list_agents","arguments":"{}"}}},{"type":"chunk","time":1792135142692,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135142692,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":3,"step":1,"callId":"call_list","name":"list_agents","arguments":"{}"}} -{"type":"tool/result","data":{"turn":3,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_list"},"toolCallId":"call_list","content":[{"type":"text","text":"worker-1 [inactive] parent=lead depth=1 — Reply with CHILD_OK"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[37],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":3,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_list"},"toolCallId":"call_list","content":[{"type":"text","text":"worker-1 [inactive] parent=lead depth=1 — Reply with CHILD_OK"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[36],"surfaceOp":"append"} {"type":"step/end","data":{"turn":3,"step":1}} {"type":"step/start","data":{"turn":3,"step":2}} -{"type":"assistant/message","data":{"turn":3,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792123813869,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123813869,"index":0,"dt":[],"texts":["DONE"]},{"type":"chunk","time":1792123813869,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DONE"}}},{"type":"chunk","time":1792123813869,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792123813869,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":3,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792135142720,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135142720,"index":0,"dt":[],"texts":["DONE"]},{"type":"chunk","time":1792135142720,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DONE"}}},{"type":"chunk","time":1792135142720,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792135142720,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":3,"step":2}} {"type":"turn/end","data":{"turn":3,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-mixed/session.1.v4.jsonl b/snapshots/sdk/subagent-mixed/session.1.v4.jsonl index ae745626d6..8274b6a11c 100644 --- a/snapshots/sdk/subagent-mixed/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-mixed/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783352145223,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply ALPHA only","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply ALPHA only","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-mixed/session.2.v4.jsonl b/snapshots/sdk/subagent-mixed/session.2.v4.jsonl index 6f7cc08db5..bad8c5d7f4 100644 --- a/snapshots/sdk/subagent-mixed/session.2.v4.jsonl +++ b/snapshots/sdk/subagent-mixed/session.2.v4.jsonl @@ -16,7 +16,7 @@ {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"session/end-seed","data":{"inherited":true}} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"fork","label":"Recall project codeword","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"fork","name":"worker-2","label":"Recall project codeword","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-mixed/session.v4.jsonl b/snapshots/sdk/subagent-mixed/session.v4.jsonl index 3136d321c2..208382eb15 100644 --- a/snapshots/sdk/subagent-mixed/session.v4.jsonl +++ b/snapshots/sdk/subagent-mixed/session.v4.jsonl @@ -12,7 +12,7 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Remember this fact for later:","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to remember a codeword and just reply with \"OK\"."},{"type":"text","text":"OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2883,"outputTokens":19,"cacheReadTokens":0,"reasoningTokens":17},"stream":[{"type":"chunk","time":1792123814420,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123814420,"index":0,"dt":[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," remember"," a"," cod","ew","ord"," and"," just"," reply"," with"," \"","OK","\"."]},{"type":"chunk","time":1792123814421,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123814421,"index":1,"dt":[],"texts":["OK"]},{"type":"chunk","time":1792123814421,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to remember a codeword and just reply with \"OK\"."}}},{"type":"chunk","time":1792123814421,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"OK"}}},{"type":"chunk","time":1792123814421,"chunk":{"type":"usage","usage":{"inputTokens":2883,"outputTokens":19,"cacheReadTokens":0,"reasoningTokens":17}}},{"type":"chunk","time":1792123814421,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to remember a codeword and just reply with \"OK\"."},{"type":"text","text":"OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2883,"outputTokens":19,"cacheReadTokens":0,"reasoningTokens":17},"stream":[{"type":"chunk","time":1792135143258,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135143258,"index":0,"dt":[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," remember"," a"," cod","ew","ord"," and"," just"," reply"," with"," \"","OK","\"."]},{"type":"chunk","time":1792135143259,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135143259,"index":1,"dt":[],"texts":["OK"]},{"type":"chunk","time":1792135143259,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to remember a codeword and just reply with \"OK\"."}}},{"type":"chunk","time":1792135143259,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"OK"}}},{"type":"chunk","time":1792135143259,"chunk":{"type":"usage","usage":{"inputTokens":2883,"outputTokens":19,"cacheReadTokens":0,"reasoningTokens":17}}},{"type":"chunk","time":1792135143259,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Do these two delegations, once at a time. First, use the subagent tool (fresh child) exactly once: 'Reply with exactly the word ALPHA and nothing else.' Then, after it returns, use the subagent_fork tool (forked child that inherits this conversation) exactly once: 'What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.' After both subagents return, reply with the single word PARENT_DONE and stop. Do not use the bash tool."}],"source":{"kind":"user"},"role":"user","id":"{{message:5}}"}]}} @@ -20,26 +20,24 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Do these two delegations, once at a time. First, use the subagent tool (fresh child) exactly once: 'Reply with exactly the word ALPHA and nothing else.' Then, after it returns, use the subagent_fork tool (forked child that inherits this conversation) exactly once: 'What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.' After both subagents return, reply with the single word PARENT_DONE and stop. Do not use the bash tool."}],"source":{"kind":"user"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"Let me do these two delegations one at a time as requested.\n\nFirst, I'll use the subagent tool (fresh child) to reply with \"ALPHA\"."},{"type":"tool-call","id":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","arguments":"{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":185,"outputTokens":110,"cacheReadTokens":2816,"reasoningTokens":35},"stream":[{"type":"chunk","time":1792123814440,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123814440,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["Let"," me"," do"," these"," two"," deleg","ations"," one"," at"," a"," time"," as"," requested",".\n\n","First",","," I","'ll"," use"," the"," sub","agent"," tool"," (","fresh"," child",")"," to"," reply"," with"," \"","AL","P","HA","\"."]},{"type":"chunk","time":1792123814440,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123814440,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","args":["{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123814440,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"Let me do these two delegations one at a time as requested.\n\nFirst, I'll use the subagent tool (fresh child) to reply with \"ALPHA\"."}}},{"type":"chunk","time":1792123814440,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","arguments":"{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123814440,"chunk":{"type":"usage","usage":{"inputTokens":185,"outputTokens":110,"cacheReadTokens":2816,"reasoningTokens":35}}},{"type":"chunk","time":1792123814440,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"Let me do these two delegations one at a time as requested.\n\nFirst, I'll use the subagent tool (fresh child) to reply with \"ALPHA\"."},{"type":"tool-call","id":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","arguments":"{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":185,"outputTokens":110,"cacheReadTokens":2816,"reasoningTokens":35},"stream":[{"type":"chunk","time":1792135143278,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135143278,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["Let"," me"," do"," these"," two"," deleg","ations"," one"," at"," a"," time"," as"," requested",".\n\n","First",","," I","'ll"," use"," the"," sub","agent"," tool"," (","fresh"," child",")"," to"," reply"," with"," \"","AL","P","HA","\"."]},{"type":"chunk","time":1792135143278,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135143278,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","args":["{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135143278,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"Let me do these two delegations one at a time as requested.\n\nFirst, I'll use the subagent tool (fresh child) to reply with \"ALPHA\"."}}},{"type":"chunk","time":1792135143278,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","arguments":"{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135143278,"chunk":{"type":"usage","usage":{"inputTokens":185,"outputTokens":110,"cacheReadTokens":2816,"reasoningTokens":35}}},{"type":"chunk","time":1792135143278,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":2,"step":1,"callId":"call_00_YvHr2bGomk5HhpgDTvE81896","name":"subagent","arguments":"{\"description\":\"Reply ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1783352145223,"mode":"continuable","label":"Reply ALPHA only"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1783352145223,"mode":"continuable","label":"Reply ALPHA only","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} {"type":"tool/result","data":{"turn":2,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_YvHr2bGomk5HhpgDTvE81896"},"toolCallId":"call_00_YvHr2bGomk5HhpgDTvE81896","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:8}}"}},"sourceEventSeqs":[22],"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The first subagent returned \"ALPHA\". Now I need to use the subagent_fork tool (forked child that inherits this conversation) to ask about the project codeword."},{"type":"tool-call","id":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":54,"outputTokens":128,"cacheReadTokens":3072,"reasoningTokens":40},"stream":[{"type":"chunk","time":1792123814503,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123814503,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," first"," sub","agent"," returned"," \"","AL","P","HA","\"."," Now"," I"," need"," to"," use"," the"," sub","agent","_f","ork"," tool"," (","fork","ed"," child"," that"," inher","its"," this"," conversation",")"," to"," ask"," about"," the"," project"," cod","ew","ord","."]},{"type":"chunk","time":1792123814503,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123814503,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","args":["{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123814503,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The first subagent returned \"ALPHA\". Now I need to use the subagent_fork tool (forked child that inherits this conversation) to ask about the project codeword."}}},{"type":"chunk","time":1792123814503,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123814503,"chunk":{"type":"usage","usage":{"inputTokens":54,"outputTokens":128,"cacheReadTokens":3072,"reasoningTokens":40}}},{"type":"chunk","time":1792123814503,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The first subagent returned \"ALPHA\". Now I need to use the subagent_fork tool (forked child that inherits this conversation) to ask about the project codeword."},{"type":"tool-call","id":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":54,"outputTokens":128,"cacheReadTokens":3072,"reasoningTokens":40},"stream":[{"type":"chunk","time":1792135143350,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135143350,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," first"," sub","agent"," returned"," \"","AL","P","HA","\"."," Now"," I"," need"," to"," use"," the"," sub","agent","_f","ork"," tool"," (","fork","ed"," child"," that"," inher","its"," this"," conversation",")"," to"," ask"," about"," the"," project"," cod","ew","ord","."]},{"type":"chunk","time":1792135143350,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135143350,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","args":["{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135143350,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The first subagent returned \"ALPHA\". Now I need to use the subagent_fork tool (forked child that inherits this conversation) to ask about the project codeword."}}},{"type":"chunk","time":1792135143350,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135143350,"chunk":{"type":"usage","usage":{"inputTokens":54,"outputTokens":128,"cacheReadTokens":3072,"reasoningTokens":40}}},{"type":"chunk","time":1792135143350,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":2,"step":2,"callId":"call_00_JSr5rhREq23wSmwSkCP77184","name":"subagent_fork","arguments":"{\"description\":\"Recall project codeword\",\"prompt\":\"What is the project codeword mentioned earlier in this conversation? Reply with exactly that one word and nothing else.\",\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1783352147504,"mode":"continuable","label":"Recall project codeword"}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{session:3}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1783352147504,"mode":"continuable","label":"Recall project codeword","name":"worker-2"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"SAFFRON"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 finished and will do no further work unless you send it more.","senderSessionId":"{{session:3}}"},"role":"user","id":"{{message:10}}"}]}} -{"type":"tool/result","data":{"turn":2,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_JSr5rhREq23wSmwSkCP77184"},"toolCallId":"call_00_JSr5rhREq23wSmwSkCP77184","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[32],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":2,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_JSr5rhREq23wSmwSkCP77184"},"toolCallId":"call_00_JSr5rhREq23wSmwSkCP77184","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[31],"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":2}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":3}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-2 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"SAFFRON"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 finished and will do no further work unless you send it more.","senderSessionId":"{{session:3}}"},"role":"user","id":"{{message:10}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":3,"message":{"role":"assistant","content":[{"type":"reasoning","text":"Both subagents returned:\n1. First (fresh child): \"ALPHA\"\n2. Second (forked child): \"SAFFRON\" - correctly inherited the conversation context where I was asked to remember the codeword \"SAFFRON\".\n\nNow I reply with \"PARENT_DONE\" as instructed."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":69,"outputTokens":69,"cacheReadTokens":3200,"reasoningTokens":64},"stream":[{"type":"chunk","time":1792123814571,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123814571,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["Both"," sub","agents"," returned",":\n","1","."," First"," (","fresh"," child","):"," \"","AL","P","HA","\"\n","2","."," Second"," (","fork","ed"," child","):"," \"","SA","FF","RON","\""," -"," correctly"," inherited"," the"," conversation"," context"," where"," I"," was"," asked"," to"," remember"," the"," cod","ew","ord"," \"","SA","FF","RON","\".\n\n","Now"," I"," reply"," with"," \"","PAR","ENT","_D","ONE","\""," as"," instructed","."]},{"type":"chunk","time":1792123814571,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123814571,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123814571,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"Both subagents returned:\n1. First (fresh child): \"ALPHA\"\n2. Second (forked child): \"SAFFRON\" - correctly inherited the conversation context where I was asked to remember the codeword \"SAFFRON\".\n\nNow I reply with \"PARENT_DONE\" as instructed."}}},{"type":"chunk","time":1792123814571,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123814571,"chunk":{"type":"usage","usage":{"inputTokens":69,"outputTokens":69,"cacheReadTokens":3200,"reasoningTokens":64}}},{"type":"chunk","time":1792123814571,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":3,"message":{"role":"assistant","content":[{"type":"reasoning","text":"Both subagents returned:\n1. First (fresh child): \"ALPHA\"\n2. Second (forked child): \"SAFFRON\" - correctly inherited the conversation context where I was asked to remember the codeword \"SAFFRON\".\n\nNow I reply with \"PARENT_DONE\" as instructed."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":69,"outputTokens":69,"cacheReadTokens":3200,"reasoningTokens":64},"stream":[{"type":"chunk","time":1792135143411,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135143411,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["Both"," sub","agents"," returned",":\n","1","."," First"," (","fresh"," child","):"," \"","AL","P","HA","\"\n","2","."," Second"," (","fork","ed"," child","):"," \"","SA","FF","RON","\""," -"," correctly"," inherited"," the"," conversation"," context"," where"," I"," was"," asked"," to"," remember"," the"," cod","ew","ord"," \"","SA","FF","RON","\".\n\n","Now"," I"," reply"," with"," \"","PAR","ENT","_D","ONE","\""," as"," instructed","."]},{"type":"chunk","time":1792135143411,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135143411,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135143411,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"Both subagents returned:\n1. First (fresh child): \"ALPHA\"\n2. Second (forked child): \"SAFFRON\" - correctly inherited the conversation context where I was asked to remember the codeword \"SAFFRON\".\n\nNow I reply with \"PARENT_DONE\" as instructed."}}},{"type":"chunk","time":1792135143411,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135143411,"chunk":{"type":"usage","usage":{"inputTokens":69,"outputTokens":69,"cacheReadTokens":3200,"reasoningTokens":64}}},{"type":"chunk","time":1792135143411,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":3}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-send-message/session.1.v4.jsonl b/snapshots/sdk/subagent-send-message/session.1.v4.jsonl index 63f87388a2..24d7a2018f 100644 --- a/snapshots/sdk/subagent-send-message/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-send-message/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789000001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Send a finding","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Send a finding","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/sdk/subagent-send-message/session.v4.jsonl b/snapshots/sdk/subagent-send-message/session.v4.jsonl index 8a37df01d5..9462cfd488 100644 --- a/snapshots/sdk/subagent-send-message/session.v4.jsonl +++ b/snapshots/sdk/subagent-send-message/session.v4.jsonl @@ -12,14 +12,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Follow these steps exactly, then","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123815243,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123815243,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123815243,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123815243,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123815243,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135143962,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135143962,"index":0,"dt":[],"id":"call_bg_start","name":"subagent","args":["{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135143962,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135143962,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135143962,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_bg_start","name":"subagent","arguments":"{\"description\":\"Send a finding\",\"prompt\":\"Send exactly CHILD_MESSAGE_OK to your parent with send_message, then stop.\",\"run_in_background\":true,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Send a finding"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789000001000,"mode":"continuable","label":"Send a finding","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_bg_start"},"toolCallId":"call_bg_start","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"STARTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123815284,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123815284,"index":0,"dt":[],"texts":["STARTED"]},{"type":"chunk","time":1792123815284,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"STARTED"}}},{"type":"chunk","time":1792123815284,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123815284,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"STARTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135144005,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135144005,"index":0,"dt":[],"texts":["STARTED"]},{"type":"chunk","time":1792135144005,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"STARTED"}}},{"type":"chunk","time":1792135144005,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135144005,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Agent worker-1 sent a message: "},{"type":"text","text":"CHILD_MESSAGE_OK"}],"source":{"kind":"agent-message","form":"relay","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -30,7 +29,7 @@ {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Agent worker-1 sent a message: "},{"type":"text","text":"CHILD_MESSAGE_OK"}],"source":{"kind":"agent-message","form":"relay","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"Message sent."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:8}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123815345,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123815345,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792123815345,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792123815345,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123815345,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135144063,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135144063,"index":0,"dt":[],"texts":["SUBAGENT_SETTLED_NOTED"]},{"type":"chunk","time":1792135144063,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SUBAGENT_SETTLED_NOTED"}}},{"type":"chunk","time":1792135144063,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135144063,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Repeat back, verbatim, the exact message the background subagent sent you. Reply with only that text. Do not use any tools."}],"source":{"kind":"user"},"role":"user","id":"{{message:10}}"}]}} @@ -38,6 +37,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":3,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Repeat back, verbatim, the exact message the background subagent sent you. Reply with only that text. Do not use any tools."}],"source":{"kind":"user"},"role":"user","id":"{{message:10}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":3,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"CHILD_MESSAGE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:11}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123815365,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123815365,"index":0,"dt":[],"texts":["CHILD_MESSAGE_OK"]},{"type":"chunk","time":1792123815365,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"CHILD_MESSAGE_OK"}}},{"type":"chunk","time":1792123815365,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123815365,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":3,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"CHILD_MESSAGE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:11}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135144084,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135144084,"index":0,"dt":[],"texts":["CHILD_MESSAGE_OK"]},{"type":"chunk","time":1792135144084,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"CHILD_MESSAGE_OK"}}},{"type":"chunk","time":1792135144084,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135144084,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":3,"step":1}} {"type":"turn/end","data":{"turn":3,"reason":{"kind":"completed"}}} diff --git a/snapshots/sdk/subagent-spawn-in-process/notifications.expected.jsonl b/snapshots/sdk/subagent-spawn-in-process/notifications.expected.jsonl index 67b4f4d598..48f3bc42d8 100644 --- a/snapshots/sdk/subagent-spawn-in-process/notifications.expected.jsonl +++ b/snapshots/sdk/subagent-spawn-in-process/notifications.expected.jsonl @@ -16,8 +16,7 @@ {"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"running"}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/start","seq":4,"time":0,"data":{"turn":1}}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":5,"time":0,"data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":15,"time":0,"data":{"version":0,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"continuable","label":"echo probe"}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/named","seq":16,"time":0,"data":{"name":"worker-1","id":"{{sessionId}}"}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"subagent/catalog","seq":15,"time":0,"data":{"version":0,"childId":"{{sessionId}}","childCreatedAt":0,"mode":"continuable","label":"echo probe","name":"worker-1"}}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":6,"time":0,"data":{"turn":1,"step":1}}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"system/message","seq":7,"time":0,"data":{"turn":1,"step":1,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"system-prompt"},"id":"{{sessionId}}"}},"surfaceOp":"append"}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":8,"time":0,"data":{"content":[{"type":"text","text":"Reply with exactly: child answer 42."},{"type":"text","text":"Your name is \"worker-1\". Your parent agent name is \"lead\". Before you finish, send your result to that agent with send_message({ name: \"lead\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn."}],"source":{"kind":"user"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} @@ -29,14 +28,14 @@ {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":14,"time":0,"data":{"turn":1,"step":1}}}} {"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":15,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} {"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"idle"}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":17,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child answer 42."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":16,"time":0,"data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child answer 42."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"}]}}}} {"method":"subagent.finished","params":{"provider":"spawn","agentId":"{{sessionId}}","parentSessionId":"{{sessionId}}","childSessionId":"{{sessionId}}","status":"ok","stopReason":"completed","lastAssistantMessage":[{"type":"text","text":"child answer 42."}]}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":18,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_oHPNQ1nLoakoaAGXIxCM7404"},"toolCallId":"call_00_oHPNQ1nLoakoaAGXIxCM7404","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":19,"time":0,"data":{"turn":1,"step":1}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":20,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":21,"time":0,"data":{"turn":1,"step":2}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":22,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child answer 42."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":23,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."},{"type":"text","text":"child answer 42."}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":0,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," replied"," with"," \"","child"," answer"," ","42",".\""," Now"," I"," need"," to"," reply"," with"," the"," sub","agent","'s"," final"," answer"," verb","atim","."]},{"type":"chunk","time":0,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":1,"dt":[0,0,0,0],"texts":["child"," answer"," ","42","."]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."}}},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"child answer 42."}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":24,"time":0,"data":{"turn":1,"step":2}}}} -{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":25,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"tool/result","seq":17,"time":0,"data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_oHPNQ1nLoakoaAGXIxCM7404"},"toolCallId":"call_00_oHPNQ1nLoakoaAGXIxCM7404","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{sessionId}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":18,"time":0,"data":{"turn":1,"step":1}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":19,"time":0,"data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":20,"time":0,"data":{"turn":1,"step":2}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":21,"time":0,"data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child answer 42."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{sessionId}}"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":22,"time":0,"data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."},{"type":"text","text":"child answer 42."}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":0,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," replied"," with"," \"","child"," answer"," ","42",".\""," Now"," I"," need"," to"," reply"," with"," the"," sub","agent","'s"," final"," answer"," verb","atim","."]},{"type":"chunk","time":0,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":1,"dt":[0,0,0,0],"texts":["child"," answer"," ","42","."]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."}}},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"child answer 42."}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":23,"time":0,"data":{"turn":1,"step":2}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":24,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}}}} {"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"idle"}} diff --git a/snapshots/sdk/subagent-spawn-in-process/session.1.v4.jsonl b/snapshots/sdk/subagent-spawn-in-process/session.1.v4.jsonl index e474491d1c..19810dc567 100644 --- a/snapshots/sdk/subagent-spawn-in-process/session.1.v4.jsonl +++ b/snapshots/sdk/subagent-spawn-in-process/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789626545611,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"echo probe","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"echo probe","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"workspace-write","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Reply with exactly: child answer 42."},{"type":"text","text":"Your name is \"worker-1\". Your parent agent name is \"lead\". Before you finish, send your result to that agent with send_message({ name: \"lead\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn."}],"source":{"kind":"user"},"role":"user","id":"{{message:8}}"}]}} diff --git a/snapshots/sdk/subagent-spawn-in-process/session.v4.jsonl b/snapshots/sdk/subagent-spawn-in-process/session.v4.jsonl index f752667d7a..b767a780d8 100644 --- a/snapshots/sdk/subagent-spawn-in-process/session.v4.jsonl +++ b/snapshots/sdk/subagent-spawn-in-process/session.v4.jsonl @@ -12,16 +12,15 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once with description 'echo probe' and prompt 'Reply with exactly: child answer 42.'\n2. Then reply with the subagent's final answer verbatim.\n\nLet me do this step by step."},{"type":"tool-call","id":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","arguments":"{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":135,"outputTokens":124,"cacheReadTokens":1664,"reasoningTokens":55},"stream":[{"type":"chunk","time":1792123815926,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123815926,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," with"," description"," '","echo"," probe","'"," and"," prompt"," '","Reply"," with"," exactly",":"," child"," answer"," ","42",".'\n","2","."," Then"," reply"," with"," the"," sub","agent","'s"," final"," answer"," verb","atim",".\n\n","Let"," me"," do"," this"," step"," by"," step","."]},{"type":"chunk","time":1792123815926,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123815926,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","args":["{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123815927,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once with description 'echo probe' and prompt 'Reply with exactly: child answer 42.'\n2. Then reply with the subagent's final answer verbatim.\n\nLet me do this step by step."}}},{"type":"chunk","time":1792123815927,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","arguments":"{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123815927,"chunk":{"type":"usage","usage":{"inputTokens":135,"outputTokens":124,"cacheReadTokens":1664,"reasoningTokens":55}}},{"type":"chunk","time":1792123815927,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once with description 'echo probe' and prompt 'Reply with exactly: child answer 42.'\n2. Then reply with the subagent's final answer verbatim.\n\nLet me do this step by step."},{"type":"tool-call","id":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","arguments":"{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":135,"outputTokens":124,"cacheReadTokens":1664,"reasoningTokens":55},"stream":[{"type":"chunk","time":1792135144635,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135144635,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," with"," description"," '","echo"," probe","'"," and"," prompt"," '","Reply"," with"," exactly",":"," child"," answer"," ","42",".'\n","2","."," Then"," reply"," with"," the"," sub","agent","'s"," final"," answer"," verb","atim",".\n\n","Let"," me"," do"," this"," step"," by"," step","."]},{"type":"chunk","time":1792135144635,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135144635,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","args":["{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135144635,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once with description 'echo probe' and prompt 'Reply with exactly: child answer 42.'\n2. Then reply with the subagent's final answer verbatim.\n\nLet me do this step by step."}}},{"type":"chunk","time":1792135144635,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","arguments":"{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135144635,"chunk":{"type":"usage","usage":{"inputTokens":135,"outputTokens":124,"cacheReadTokens":1664,"reasoningTokens":55}}},{"type":"chunk","time":1792135144635,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_oHPNQ1nLoakoaAGXIxCM7404","name":"subagent","arguments":"{\"description\":\"echo probe\",\"prompt\":\"Reply with exactly: child answer 42.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789626545611,"mode":"continuable","label":"echo probe"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1789626545611,"mode":"continuable","label":"echo probe","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child answer 42."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_oHPNQ1nLoakoaAGXIxCM7404"},"toolCallId":"call_00_oHPNQ1nLoakoaAGXIxCM7404","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"child answer 42."}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."},{"type":"text","text":"child answer 42."}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26},"stream":[{"type":"chunk","time":1792123815987,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123815987,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," replied"," with"," \"","child"," answer"," ","42",".\""," Now"," I"," need"," to"," reply"," with"," the"," sub","agent","'s"," final"," answer"," verb","atim","."]},{"type":"chunk","time":1792123815987,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123815987,"index":1,"dt":[0,0,0,0],"texts":["child"," answer"," ","42","."]},{"type":"chunk","time":1792123815987,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."}}},{"type":"chunk","time":1792123815987,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"child answer 42."}}},{"type":"chunk","time":1792123815987,"chunk":{"type":"usage","usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26}}},{"type":"chunk","time":1792123815987,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."},{"type":"text","text":"child answer 42."}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26},"stream":[{"type":"chunk","time":1792135144699,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135144699,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," replied"," with"," \"","child"," answer"," ","42",".\""," Now"," I"," need"," to"," reply"," with"," the"," sub","agent","'s"," final"," answer"," verb","atim","."]},{"type":"chunk","time":1792135144699,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135144699,"index":1,"dt":[0,0,0,0],"texts":["child"," answer"," ","42","."]},{"type":"chunk","time":1792135144699,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent replied with \"child answer 42.\" Now I need to reply with the subagent's final answer verbatim."}}},{"type":"chunk","time":1792135144699,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"child answer 42."}}},{"type":"chunk","time":1792135144699,"chunk":{"type":"usage","usage":{"inputTokens":19,"outputTokens":32,"cacheReadTokens":1920,"reasoningTokens":26}}},{"type":"chunk","time":1792135144699,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/advanced-toolchain-runtime/session.1.v4.jsonl b/snapshots/session/advanced-toolchain-runtime/session.1.v4.jsonl index d0ae525ef9..e69c716df7 100644 --- a/snapshots/session/advanced-toolchain-runtime/session.1.v4.jsonl +++ b/snapshots/session/advanced-toolchain-runtime/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783950001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Check direct child","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Check direct child","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/advanced-toolchain-runtime/session.2.v4.jsonl b/snapshots/session/advanced-toolchain-runtime/session.2.v4.jsonl index 0b1765c9b3..7e477cc6a5 100644 --- a/snapshots/session/advanced-toolchain-runtime/session.2.v4.jsonl +++ b/snapshots/session/advanced-toolchain-runtime/session.2.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:3}}","createdAt":1783950002000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"advanced-acp-snapshot child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"workflow-{{workflow:1}}-1","label":"advanced-acp-snapshot child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/advanced-toolchain-runtime/session.v4.jsonl b/snapshots/session/advanced-toolchain-runtime/session.v4.jsonl index 9bfa19d349..b1cf9d6211 100644 --- a/snapshots/session/advanced-toolchain-runtime/session.v4.jsonl +++ b/snapshots/session/advanced-toolchain-runtime/session.v4.jsonl @@ -12,37 +12,35 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Run this advanced flow exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123791668,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123791668,"index":0,"dt":[],"id":"advanced-inspect-before","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792123791668,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792123791668,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123791668,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135123080,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135123080,"index":0,"dt":[],"id":"advanced-inspect-before","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792135123080,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792135123080,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135123080,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-inspect-before"},"toolCallId":"advanced-inspect-before","content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123791687,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123791687,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":["{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123791687,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123791687,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123791687,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135123100,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135123100,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":["{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135123100,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135123100,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135123100,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123791692,"mode":"continuable","label":"Check direct child"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135123107,"mode":"continuable","label":"Check direct child","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} {"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-direct-child"},"toolCallId":"advanced-direct-child","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:8}}"}},"sourceEventSeqs":[19],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":3}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123791744,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123791744,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":["{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"]},{"type":"chunk","time":1792123791744,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"}}},{"type":"chunk","time":1792123791744,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123791744,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135123169,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135123169,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":["{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"]},{"type":"chunk","time":1792135123169,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"}}},{"type":"chunk","time":1792135123169,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135123169,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-acp-snapshot\",\"description\":\"exercise one workflow child through ACP\"}}"}} {"type":"tool-workflow/run-start","data":{"runId":"{{workflow:1}}","name":"advanced-acp-snapshot"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792123791857,"mode":"continuable","label":"advanced-acp-snapshot child 1"}} -{"type":"subagent/named","data":{"name":"workflow-{{workflow:1}}-1","id":"{{session:3}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792135123243,"mode":"continuable","label":"advanced-acp-snapshot child 1","name":"workflow-{{workflow:1}}-1"}} {"type":"tool-workflow/agent-start","data":{"runId":"{{workflow:1}}","seq":1,"label":"workflow-child","phase":"Delegate","childId":"{{session:3}}"}} {"type":"tool-workflow/agent-end","data":{"runId":"{{workflow:1}}","seq":1,"outcome":"completed"}} {"type":"tool-workflow/run-end","data":{"runId":"{{workflow:1}}","stopReason":"completed"}} -{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-acp-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{message:10}}"}},"sourceEventSeqs":[29],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-acp-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{message:10}}"}},"sourceEventSeqs":[28],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"step/start","data":{"turn":1,"step":4}} -{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:11}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123791929,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123791929,"index":0,"dt":[],"id":"advanced-inspect-after","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792123791929,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792123791929,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123791929,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:11}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135123320,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135123320,"index":0,"dt":[],"id":"advanced-inspect-after","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792135123320,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792135123320,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135123320,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}} -{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-inspect-after"},"toolCallId":"advanced-inspect-after","content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}],"isError":false,"id":"{{message:12}}"}},"sourceEventSeqs":[40],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-inspect-after"},"toolCallId":"advanced-inspect-after","content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}],"isError":false,"id":"{{message:12}}"}},"sourceEventSeqs":[38],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"step/start","data":{"turn":1,"step":5}} -{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_ACP_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:13}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123791945,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123791945,"index":0,"dt":[],"texts":["ADVANCED_ACP_OK"]},{"type":"chunk","time":1792123791945,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_ACP_OK"}}},{"type":"chunk","time":1792123791945,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123791945,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_ACP_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:13}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135123338,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135123338,"index":0,"dt":[],"texts":["ADVANCED_ACP_OK"]},{"type":"chunk","time":1792135123338,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_ACP_OK"}}},{"type":"chunk","time":1792135123338,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135123338,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":5}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/advanced-toolchain/session.1.v4.jsonl b/snapshots/session/advanced-toolchain/session.1.v4.jsonl index 71b749931e..c3c72825b5 100644 --- a/snapshots/session/advanced-toolchain/session.1.v4.jsonl +++ b/snapshots/session/advanced-toolchain/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783950001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Check direct child","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Check direct child","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/advanced-toolchain/session.2.v4.jsonl b/snapshots/session/advanced-toolchain/session.2.v4.jsonl index cae6cd4fb6..66762ef641 100644 --- a/snapshots/session/advanced-toolchain/session.2.v4.jsonl +++ b/snapshots/session/advanced-toolchain/session.2.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:3}}","createdAt":1783950002000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"advanced-headless-snapshot child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"workflow-{{workflow:1}}-1","label":"advanced-headless-snapshot child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/advanced-toolchain/session.v4.jsonl b/snapshots/session/advanced-toolchain/session.v4.jsonl index 6259b5167b..0d559bd289 100644 --- a/snapshots/session/advanced-toolchain/session.v4.jsonl +++ b/snapshots/session/advanced-toolchain/session.v4.jsonl @@ -12,7 +12,7 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":["bash","cordis_inspect_list","cordis_inspect_query","create_goal","edit","exit_plan_mode","get_goal","glob","grep","interrupt_agent","job_kill","job_list","job_output","list_agents","read","read_image","send_message","skill","subagent","subagent_fork","todo_write","update_goal","web_fetch","web_search","workflow","working_directory","write"]},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Run this advanced flow exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123960954,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123960954,"index":0,"dt":[],"id":"advanced-inspect-before","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792123960954,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792123960954,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123960954,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135122055,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135122055,"index":0,"dt":[],"id":"advanced-inspect-before","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792135122055,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792135122055,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135122055,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"advanced-inspect-before","name":"cordis_inspect_list","arguments":"{}"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-inspect-before"},"toolCallId":"advanced-inspect-before","content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} @@ -20,7 +20,7 @@ {"type":"system/message","data":{"turn":1,"step":2,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"system-prompt"},"id":"{{message:6}}"}},"sourceEventSeqs":[7],"surfaceOp":{"op":"replace","startSeq":7,"endSeq":7}} {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":["run_code"]},"reason":"change","startsSeries":true}} {"type":"developer/message","data":{"turn":1,"step":2,"message":{"source":{"kind":"tool-registry"},"content":[{"type":"tool-addition","toolName":"run_code"},{"type":"tool-removal","toolName":"bash"},{"type":"tool-removal","toolName":"cordis_inspect_list"},{"type":"tool-removal","toolName":"cordis_inspect_query"},{"type":"tool-removal","toolName":"create_goal"},{"type":"tool-removal","toolName":"edit"},{"type":"tool-removal","toolName":"exit_plan_mode"},{"type":"tool-removal","toolName":"get_goal"},{"type":"tool-removal","toolName":"glob"},{"type":"tool-removal","toolName":"grep"},{"type":"tool-removal","toolName":"interrupt_agent"},{"type":"tool-removal","toolName":"job_kill"},{"type":"tool-removal","toolName":"job_list"},{"type":"tool-removal","toolName":"job_output"},{"type":"tool-removal","toolName":"list_agents"},{"type":"tool-removal","toolName":"read"},{"type":"tool-removal","toolName":"read_image"},{"type":"tool-removal","toolName":"send_message"},{"type":"tool-removal","toolName":"skill"},{"type":"tool-removal","toolName":"subagent"},{"type":"tool-removal","toolName":"subagent_fork"},{"type":"tool-removal","toolName":"todo_write"},{"type":"tool-removal","toolName":"update_goal"},{"type":"tool-removal","toolName":"web_fetch"},{"type":"tool-removal","toolName":"web_search"},{"type":"tool-removal","toolName":"workflow"},{"type":"tool-removal","toolName":"working_directory"},{"type":"tool-removal","toolName":"write"}],"role":"developer","id":"{{message:7}}"},"headerSeq":19},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123960977,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123960977,"index":0,"dt":[],"id":"advanced-code","name":"run_code","args":["{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"]},{"type":"chunk","time":1792123960977,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"}}},{"type":"chunk","time":1792123960977,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123960977,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135122079,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135122079,"index":0,"dt":[],"id":"advanced-code","name":"run_code","args":["{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"]},{"type":"chunk","time":1792135122079,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"}}},{"type":"chunk","time":1792135122079,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135122079,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"advanced-code","name":"run_code","arguments":"{\"code\":\"const inspected = await tools.cordis_inspect_list({}); return inspected.providers.map(provider => provider.id);\",\"description\":\"Discover runtime APIs through PTC\"}"}} {"type":"tool/ptc-dispatch-start","data":{"rootCallId":"advanced-code","parentCallId":"advanced-code","subCallId":"advanced-code:ptc:1","name":"cordis_inspect_list","arguments":{}}} {"type":"tool/ptc-dispatch","data":{"rootCallId":"advanced-code","parentCallId":"advanced-code","subCallId":"advanced-code:ptc:1","name":"cordis_inspect_list","arguments":{},"isError":false,"content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}]}} @@ -30,32 +30,30 @@ {"type":"system/message","data":{"turn":1,"step":3,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"system-prompt"},"id":"{{message:10}}"}},"sourceEventSeqs":[18],"surfaceOp":{"op":"replace","startSeq":18,"endSeq":18}} {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":["bash","cordis_inspect_list","cordis_inspect_query","create_goal","edit","exit_plan_mode","get_goal","glob","grep","interrupt_agent","job_kill","job_list","job_output","list_agents","read","read_image","send_message","skill","subagent","subagent_fork","todo_write","update_goal","web_fetch","web_search","workflow","working_directory","write"]},"reason":"change","startsSeries":true}} {"type":"developer/message","data":{"turn":1,"step":3,"message":{"source":{"kind":"tool-registry"},"content":[{"type":"tool-addition","toolName":"bash"},{"type":"tool-addition","toolName":"cordis_inspect_list"},{"type":"tool-addition","toolName":"cordis_inspect_query"},{"type":"tool-addition","toolName":"create_goal"},{"type":"tool-addition","toolName":"edit"},{"type":"tool-addition","toolName":"exit_plan_mode"},{"type":"tool-addition","toolName":"get_goal"},{"type":"tool-addition","toolName":"glob"},{"type":"tool-addition","toolName":"grep"},{"type":"tool-addition","toolName":"interrupt_agent"},{"type":"tool-addition","toolName":"job_kill"},{"type":"tool-addition","toolName":"job_list"},{"type":"tool-addition","toolName":"job_output"},{"type":"tool-addition","toolName":"list_agents"},{"type":"tool-addition","toolName":"read"},{"type":"tool-addition","toolName":"read_image"},{"type":"tool-addition","toolName":"send_message"},{"type":"tool-addition","toolName":"skill"},{"type":"tool-addition","toolName":"subagent"},{"type":"tool-addition","toolName":"subagent_fork"},{"type":"tool-addition","toolName":"todo_write"},{"type":"tool-addition","toolName":"update_goal"},{"type":"tool-addition","toolName":"web_fetch"},{"type":"tool-addition","toolName":"web_search"},{"type":"tool-addition","toolName":"workflow"},{"type":"tool-addition","toolName":"working_directory"},{"type":"tool-addition","toolName":"write"},{"type":"tool-removal","toolName":"run_code"}],"role":"developer","id":"{{message:11}}"},"headerSeq":29},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123961121,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123961121,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":["{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123961121,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123961121,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123961121,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135122174,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135122174,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":["{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135122174,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135122174,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135122174,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"advanced-direct-child","name":"subagent","arguments":"{\"description\":\"Check direct child\",\"prompt\":\"Reply with exactly DIRECT_CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123961127,"mode":"continuable","label":"Check direct child"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135122180,"mode":"continuable","label":"Check direct child","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:13}}"}]}} {"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-direct-child"},"toolCallId":"advanced-direct-child","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:14}}"}},"sourceEventSeqs":[32],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":4}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:13}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:15}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123961192,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123961192,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":["{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"]},{"type":"chunk","time":1792123961192,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"}}},{"type":"chunk","time":1792123961192,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123961192,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:15}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135122235,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135122235,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":["{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"]},{"type":"chunk","time":1792135122235,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"}}},{"type":"chunk","time":1792135122235,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135122235,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"advanced-workflow","name":"workflow","arguments":"{\"script\":\"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\",\"meta\":{\"name\":\"advanced-headless-snapshot\",\"description\":\"exercise one workflow child through the headless agent\"}}"}} {"type":"tool-workflow/run-start","data":{"runId":"{{workflow:1}}","name":"advanced-headless-snapshot"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792123961283,"mode":"continuable","label":"advanced-headless-snapshot child 1"}} -{"type":"subagent/named","data":{"name":"workflow-{{workflow:1}}-1","id":"{{session:3}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792135122298,"mode":"continuable","label":"advanced-headless-snapshot child 1","name":"workflow-{{workflow:1}}-1"}} {"type":"tool-workflow/agent-start","data":{"runId":"{{workflow:1}}","seq":1,"label":"workflow-child","phase":"Delegate","childId":"{{session:3}}"}} {"type":"tool-workflow/agent-end","data":{"runId":"{{workflow:1}}","seq":1,"outcome":"completed"}} {"type":"tool-workflow/run-end","data":{"runId":"{{workflow:1}}","stopReason":"completed"}} -{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-headless-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{message:16}}"}},"sourceEventSeqs":[42],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-headless-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{message:16}}"}},"sourceEventSeqs":[41],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"step/start","data":{"turn":1,"step":5}} -{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:17}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123961354,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123961354,"index":0,"dt":[],"id":"advanced-inspect-after","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792123961354,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792123961354,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123961354,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:17}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135122371,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135122371,"index":0,"dt":[],"id":"advanced-inspect-after","name":"cordis_inspect_list","args":["{}"]},{"type":"chunk","time":1792135122371,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}}},{"type":"chunk","time":1792135122371,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135122371,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":5,"callId":"advanced-inspect-after","name":"cordis_inspect_list","arguments":"{}"}} -{"type":"tool/result","data":{"turn":1,"step":5,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-inspect-after"},"toolCallId":"advanced-inspect-after","content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}],"isError":false,"id":"{{message:18}}"}},"sourceEventSeqs":[53],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":5,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-inspect-after"},"toolCallId":"advanced-inspect-after","content":[{"type":"text","text":"{\n \"providers\": [\n {\n \"platform\": \"host\",\n \"id\": \"Service\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"methods\": [\n {\n \"name\": \"listService\",\n \"description\": \"Progressive Host Service discovery: compact capability/signature directory, then one exact coding contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"service\": {\n \"type\": \"string\",\n \"description\": \"Exact Service key. Omit it for the compact Service and method-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Service directory, or one exact Service contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Event\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"methods\": [\n {\n \"name\": \"listEvents\",\n \"description\": \"Progressive Host Event discovery: compact listener directory, then one exact event contract.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Exact Event name. Omit it for the compact Event and listener-signature directory.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"Compact Event directory, or one exact Event contract with only its referenced type declarations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Config\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"methods\": [\n {\n \"name\": \"listConfigs\",\n \"description\": \"Progressive live plugin Config discovery: paged entry directory with schema status, then one entry's exact JSON Schema.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"entry\": {\n \"type\": \"string\",\n \"description\": \"Exact Loader entry id from the directory; returns that entry's projected Config schema.\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Exact plugin package name; limits the directory to its entries.\"\n },\n \"offset\": {\n \"type\": \"number\",\n \"description\": \"Zero-based directory offset; defaults to 0.\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Directory page size, from 1 to 100; defaults to 25.\"\n }\n },\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"One directory page of live entries with patch ids, Config status, total, and nextOffset, or one entry's projected JSON Schema with shared definitions, omission acceptance, and projection limitations.\"\n }\n }\n ]\n },\n {\n \"platform\": \"host\",\n \"id\": \"Tool\",\n \"description\": \"Tools visible to the requesting Agent, including scoped and dynamic registrations.\",\n \"methods\": [\n {\n \"name\": \"listTools\",\n \"description\": \"Return every Tool schema currently callable by this Agent.\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n },\n \"outputSchema\": {\n \"description\": \"JSON data owned by this inspect provider.\"\n }\n }\n ]\n }\n ]\n}"}],"isError":false,"id":"{{message:18}}"}},"sourceEventSeqs":[51],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":5}} {"type":"step/start","data":{"turn":1,"step":6}} -{"type":"assistant/message","data":{"turn":1,"step":6,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_HEADLESS_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:19}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123961371,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123961371,"index":0,"dt":[],"texts":["ADVANCED_HEADLESS_OK"]},{"type":"chunk","time":1792123961371,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_HEADLESS_OK"}}},{"type":"chunk","time":1792123961371,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123961371,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":6,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_HEADLESS_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:19}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135122388,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135122388,"index":0,"dt":[],"texts":["ADVANCED_HEADLESS_OK"]},{"type":"chunk","time":1792135122388,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_HEADLESS_OK"}}},{"type":"chunk","time":1792135122388,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135122388,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":6}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/product-subagent-result-diagnostic/session.v4.jsonl b/snapshots/session/product-subagent-result-diagnostic/session.v4.jsonl index bf49f142fb..8a95390740 100644 --- a/snapshots/session/product-subagent-result-diagnostic/session.v4.jsonl +++ b/snapshots/session/product-subagent-result-diagnostic/session.v4.jsonl @@ -12,56 +12,51 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-pro"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-pro"}} {"type":"session/title","data":{"title":"Observe four diagnostic failures with","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_claude_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123794519,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123794519,"index":0,"dt":[],"id":"call_claude_foreground","name":"subagent_codex","args":["{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123794519,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_claude_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123794519,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123794519,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_claude_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135125544,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135125544,"index":0,"dt":[],"id":"call_claude_foreground","name":"subagent_codex","args":["{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135125544,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_claude_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135125544,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135125544,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_claude_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude foreground diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792123794525,"mode":"external","label":"Observe Claude foreground diagnostic"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{id:1}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792135125551,"mode":"external","label":"Observe Claude foreground diagnostic","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial assistant text"},{"type":"text","text":"Product subagent failure (product: Claude Code; stage: query-run; category: limit)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_claude_foreground"},"toolCallId":"call_claude_foreground","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial assistant text"},{"type":"text","text":"Product subagent failure (product: Claude Code; stage: query-run; category: limit)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_claude_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123794539,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123794539,"index":0,"dt":[],"id":"call_claude_background","name":"subagent_codex","args":["{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792123794539,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_claude_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123794539,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123794539,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_claude_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135125567,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135125568,"index":0,"dt":[],"id":"call_claude_background","name":"subagent_codex","args":["{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792135125568,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_claude_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135125568,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135125568,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"call_claude_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Claude background diagnostic\",\"prompt\":\"Return the Claude diagnostic failure.\",\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:2}}","childCreatedAt":1792123794544,"mode":"external","label":"Observe Claude background diagnostic"}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{id:2}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:2}}","childCreatedAt":1792135125572,"mode":"external","label":"Observe Claude background diagnostic","name":"worker-2"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"Product subagent failure (product: Claude Code; stage: query-run; category: limit)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{id:2}}"},"role":"user","id":"{{message:8}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_claude_background"},"toolCallId":"call_claude_background","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[24],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_claude_background"},"toolCallId":"call_claude_background","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[23],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":3}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-2 failed before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"Product subagent failure (product: Claude Code; stage: query-run; category: limit)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 failed before it finished.","senderSessionId":"{{id:2}}"},"role":"user","id":"{{message:8}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_codex_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123794555,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123794556,"index":0,"dt":[],"id":"call_codex_foreground","name":"subagent_codex","args":["{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"]},{"type":"chunk","time":1792123794556,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_codex_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"}}},{"type":"chunk","time":1792123794556,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123794556,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_codex_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135125585,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135125585,"index":0,"dt":[],"id":"call_codex_foreground","name":"subagent_codex","args":["{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"]},{"type":"chunk","time":1792135125585,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_codex_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"}}},{"type":"chunk","time":1792135125585,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135125585,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"call_codex_foreground","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex foreground diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-3\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:3}}","childCreatedAt":1792123794560,"mode":"external","label":"Observe Codex foreground diagnostic"}} -{"type":"subagent/named","data":{"name":"worker-3","id":"{{id:3}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:3}}","childCreatedAt":1792135125590,"mode":"external","label":"Observe Codex foreground diagnostic","name":"worker-3"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-3 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial assistant text"},{"type":"text","text":"Product subagent failure (product: Codex; stage: turn; category: transport; HTTP status: 503)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-3 failed before it finished.","senderSessionId":"{{id:3}}"},"role":"user","id":"{{message:11}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"call_codex_foreground"},"toolCallId":"call_codex_foreground","content":[{"type":"text","text":"started subagent worker-3"}],"isError":false,"id":"{{message:12}}"}},"sourceEventSeqs":[34],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"call_codex_foreground"},"toolCallId":"call_codex_foreground","content":[{"type":"text","text":"started subagent worker-3"}],"isError":false,"id":"{{message:12}}"}},"sourceEventSeqs":[32],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":4}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-3 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial assistant text"},{"type":"text","text":"Product subagent failure (product: Codex; stage: turn; category: transport; HTTP status: 503)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-3 failed before it finished.","senderSessionId":"{{id:3}}"},"role":"user","id":"{{message:11}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_codex_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:13}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123794572,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123794572,"index":0,"dt":[],"id":"call_codex_background","name":"subagent_codex","args":["{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"]},{"type":"chunk","time":1792123794572,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_codex_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"}}},{"type":"chunk","time":1792123794572,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123794572,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_codex_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:13}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135125603,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135125603,"index":0,"dt":[],"id":"call_codex_background","name":"subagent_codex","args":["{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"]},{"type":"chunk","time":1792135125603,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_codex_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"}}},{"type":"chunk","time":1792135125603,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135125603,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"call_codex_background","name":"subagent_codex","arguments":"{\"description\":\"Observe Codex background diagnostic\",\"prompt\":\"Return the Codex diagnostic failure.\",\"name\":\"worker-4\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:4}}","childCreatedAt":1792123794577,"mode":"external","label":"Observe Codex background diagnostic"}} -{"type":"subagent/named","data":{"name":"worker-4","id":"{{id:4}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:4}}","childCreatedAt":1792135125608,"mode":"external","label":"Observe Codex background diagnostic","name":"worker-4"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-4 failed before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"Product subagent failure (product: Codex; stage: turn; category: transport; HTTP status: 503)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-4 failed before it finished.","senderSessionId":"{{id:4}}"},"role":"user","id":"{{message:14}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"call_codex_background"},"toolCallId":"call_codex_background","content":[{"type":"text","text":"started subagent worker-4"}],"isError":false,"id":"{{message:15}}"}},"sourceEventSeqs":[44],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"call_codex_background"},"toolCallId":"call_codex_background","content":[{"type":"text","text":"started subagent worker-4"}],"isError":false,"id":"{{message:15}}"}},"sourceEventSeqs":[41],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":5}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-4 failed before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"Product subagent failure (product: Codex; stage: turn; category: transport; HTTP status: 503)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-4 failed before it finished.","senderSessionId":"{{id:4}}"},"role":"user","id":"{{message:14}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_cleanup_failure","name":"subagent_codex","arguments":"{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:16}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123794590,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123794590,"index":0,"dt":[],"id":"call_cleanup_failure","name":"subagent_codex","args":["{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"]},{"type":"chunk","time":1792123794590,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_cleanup_failure","name":"subagent_codex","arguments":"{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"}}},{"type":"chunk","time":1792123794590,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123794590,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_cleanup_failure","name":"subagent_codex","arguments":"{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:16}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135125621,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135125621,"index":0,"dt":[],"id":"call_cleanup_failure","name":"subagent_codex","args":["{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"]},{"type":"chunk","time":1792135125621,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_cleanup_failure","name":"subagent_codex","arguments":"{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"}}},{"type":"chunk","time":1792135125621,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135125621,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":5,"callId":"call_cleanup_failure","name":"subagent_codex","arguments":"{\"description\":\"Observe completed output after cleanup failure\",\"prompt\":\"Complete the task, then fail cleanup.\",\"name\":\"worker-5\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:5}}","childCreatedAt":1792123794594,"mode":"external","label":"Observe completed output after cleanup failure"}} -{"type":"subagent/named","data":{"name":"worker-5","id":"{{id:5}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:5}}","childCreatedAt":1792135125626,"mode":"external","label":"Observe completed output after cleanup failure","name":"worker-5"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-5 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ANSWER_SURVIVES_CLEANUP_FAILURE"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-5 finished. It cannot receive follow-up messages.","senderSessionId":"{{id:5}}"},"role":"user","id":"{{message:17}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":5,"message":{"role":"tool","source":{"kind":"tool","callId":"call_cleanup_failure"},"toolCallId":"call_cleanup_failure","content":[{"type":"text","text":"started subagent worker-5"}],"isError":false,"id":"{{message:18}}"}},"sourceEventSeqs":[54],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":5,"message":{"role":"tool","source":{"kind":"tool","callId":"call_cleanup_failure"},"toolCallId":"call_cleanup_failure","content":[{"type":"text","text":"started subagent worker-5"}],"isError":false,"id":"{{message:18}}"}},"sourceEventSeqs":[50],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":5}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":6}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-5 finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ANSWER_SURVIVES_CLEANUP_FAILURE"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-5 finished. It cannot receive follow-up messages.","senderSessionId":"{{id:5}}"},"role":"user","id":"{{message:17}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":6,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_DIAGNOSTICS"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:19}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792123794607,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123794607,"index":0,"dt":[],"texts":["PARENT_OBSERVED_DIAGNOSTICS"]},{"type":"chunk","time":1792123794607,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_DIAGNOSTICS"}}},{"type":"chunk","time":1792123794607,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792123794607,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":6,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_DIAGNOSTICS"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:19}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792135125640,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135125640,"index":0,"dt":[],"texts":["PARENT_OBSERVED_DIAGNOSTICS"]},{"type":"chunk","time":1792135125640,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_DIAGNOSTICS"}}},{"type":"chunk","time":1792135125640,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792135125640,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":6}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/ralph-loop/session.1.v4.jsonl b/snapshots/session/ralph-loop/session.1.v4.jsonl index 9dfd11b7cf..89fc58e0c7 100644 --- a/snapshots/session/ralph-loop/session.1.v4.jsonl +++ b/snapshots/session/ralph-loop/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783951001000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"ralph-loop child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"workflow-{{workflow:1}}-1","label":"ralph-loop child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/ralph-loop/session.2.v4.jsonl b/snapshots/session/ralph-loop/session.2.v4.jsonl index 4fe4beb081..96b0bdff11 100644 --- a/snapshots/session/ralph-loop/session.2.v4.jsonl +++ b/snapshots/session/ralph-loop/session.2.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:3}}","createdAt":1783951002000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"ralph-loop child 2","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"workflow-{{workflow:1}}-2","label":"ralph-loop child 2","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/ralph-loop/session.v4.jsonl b/snapshots/session/ralph-loop/session.v4.jsonl index 9eb74aa7fe..b61a70b560 100644 --- a/snapshots/session/ralph-loop/session.v4.jsonl +++ b/snapshots/session/ralph-loop/session.v4.jsonl @@ -12,15 +12,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Run a two-round fresh-agent Ralph","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_ralph","name":"ralph","arguments":"{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":20,"outputTokens":8},"stream":[{"type":"chunk","time":1792124598917,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792124598918,"index":0,"dt":[],"id":"call_ralph","name":"ralph","args":["{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"]},{"type":"chunk","time":1792124598918,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_ralph","name":"ralph","arguments":"{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"}}},{"type":"chunk","time":1792124598918,"chunk":{"type":"usage","usage":{"inputTokens":20,"outputTokens":8}}},{"type":"chunk","time":1792124598918,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_ralph","name":"ralph","arguments":"{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":20,"outputTokens":8},"stream":[{"type":"chunk","time":1792135126223,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135126223,"index":0,"dt":[],"id":"call_ralph","name":"ralph","args":["{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"]},{"type":"chunk","time":1792135126223,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_ralph","name":"ralph","arguments":"{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"}}},{"type":"chunk","time":1792135126223,"chunk":{"type":"usage","usage":{"inputTokens":20,"outputTokens":8}}},{"type":"chunk","time":1792135126223,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_ralph","name":"ralph","arguments":"{\"objective\":\"Prove two fresh Ralph rounds through the shipped headless app.\",\"maxRounds\":2}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792124599036,"mode":"continuable","label":"ralph-loop child 1"}} -{"type":"subagent/named","data":{"name":"workflow-{{workflow:1}}-1","id":"{{session:2}}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792124599090,"mode":"continuable","label":"ralph-loop child 2"}} -{"type":"subagent/named","data":{"name":"workflow-{{workflow:1}}-2","id":"{{session:3}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135126319,"mode":"continuable","label":"ralph-loop child 1","name":"workflow-{{workflow:1}}-1"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792135126373,"mode":"continuable","label":"ralph-loop child 2","name":"workflow-{{workflow:1}}-2"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_ralph"},"toolCallId":"call_ralph","content":[{"type":"text","text":"Ralph worker reported completion after 2 rounds.\nFinal report:\n{\n \"status\": \"complete\",\n \"summary\": \"The Ralph snapshot objective is complete.\",\n \"evidence\": [\n \"Two fresh rounds completed through the shipped app.\"\n ],\n \"nextSteps\": [],\n \"blocker\": \"\"\n}"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"RALPH SNAPSHOT COMPLETE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":30,"outputTokens":4},"stream":[{"type":"chunk","time":1792124599180,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792124599180,"index":0,"dt":[],"texts":["RALPH SNAPSHOT COMPLETE"]},{"type":"chunk","time":1792124599180,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"RALPH SNAPSHOT COMPLETE"}}},{"type":"chunk","time":1792124599180,"chunk":{"type":"usage","usage":{"inputTokens":30,"outputTokens":4}}},{"type":"chunk","time":1792124599180,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"RALPH SNAPSHOT COMPLETE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":30,"outputTokens":4},"stream":[{"type":"chunk","time":1792135126465,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135126465,"index":0,"dt":[],"texts":["RALPH SNAPSHOT COMPLETE"]},{"type":"chunk","time":1792135126465,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"RALPH SNAPSHOT COMPLETE"}}},{"type":"chunk","time":1792135126465,"chunk":{"type":"usage","usage":{"inputTokens":30,"outputTokens":4}}},{"type":"chunk","time":1792135126465,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-acp-diagnostic/session.v4.jsonl b/snapshots/session/subagent-acp-diagnostic/session.v4.jsonl index bbe4971cf8..3e1b569b03 100644 --- a/snapshots/session/subagent-acp-diagnostic/session.v4.jsonl +++ b/snapshots/session/subagent-acp-diagnostic/session.v4.jsonl @@ -12,26 +12,24 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-pro"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-pro"}} {"type":"session/title","data":{"title":"Observe the ACP diagnostic twice","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_acp_first","name":"subagent_acp","arguments":"{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123795368,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123795368,"index":0,"dt":[],"id":"call_acp_first","name":"subagent_acp","args":["{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123795368,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_acp_first","name":"subagent_acp","arguments":"{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123795368,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123795368,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_acp_first","name":"subagent_acp","arguments":"{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135127117,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135127118,"index":0,"dt":[],"id":"call_acp_first","name":"subagent_acp","args":["{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135127118,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_acp_first","name":"subagent_acp","arguments":"{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135127118,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135127118,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_acp_first","name":"subagent_acp","arguments":"{\"description\":\"Observe first ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792123795489,"mode":"external","label":"Observe first ACP failure"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{id:1}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792135127269,"mode":"external","label":"Observe first ACP failure","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 was stopped before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"ACP unattended decision (policy: reject; request: execute; decision: denied)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 was stopped before it finished.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_acp_first"},"toolCallId":"call_acp_first","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 was stopped before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"ACP unattended decision (policy: reject; request: execute; decision: denied)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 was stopped before it finished.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_acp_second","name":"subagent_acp","arguments":"{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123795523,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123795523,"index":0,"dt":[],"id":"call_acp_second","name":"subagent_acp","args":["{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792123795523,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_acp_second","name":"subagent_acp","arguments":"{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123795523,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123795523,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_acp_second","name":"subagent_acp","arguments":"{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135127302,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135127302,"index":0,"dt":[],"id":"call_acp_second","name":"subagent_acp","args":["{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"]},{"type":"chunk","time":1792135127302,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_acp_second","name":"subagent_acp","arguments":"{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135127302,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135127302,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"call_acp_second","name":"subagent_acp","arguments":"{\"description\":\"Observe second ACP failure\",\"prompt\":\"Return the scripted ACP failure.\",\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:2}}","childCreatedAt":1792123795637,"mode":"external","label":"Observe second ACP failure"}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{id:2}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:2}}","childCreatedAt":1792135127433,"mode":"external","label":"Observe second ACP failure","name":"worker-2"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 was stopped before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"ACP unattended decision (policy: reject; request: execute; decision: denied)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 was stopped before it finished.","senderSessionId":"{{id:2}}"},"role":"user","id":"{{message:8}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_acp_second"},"toolCallId":"call_acp_second","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[24],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_acp_second"},"toolCallId":"call_acp_second","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[23],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":3}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-2 was stopped before it finished."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"ACP unattended decision (policy: reject; request: execute; decision: denied)"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 was stopped before it finished.","senderSessionId":"{{id:2}}"},"role":"user","id":"{{message:8}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_ACP_DIAGNOSTIC"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792123795670,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123795670,"index":0,"dt":[],"texts":["PARENT_OBSERVED_ACP_DIAGNOSTIC"]},{"type":"chunk","time":1792123795670,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_ACP_DIAGNOSTIC"}}},{"type":"chunk","time":1792123795670,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792123795670,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_OBSERVED_ACP_DIAGNOSTIC"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-pro"},"id":"{{message:10}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792135127465,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135127465,"index":0,"dt":[],"texts":["PARENT_OBSERVED_ACP_DIAGNOSTIC"]},{"type":"chunk","time":1792135127465,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_OBSERVED_ACP_DIAGNOSTIC"}}},{"type":"chunk","time":1792135127465,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792135127465,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-agent-preset/session.1.v4.jsonl b/snapshots/session/subagent-agent-preset/session.1.v4.jsonl index 80a71bf2fd..6724c6f531 100644 --- a/snapshots/session/subagent-agent-preset/session.1.v4.jsonl +++ b/snapshots/session/subagent-agent-preset/session.1.v4.jsonl @@ -1,6 +1,6 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783352120855,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1,"agentPreset":"reviewer"} {"type":"agent-preset/selected","data":{"agentPreset":"reviewer"}} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-agent-preset/session.v4.jsonl b/snapshots/session/subagent-agent-preset/session.v4.jsonl index 06fe6a9c81..27350644ca 100644 --- a/snapshots/session/subagent-agent-preset/session.v4.jsonl +++ b/snapshots/session/subagent-agent-preset/session.v4.jsonl @@ -13,14 +13,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792123796415,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123796415,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792123796416,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123796416,"index":1,"dt":[],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123796416,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792123796416,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123796416,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792123796416,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792135128096,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135128096,"index":0,"dt":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792135128097,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135128097,"index":1,"dt":[],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135128097,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792135128097,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135128098,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792135128098,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"agent_preset\":\"reviewer\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123796423,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135128105,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_gVbLWC12Qu8JheZpVRRz8749"},"toolCallId":"call_00_gVbLWC12Qu8JheZpVRRz8749","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792123796459,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123796460,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792123796460,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123796460,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123796460,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792123796460,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123796460,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792123796460,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792135128144,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135128144,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792135128144,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135128144,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135128144,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792135128144,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135128144,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792135128144,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -28,6 +27,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123796485,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123796485,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792123796485,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123796485,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123796485,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135128177,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135128177,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792135128177,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135128177,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135128177,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-child-question-rejection/session.1.v4.jsonl b/snapshots/session/subagent-child-question-rejection/session.1.v4.jsonl index f0888ecb76..0feb37ddbf 100644 --- a/snapshots/session/subagent-child-question-rejection/session.1.v4.jsonl +++ b/snapshots/session/subagent-child-question-rejection/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625677671,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Check deployment question","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Check deployment question","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-child-question-rejection/session.v4.jsonl b/snapshots/session/subagent-child-question-rejection/session.v4.jsonl index 493dae149e..5bea09634b 100644 --- a/snapshots/session/subagent-child-question-rejection/session.v4.jsonl +++ b/snapshots/session/subagent-child-question-rejection/session.v4.jsonl @@ -12,14 +12,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Delegate one question check. Ask","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_question_child","name":"subagent","arguments":"{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123797269,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123797269,"index":0,"dt":[],"id":"call_question_child","name":"subagent","args":["{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123797269,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_question_child","name":"subagent","arguments":"{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123797269,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123797269,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_question_child","name":"subagent","arguments":"{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135128763,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135128763,"index":0,"dt":[],"id":"call_question_child","name":"subagent","args":["{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135128763,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_question_child","name":"subagent","arguments":"{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135128763,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135128763,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_question_child","name":"subagent","arguments":"{\"description\":\"Check deployment question\",\"prompt\":\"Call ask_user_question once to ask whether deployment should use the CUDA fallback. If the tool returns an error, include the unresolved question verbatim in your final result.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123797276,"mode":"continuable","label":"Check deployment question"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135128769,"mode":"continuable","label":"Check deployment question","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_question_child"},"toolCallId":"call_question_child","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_COMPLETED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792123797314,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123797314,"index":0,"dt":[],"texts":["PARENT_COMPLETED"]},{"type":"chunk","time":1792123797314,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_COMPLETED"}}},{"type":"chunk","time":1792123797314,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792123797314,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_COMPLETED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792135128809,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135128809,"index":0,"dt":[],"texts":["PARENT_COMPLETED"]},{"type":"chunk","time":1792135128809,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_COMPLETED"}}},{"type":"chunk","time":1792135128809,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792135128809,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"UNRESOLVED: Should deployment use the CUDA fallback?"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -27,6 +26,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"UNRESOLVED: Should deployment use the CUDA fallback?"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_COMPLETED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123797360,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123797360,"index":0,"dt":[],"texts":["PARENT_COMPLETED"]},{"type":"chunk","time":1792123797360,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_COMPLETED"}}},{"type":"chunk","time":1792123797360,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123797360,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_COMPLETED"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135128856,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135128856,"index":0,"dt":[],"texts":["PARENT_COMPLETED"]},{"type":"chunk","time":1792135128856,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_COMPLETED"}}},{"type":"chunk","time":1792135128856,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135128856,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-depth-two-rejection/session.1.v4.jsonl b/snapshots/session/subagent-depth-two-rejection/session.1.v4.jsonl index 7fd83e68c4..e98202cd3d 100644 --- a/snapshots/session/subagent-depth-two-rejection/session.1.v4.jsonl +++ b/snapshots/session/subagent-depth-two-rejection/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625678879,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Start depth one","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Start depth one","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} @@ -15,7 +15,7 @@ {"type":"session/title","data":{"title":"Call subagent once. Ask that","messageSeqs":[9],"source":{"kind":"fallback"}}} {"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_depth_one_child","name":"subagent","arguments":"{\"description\":\"Start depth two\",\"prompt\":\"Attempt one subagent call beyond the configured cap, then report the rejection.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1789625678920,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1789625678920,"index":0,"dt":[],"id":"call_depth_one_child","name":"subagent","args":["{\"description\":\"Start depth two\",\"prompt\":\"Attempt one subagent call beyond the configured cap, then report the rejection.\",\"run_in_background\":false,\"name\":\"worker-2\"}"]},{"type":"chunk","time":1789625678920,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_depth_one_child","name":"subagent","arguments":"{\"description\":\"Start depth two\",\"prompt\":\"Attempt one subagent call beyond the configured cap, then report the rejection.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1789625678920,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1789625678920,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_depth_one_child","name":"subagent","arguments":"{\"description\":\"Start depth two\",\"prompt\":\"Attempt one subagent call beyond the configured cap, then report the rejection.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1789625678926,"mode":"continuable","label":"Start depth two"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1789625678926,"mode":"continuable","label":"Start depth two","name":"worker-2"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_depth_one_child"},"toolCallId":"call_depth_one_child","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:13}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} diff --git a/snapshots/session/subagent-depth-two-rejection/session.2.v4.jsonl b/snapshots/session/subagent-depth-two-rejection/session.2.v4.jsonl index eea3738b28..b46a32bd39 100644 --- a/snapshots/session/subagent-depth-two-rejection/session.2.v4.jsonl +++ b/snapshots/session/subagent-depth-two-rejection/session.2.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:3}}","createdAt":1789625678926,"cwd":"{{cwd}}","parentSession":"{{session:2}}","isSeeded":false,"origin":"subagent","delegationDepth":2} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Start depth two","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-2","label":"Start depth two","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-depth-two-rejection/session.v4.jsonl b/snapshots/session/subagent-depth-two-rejection/session.v4.jsonl index 00f6748b9b..1c4829a2dd 100644 --- a/snapshots/session/subagent-depth-two-rejection/session.v4.jsonl +++ b/snapshots/session/subagent-depth-two-rejection/session.v4.jsonl @@ -12,22 +12,20 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Delegate through two child generations.","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_root_child","name":"subagent","arguments":"{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123798869,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123798869,"index":0,"dt":[],"id":"call_root_child","name":"subagent","args":["{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792123798869,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_root_child","name":"subagent","arguments":"{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123798869,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123798869,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_root_child","name":"subagent","arguments":"{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135129924,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135129924,"index":0,"dt":[],"id":"call_root_child","name":"subagent","args":["{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"]},{"type":"chunk","time":1792135129924,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_root_child","name":"subagent","arguments":"{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135129924,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135129924,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_root_child","name":"subagent","arguments":"{\"description\":\"Start depth one\",\"prompt\":\"Call subagent once. Ask that child to attempt one further subagent call, then report the result.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123798877,"mode":"continuable","label":"Start depth one"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135129931,"mode":"continuable","label":"Start depth one","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_root_child"},"toolCallId":"call_root_child","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"ROOT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792123798916,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123798916,"index":0,"dt":[],"texts":["ROOT_DONE"]},{"type":"chunk","time":1792123798916,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ROOT_DONE"}}},{"type":"chunk","time":1792123798916,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792123798916,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"ROOT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":10,"outputTokens":2},"stream":[{"type":"chunk","time":1792135129965,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135129965,"index":0,"dt":[],"texts":["ROOT_DONE"]},{"type":"chunk","time":1792135129965,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ROOT_DONE"}}},{"type":"chunk","time":1792135129965,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":2}}},{"type":"chunk","time":1792135129965,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{session:3}}"}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DEPTH_ONE_DONE"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} {"type":"turn/start","data":{"turn":2}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 failed before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DEPTH_ONE_DONE"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 failed before it finished.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"ROOT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123799031,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123799031,"index":0,"dt":[],"texts":["ROOT_DONE"]},{"type":"chunk","time":1792123799031,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ROOT_DONE"}}},{"type":"chunk","time":1792123799031,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123799031,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"ROOT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135130098,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135130098,"index":0,"dt":[],"texts":["ROOT_DONE"]},{"type":"chunk","time":1792135130098,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ROOT_DONE"}}},{"type":"chunk","time":1792135130098,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135130098,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-max-tokens-partial/session.1.v4.jsonl b/snapshots/session/subagent-max-tokens-partial/session.1.v4.jsonl index 72d231f68f..d8a2023e8d 100644 --- a/snapshots/session/subagent-max-tokens-partial/session.1.v4.jsonl +++ b/snapshots/session/subagent-max-tokens-partial/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625680183,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Truncated child","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Truncated child","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-max-tokens-partial/session.v4.jsonl b/snapshots/session/subagent-max-tokens-partial/session.v4.jsonl index 65339edbfc..fc0bda8ffd 100644 --- a/snapshots/session/subagent-max-tokens-partial/session.v4.jsonl +++ b/snapshots/session/subagent-max-tokens-partial/session.v4.jsonl @@ -12,14 +12,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_parent_1","name":"subagent","arguments":"{\"description\":\"Truncated child\",\"prompt\":\"Write the words 'partial one', call todo_write once, then keep going until you are cut off.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123799764,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":1792123799764,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_parent_1","name":"subagent","arguments":"{\"description\":\"Truncated child\",\"prompt\":\"Write the words 'partial one', call todo_write once, then keep going until you are cut off.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123799764,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123799764,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_parent_1","name":"subagent","arguments":"{\"description\":\"Truncated child\",\"prompt\":\"Write the words 'partial one', call todo_write once, then keep going until you are cut off.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135130617,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":1792135130617,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_parent_1","name":"subagent","arguments":"{\"description\":\"Truncated child\",\"prompt\":\"Write the words 'partial one', call todo_write once, then keep going until you are cut off.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135130617,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135130617,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_parent_1","name":"subagent","arguments":"{\"description\":\"Truncated child\",\"prompt\":\"Write the words 'partial one', call todo_write once, then keep going until you are cut off.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123799770,"mode":"continuable","label":"Truncated child"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135130623,"mode":"continuable","label":"Truncated child","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_parent_1"},"toolCallId":"call_parent_1","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":12,"outputTokens":2},"stream":[{"type":"chunk","time":1792123799807,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":1792123799807,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123799807,"chunk":{"type":"usage","usage":{"inputTokens":12,"outputTokens":2}}},{"type":"chunk","time":1792123799807,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":12,"outputTokens":2},"stream":[{"type":"chunk","time":1792135130660,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":1792135130660,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135130660,"chunk":{"type":"usage","usage":{"inputTokens":12,"outputTokens":2}}},{"type":"chunk","time":1792135130660,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 ran out of room before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial one"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 ran out of room before it finished.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -27,6 +26,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 ran out of room before it finished."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"partial one"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 ran out of room before it finished.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123799857,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123799857,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792123799857,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123799857,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123799857,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135130703,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135130703,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792135130703,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135130703,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135130703,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-multi/writer.1.expected.jsonl b/snapshots/session/subagent-multi/writer.1.expected.jsonl index b89c6aabfc..c3a0bf9e6b 100644 --- a/snapshots/session/subagent-multi/writer.1.expected.jsonl +++ b/snapshots/session/subagent-multi/writer.1.expected.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783352127669,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Return ALPHA only","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Return ALPHA only","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} @@ -13,6 +13,6 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Reply with exactly the word","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"ALPHA\" and nothing else."},{"type":"text","text":"ALPHA"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:14}}"},"usage":{"inputTokens":49,"outputTokens":23,"cacheReadTokens":2816,"reasoningTokens":19},"stream":[{"type":"chunk","time":1792123971273,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123971274,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," reply"," with"," exactly"," the"," word"," \"","AL","P","HA","\""," and"," nothing"," else","."]},{"type":"chunk","time":1792123971274,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123971274,"index":1,"dt":[0,0],"texts":["AL","P","HA"]},{"type":"chunk","time":1792123971274,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"ALPHA\" and nothing else."}}},{"type":"chunk","time":1792123971274,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"ALPHA"}}},{"type":"chunk","time":1792123971274,"chunk":{"type":"usage","usage":{"inputTokens":49,"outputTokens":23,"cacheReadTokens":2816,"reasoningTokens":19}}},{"type":"chunk","time":1792123971274,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"ALPHA\" and nothing else."},{"type":"text","text":"ALPHA"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:14}}"},"usage":{"inputTokens":49,"outputTokens":23,"cacheReadTokens":2816,"reasoningTokens":19},"stream":[{"type":"chunk","time":1792135131263,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131263,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," reply"," with"," exactly"," the"," word"," \"","AL","P","HA","\""," and"," nothing"," else","."]},{"type":"chunk","time":1792135131263,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135131263,"index":1,"dt":[0,0],"texts":["AL","P","HA"]},{"type":"chunk","time":1792135131263,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"ALPHA\" and nothing else."}}},{"type":"chunk","time":1792135131263,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"ALPHA"}}},{"type":"chunk","time":1792135131263,"chunk":{"type":"usage","usage":{"inputTokens":49,"outputTokens":23,"cacheReadTokens":2816,"reasoningTokens":19}}},{"type":"chunk","time":1792135131263,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-multi/writer.2.expected.jsonl b/snapshots/session/subagent-multi/writer.2.expected.jsonl index 1af5c9f873..e2e45efc06 100644 --- a/snapshots/session/subagent-multi/writer.2.expected.jsonl +++ b/snapshots/session/subagent-multi/writer.2.expected.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:3}}","createdAt":1783352129662,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Return BETA only","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-2","label":"Return BETA only","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} @@ -13,6 +13,6 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Reply with exactly the word","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"BETA\" and nothing else."},{"type":"text","text":"BETA"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:18}}"},"usage":{"inputTokens":48,"outputTokens":21,"cacheReadTokens":2816,"reasoningTokens":18},"stream":[{"type":"chunk","time":1792123971346,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123971346,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," reply"," with"," exactly"," the"," word"," \"","B","ETA","\""," and"," nothing"," else","."]},{"type":"chunk","time":1792123971346,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123971346,"index":1,"dt":[0],"texts":["B","ETA"]},{"type":"chunk","time":1792123971346,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"BETA\" and nothing else."}}},{"type":"chunk","time":1792123971346,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"BETA"}}},{"type":"chunk","time":1792123971346,"chunk":{"type":"usage","usage":{"inputTokens":48,"outputTokens":21,"cacheReadTokens":2816,"reasoningTokens":18}}},{"type":"chunk","time":1792123971346,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"BETA\" and nothing else."},{"type":"text","text":"BETA"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:18}}"},"usage":{"inputTokens":48,"outputTokens":21,"cacheReadTokens":2816,"reasoningTokens":18},"stream":[{"type":"chunk","time":1792135131329,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131329,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," reply"," with"," exactly"," the"," word"," \"","B","ETA","\""," and"," nothing"," else","."]},{"type":"chunk","time":1792135131329,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135131329,"index":1,"dt":[0],"texts":["B","ETA"]},{"type":"chunk","time":1792135131329,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"BETA\" and nothing else."}}},{"type":"chunk","time":1792135131329,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"BETA"}}},{"type":"chunk","time":1792135131329,"chunk":{"type":"usage","usage":{"inputTokens":48,"outputTokens":21,"cacheReadTokens":2816,"reasoningTokens":18}}},{"type":"chunk","time":1792135131329,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-multi/writer.expected.jsonl b/snapshots/session/subagent-multi/writer.expected.jsonl index b11b237434..cd1fd1db33 100644 --- a/snapshots/session/subagent-multi/writer.expected.jsonl +++ b/snapshots/session/subagent-multi/writer.expected.jsonl @@ -12,26 +12,24 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool TWICE,","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to use the subagent tool twice, sequentially (one at a time). First subagent should reply with \"ALPHA\", second with \"BETA\". After both return, I reply with \"PARENT_DONE\"."},{"type":"tool-call","id":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","arguments":"{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2938,"outputTokens":124,"cacheReadTokens":0,"reasoningTokens":49},"stream":[{"type":"chunk","time":1792123971226,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123971226,"index":0,"dt":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," use"," the"," sub","agent"," tool"," twice",","," sequentially"," (","one"," at"," a"," time",")."," First"," sub","agent"," should"," reply"," with"," \"","AL","P","HA","\","," second"," with"," \"","B","ETA","\"."," After"," both"," return",","," I"," reply"," with"," \"","PAR","ENT","_D","ONE","\"."]},{"type":"chunk","time":1792123971227,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123971227,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","args":["{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123971228,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to use the subagent tool twice, sequentially (one at a time). First subagent should reply with \"ALPHA\", second with \"BETA\". After both return, I reply with \"PARENT_DONE\"."}}},{"type":"chunk","time":1792123971228,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","arguments":"{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123971228,"chunk":{"type":"usage","usage":{"inputTokens":2938,"outputTokens":124,"cacheReadTokens":0,"reasoningTokens":49}}},{"type":"chunk","time":1792123971228,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to use the subagent tool twice, sequentially (one at a time). First subagent should reply with \"ALPHA\", second with \"BETA\". After both return, I reply with \"PARENT_DONE\"."},{"type":"tool-call","id":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","arguments":"{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2938,"outputTokens":124,"cacheReadTokens":0,"reasoningTokens":49},"stream":[{"type":"chunk","time":1792135131222,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131222,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," use"," the"," sub","agent"," tool"," twice",","," sequentially"," (","one"," at"," a"," time",")."," First"," sub","agent"," should"," reply"," with"," \"","AL","P","HA","\","," second"," with"," \"","B","ETA","\"."," After"," both"," return",","," I"," reply"," with"," \"","PAR","ENT","_D","ONE","\"."]},{"type":"chunk","time":1792135131222,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135131222,"index":1,"dt":[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","args":["{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135131223,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to use the subagent tool twice, sequentially (one at a time). First subagent should reply with \"ALPHA\", second with \"BETA\". After both return, I reply with \"PARENT_DONE\"."}}},{"type":"chunk","time":1792135131223,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","arguments":"{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135131223,"chunk":{"type":"usage","usage":{"inputTokens":2938,"outputTokens":124,"cacheReadTokens":0,"reasoningTokens":49}}},{"type":"chunk","time":1792135131223,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","name":"subagent","arguments":"{\"description\":\"Return ALPHA only\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123971235,"mode":"continuable","label":"Return ALPHA only"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135131230,"mode":"continuable","label":"Return ALPHA only","name":"worker-1"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_7zDCCjdsQgrk5LR2bAEQ1010"},"toolCallId":"call_00_7zDCCjdsQgrk5LR2bAEQ1010","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"First subagent returned \"ALPHA\". Now I'll call the second subagent to return \"BETA\"."},{"type":"tool-call","id":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","arguments":"{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":133,"outputTokens":96,"cacheReadTokens":2944,"reasoningTokens":23},"stream":[{"type":"chunk","time":1792123971302,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123971302,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["First"," sub","agent"," returned"," \"","AL","P","HA","\"."," Now"," I","'ll"," call"," the"," second"," sub","agent"," to"," return"," \"","B","ETA","\"."]},{"type":"chunk","time":1792123971302,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123971302,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","args":["{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123971302,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"First subagent returned \"ALPHA\". Now I'll call the second subagent to return \"BETA\"."}}},{"type":"chunk","time":1792123971302,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","arguments":"{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123971302,"chunk":{"type":"usage","usage":{"inputTokens":133,"outputTokens":96,"cacheReadTokens":2944,"reasoningTokens":23}}},{"type":"chunk","time":1792123971302,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"First subagent returned \"ALPHA\". Now I'll call the second subagent to return \"BETA\"."},{"type":"tool-call","id":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","arguments":"{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":133,"outputTokens":96,"cacheReadTokens":2944,"reasoningTokens":23},"stream":[{"type":"chunk","time":1792135131286,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131286,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["First"," sub","agent"," returned"," \"","AL","P","HA","\"."," Now"," I","'ll"," call"," the"," second"," sub","agent"," to"," return"," \"","B","ETA","\"."]},{"type":"chunk","time":1792135131286,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135131286,"index":1,"dt":[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","args":["{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135131287,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"First subagent returned \"ALPHA\". Now I'll call the second subagent to return \"BETA\"."}}},{"type":"chunk","time":1792135131287,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","arguments":"{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135131287,"chunk":{"type":"usage","usage":{"inputTokens":133,"outputTokens":96,"cacheReadTokens":2944,"reasoningTokens":23}}},{"type":"chunk","time":1792135131287,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"call_00_FudNKuJ0fchSptGy3Scw1411","name":"subagent","arguments":"{\"description\":\"Return BETA only\",\"prompt\":\"Reply with exactly the word BETA and nothing else.\",\"run_in_background\":false,\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792123971309,"mode":"continuable","label":"Return BETA only"}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{session:3}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792135131294,"mode":"continuable","label":"Return BETA only","name":"worker-2"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"BETA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 finished and will do no further work unless you send it more.","senderSessionId":"{{session:3}}"},"role":"user","id":"{{message:8}}"}]}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_FudNKuJ0fchSptGy3Scw1411"},"toolCallId":"call_00_FudNKuJ0fchSptGy3Scw1411","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[24],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_FudNKuJ0fchSptGy3Scw1411"},"toolCallId":"call_00_FudNKuJ0fchSptGy3Scw1411","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[23],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":3}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-2 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"BETA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 finished and will do no further work unless you send it more.","senderSessionId":"{{session:3}}"},"role":"user","id":"{{message:8}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"reasoning","text":"Both subagents have returned: first with \"ALPHA\", second with \"BETA\". Now I should reply with \"PARENT_DONE\"."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":115,"outputTokens":35,"cacheReadTokens":3072,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792123971367,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123971367,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["Both"," sub","agents"," have"," returned",":"," first"," with"," \"","AL","P","HA","\","," second"," with"," \"","B","ETA","\"."," Now"," I"," should"," reply"," with"," \"","PAR","ENT","_D","ONE","\"."]},{"type":"chunk","time":1792123971367,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123971367,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123971367,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"Both subagents have returned: first with \"ALPHA\", second with \"BETA\". Now I should reply with \"PARENT_DONE\"."}}},{"type":"chunk","time":1792123971367,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123971367,"chunk":{"type":"usage","usage":{"inputTokens":115,"outputTokens":35,"cacheReadTokens":3072,"reasoningTokens":30}}},{"type":"chunk","time":1792123971367,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"reasoning","text":"Both subagents have returned: first with \"ALPHA\", second with \"BETA\". Now I should reply with \"PARENT_DONE\"."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":115,"outputTokens":35,"cacheReadTokens":3072,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792135131352,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131352,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["Both"," sub","agents"," have"," returned",":"," first"," with"," \"","AL","P","HA","\","," second"," with"," \"","B","ETA","\"."," Now"," I"," should"," reply"," with"," \"","PAR","ENT","_D","ONE","\"."]},{"type":"chunk","time":1792135131352,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135131352,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135131352,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"Both subagents have returned: first with \"ALPHA\", second with \"BETA\". Now I should reply with \"PARENT_DONE\"."}}},{"type":"chunk","time":1792135131353,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135131353,"chunk":{"type":"usage","usage":{"inputTokens":115,"outputTokens":35,"cacheReadTokens":3072,"reasoningTokens":30}}},{"type":"chunk","time":1792135131353,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-no-message-tool/session.1.v4.jsonl b/snapshots/session/subagent-no-message-tool/session.1.v4.jsonl index 24fb603ffb..754871e5b0 100644 --- a/snapshots/session/subagent-no-message-tool/session.1.v4.jsonl +++ b/snapshots/session/subagent-no-message-tool/session.1.v4.jsonl @@ -1,6 +1,6 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625685858,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1,"agentPreset":"child"} {"type":"agent-preset/selected","data":{"agentPreset":"child"}} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-no-message-tool/session.v4.jsonl b/snapshots/session/subagent-no-message-tool/session.v4.jsonl index d09af9fe31..60e1f6b5f8 100644 --- a/snapshots/session/subagent-no-message-tool/session.v4.jsonl +++ b/snapshots/session/subagent-no-message-tool/session.v4.jsonl @@ -13,14 +13,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792123801388,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123801389,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792123801389,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123801389,"index":1,"dt":[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123801390,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792123801390,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123801390,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792123801390,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792135131893,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131893,"index":0,"dt":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792135131894,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135131894,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135131894,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792135131894,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135131894,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792135131894,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123801397,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135131901,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_gVbLWC12Qu8JheZpVRRz8749"},"toolCallId":"call_00_gVbLWC12Qu8JheZpVRRz8749","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792123801434,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123801434,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792123801434,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123801434,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123801434,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792123801434,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123801434,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792123801434,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792135131935,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135131935,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792135131935,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135131935,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135131935,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792135131935,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135131935,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792135131935,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -28,6 +27,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123801492,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123801492,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792123801492,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123801492,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123801492,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135131980,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135131980,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792135131980,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135131980,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135131980,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-parallel/session.1.v4.jsonl b/snapshots/session/subagent-parallel/session.1.v4.jsonl index 32303e9175..499fda1fbb 100644 --- a/snapshots/session/subagent-parallel/session.1.v4.jsonl +++ b/snapshots/session/subagent-parallel/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789627835758,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Say the word ALPHA","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Say the word ALPHA","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-parallel/session.2.v4.jsonl b/snapshots/session/subagent-parallel/session.2.v4.jsonl index 20bfacf1ff..61d8e49c1c 100644 --- a/snapshots/session/subagent-parallel/session.2.v4.jsonl +++ b/snapshots/session/subagent-parallel/session.2.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:3}}","createdAt":1789627835779,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Say the word ALPHA","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-2","label":"Say the word ALPHA","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-parallel/session.v4.jsonl b/snapshots/session/subagent-parallel/session.v4.jsonl index bca9cb6361..f6457bf03a 100644 --- a/snapshots/session/subagent-parallel/session.v4.jsonl +++ b/snapshots/session/subagent-parallel/session.v4.jsonl @@ -12,14 +12,12 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool TWICE","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_parallel_alpha_1","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-1\"}"},{"type":"tool-call","id":"call_parallel_alpha_2","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"stream":[{"type":"chunk","time":1792123802229,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":1792123802229,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_parallel_alpha_1","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123802229,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"chunk","time":1792123802229,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_parallel_alpha_2","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792123802229,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_parallel_alpha_1","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-1\"}"},{"type":"tool-call","id":"call_parallel_alpha_2","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-2\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"stream":[{"type":"chunk","time":1792135132479,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":1792135132479,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_parallel_alpha_1","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135132479,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"chunk","time":1792135132479,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_parallel_alpha_2","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-2\"}"}}},{"type":"chunk","time":1792135132479,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_parallel_alpha_1","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-1\"}"}} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_parallel_alpha_2","name":"subagent","arguments":"{\"description\":\"Say the word ALPHA\",\"prompt\":\"Reply with exactly the word ALPHA and nothing else.\",\"name\":\"worker-2\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123802240,"mode":"continuable","label":"Say the word ALPHA"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135132490,"mode":"continuable","label":"Say the word ALPHA","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_parallel_alpha_1"},"toolCallId":"call_parallel_alpha_1","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792123802259,"mode":"continuable","label":"Say the word ALPHA"}} -{"type":"subagent/named","data":{"name":"worker-2","id":"{{session:3}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:3}}","childCreatedAt":1792135132507,"mode":"continuable","label":"Say the word ALPHA","name":"worker-2"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:6}}"}]}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":1,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-2 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 finished and will do no further work unless you send it more.","senderSessionId":"{{session:3}}"},"role":"user","id":"{{message:7}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_parallel_alpha_2"},"toolCallId":"call_parallel_alpha_2","content":[{"type":"text","text":"started subagent worker-2"}],"isError":false,"id":"{{message:8}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} @@ -28,6 +26,6 @@ {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:6}}"},"surfaceOp":"append"} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-2 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"ALPHA"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-2 finished and will do no further work unless you send it more.","senderSessionId":"{{session:3}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"stream":[{"type":"chunk","time":1792123802350,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":1792123802350,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123802350,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"stream":[{"type":"chunk","time":1792135132597,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":1792135132597,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135132597,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-published-run-failure/session.1.v4.jsonl b/snapshots/session/subagent-published-run-failure/session.1.v4.jsonl index 58af2e66d7..c6b78b5426 100644 --- a/snapshots/session/subagent-published-run-failure/session.1.v4.jsonl +++ b/snapshots/session/subagent-published-run-failure/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1786358409171,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Fail published run","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Fail published run","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-spawn-in-process/session.1.v4.jsonl b/snapshots/session/subagent-spawn-in-process/session.1.v4.jsonl index 081d0d91fd..bb40928463 100644 --- a/snapshots/session/subagent-spawn-in-process/session.1.v4.jsonl +++ b/snapshots/session/subagent-spawn-in-process/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625684760,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-spawn-in-process/session.v4.jsonl b/snapshots/session/subagent-spawn-in-process/session.v4.jsonl index fa4afac93c..6737ae321c 100644 --- a/snapshots/session/subagent-spawn-in-process/session.v4.jsonl +++ b/snapshots/session/subagent-spawn-in-process/session.v4.jsonl @@ -12,14 +12,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792123803903,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123803903,"index":0,"dt":[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792123803904,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123803904,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123803904,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792123803904,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123803904,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792123803904,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792135133703,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135133703,"index":0,"dt":[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792135133704,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135133704,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135133704,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792135133704,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135133704,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792135133704,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123803911,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135133711,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_gVbLWC12Qu8JheZpVRRz8749"},"toolCallId":"call_00_gVbLWC12Qu8JheZpVRRz8749","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792123803950,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123803950,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792123803950,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123803950,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123803950,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792123803950,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123803950,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792123803950,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792135133744,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135133744,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792135133744,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135133744,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135133744,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792135133744,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135133744,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792135133744,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -27,6 +26,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123803974,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123803974,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792123803974,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123803974,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123803974,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135133774,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135133774,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792135133774,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135133774,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135133774,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-structured-parent/session.1.v4.jsonl b/snapshots/session/subagent-structured-parent/session.1.v4.jsonl index 1ed587993c..dd8d4ec1b9 100644 --- a/snapshots/session/subagent-structured-parent/session.1.v4.jsonl +++ b/snapshots/session/subagent-structured-parent/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625685858,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Structured answer","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"structured-child","label":"Structured answer","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-structured-parent/session.v4.jsonl b/snapshots/session/subagent-structured-parent/session.v4.jsonl index 77876e3e2c..3a1a46ad58 100644 --- a/snapshots/session/subagent-structured-parent/session.v4.jsonl +++ b/snapshots/session/subagent-structured-parent/session.v4.jsonl @@ -12,16 +12,15 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_structured_child","name":"subagent_structured","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123804759,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":1792123804759,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_structured_child","name":"subagent_structured","arguments":"{}"}}},{"type":"chunk","time":1792123804759,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123804759,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"call_structured_child","name":"subagent_structured","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135134305,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":1792135134305,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_structured_child","name":"subagent_structured","arguments":"{}"}}},{"type":"chunk","time":1792135134306,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135134306,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_structured_child","name":"subagent_structured","arguments":"{}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123804765,"mode":"continuable","label":"Structured answer"}} -{"type":"subagent/named","data":{"name":"structured-child","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135134312,"mode":"continuable","label":"Structured answer","name":"structured-child"}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent structured-child finished and will do no further work unless you send it more."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"Structured result: {\"answer\":42}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent structured-child finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_structured_child"},"toolCallId":"call_structured_child","content":[{"type":"text","text":"Child {{session:2}} settled."}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent structured-child finished and will do no further work unless you send it more."},{"type":"text","text":"It left no closing message."},{"type":"text","text":"Structured result: {\"answer\":42}"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent structured-child finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:5}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_RECEIVED_42"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792123804843,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":1792123804843,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_RECEIVED_42"}}},{"type":"chunk","time":1792123804843,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792123804843,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_RECEIVED_42"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":5},"stream":[{"type":"chunk","time":1792135134390,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":1792135134390,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_RECEIVED_42"}}},{"type":"chunk","time":1792135134390,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}},{"type":"chunk","time":1792135134390,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/subagent-tool-filter/session.1.v4.jsonl b/snapshots/session/subagent-tool-filter/session.1.v4.jsonl index 4c8b714d20..29e8917b9d 100644 --- a/snapshots/session/subagent-tool-filter/session.1.v4.jsonl +++ b/snapshots/session/subagent-tool-filter/session.1.v4.jsonl @@ -1,6 +1,6 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1789625685858,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1,"agentPreset":"child"} {"type":"agent-preset/selected","data":{"agentPreset":"child"}} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Reply with CHILD_OK","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/subagent-tool-filter/session.v4.jsonl b/snapshots/session/subagent-tool-filter/session.v4.jsonl index a901f0e6e6..51630bdcf8 100644 --- a/snapshots/session/subagent-tool-filter/session.v4.jsonl +++ b/snapshots/session/subagent-tool-filter/session.v4.jsonl @@ -13,14 +13,13 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the subagent tool exactly","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792123805603,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123805603,"index":0,"dt":[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792123805604,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123805604,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792123805604,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792123805604,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123805604,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792123805604,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."},{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67},"stream":[{"type":"chunk","time":1792135134923,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135134923,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to",":\n","1","."," Use"," the"," sub","agent"," tool"," exactly"," once"," to"," delegate"," the"," task",":"," \"","Reply"," with"," exactly"," the"," word"," CH","ILD","_OK"," and"," nothing"," else",".\"\n","2","."," After"," the"," sub","agent"," returns",","," reply"," with"," the"," single"," word"," PAR","ENT","_D","ONE"," and"," stop",".\n","3","."," Do"," not"," use"," the"," bash"," tool",".\n\n","Let"," me"," do"," this","."]},{"type":"chunk","time":1792135134924,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135134924,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","args":["{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"type":"chunk","time":1792135134924,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to:\n1. Use the subagent tool exactly once to delegate the task: \"Reply with exactly the word CHILD_OK and nothing else.\"\n2. After the subagent returns, reply with the single word PARENT_DONE and stop.\n3. Do not use the bash tool.\n\nLet me do this."}}},{"type":"chunk","time":1792135134924,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135134924,"chunk":{"type":"usage","usage":{"inputTokens":2907,"outputTokens":142,"cacheReadTokens":0,"reasoningTokens":67}}},{"type":"chunk","time":1792135134924,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_gVbLWC12Qu8JheZpVRRz8749","name":"subagent","arguments":"{\"description\":\"Reply with CHILD_OK\",\"prompt\":\"Reply with exactly the word CHILD_OK and nothing else.\",\"run_in_background\":false,\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123805613,"mode":"continuable","label":"Reply with CHILD_OK"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135134931,"mode":"continuable","label":"Reply with CHILD_OK","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_gVbLWC12Qu8JheZpVRRz8749"},"toolCallId":"call_00_gVbLWC12Qu8JheZpVRRz8749","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792123805651,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792123805651,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792123805651,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792123805651,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792123805651,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792123805651,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123805651,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792123805651,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."},{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792135134970,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135134970,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," sub","agent"," returned"," \"","CH","ILD","_OK","\""," as"," expected","."," Now"," I"," need"," to"," reply"," with"," the"," single"," word"," \"","PAR","ENT","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792135134970,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135134970,"index":1,"dt":[0,0,0],"texts":["PAR","ENT","_D","ONE"]},{"type":"chunk","time":1792135134970,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The subagent returned \"CHILD_OK\" as expected. Now I need to reply with the single word \"PARENT_DONE\" and stop."}}},{"type":"chunk","time":1792135134971,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135134971,"chunk":{"type":"usage","usage":{"inputTokens":120,"outputTokens":35,"cacheReadTokens":2944,"reasoningTokens":30}}},{"type":"chunk","time":1792135134971,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"}]}} @@ -28,6 +27,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent worker-1 finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent worker-1 finished and will do no further work unless you send it more.","senderSessionId":"{{session:2}}"},"role":"user","id":"{{message:7}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792123805692,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123805692,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792123805692,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792123805692,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792123805692,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135135013,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135135013,"index":0,"dt":[],"texts":["PARENT_DONE"]},{"type":"chunk","time":1792135135013,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_DONE"}}},{"type":"chunk","time":1792135135013,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135135013,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/team-direct-inbox/session.1.v4.jsonl b/snapshots/session/team-direct-inbox/session.1.v4.jsonl index c7ab3d020e..4da3efca99 100644 --- a/snapshots/session/team-direct-inbox/session.1.v4.jsonl +++ b/snapshots/session/team-direct-inbox/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1783951000000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Check direct inbox delivery","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"worker-1","label":"Check direct inbox delivery","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/team-direct-inbox/session.v4.jsonl b/snapshots/session/team-direct-inbox/session.v4.jsonl index 9c1f0cbf6d..dc7b73e7c3 100644 --- a/snapshots/session/team-direct-inbox/session.v4.jsonl +++ b/snapshots/session/team-direct-inbox/session.v4.jsonl @@ -12,30 +12,29 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Spawn teammate reviewer, wait for","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-1","name":"subagent","arguments":"{\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123806482,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123806482,"index":0,"dt":[],"id":"direct-1","name":"subagent","args":["{\"name\":\"worker-1\",\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\"}"]},{"type":"chunk","time":1792123806482,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-1","name":"subagent","arguments":"{\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123806482,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123806482,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-1","name":"subagent","arguments":"{\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135135536,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135135536,"index":0,"dt":[],"id":"direct-1","name":"subagent","args":["{\"name\":\"worker-1\",\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\"}"]},{"type":"chunk","time":1792135135536,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-1","name":"subagent","arguments":"{\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135135536,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135135536,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"direct-1","name":"subagent","arguments":"{\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"name\":\"worker-1\"}"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792123806489,"mode":"continuable","label":"Check direct inbox delivery"}} -{"type":"subagent/named","data":{"name":"worker-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135135542,"mode":"continuable","label":"Check direct inbox delivery","name":"worker-1"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-1"},"toolCallId":"direct-1","content":[{"type":"text","text":"started subagent worker-1"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123806526,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123806526,"index":0,"dt":[],"id":"direct-2","name":"bash","args":["{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"]},{"type":"chunk","time":1792123806526,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}}},{"type":"chunk","time":1792123806526,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123806526,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135135583,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135135583,"index":0,"dt":[],"id":"direct-2","name":"bash","args":["{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"]},{"type":"chunk","time":1792135135583,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}}},{"type":"chunk","time":1792135135583,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135135583,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}} -{"type":"job/registered","data":{"jobId":"{{id:1}}","owner":"{{session:1}}","kind":"bash","label":"while [ ! -f team-ready ]; do sleep 0.01; done","startedAt":1792123806538,"toolCall":{"callId":"direct-2","rootCallId":"direct-2"}}} -{"type":"job/settled","data":{"jobId":"{{id:1}}","owner":"{{session:1}}","kind":"bash","label":"while [ ! -f team-ready ]; do sleep 0.01; done","startedAt":1792123806538,"toolCall":{"callId":"direct-2","rootCallId":"direct-2"},"finishedAt":1792123806553,"status":"completed","cause":"producer","producerReported":true,"detail":"exit code: 0"}} -{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-2"},"toolCallId":"direct-2","content":[{"type":"text","text":"(no output)"}],"isError":false,"id":"{{message:7}}"},"meta":{"cwd":"{{cwd}}"}},"sourceEventSeqs":[21],"surfaceOp":"append"} +{"type":"job/registered","data":{"jobId":"{{id:1}}","owner":"{{session:1}}","kind":"bash","label":"while [ ! -f team-ready ]; do sleep 0.01; done","startedAt":1792135135593,"toolCall":{"callId":"direct-2","rootCallId":"direct-2"}}} +{"type":"job/settled","data":{"jobId":"{{id:1}}","owner":"{{session:1}}","kind":"bash","label":"while [ ! -f team-ready ]; do sleep 0.01; done","startedAt":1792135135593,"toolCall":{"callId":"direct-2","rootCallId":"direct-2"},"finishedAt":1792135135608,"status":"completed","cause":"producer","producerReported":true,"detail":"exit code: 0"}} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-2"},"toolCallId":"direct-2","content":[{"type":"text","text":"(no output)"}],"isError":false,"id":"{{message:7}}"},"meta":{"cwd":"{{cwd}}"}},"sourceEventSeqs":[20],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"step/start","data":{"turn":1,"step":3}} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-3","name":"send_message","arguments":"{\"message\":\"Review the direct inbox delivery.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123806565,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123806565,"index":0,"dt":[],"id":"direct-3","name":"send_message","args":["{\"message\":\"Review the direct inbox delivery.\",\"name\":\"reviewer\"}"]},{"type":"chunk","time":1792123806565,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-3","name":"send_message","arguments":"{\"message\":\"Review the direct inbox delivery.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123806565,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123806565,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-3","name":"send_message","arguments":"{\"message\":\"Review the direct inbox delivery.\",\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135135622,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135135622,"index":0,"dt":[],"id":"direct-3","name":"send_message","args":["{\"message\":\"Review the direct inbox delivery.\",\"name\":\"reviewer\"}"]},{"type":"chunk","time":1792135135622,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-3","name":"send_message","arguments":"{\"message\":\"Review the direct inbox delivery.\",\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135135622,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135135622,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"direct-3","name":"send_message","arguments":"{\"message\":\"Review the direct inbox delivery.\",\"name\":\"worker-1\"}"}} -{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-3"},"toolCallId":"direct-3","content":[{"type":"text","text":"message delivered to agent worker-1"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[28],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-3"},"toolCallId":"direct-3","content":[{"type":"text","text":"message delivered to agent worker-1"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[27],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":3}} {"type":"step/start","data":{"turn":1,"step":4}} -{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-4","name":"interrupt_agent","arguments":"{\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123806582,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792123806582,"index":0,"dt":[],"id":"direct-4","name":"interrupt_agent","args":["{\"name\":\"reviewer\"}"]},{"type":"chunk","time":1792123806582,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-4","name":"interrupt_agent","arguments":"{\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792123806582,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123806582,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-4","name":"interrupt_agent","arguments":"{\"name\":\"worker-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135135639,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135135639,"index":0,"dt":[],"id":"direct-4","name":"interrupt_agent","args":["{\"name\":\"reviewer\"}"]},{"type":"chunk","time":1792135135639,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-4","name":"interrupt_agent","arguments":"{\"name\":\"worker-1\"}"}}},{"type":"chunk","time":1792135135639,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135135639,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"direct-4","name":"interrupt_agent","arguments":"{\"name\":\"worker-1\"}"}} -{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-4"},"toolCallId":"direct-4","content":[{"type":"text","text":"interrupt requested for agent worker-1"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[33],"surfaceOp":"append"} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-4"},"toolCallId":"direct-4","content":[{"type":"text","text":"interrupt requested for agent worker-1"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[32],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"step/start","data":{"turn":1,"step":5}} -{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"TEAM_DIRECT_INBOX_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792123806602,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792123806602,"index":0,"dt":[],"texts":["TEAM_DIRECT_INBOX_OK"]},{"type":"chunk","time":1792123806602,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"TEAM_DIRECT_INBOX_OK"}}},{"type":"chunk","time":1792123806602,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792123806602,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"TEAM_DIRECT_INBOX_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1792135135656,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135135656,"index":0,"dt":[],"texts":["TEAM_DIRECT_INBOX_OK"]},{"type":"chunk","time":1792135135656,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"TEAM_DIRECT_INBOX_OK"}}},{"type":"chunk","time":1792135135656,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1792135135656,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":5}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/workflow-run/session.1.v4.jsonl b/snapshots/session/workflow-run/session.1.v4.jsonl index bf7033eba7..617afa3f75 100644 --- a/snapshots/session/workflow-run/session.1.v4.jsonl +++ b/snapshots/session/workflow-run/session.1.v4.jsonl @@ -1,5 +1,5 @@ {"type":"session","version":4,"id":"{{session:2}}","createdAt":1788880384304,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"snapshot-flow child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","name":"workflow-{{workflow:1}}-1","label":"snapshot-flow child 1","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"permission/preset","data":{"preset":"danger-full-access"}} diff --git a/snapshots/session/workflow-run/session.v4.jsonl b/snapshots/session/workflow-run/session.v4.jsonl index 919528bc9e..c881d21d3a 100644 --- a/snapshots/session/workflow-run/session.v4.jsonl +++ b/snapshots/session/workflow-run/session.v4.jsonl @@ -12,17 +12,16 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} {"type":"session/title","data":{"title":"Use the workflow tool exactly","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to use the workflow tool exactly once with specific parameters. Let me carefully follow the instructions:\n\n1. args omitted (so I don't include it)\n2. meta = { \"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\" }\n3. script = as given verbatim\n4. After it returns, reply with \"WORKFLOW_DONE\"\n\nLet me do exactly that."},{"type":"tool-call","id":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","arguments":"{\"meta\": {\"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\"}, \"script\": \"\\nphase('Run')\\nconst reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.')\\nreturn { reply }\\n\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3174,"outputTokens":191,"cacheReadTokens":0,"reasoningTokens":88},"stream":[{"type":"chunk","time":1790156789686,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1790156789687,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," use"," the"," workflow"," tool"," exactly"," once"," with"," specific"," parameters","."," Let"," me"," carefully"," follow"," the"," instructions",":\n\n","1","."," args"," omitted"," (","so"," I"," don","'t"," include"," it",")\n","2","."," meta"," ="," {"," \"","name","\":"," \"","sn","apshot","-flow","\","," \"","description","\":"," \"","one"," child"," for"," the"," snapshot","\""," }\n","3","."," script"," ="," as"," given"," verb","atim","\n","4","."," After"," it"," returns",","," reply"," with"," \"","WORK","FL","OW","_D","ONE","\"\n\n","Let"," me"," do"," exactly"," that","."]},{"type":"chunk","time":1790156789689,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790156789689,"index":1,"dt":[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","args":["","{","\"","meta","\"",": ","{\"","name","\":"," \"","sn","apshot","-flow","\","," \"","description","\":"," \"","one"," child"," for"," the"," snapshot","\"","}",", ","\"","script","\"",": ","\"","\\n","phase","('","Run","')\\n","const"," reply"," ="," await"," agent","('","Reply"," with"," exactly"," the"," word"," WF","_CH","ILD","_OK"," and"," nothing"," else",".')\\n","return"," {"," reply"," }\\n","\"","}"]},{"type":"chunk","time":1790156789690,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to use the workflow tool exactly once with specific parameters. Let me carefully follow the instructions:\n\n1. args omitted (so I don't include it)\n2. meta = { \"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\" }\n3. script = as given verbatim\n4. After it returns, reply with \"WORKFLOW_DONE\"\n\nLet me do exactly that."}}},{"type":"chunk","time":1790156789690,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","arguments":"{\"meta\": {\"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\"}, \"script\": \"\\nphase('Run')\\nconst reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.')\\nreturn { reply }\\n\"}"}}},{"type":"chunk","time":1790156789690,"chunk":{"type":"usage","usage":{"inputTokens":3174,"outputTokens":191,"cacheReadTokens":0,"reasoningTokens":88}}},{"type":"chunk","time":1790156789690,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to use the workflow tool exactly once with specific parameters. Let me carefully follow the instructions:\n\n1. args omitted (so I don't include it)\n2. meta = { \"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\" }\n3. script = as given verbatim\n4. After it returns, reply with \"WORKFLOW_DONE\"\n\nLet me do exactly that."},{"type":"tool-call","id":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","arguments":"{\"meta\": {\"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\"}, \"script\": \"\\nphase('Run')\\nconst reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.')\\nreturn { reply }\\n\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3174,"outputTokens":191,"cacheReadTokens":0,"reasoningTokens":88},"stream":[{"type":"chunk","time":1792135136167,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135136167,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," use"," the"," workflow"," tool"," exactly"," once"," with"," specific"," parameters","."," Let"," me"," carefully"," follow"," the"," instructions",":\n\n","1","."," args"," omitted"," (","so"," I"," don","'t"," include"," it",")\n","2","."," meta"," ="," {"," \"","name","\":"," \"","sn","apshot","-flow","\","," \"","description","\":"," \"","one"," child"," for"," the"," snapshot","\""," }\n","3","."," script"," ="," as"," given"," verb","atim","\n","4","."," After"," it"," returns",","," reply"," with"," \"","WORK","FL","OW","_D","ONE","\"\n\n","Let"," me"," do"," exactly"," that","."]},{"type":"chunk","time":1792135136168,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135136168,"index":1,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"id":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","args":["","{","\"","meta","\"",": ","{\"","name","\":"," \"","sn","apshot","-flow","\","," \"","description","\":"," \"","one"," child"," for"," the"," snapshot","\"","}",", ","\"","script","\"",": ","\"","\\n","phase","('","Run","')\\n","const"," reply"," ="," await"," agent","('","Reply"," with"," exactly"," the"," word"," WF","_CH","ILD","_OK"," and"," nothing"," else",".')\\n","return"," {"," reply"," }\\n","\"","}"]},{"type":"chunk","time":1792135136168,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to use the workflow tool exactly once with specific parameters. Let me carefully follow the instructions:\n\n1. args omitted (so I don't include it)\n2. meta = { \"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\" }\n3. script = as given verbatim\n4. After it returns, reply with \"WORKFLOW_DONE\"\n\nLet me do exactly that."}}},{"type":"chunk","time":1792135136168,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","arguments":"{\"meta\": {\"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\"}, \"script\": \"\\nphase('Run')\\nconst reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.')\\nreturn { reply }\\n\"}"}}},{"type":"chunk","time":1792135136168,"chunk":{"type":"usage","usage":{"inputTokens":3174,"outputTokens":191,"cacheReadTokens":0,"reasoningTokens":88}}},{"type":"chunk","time":1792135136168,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"call_00_dD2BLuNeJCTh2iiYC1QR3449","name":"workflow","arguments":"{\"meta\": {\"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\"}, \"script\": \"\\nphase('Run')\\nconst reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.')\\nreturn { reply }\\n\"}"}} {"type":"tool-workflow/run-start","data":{"runId":"{{workflow:1}}","name":"snapshot-flow"}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1788880384304,"mode":"continuable","label":"snapshot-flow child 1"}} -{"type":"subagent/named","data":{"name":"workflow-{{workflow:1}}-1","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135136254,"mode":"continuable","label":"snapshot-flow child 1","name":"workflow-{{workflow:1}}-1"}} {"type":"tool-workflow/agent-start","data":{"runId":"{{workflow:1}}","seq":1,"label":"Reply with exactly the word WF_CHILD_OK and not…","phase":"Run","childId":"{{session:2}}"}} {"type":"tool-workflow/agent-end","data":{"runId":"{{workflow:1}}","seq":1,"outcome":"completed"}} {"type":"tool-workflow/run-end","data":{"runId":"{{workflow:1}}","stopReason":"completed"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"call_00_dD2BLuNeJCTh2iiYC1QR3449"},"toolCallId":"call_00_dD2BLuNeJCTh2iiYC1QR3449","content":[{"type":"text","text":"workflow \"snapshot-flow\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WF_CHILD_OK\"\n}"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The workflow returned successfully with the reply \"WF_CHILD_OK\". Now I need to reply with exactly \"WORKFLOW_DONE\" and stop."},{"type":"text","text":"WORKFLOW_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":328,"outputTokens":36,"cacheReadTokens":3072,"reasoningTokens":30},"stream":[{"type":"chunk","time":1790156790154,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1790156790154,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," workflow"," returned"," successfully"," with"," the"," reply"," \"","WF","_CH","ILD","_OK","\"."," Now"," I"," need"," to"," reply"," with"," exactly"," \"","WORK","FL","OW","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1790156790155,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1790156790155,"index":1,"dt":[0,0,0,0],"texts":["WORK","FL","OW","_D","ONE"]},{"type":"chunk","time":1790156790155,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The workflow returned successfully with the reply \"WF_CHILD_OK\". Now I need to reply with exactly \"WORKFLOW_DONE\" and stop."}}},{"type":"chunk","time":1790156790155,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"WORKFLOW_DONE"}}},{"type":"chunk","time":1790156790155,"chunk":{"type":"usage","usage":{"inputTokens":328,"outputTokens":36,"cacheReadTokens":3072,"reasoningTokens":30}}},{"type":"chunk","time":1790156790155,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"reasoning","text":"The workflow returned successfully with the reply \"WF_CHILD_OK\". Now I need to reply with exactly \"WORKFLOW_DONE\" and stop."},{"type":"text","text":"WORKFLOW_DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":328,"outputTokens":36,"cacheReadTokens":3072,"reasoningTokens":30},"stream":[{"type":"chunk","time":1792135136330,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}},{"type":"reasoning-chunks","time0":1792135136330,"index":0,"dt":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],"texts":["The"," workflow"," returned"," successfully"," with"," the"," reply"," \"","WF","_CH","ILD","_OK","\"."," Now"," I"," need"," to"," reply"," with"," exactly"," \"","WORK","FL","OW","_D","ONE","\""," and"," stop","."]},{"type":"chunk","time":1792135136331,"chunk":{"type":"block-start","index":1,"blockType":"text"}},{"type":"text-chunks","time0":1792135136331,"index":1,"dt":[0,0,0,0],"texts":["WORK","FL","OW","_D","ONE"]},{"type":"chunk","time":1792135136331,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The workflow returned successfully with the reply \"WF_CHILD_OK\". Now I need to reply with exactly \"WORKFLOW_DONE\" and stop."}}},{"type":"chunk","time":1792135136331,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"WORKFLOW_DONE"}}},{"type":"chunk","time":1792135136331,"chunk":{"type":"usage","usage":{"inputTokens":328,"outputTokens":36,"cacheReadTokens":3072,"reasoningTokens":30}}},{"type":"chunk","time":1792135136331,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/web/official-subagent-bundle/session.v4.jsonl b/snapshots/web/official-subagent-bundle/session.v4.jsonl index aefbeb49c1..9ec3b01af8 100644 --- a/snapshots/web/official-subagent-bundle/session.v4.jsonl +++ b/snapshots/web/official-subagent-bundle/session.v4.jsonl @@ -14,16 +14,15 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash","contextWindow":128000}} {"type":"session/title","data":{"title":"Delegate a self-contained task to","messageSeqs":[9],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"official-subagent-code","name":"run_code","arguments":"{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:5}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792124856024,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792124856024,"index":0,"dt":[],"id":"official-subagent-code","name":"run_code","args":["{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"]},{"type":"chunk","time":1792124856024,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"official-subagent-code","name":"run_code","arguments":"{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"}}},{"type":"chunk","time":1792124856024,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792124856024,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"official-subagent-code","name":"run_code","arguments":"{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:5}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135276358,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1792135276358,"index":0,"dt":[],"id":"official-subagent-code","name":"run_code","args":["{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"]},{"type":"chunk","time":1792135276359,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"official-subagent-code","name":"run_code","arguments":"{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"}}},{"type":"chunk","time":1792135276359,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135276359,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"official-subagent-code","name":"run_code","arguments":"{\"description\":\"Delegate through the official Claude bundle\",\"code\":\"const result = await tools.subagent_claude_code({ name: \\\"native-worker\\\", description: \\\"Read the fixture response\\\", prompt: \\\"Reply with OFFICIAL_SUBAGENT_OK exactly.\\\" });\\nif (result.kind !== \\\"activation\\\") throw new Error(\\\"Expected child activation\\\");\\nconsole.log(result.name);\"}"}} {"type":"tool/ptc-dispatch-start","data":{"rootCallId":"official-subagent-code","parentCallId":"official-subagent-code","subCallId":"official-subagent-code:ptc:1","name":"subagent_claude_code","arguments":{"name":"native-worker","description":"Read the fixture response","prompt":"Reply with OFFICIAL_SUBAGENT_OK exactly."}}} -{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792124856165,"mode":"external","label":"Read the fixture response"}} -{"type":"subagent/named","data":{"name":"native-worker","id":"{{id:1}}"}} +{"type":"subagent/catalog","data":{"version":2,"childId":"{{id:1}}","childCreatedAt":1792135276608,"mode":"external","label":"Read the fixture response","name":"native-worker"}} {"type":"tool/ptc-dispatch","data":{"rootCallId":"official-subagent-code","parentCallId":"official-subagent-code","subCallId":"official-subagent-code:ptc:1","name":"subagent_claude_code","arguments":{"name":"native-worker","description":"Read the fixture response","prompt":"Reply with OFFICIAL_SUBAGENT_OK exactly."},"isError":false,"content":[{"type":"text","text":"started subagent native-worker"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"official-subagent-code"},"toolCallId":"official-subagent-code","content":[{"type":"text","text":"native-worker"}],"isError":false,"id":"{{message:6}}"}},"sourceEventSeqs":[16],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"Waiting for the child result."}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792124856214,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792124856214,"index":0,"dt":[],"texts":["Waiting for the child result."]},{"type":"chunk","time":1792124856215,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"Waiting for the child result."}}},{"type":"chunk","time":1792124856215,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792124856215,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"Waiting for the child result."}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:7}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135276752,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135276752,"index":0,"dt":[],"texts":["Waiting for the child result."]},{"type":"chunk","time":1792135276753,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"Waiting for the child result."}}},{"type":"chunk","time":1792135276753,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135276753,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent native-worker finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"OFFICIAL_SUBAGENT_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent native-worker finished. It cannot receive follow-up messages.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:8}}"}]}} @@ -31,6 +30,6 @@ {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} {"type":"step/start","data":{"turn":2,"step":1}} {"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent native-worker finished. It cannot receive follow-up messages."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"OFFICIAL_SUBAGENT_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent native-worker finished. It cannot receive follow-up messages.","senderSessionId":"{{id:1}}"},"role":"user","id":"{{message:8}}"},"surfaceOp":"append"} -{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792124856902,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792124856902,"index":0,"dt":[],"texts":["DONE"]},{"type":"chunk","time":1792124856902,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DONE"}}},{"type":"chunk","time":1792124856902,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792124856902,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":2,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"DONE"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:9}}"},"usage":{"inputTokens":10,"outputTokens":4},"stream":[{"type":"chunk","time":1792135279553,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135279553,"index":0,"dt":[],"texts":["DONE"]},{"type":"chunk","time":1792135279553,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DONE"}}},{"type":"chunk","time":1792135279553,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":4}}},{"type":"chunk","time":1792135279553,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":2,"step":1}} {"type":"turn/end","data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/snapshots/web/subagent-fork-schedule/session.1.v4.jsonl b/snapshots/web/subagent-fork-schedule/session.1.v4.jsonl index 080926a704..a1e5288531 100644 --- a/snapshots/web/subagent-fork-schedule/session.1.v4.jsonl +++ b/snapshots/web/subagent-fork-schedule/session.1.v4.jsonl @@ -17,7 +17,7 @@ {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} {"type":"session/end-seed","data":{"inherited":true}} -{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"fork","label":"Check child reminder refusal","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"fork","name":"scheduled-child","label":"Check child reminder refusal","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} {"type":"sandbox/mode","data":{"mode":"workspace-write","source":"delegation"}} {"type":"approval/policy","data":{"policy":"never","source":"delegation"}} {"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Call schedule_create, schedule_list, schedule_update, and schedule_delete once each, then reply CHILD_DONE."}],"source":{"kind":"user"},"role":"user","id":"{{message:6}}"}]}} diff --git a/snapshots/web/subagent-fork-schedule/session.v4.jsonl b/snapshots/web/subagent-fork-schedule/session.v4.jsonl index 46eab30ed1..603cd1a1ec 100644 --- a/snapshots/web/subagent-fork-schedule/session.v4.jsonl +++ b/snapshots/web/subagent-fork-schedule/session.v4.jsonl @@ -13,8 +13,7 @@ {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} {"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash","contextWindow":128000}} {"type":"session/title","data":{"title":"Reply PARENT_READY.","messageSeqs":[8],"source":{"kind":"fallback"}}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_READY"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:5}}"},"stream":[{"type":"chunk","time":1792124858028,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792124858028,"index":0,"dt":[],"texts":["PARENT_READY"]},{"type":"chunk","time":1792124858028,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_READY"}}},{"type":"chunk","time":1792124858028,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PARENT_READY"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:5}}"},"stream":[{"type":"chunk","time":1792135281913,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1792135281913,"index":0,"dt":[],"texts":["PARENT_READY"]},{"type":"chunk","time":1792135281913,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PARENT_READY"}}},{"type":"chunk","time":1792135281913,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} -{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792124858036,"mode":"continuable","label":"Check child reminder refusal"}} -{"type":"subagent/named","data":{"name":"scheduled-child","id":"{{session:2}}"}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1792135281918,"mode":"continuable","label":"Check child reminder refusal","name":"scheduled-child"}}