Repository navigation
[Grok/dsh 40] dsh 子代理执行与任务视图 #172
Description
Activity
Ticket 40 / #172 已合入
rewrite/grok-dsh-20260920的7f927ee。子代理由 dsh 真实创建并执行。
general-purpose、explore、plan、[subagents.roles]和.grok/agents/$GROK_HOME/agents代理文件决定子代理的工具和模型:能力模式变成 dsh 工具允许列表,被移除的工具不在子代理的工具列表里,强行调用也会被拒绝。子代理继承父代理的权限模式、规则、hook 和沙箱;ask 模式下子代理的写入被拒绝,文件不变。类型指定的模型在启动前检查,不可用时什么也不启动。max_concurrent、limit_behavior(queue / fail)、max_depth按GROK_*环境变量优先于[subagents]配置解析。--no-subagents、GROK_SUBAGENTS=0移除工具,纯文本模式下--disallowed-tools Agent(type)移除对应类型。前台、后台、父取消、子取消、排队和达到上限都是可操作的状态。后台结果通过job_output只交付一次。同一条生命周期(queued / start / activity / end / refused)驱动工具块、状态行和
/tasks(全屏下 Ctrl+G)任务列表。列表里可以打开只读的子代理记录,x或子视图里的 Ctrl+C 只取消该子代理。子代理会话不出现在/resume和sessions list中。验证(Linux):
scripts/rust-subagents.spec.mjs13 项通过;新增的scripts/rust-subagent-pty-test.py通过(explore 失去 write、general-purpose 写入、后台取消、前台子取消、/compact、--resume、子会话不列出、--no-subagents与Agent(type));pnpm run typecheck通过;pnpm test2313 通过、1 失败(reference-evidence.spec.mjs在机器高负载下 5 秒超时,单独加长超时后 11/11 通过,与本改动无关);Rust 工作区测试 codsh-rust 467 通过、2 失败,其余 crate 982 通过;cargo fmt --check通过。strict clippy 只报filesystem_sandbox.rs里两个 Linux 专属的既有问题,两个失败的 Rust 测试也在该文件,是 Linux 沙箱环境限制,本改动未触及。rust-plain-pipe-test.py中本次修改的段落通过,后面的沙箱段落因本机没有 bubblewrap 失败。未验证:macOS 与 Windows 的 PTY;与参考二进制的逐项对照(inventory 中 PARITY-172 仍为 planned)。类型校验时限(
PARITY-172-type-deadlines,远程类型 RPC)不适用,类型在本地解析。未实现:persona、cancel_subagents_on_turn_cancel(后台子代理在父回合取消后继续运行)。dsh 无法归类的工具(如 MCP)只在all下保留,其它模式默认拒绝。subagent_fork不计入并发上限。main、npm 和默认版本都没有改动。
Parent
#132
Ticket: 40
Status: ready-for-agent
User Stories: 42, 43, 47(见父规格)
What to build
用户能委派不同类型/模型的子代理,查看实时进度和子会话内容,并按权限终止任务。
Acceptance criteria
Blocked by
Delivery contract
用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。