mstar-harness

52Star3Fork0Issue0Watching

为 DeepSeek Harness (dsh) 增加 Morning Star 多代理协作框架:注入流程门禁、状态校验、子代理角色装饰与可视化工作流面板。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
cursor-plugindsh-pluginharness-engineeringknowledge-managementomp-pluginopencode-pluginsddspec-driven

安装

$ dsh plugin --profile web add github:btspoony/mstar-harness

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 btspoony/mstar-harness:先查看仓库 https://github.com/btspoony/mstar-harness.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

这是 Morning Star(启明星)多代理协作框架的 dsh(DeepSeek Harness)宿主插件。它把一套带状态机的工作流引擎挂到 dsh 内部:在写入 harness 状态文件、派发子代理、修改技能文档等关键节点自动校验,并在 dsh 对话窗口右侧渲染一个可视化的工作流面板。

核心能力

  • 守护 harness 状态文件写入:拦截对 {HARNESS_DIR}/status.json 的写入请求,按当前文档做完整性校验与残留清理检查,违规时通过 dsh 的拒绝通道返回决策
  • 校验子代理派发:拦截 subagent / subagent_fork 工具调用,按工作流约束判断该派发是否合法,在"硬约束"模式下可拒绝不合规派发(含反自递归预检)
  • 自动注入角色人设:监听 dsh 子代理启动事件,把对应角色的描述作为系统提示片段注入子代理上下文
  • 挂载技能目录:以独立的技能提供者身份把 mstar 的 skills/ 镜像挂到 dsh,让 dsh 能识别并调用 mstar-* 系列技能
  • 输出引擎状态目录:每次模型推理前向对话上下文追加一行 mstar-engine-status 摘要(含迭代阶段、当前计划、剩余项、合规策略等)
  • 暴露四个工作流斜杠命令:注册 /iteration-start/iteration-drive/iteration-loop/codebase-audit,无需离开 dsh 即可启动/恢复多计划迭代
  • 在对话窗口右侧渲染"MStar 工作流"面板:以画布形式展示当前迭代阶段、计划看板与代理流转状态

技术实现

  • 语言: TypeScript
  • 关键依赖: @deepseek-ai/cordis(插件容器)、@mstar-harness/engine(共享工作流引擎)、@deepseek-ai/dsh-skill-filesystem(技能挂载通道)、schemastery(配置校验)
  • 架构模式: dsh cordis 扩展插件(named export + apply 钩子),通过 fs 写入拦截、工具预执行拦截、subagent 启动事件、agent 推理前目录注入四个 dsh 官方扩展面工作,零 dsh 本体修改
  • 入口文件: packages/dsh/src/index.ts(DSH 子包);根 package.json 的 main 指向 packages/opencode/src/mstar.ts(OpenCode 宿主入口,本插件不涉及)

适用场景

使用 dsh(DeepSeek Harness)的多代理项目,需要让多个代理(PM、QC、QA、开发者角色)按一致的状态机和阶段门禁协作。当前的痛点是 dsh 自带的派发工具只负责"派一个代理去干活",无法保证每个派发都符合整体计划的工作流约束;装上这个插件后,所有派发和状态写入都会被引擎先审核一遍,并把当前进度可视化出来。

前置依赖与兼容性

依赖最低版本说明
DSH0.1.0-rc.7+插件强依赖 dsh-agent / dsh-client-runtime / dsh-client-ui-conversation / dsh-client-ui-slots / dsh-client-locale / dsh-commands / dsh-fs / dsh-invariants / dsh-jobs / dsh-llm / dsh-skill / dsh-skill-filesystem / dsh-tools 等宿主包,且需 dsh-base + dsh-web-app 层在 profile 中
@deepseek-ai/cordis^4.0.1dsh 的插件容器,由宿主提供
Bun(仅构建期)>=1.2.17插件开发者从源码构建时使用;用户从 npm 安装已构建产物则无需
运行时 Node由 dsh 宿主决定插件未单独声明 Node 版本
dsh-llm-fallbacks可选 ^0.2.0仅在使用 mstar 角色种子与 fallbacks 模型路由联动时需要,独立安装
平台跨平台服务端跑在 dsh Node 进程;浏览器侧通过 dsh web profile 加载

安装方式

dsh plugin --profile web add github:btspoony/mstar-harness

安装命令格式由 dsh 官方插件规范规定;上述命令会把 @mstar-harness/dsh 加入 web profile 的 bundle 列表并自动重建挂载。也可使用一行式 CLI 安装:npx @mstar-harness/cli init --target dsh,会自动顺带安装 dsh-llm-fallbacks

配置项

所有字段都可省略,省略时按"硬编码默认"或"运行时探测"工作。

