Skip to content

[Grok/dsh 73] 插件工作流目录贡献 #205

Description

@Blackman99

Parent

#132

Ticket: 73

Status: ready-for-agent

User Stories: 41, 48, 49(见父规格)

What to build

用户通过插件安装和管理原格式工作流,在统一目录中查看来源并实际运行,禁用后不再可调用。

Acceptance criteria

  • 插件贡献走统一发现与 Rhai/dsh 执行通路,名称冲突和优先级按参考明确。
  • 源码/许可、版本及信任状态可见,安装不自动执行脚本。
  • 启停、更新、移除与已经运行的流程保持可靠身份,不替换运行中的原始脚本。
  • 用真实插件工作流完成目录到运行结果验证,不让普通个人/项目目录等待此票。

Blocked by

Delivery contract

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

Activity

  1. Blackman99 commented on Sep 25, 2026

    @Blackman99
    OwnerAuthor

    已集成到 rewrite/grok-dsh-20260920:6efa5ed(快进推送,基于 #178 的 338e9c7)。

    行为

    • 活动插件(已安装、已信任、已启用、文件存在;项目插件还需要工作区信任)workflows/(或清单中的 workflows 路径/列表)里的 .rhai 文件,走与 [Grok/dsh 52] 个人与项目工作流目录 #184 相同的目录扫描和 Rhai/dsh 执行路径,排在项目和个人工作流之后。发现只读取 meta,安装和列出都不运行脚本。
    • 名称冲突和优先级是显式的。参考实现的 registry 没有插件作用域,所以沿用 [Grok/dsh 34] 插件内容启停与扩展视图 #166 的插件资产规则:<插件>:<名称> 始终可以运行;裸名称只在没有同名项目/个人工作流、也没有其他活动插件提供时才指向插件。两个插件提供同名工作流时,裸名称以有歧义为由拒绝,并给出两个限定名称。同一插件内重名时,限定名称有歧义。
    • plugin list --json、inspect 和 /plugins 展开行列出插件的工作流及无效文件。/workflows 显示插件工作流和它的调用名、只能用限定名运行的工作流、冲突以及未加载的插件工作流。/workflows <插件>:<名称> 显示版本、许可、作用域、信任状态、来源和提交。
    • 停用、被阻止、缺失或被遮蔽的插件,其工作流(裸名称和限定名称)都会带着插件状态被拒绝;卸载后名称变为未知。
    • 运行开始时,engine 的 started 行带上 origin(作用域、路径、插件名、版本、提交、来源、许可),它和脚本副本一起写入 launch.json/run.json,并在 /workflow runs 中显示为 Source: plugin demo 1.0.0。
    • 更新或停用不影响正在运行的流程。暂停的插件运行在恢复前会先检查插件:插件停用或已卸载时拒绝恢复,并提示重新启用;插件更新后仍重放启动时的原始脚本,概览会注明当前安装的版本。新的启动读取更新后的插件。

    验证(全部只在 Linux 上)

    • cargo test -p codsh-rust:606 通过,4 个已知失败(2 个 filesystem_sandbox,以及时好时坏的 privacy/voice),与本工单无关。新增的 workflow_catalog:: 单元测试覆盖限定/裸名称与优先级、两个插件同名、插件内重名、无效插件文件、四种非活动状态和名称校验。新增的 plugin:: 测试覆盖 workflows 布局、贡献和 workflow_sources 随启用/卸载的变化。

    • cargo test --workspace --exclude codsh-rust:1043 通过。cargo fmt --check 和 clippy 均无问题。

    • pnpm run typecheck 通过。pnpm test:2481 通过,1 个已知的 reference-evidence 超时。

    • scripts/rust-workflow.spec.mjs 新增 3 个用例,用 debug 二进制真实执行 plugin install --trust/enable/update/disable/uninstall,覆盖:

      • 安装不运行任何东西,未启用时拒绝
      • 模型清单
      • demo:review 与裸名称运行真实 CHILD_SAY 子代理
      • origin 写入 run.json/launch.json
      • 个人工作流接管裸名称
      • 停用/卸载后拒绝新启动
      • 两个插件同名
      • 暂停后更新插件,恢复仍跑原脚本,新启动跑新版本
      • 停用/卸载后拒绝恢复
    • PTY:scripts/rust-workflow-pty-test.py 新增第三个会话,通过启动器安装并启用真实插件,覆盖:

      • /workflows 与 /workflows demo:digest
      • /lint、/demo:digest 运行真实子代理
      • /workflow runs 的来源行
      • -p 用限定名运行,plugin disable 后被拒绝

      rust-plugin-content-pty-test.py 和 rust-goal-pty-test.py 也都通过。

    未验证

    • macOS 与 Windows。
    • 市场(git)来源插件的工作流:只验证了本地路径安装,但它们走同一个 registry 和布局路径。

    未实现 / 已知限制

    • 内置(bundled/builtin)工作流不在本工单范围内,仍单独交付。
    • 输入 /<名称> 后直接按 Enter,会先接受斜杠菜单的补全项;这是现有补全行为,本工单未改。
    • dsh 重启后恢复的运行本来就不可恢复([Grok/dsh 51] 工作流运行视图与暂停恢复 #183 的限制),与插件无关。
    • /workflow save 仍可以把插件运行的脚本副本保存到项目目录;保存之后,项目副本会接管裸名称。

    main、npm 和默认版本都没有改动。

    解除阻塞的后续

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