description: "共享进程内 subagent 运行驱动器,供维护者与后端作者理解或扩展 spawn 与 fork 的运行生命周期。"
English | 中文
dsh-subagent-in-process-driver 是两个进程内 subagent 后端共用的运行驱动器:它通过宿主的 agent(智能体)工厂创建一个子 agent,应用按子 agent 的定制,把一项任务驱动到完成,并以单一完全停稳的 dispose(资源释放)路径返回子 agent 自身的最终输出。spawn 调用它时不传入会话初始内容;fork 调用它时传入父级已完成轮次的前缀。它是库而非独立功能:提供方后端调用 startInProcessRun,组合中没有任何东西配置它。阅读本页可理解两个进程内后端共享的运行生命周期。
你通过提供方后端而非组合到达本包:dsh-subagent-spawn-in-process 与 dsh-subagent-fork-in-process 各自调用 startInProcessRun(request, options) 并拥有其外围的一切。本页记录两者共享的生命周期,使你读懂一个后端的行为后即可推断另一个。
一次调用启动并驱动一个一次性子 agent。调用兑现意味着子 agent 已发布到 ctx.agents,调用方拥有返回的运行;启动被拒绝时,未发布的创建已经完全停稳,因此不会有创建到一半的子 agent 存活。运行暴露子 agent 的 id 与在线 agent、一个 result promise,以及一个 dispose()——它会停止循环、移除 agent 与会话,并撤销作用域内的注册。
InProcessRunOptions 的形态为 { seed?: SessionEvent[] }——fork 的已配平父级事件初始内容。spawn 省略该值;fork 提供已完成轮次前缀并记录其长度,使结果读取器不会把作为初始内容的父级消息误认为子 agent 输出。
子 agent 获得父级的工作目录/会话谱系,除非 request.agentOptions 覆盖,否则继承父级的提供方、模型、推理强度与输出 token 上限。它获得全新的扁平注册作用域:父级工具限制与权限不会被导入。一次运行会把父级显式的沙箱覆盖项与 'never' 审批钉定带入子 agent,并在子 agent 的初始轮次内追加一份每次运行的描述符。
当包级约定不够用时阅读以下页面;它们从共享 subagent 模型进入构建于本驱动器之上的后端,以及委派策略决策。
共享驱动器把任务逐字作为子 agent 的用户消息发送;若有请求,还会在未发布子 agent 的全新作用域中遮蔽 persona,并限制全局工具 schema、查找、执行与 PTC mode SDK 绑定。父级限制不会被继承。工具指导插件可以使用组装 scope 省略不可用工具的指导;驱动器不会改写任意静态段落。spawn 不提供历史;fork 提供其已配平的初始内容。
子 agent 输入与父级隔离,并随子 agent 自身的步骤增长。persona 会改变重复提示词文本;过滤会改变 schema 或生成 SDK 的成本,使用 scope 的指导内容也会随可见能力变化。
与父级请求缓存相互独立。子 agent 后续历史仅追加,而 persona、工具过滤、生成 SDK、提供方或模型变化会建立不同的子 agent 前缀。
结构化运行会添加下方的结构化输出指令,并添加子 agent 作用域的 structured_output 定义,其参数使用请求的 schema,精确描述为 Report your final structured result. Call this exactly once, when your answer is complete; the arguments must match this tool's parameter schema exactly. 该仅运行时存在的定义不在已生成并随产品发布的工具包索引中。其规范确认值是 { recorded: true },渲染为 Structured output recorded.;后续调用会变为 Error: structured output already recorded: the run is complete, so `<tool>` is not executed。
When you have your final answer, you MUST report it by calling the `structured_output` tool with arguments matching its parameter schema exactly. Do not finish with a plain text answer: only the tool call counts as your result.
固定指令与能力产生的 token 仅由该子 agent 承担。结果文本进入子 agent 历史,而只有捕获的值会成为父级结果。
只要结构化输出指令与 schema 不变,子 agent 内部的前缀就保持稳定。更改 schema 或能力可能从该早期片段开始使子 agent 缓存失效;结果会分别追加到子 agent 与父级历史中。
通过 dsh-tool-subagent,无效深度状态会精确变为 Error: agent subagentDepth must be a non-negative safe integer、Error: subagent child depth exceeds the safe-integer range 或 Error: subagent depth <attempted> exceeds maxDepth <max>。发布前取消的中止原因会通过注册表的 Error: <message> 包装传递。
启动成功时为零 token;只有失败的父级工具调用会保留这段文本。
仅追加;新增可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
驱动器只提取子 agent 自身最后的 assistant 输出或捕获的结构化值;作为初始内容的父级消息与子 agent 中间工作不会成为结果。
父级通过消费方接收一个依赖数据的结果;其他所有子 agent token 都留在子 agent 会话中。
仅追加;新增可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
这些限制说明进程内一次性运行不能做什么;它们是当前包约束。
sendMessage/resume——进程内一次性运行不具备这些可选运行时能力。defineTool schema 子集——不支持的 JSON Schema 构造会在子 agent 创建前失败;需要更广 schema 词汇的提供方必须采用不同的运行时。