<!-- codsh-publication:grok-cli-dsh-rewrite:ticket-52 --> ## Parent https://github.com/Blackman99/codsh/issues/132 **Ticket:** 52 **Status:** ready-for-agent **User Stories:** 48, 49(见父规格) ## What to build 用户发现、保存并运行个人或项目原格式工作流,进度出现在同一运行视图,而不必先配置插件或网页服务。 ## Acceptance criteria - [ ] 目录优先级、补全、保存规则、参数和预算选项真实生效,发现不等于自动执行未信任脚本。 - [ ] 用户/项目同名、无效脚本、无可写目录及运行中编辑的行为明确;恢复不悄悄换成编辑后脚本。 - [ ] 从目录选择到 dsh 子代理再到运行结果完整验证;文本模式提供真实可用概览。 - [ ] 插件目录贡献和服务型内置流程另票交付,不以它们的依赖阻塞本票,不将空内置目录称为全部工作流完成。 ## Blocked by - #163 — Ticket 31: 项目规则、Skills 与自定义命令 - #183 — Ticket 51: 工作流运行视图与暂停恢复 ## Delivery contract 用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。
Activity
feat(rust): saved project and personal workflow catalog (ticket 52 / #…
Blackman99 commentedon Sep 25, 2026
Ticket 52 / #184 已合入
rewrite/grok-dsh-20260920的ce09b16。行为
<项目根>/.grok/workflows(git 根;不在 git 中时为工作目录;仅在已信任的文件夹中加载)和$GROK_HOME/workflows中以meta.name命名的<名称>.rhai。同名时项目优先,未信任时只加载个人目录。发现只解析meta,从不运行脚本;解析失败、元数据无效、文件名与meta.name不符、符号链接、超过 1 MiB 的文件带原因跳过,符号链接的目录不扫描。/workflows用几行概括目录(作用域、被遮蔽的个人副本、无效文件、扫描的文件夹,并说明内置和插件工作流不在此目录中、单独交付);/workflows <名称>显示描述、适用场景、运行方式、路径和遮蔽关系,或同名文件未加载的原因。/<名称>(名称被命令、技能或自定义命令占用时不提供,只能用/workflow <名称>);/<名称> [参数]、/workflow <名称> [参数]和模型的source: { type: "name" }都启动后台运行,经 dsh 子代理执行,结果回到会话。--agent-budget N、--effort LEVEL(用于没有自行设置 effort 的子代理),然后是 JSON 对象或文本(args.query/args.objective)。预算真正生效(超出时budget_limited)。workflow 'x' is not loaded: <路径> is invalid: …)、同一作用域重复定义(有歧义)都会明确拒绝,不启动任何东西。/<名称>启动会连同运行 id 告知模型。/workflow save <名称>把运行保存的脚本写入<项目根>/.grok/workflows/<meta.name>.rhai:只适用于以自身meta.name显示的运行(name-2句柄拒绝),只在已信任的文件夹,不经过符号链接目录,原子创建、从不覆盖已有文件。没有可写的项目目录时(未信任、.grok不是目录等)不写任何东西,并给出运行脚本位置和可复制到的$GROK_HOME/workflows/<名称>.rhai。验证(全部只在 Linux 上)
scripts/rust-workflow.spec.mjs:32/32 通过,其中新增 4 个:按名称启动(信任时项目优先、未信任时个人副本、真实 dsh 子代理)、模型看到的清单及其变化说明、无效文件和非法名称;/<名称>与/workflow <名称>的文本/JSON 参数、--agent-budget、--effort high传到子代理;运行中编辑文件并暂停/恢复仍用原脚本、新启动读取新文件;/workflow save成功、已存在、重复句柄、未信任、不可写目录。python3 scripts/rust-workflow-pty-test.py(staged 原生二进制)通过:新增/workflows、/workflows <名称>、无效文件原因、斜杠菜单补全/digest后带参数运行并在任务面板看到运行和子代理、无效的/<名称>、/workflow save及拒绝覆盖、保存后菜单出现新名称、-p按名称运行。rust-goal-pty-test.py在 rebase 到 [Grok/dsh 48] 目标执行与停止条件 #180 后也通过。pnpm test:2467 通过、1 失败(已知的reference-evidence.spec超时)。cargo test -p codsh-rust:598 通过、4 失败(已知的 2 个filesystem_sandbox,以及时好时坏的 privacy/voice 本地 HTTP 测试,本次未改动这些模块);其他 crate 1043 通过、0 失败。workflow_catalog::单元测试覆盖优先级、信任、无效/符号链接文件、清单上限和每种保存拒绝。cargo fmt --check、clippy(0 warning)、pnpm run typecheck通过。未验证
未实现 / 已知限制
/workflow和/<名称>需要活动的 dsh 会话。/workflows显示在状态提示区(最多约 6 行),详细信息用/workflows <名称>;/workflow runs在运行很多时同样会被截断([Grok/dsh 51] 工作流运行视图与暂停恢复 #183 的现有行为)。--effort按标准推理等级校验,子代理模型是否支持在启动子代理时才检查。resume_from和fork_context仍以明确错误拒绝。main、npm 和默认版本都没有改动。
解除阻塞的后续