DeepSeek Harness 插件

Weihao654/dsh-workflow#role-chain

分类 工作流与自动化 收录于 2026-11-10

一步装齐角色分工工具链:四个智能体预设(plan、work、code、review)与十四个 chain_* 工具,用于证据可追溯的受控轮次,并带设置卡片。协议运行时随包提供,无需另装同级插件;它取代原先分开的 l1-presets 与 l2-protocol 两条,启用前需先移除那两条。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:Weihao654/dsh-workflow#path:/plugins/role-chain

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

一个 bundle 装齐 role-chain:本包把 L1 预设(plan / work / code / review 四个席位,纯配置)和 L2 协议(14 个 chain_* 工具、受控轮次账本、门禁、隔离计算)合成一次安装。L1、L2 仍是唯一源码,本包内所有协议文件都由 scripts/sync-umbrella.mjs 从它们生成。

当前版本:0.1.0,内含 dsh-role-chain-presets@1.1.0-workflow.1 + dsh-role-chain-protocol@0.3.0-workflow.20261107.2(记录于 package.json 的 dsh.roleChain.contents)。

安装

把本目录作为 profile bundle 启用即可(需要在 profile 的 dsh.profile.bundles 里出现 dsh-role-chain,并让本包可被 profile 的 node_modules 解析)。

从两个旧 bundle 迁移(必须按此顺序)

迁移时必须先移除旧条目,再启用伞包。 旧的两个 bundle 与伞包插入同一批 loader 行(preset-* ×4、role-chain-protocol)。同时启用在本机实测仍能启动、无报错、API 正常,但重复 id 是静默覆盖:保留哪一份取决于 dsh.profile.bundles 的顺序(实测把伞包排在最后,伞包的 client 生效;排在前面则旧包的 client 生效)。因此不要依赖顺序,先移除旧条目再启用伞包。

  1. 备份 profile 的 package.json、cordis.patch.yml、pnpm-lock.yaml。
  2. 从 dsh.profile.bundles 中删除 dsh-role-chain-protocol 与 dsh-role-chain-presets。
  3. 删除这两个包的依赖/node_modules 链接(旧的 vendor/ 副本可先保留,回退时再用)。
  4. 安装并启用 dsh-role-chain,重启 Host。
  5. 验证:/role-chain/api/table 返回 {"ok":true,...},设置卡出现,plan 席位可用。

回退:还原第 1 步的三份文件,删除 node_modules/dsh-role-chain,重新装回两个旧包,按旧方式启用。

目录结构与生成约束

package.json         # dsh.bundle.patch 两个文件;dsh.client 让设置卡挂载
presets.patch.yml    # 字节复制自 plugins/l1-presets/cordis.patch.yml
cordis.patch.yml     # 复制自 plugins/l2-protocol/cordis.patch.yml,仅把行名改为 './lib/index.js'
lib/ bridge/ locale/ icon.svg   # 复制自 plugins/l2-protocol/,保持与其包内相同的相对路径
scripts/sync-umbrella.mjs       # 生成器 + 漂移检查(不随包发布)
test/                           # 同步/工具/布局测试(不随包发布)

lib/、bridge/、locale/ 采用扁平镜像而不是 vendor/l2/ 子目录,是因为 L2 的 lib/profile-dir.js 用自身模块位置推导 profile:<profile>/node_modules/<包名>/lib/index.js。若放进 vendor/l2/,在不导出 DSH_PROFILE_DIR 的桌面 Host 上会以 AUTHORITY_LOCATION_REQUIRED 失败(已由 test/layout.test.mjs 同时钉住"可用形状"和"不可用形状")。

lib/client.js 是与 L2 之间唯一的字节差异。L2 的 client bundle 以 dsh-role-chain-protocol 注册模块 id,而 client 装载器用 Loader 行的包名(这里是 dsh-role-chain)作为工厂 id;照抄 L2 的 id 会让该行被判为"未注册",装载器随即回退到包内 URL 再执行同一脚本,第二次注册触发 client-modules: duplicate factory registration for "dsh-role-chain-protocol",整个 web boot 失败(本机桌面版已实测)。因此生成器只改写 id:、name: 与日志文案三处为 dsh-role-chain,test/generated.test.mjs 钉住"恰好一处 id、一处 name,且 L2 源文件保持原样"。

开发

node scripts/sync-umbrella.mjs          # 重新生成镜像与两个 patch
node scripts/sync-umbrella.mjs --check  # 只检查漂移,非 0 退出
node test/run.mjs                       # 新增测试(每文件独立进程)
node test/run.mjs --in-process          # 沙箱禁止派生进程时的降级模式(较弱)

L2 的完整回归仍在原处:cd ../l2-protocol && node test/run.mjs --in-process。

发布前必须:先跑 --check 确认无漂移,再用 npm pack --dry-run 核对打包清单里包含 lib/、bridge/、locale/、icon.svg、两个 patch、LICENSE。

明确未验证

  • 真实市场的一键安装(本仓库的包未发布到 npm;GitHub 子目录条目的安装 spec 未实测)。
  • 隔离 Host 中的 GUI 渲染(席位/设置卡);目前只有组合树、启动成功与 client 入口作为证据。
  • 与旧两个 bundle 同时启用时,重复行被静默覆盖已实测(按 bundle 顺序后者生效),但"运行期到底实例化了几份插件"未直接观测到。

License

MIT,见 LICENSE。内含的 L2 代码同样为 MIT(plugins/l2-protocol/package.json)。

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。