Skip to content

[Grok/dsh 40] dsh 子代理执行与任务视图 #172

Description

@Blackman99

Parent

#132

Ticket: 40

Status: ready-for-agent

User Stories: 42, 43, 47(见父规格)

What to build

用户能委派不同类型/模型的子代理,查看实时进度和子会话内容,并按权限终止任务。

Acceptance criteria

  • 子代理由 dsh 实际创建执行,类型、模型、能力过滤与父级权限继承正确,不能被界面标签替代。
  • 任务列表、父级状态和子视图反映同一生命周期,成功/失败/取消只交付一次结果。
  • 前台/后台子代理、父子取消、无可用模型、到达并发限制等状态可操作。
  • 真实父子回合和受限制工具效果经端到端验证,现有会话、压缩和恢复入口加入回归。

Blocked by

Delivery contract

用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。

Activity

  1. Blackman99 commented on Sep 24, 2026

    @Blackman99
    OwnerAuthor

    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.mjs 13 项通过;新增的 scripts/rust-subagent-pty-test.py 通过(explore 失去 write、general-purpose 写入、后台取消、前台子取消、/compact、--resume、子会话不列出、--no-subagents 与 Agent(type));pnpm run typecheck 通过;pnpm test 2313 通过、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 和默认版本都没有改动。

    现在可以继续:#173(子代理消息与 resume_from)、#174(worktree 隔离)、#175。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions