Repository navigation
[Grok/dsh 44] 监控事件与会话唤醒 #176
Copy link
Copy link
Closed
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Description
Activity
- added a commit that references this issue
on Sep 25, 2026 已实现并推送到
rewrite/grok-dsh-20260920:ab67660 (已 rebase 到 #190、#205 之上,两边改动都保留)。内容
- 新增 dsh 插件
rust-acp-monitor.mjs:模型侧monitor工具,名称、参数、描述、上限与文案按参考实现(pinned source rev e8563f8 的 grok-build monitor)对齐:timeout_ms默认/上限 36,000,000,超过上限必须persistent;200ms 轮询、行裁剪、500/3000 字节截断、1 MiB 缓冲;令牌桶 10 个、每 2s 补 1 个、抑制提示;连续抑制 30s 自动停止;<monitor-event>包装与多事件分组格式;用户停止提示 “This task was killed by the user — do not restart it.”。 - 执行仍由 dsh 负责:脚本经 dsh bash 执行器启动(会话沙箱、工作目录、托管环境),权限门按 bash 调用处理,并注册为
ctx.jobs的monitor任务,因此job_output/job_list/job_kill可用,会话结束时随之停止;退出由 dsh 自身的完成通知报告一次。 - 唤醒:空闲会话按事件唤醒,沿用 dsh “无用户消息最多连续 3 次唤醒”的预算;忙碌时仅在有工具调用运行(或其他消息本来就会延长该轮)时把事件并入下一步,模型正在写回答时到达的事件先暂存,轮次结束后合并为一次唤醒(取消后则等待下一条用户消息),避免事件造成预算外的模型请求。
- Rust 客户端:
◎ Monitor event · …记录轮次(同一步领取的多条通知合并到一个轮次,回放一致)、状态行 “N monitor(s)”、任务面板 “Commands and monitors” 行(超时/persistent、事件数)与x停止、开始/结束提示、/new/切换/退出的停止提示。 - 与参考实现的差异(已在代码与文档中注明):刷屏自动停止时同时结束进程;stderr 并入事件流;子代理不提供该工具;只在交互式客户端启用(
CODSH_MONITOR=1),纯-p、编辑器 ACP、共享服务器不提供。 - 文档:帮助文本、README.md、README.zh.md、CONTEXT.md、changeset(codsh-cli minor、codsh-bundle minor)。
验证(Linux,rebase 后重新运行)
pnpm run typecheck:通过。TMPDIR=/tmp pnpm test:97 个文件中 95 通过、1 失败、1 跳过;2509 通过 / 1 失败 / 5 跳过。唯一失败是已知的reference-evidence.spec5s 超时,与本改动无关。新增scripts/rust-monitor.spec.mjs共 28 项全部通过,含真实 dsh + 无密钥 mock 模型的端到端用例(空闲唤醒次数、忙碌注入、超时、persistent + job_kill、上限报错、刷屏停止且不超过唤醒预算、任务面板停止、dsh 退出时进程被清理、未开启时不提供工具)。cargo fmt --check:通过。cargo clippy ... -D warnings:仅有已知的 2 个既有错误(tail_marker未使用、filesystem_sandbox.rs 多余的return),无新增。cargo test --workspace:1658 通过 / 4 失败 / 2 忽略;4 个失败均为已知既有问题(filesystem_sandbox 2 个、voice::substitute_route…、privacy::drafts_stay_local…)。- PTY:新增
rust-monitor-pty-test.py(事件唤醒轮次、状态行、任务面板行与x停止且不再唤醒、模型在下一步被告知、自然退出的一次事件 + 一次完成唤醒、/new与退出后无残留进程、纯-p无该工具)通过,并已加入test:rust:pty;回归运行 background、scheduler、scheduler-restart、subagent PTY 均通过。
未验证
- macOS / Windows 未运行。
- 未接入真实模型提供方(全部使用无密钥 mock 模型与临时 HOME)。
- 未运行参考二进制;对齐依据为 pinned source rev e8563f8 的源码。
main、npm 发布与默认入口均未改动。
后续:正文提及 #176 的未关闭 issue 只有 #211,它仍依赖另外 22 个未关闭的 issue,因此本次没有解除阻塞的后续工单。
- 新增 dsh 插件
Metadata
Metadata
Assignees
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Parent
#132
Ticket: 44
Status: ready-for-agent
User Stories: 46, 47(见父规格)
What to build
用户运行监控脚本,状态变化以受控事件到达正确会话,并能检查、停止及诊断监控。
Acceptance criteria
Blocked by
Delivery contract
用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。