Skip to content

[Grok/dsh 43] 后台命令与完成唤醒 #175

Closed

Description

@Blackman99

Parent

#132

Ticket: 43

Status: ready-for-agent

User Stories: 45, 47, 62(见父规格)

What to build

用户将长命令放入后台,继续对话,随后查看输出、停止任务并收到正确的完成通知。

Acceptance criteria

  • 显式后台、运行中快捷键和参考的自动后台化规则作用于同一真实 dsh 任务。
  • 输出检索、等待、超时、停止和状态行都反映实际任务;完成通知不重复或丢失。
  • 用户新消息、等待中断、会话切换和执行进程退出各有明确归属及清理语义。
  • 用真实长进程验证继续输入、最终输出及无遗留进程;不能将历史恢复称为进程复活。

Blocked by

Delivery contract

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

Activity

  1. Blackman99 commented on Sep 25, 2026

    @Blackman99
    OwnerAuthor

    已完成,提交: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.mjs 5 秒超时,与本工单无关。新增 scripts/rust-background.spec.mjs 18 项全部通过(含真实 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 假服务器用例)
    • PTY(Linux):新增 rust-background-pty-test.py 通过(fast、自动后台+唤醒、Ctrl+B、立即发送、等待中断、面板停止、/new、干净退出、恢复、plain 模式);rust-workflow、rust-subagent、rust-plan、rust-queue、rust-cancel、rust-turn、rust-shell PTY 均通过(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(多项)。

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