配置类型说明默认值
harnessDir字符串显式指定 harness 根目录。当你的项目用 .mstar/ 等会被插件自动识别的目录名时无需配置;如果用了非常规目录名(例如 .harness/),必须手动指定运行时按会话工作区探测(依次尝试 .mstar/.agents/.plans/plans/
enforcementhard / soft全局强制度覆盖。hard 让派发门禁真拒绝;soft 强制只警告(哪怕迭代指引声明硬约束)。一般无需改跟随迭代 compass 的元数据决定,无 compass 时一律警告
dispatchTools字符串数组派发门禁要拦截的工具名清单["subagent", "subagent_fork"]
dispatchBinding字符串当前 dsh 会话对应的 mstar 角色(如 fullstack-dev),用于反自递归预检:避免代理派发"自己"未配置则跳过自递归检查
skillRoots字符串数组额外技能根目录,会以 dsh 技能文件系统的"项目级"被识别无(只挂载插件自带的技能镜像)
bundledSkillDir字符串自定义"内置"技能根目录。绝对路径优先;相对路径按 dsh 启动目录解析插件包自带的 harness-skills/ 镜像(包内相对路径,不受启动目录影响)
catalogTtlMs数字引擎状态目录的刷新间隔(毫秒)60000
roleMap对象mstar 角色名 → dsh-llm-fallbacks 角色名的映射表,目前只用于日志
rolePersonas对象mstar 角色名 → 自定义人设文本。子代理启动时会作为系统提示片段注入。注意:内容里不能出现成对的 {{}},否则启动时校验失败走插件包自带的 harness-agents/ 镜像默认值
workflowGateoff / warn / ask / hard工作流/ralph 工具的合规门禁模式。warn 只警告;ask 首次出现新工作流走 dsh 审批;hard 直接拦截违规调用warn
workflowNames字符串数组被认为是"已知"的工作流名白名单。空/未配置 ⇒ 全部按未知处理(默认不放行)未配置
maxGoalRounds数字目标服务的最大回合上限(自主迭代阶段的硬边界)256

常见问题

Q: 安装之后 dsh 启动变慢了吗?

A: 影响极小。引擎状态目录默认 60 秒刷新一次,热路径只是时间戳比对加 Map 查询;只有在第一次或缓存过期时才会重读 harness 文件。

Q: 派发门禁会不会"误杀"我合法的派发?

A: 默认是 warn 模式,只警告不阻止;只有当你在迭代 compass 中显式开启 Enforcement: hard、或在配置中写 enforcement: hard 时才会真正拒绝。硬模式下被拦截会附带具体原因,按提示修改即可。

Q: 反自递归预检怎么配置才生效?

A: 在你的 dsh 配置里给插件的 mstar 行加上 dispatchBinding: '<发起派发的 mstar 角色名>',例如 dispatchBinding: fullstack-dev。没配置就跳过预检,不会误报。

Q: 我看到 dsh 多了一个"MStar 工作流"标签页,怎么关掉?

A: 它来自插件包内的浏览器端 client bundle(packages/dsh/src/client/),由 dsh web profile 自动加载。如果你不需要,把 @mstar-harness/dsh 从 profile 移除后重启 dsh 即可。

Q: 我能修改插件内的角色人设或技能目录吗?

A: 可以。两种方式:编辑 dsh profile 层的 cordis.patch.yml,在 mstar 行的 config 里加 rolePersonas / bundledSkillDir 覆盖;或者修改仓库根目录的 skills/agents/ 后跑 bun run bundle-assets 重新打包。

Q: 报错 "persona contains {{...}}" 怎么办?

A: dsh 系统提示渲染器对 {{}} 做严格变量插值,你在 rolePersonas 写的文本里若出现成对的大括号就会被拒。把双大括号改成单大括号、或换个写法即可;孤立的 {{(没有配对的 }})是安全的。

Q: 跟 dsh 升级冲突吗?

A: 不会。插件不修改 dsh 本体,dsh 升级后只需 bun run build && dsh plugin --profile web add . 重新挂一次(或重新 add 远端版本)。如果升级的是 dsh 0.1.0-rc.7 之前版本,则可能需要先升级 dsh。

上手难度

进阶 — 需要理解 mstar 的状态机概念({HARNESS_DIR}/status.json、iteration compass、QC/QA gate),普通 dsh 用户多数情况下装上即用,但要让"硬约束"真正生效就需要读懂 compass 元数据。

已知问题与限制

  • 状态文件写入拦截是"内容盲"的:fs 写入事件只携带目标路径与代理,不带新内容,所以"把好文档改坏"的那一次写入无法被拦;修复方式是手动改回正确格式,或删除 status.json 让 harness 重建
  • 反自递归预检依赖 dispatchBinding 配置:未配置时直接跳过,多角色派发方需要为每种角色分别部署配置
  • 技能内置镜像在构建时同步:如果你是从源码安装但没跑 bun run bundle-assets,则没有内置技能也没有内置命令,但不会报错
  • {{}} 的内容不能写在 rolePersonas 中,否则插件挂载阶段就会被 schemastery 校验拒绝
  • workflow/ralph 工具调用做门禁时,未配置 workflowNames 等同于"全部未知",所以第一次跑新工作流会被标记
  • 内容盲技能 lint 也有同款盲区:fs 写入事件不带内容,所以"首次创建的内容不合规"或"好文档被覆盖"无法拦截
  • lintSkillWrite 的硬拦截错误类已实现但当前 dsh 还没有"带内容"的技能写入钩子,所以只能以"repair escape"形式给出告警
  • 角色→模型的自动路由功能未交付:当前插件只注入人设,不会改写子代理的模型选择;该能力依赖上游接口
  • design-md 命名匹配是全局 basename 匹配(任意目录下的 DESIGN.md 都会触发设计系统校验),可能对不相关项目产生噪音告警

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/btspoony/mstar-harness)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录