一步装齐角色分工工具链:四个智能体预设(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生效)。因此不要依赖顺序,先移除旧条目再启用伞包。
- 备份 profile 的
package.json、cordis.patch.yml、pnpm-lock.yaml。 - 从
dsh.profile.bundles中删除dsh-role-chain-protocol与dsh-role-chain-presets。 - 删除这两个包的依赖/
node_modules链接(旧的vendor/副本可先保留,回退时再用)。 - 安装并启用
dsh-role-chain,重启 Host。 - 验证:
/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)。
链接
同类插件
loopx-project/loopx#dsh-loopx-plugin★ 6537
LoopX——面向长周期 Agent 的提供商中立、本地优先状态内核与控制平面:在 DeepSeek Harness 执行层之上持久化 Goal、Todo、门禁、证据、配额、恢复与交接状态;插件负责引导安装 CLI 与技能、准入有界的同会话续跑,并为精确绑定的工作循环提供本地 GoalBar。
Q00/ouroboros#integrations/dsh-plugin★ 6308
通过 DSH MCP 客户端挂载 Ouroboros 的纯配置包,在 DSH 中提供 36 个涵盖需求访谈、Seed、执行、评估与演化流程的工具。
chuspeeism/dashi-taskboard#deepseek-harness★ 3434
把当前已安装并运行中的 Codex Taskboard 嵌入 DeepSeek Harness 侧边栏,并通过 Launcher 运行时描述文件连接,而不是使用固定端口。
NanmiCoder/dsh-agent-teams★ 2647
AgentTeams 多智能体团队。
EthanYoQ/AI-Novel-Writer#dsh-ai-novel-writer★ 2265
安装专用 AI 小说创作预设与工作台:提供带修订号的本地项目资产、紧凑侧边工作台,以及需要原生审批的逐文件变更。
Miaotofu01/Study-Mate★ 1307
你的AI学习搭档:定计划、讲知识、做项目,学透一门科目。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。