Repository navigation
[Grok/dsh 51] 工作流运行视图与暂停恢复 #183
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 Ticket 51 / #183 已合入
rewrite/grok-dsh-20260920的9833087。行为
- 交互式会话里,
workflow工具调用在引擎开始执行脚本后立即返回Workflow 'name' started in the background.,运行在会话后台继续;同名重复启动得到会话内唯一的显示名(name、name-2……),跨会话互不影响。一个会话最多同时 4 个活动运行。 - 每个运行在
<会话目录>/workflows/<run id>/保存run.json、启动时固定不变的script.rhai与launch.json(args),以及引擎的journal.jsonl。 /workflow//workflow runs按参考格式列出阶段、子代理计数、耗时和目标;/workflow pause|resume|stop <名称>(也支持/workflow <名称> pause)按显示名控制运行;模型也可用工具的pause/stop/resumesource 按名称或 run id 控制。TUI 通过控制通道发送,回复显示在提示行;/tasks增加 Workflows 区域,状态行统计活动工作流,工具块标题随状态变化(恢复后重新显示运行中)。- 暂停/停止会取消真实子代理并结束引擎;同进程内恢复用原始脚本和 args 重新启动引擎并重放 journal:已完成的代理调用直接复用记录结果,被取消或失败的步骤重新执行(未完成步骤的副作用可能重复,不声明恰好一次)。预算停止只能在显式提高绝对
agent_budget后继续,否则明确拒绝。 - 主进程重启后,运行仍会被列出,原本活动的运行标记为
interrupted,所有恢复都以“由更早的 codsh 进程启动、进程重启即终止”为理由明确拒绝,且不会重复报告。 - 运行完成、失败、取消或预算停止时,所属会话每次启动/恢复只收到一条完成通知(复用 background 插件的公共通知路径:空闲时唤醒回合,忙碌时下一回合,取消丢弃时重新放回);模型自己发起的暂停/停止不再回报给它。
- 纯文本
-p会随回合结束,因此在-p下工具等待运行结束并返回与通知相同的运行块,取消提示会停止运行。 - 按名称启动已保存的工作流、
/workflow save、每次运行的可编辑脚本副本仍以明确错误拒绝。
验证(全部只在 Linux 上)
cargo test -p codsh-rust:581 通过 / 3 失败(2 个既有的filesystem_sandbox失败,1 个既有的 voice 假服务器偶发失败),新增 engine journal 恢复、控制通道、面板与/workflow回复测试。cargo test --workspace --exclude codsh-rust:1043 通过。cargo clippy -p codsh-rust --all-targets -- -A dead_code -A clippy::needless_return无警告;cargo fmt --check通过。pnpm test:2444 通过 / 1 失败(既有的reference-evidence.spec超时)。其中scripts/rust-workflow.spec.mjs28/28,覆盖:跨会话唯一命名与文本视图、4 个运行上限、用户与模型停止、真实子代理停止后的暂停与 journal 恢复结果、预算恢复、SIGKILL 后session/resume的重启拒绝、-p等待与取消。- PTY(release 二进制):
rust-workflow-pty-test.py(后台启动、完成通知回合、/workflow runs、/tasksWorkflows 区域、按名称暂停/恢复/停止且引擎和子代理退出、语法错误、-p与并发上限)以及 scheduler、subagent、background、worktree、queue、plan、plugin-content 的 PTY 测试全部通过。
未验证
- macOS 和 Windows 均未运行。
未实现 / 已知限制
- 恢复只在启动运行的同一 dsh 进程内有效;进程重启后不可恢复(按参考行为明确拒绝)。
- 未提交的副作用不保证恰好一次:恢复时被取消或未完成的步骤会重新执行。
- 按名称启动、
/workflow save、工作流目录与可编辑脚本投影留给 [Grok/dsh 52] 个人与项目工作流目录 #184。 - 子代理结果的
tokens_used仍为 0(dsh 不回传)。
main、npm 和默认版本都没有改动。
解除阻塞的后续
- [Grok/dsh 52] 个人与项目工作流目录 #184(个人与项目工作流目录):阻塞项 [Grok/dsh 31] 项目规则、Skills 与自定义命令 #163 已关闭,[Grok/dsh 51] 工作流运行视图与暂停恢复 #183 随本次关闭,现已可开始。
- [Grok/dsh 77] 三平台并发与长期资源压力 #209 仍被 [Grok/dsh 67] Linux 产物与基础终端运行 #199、[Grok/dsh 68] Windows 产物与原生终端运行 #200、[Grok/dsh 70] macOS 基础交互性能 #202 阻塞;[Grok/dsh 79] 完整对齐审计与候选版本验收 #211 仍有大量未关闭的阻塞项。
- 交互式会话里,
Metadata
Metadata
Assignees
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Parent
#132
Ticket: 51
Status: ready-for-agent
User Stories: 47, 49, 62(见父规格)
What to build
用户在运行列表查看阶段、子代理与结果,并按显示名称暂停、恢复、提高允许的预算或停止流程。
Acceptance criteria
Blocked by
Delivery contract
用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。