<!-- codsh-publication:grok-cli-dsh-rewrite:ticket-50 --> ## Parent https://github.com/Blackman99/codsh/issues/132 **Ticket:** 50 **Status:** ready-for-agent **User Stories:** 48, 49(见父规格) ## What to build 用户运行并行 Rhai 工作流时,实际子代理数量、并发、预算和结果排列符合既定规则。 ## Acceptance criteria - [ ] 覆盖参考 host 调用和组合器的公开输入/输出、schema 校正、错误传播及排序契约。 - [ ] 累计 agent 预算与活跃并发限制独立;会超预算的并行组按参考整体拒绝,不先启动一半。 - [ ] 子项失败、异常、取消及资源耗尽不泄漏子代理,也不把未执行子项标为成功。 - [ ] 使用真实 dsh 子代理与受控模型证明并发、限额和最终结果,补足跨权限入口测试。 ## Blocked by - #181 — Ticket 49: Rhai 工作流执行 dsh 子代理 ## Delivery contract 用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。
Activity
feat(rust): workflow parallelism, budget and output contracts (#182)
Blackman99 commentedon Sep 25, 2026
Ticket 50 / #182 已合入
rewrite/grok-dsh-20260920的ede08cc。行为
rust/src/workflow_host.rs,由工作流引擎执行,错误文本与参考实现一致:output_schema用参考版本的jsonschemacrate(=0.30.0)编译。无效 schema、外部$ref、超过 256 KiB 的 schema 在子代理启动前拒绝。<output-contract>;答案按 ```json 块 → 全文 →{…}/`[…]` 的顺序解析。resume_agent→close)。仍不符合则success: false,output为structured output validation failed: …。output为解析后的 JSON,agent_id不变。重试不计入agent_budget。write_scratch_file/read_scratch_file:$GROK_HOME/sessions/<项目>/<会话>/workflows/<调用>/scratch。git_diff_since(commit):先检查提交哈希,20 秒超时(超时会杀掉 git),输出上限 256 KiB。[subagents] workflow_max_concurrent或GROK_WORKFLOW_MAX_CONCURRENT_AGENTS配置(环境变量优先;默认 32,按机器核数收紧),codsh --rust inspect会显示。agent_budget相互独立:比上限更宽的并行组会排队,每一项仍计入预算;超出剩余预算的并行组整体拒绝,一个子代理也不启动。success: false;被宿主拒绝的子代理(未知或已禁用的类型)在parallel()结果中为();从未启动的子代理不会被标为成功。workflow_engine_failed,所有子代理随之结束。resume_from仍明确拒绝。验证(全部只在 Linux 上)
cargo test -p codsh-rust:570 通过 / 3 失败。3 个都是已知的既有失败(2 个filesystem_sandbox、1 个voice假服务器测试),与本票无关。workflow过滤:28/28。-A dead_code -A clippy::needless_return)无告警;cargo fmt --check通过。pnpm test:2408 通过 / 1 失败(91 个文件)。失败的是已知的reference-evidence.spec.mjs5 秒超时。scripts/rust-workflow.spec.mjs:22/22,与rust-subagents.spec.mjs合计 35/35,rebase 前连跑 3 次。用真实 dsh 子代理和受控 mock 模型覆盖:git_diff_since;capability_mode、禁用类型;原有的deny:Agent、allow 列表和--no-subagents。pnpm run build:rust通过(含许可证检查)。未验证
未实现 / 已知限制
resume_from未实现:dsh 子代理结束后即被释放,也没有用已结束会话为新子代理提供种子的接口。tokens_used仍为 0。isolation_worktree的契约子代理,其 worktree 说明只出现在任务视图的结束事件里,不会附在返回给脚本的结果中。main、npm 和默认版本都没有改动。
后续:#183 的两个前置任务(#152、#182)现已全部关闭,可以开始。#184 仍等待 #183。