<!-- codsh-publication:grok-cli-dsh-rewrite:ticket-43 --> ## Parent https://github.com/Blackman99/codsh/issues/132 **Ticket:** 43 **Status:** ready-for-agent **User Stories:** 45, 47, 62(见父规格) ## What to build 用户将长命令放入后台,继续对话,随后查看输出、停止任务并收到正确的完成通知。 ## Acceptance criteria - [ ] 显式后台、运行中快捷键和参考的自动后台化规则作用于同一真实 dsh 任务。 - [ ] 输出检索、等待、超时、停止和状态行都反映实际任务;完成通知不重复或丢失。 - [ ] 用户新消息、等待中断、会话切换和执行进程退出各有明确归属及清理语义。 - [ ] 用真实长进程验证继续输入、最终输出及无遗留进程;不能将历史恢复称为进程复活。 ## Blocked by - #151 — Ticket 19: 排队、运行中干预与旁路提问 - #170 — Ticket 38: Shell 与交互终端执行 ## Delivery contract 用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。
Activity
feat(rust): background commands and completion wake through dsh jobs
Blackman99 commentedon Sep 25, 2026
已完成,提交:16aa77a (已快进推送到
rewrite/grok-dsh-20260920)。实现要点:后台命令仍由 dsh jobs 执行(新插件
rust-acp-background.mjs)。交互式客户端中,父代理的前台bash以 dsh job 方式运行并由工具调用等待:预算内正常返回前台结果;超过[toolset.bash] foreground_block_budget_ms、按 Ctrl+B 或"立即发送"消息时,调用返回任务 id 与参考实现的"moved to background"文本,命令继续运行;取消回合会杀掉命令并按 dsh 行为失败。dsh 的 tool-jobs 完成通知会唤醒空闲会话开始新回合;状态栏与任务面板显示命令,面板中x通过控制通道停止命令(dsh 校验所属会话);关闭会话时 dsh 释放并停止其命令;恢复的历史不会显示命令仍在运行,唤醒通知不会进入恢复选择器的提示列表。子代理、-p与编辑器 ACP 保持 dsh 原生前台 bash。另修复了一个既有全屏渲染问题(空白行被 ratatui 绘制为两行,导致跟随滚动截断记录尾部)。检查结果(rebase 到最新分支后重新运行):
pnpm run typecheck:通过TMPDIR=/tmp pnpm test:2400 通过 / 1 失败(91 个文件);失败为已知的reference-evidence.spec.mjs5 秒超时,与本工单无关。新增scripts/rust-background.spec.mjs18 项全部通过(含真实 dsh ACP 集成)cargo fmt --check:通过cargo clippy ... -D warnings:仅剩既有的filesystem_sandbox.rs两处(tail_marker未使用、多余return),本工单无新增cargo test --locked --workspace --offline --no-fail-fast:1601 通过 / 4 失败 / 2 忽略;失败均为既有问题(2 个filesystem_sandbox、privacy与voice假服务器用例)rust-background-pty-test.py通过(fast、自动后台+唤醒、Ctrl+B、立即发送、等待中断、面板停止、/new、干净退出、恢复、plain 模式);rust-workflow、rust-subagent、rust-plan、rust-queue、rust-cancel、rust-turn、rust-shellPTY 均通过(cancel/turn/shell 以去掉 Darwin 限制的临时副本在 Linux 上运行)未验证:macOS 与 Windows 终端上的 PTY 行为;真实模型提供商(全部使用无密钥 mock)。已知限制:已移到后台的命令没有超时(与参考实现一致);若 dsh 被信号直接杀死而未释放,已分离的后台命令可能残留(dsh 既有行为)。
未改动 main、npm 发布与默认入口,未发布任何版本。
已解除阻塞的后续工单:#176、#177、#180、#186(其余阻塞项均已关闭)。仍有其他阻塞:#188(#187)、#209(#183、#199、#200、#202)、#211(多项)。