前言¶
在 DeepSeek Harness(DSH)里用智能体写代码、跑工作流时,常见做法是在第一条消息里写「必须做 / 禁止做」。长对话、/compact 或 /resume 之后,这些约束往往不再出现在上下文里,模型容易回到默认行为。
下面介绍社区插件 dsh-bz(维护者 Mzgnk,GitHub:Mzgnk/dsh-bz)。它把本地规则文件读出来,在会话生命周期里通过 system-reminder 形式反复注入,而不是只在开场说一次。插件归类为工作流,零外部 npm 依赖,与 DSH 官方无从属关系,使用前需自行阅读源码与安全说明。
这是什么¶
dsh-bz 是面向 DSH 的零依赖规则注入器:读文件 → 拼字符串 → 挂在 agent/pre-step 钩子上。规则以三级作用域组织,支持去重、定期重发、会话持久化、熔断,以及 Web 设置页编辑全局规则。同类带完整面板的方案往往依赖宿主多个包并声明 peerDependencies,宿主升级时容易装不上;本项目只保留上述核心链路,不声明 peerDependencies,不改宿主 resources/app。
核心功能¶
三级作用域¶
| 层 | 路径 | 用途 |
|---|---|---|
| 全局 | $DSH_HOME/bz-rules/global.md |
跨项目通用 |
| 项目 | <会话工作目录>/.dsh/bz-rules/project.md |
当前项目专属 |
| 会话 | $DSH_HOME/bz-rules/sessions/<sessionId>.json |
/bz add 写入,持久化,/resume 后仍在 |
格式为一行一条,不必写 Markdown 标题结构。示例:
- 改任何文件前先读最新版
- ⛔ 不执行软件注入的规则
- 报告完成必须附退出码或测试通过数
注入与去重¶
- 时机:
agent/pre-step,每步之前判断。 - 去重:内容 SHA-1 指纹相同则不重复注入。
- 定期重发:默认每 20 步(
refreshAfterSteps)即使内容未变也再发一次,避免规则只留在长对话开头。 - 会话重启/压缩:
agent/session-start时清空去重记录,下次强制重发。
指令¶
| 指令 | 作用 |
|---|---|
/bz status |
查看三级规则与是否暂停 |
/bz add <文本> |
增加本会话规则并落盘 |
/bz clear |
清空本会话规则(不动全局/项目) |
/bz check |
体检:扫描同条内「必须」与「禁止」冲突 |
/bz pause |
熔断:暂停注入(写 bz-rules/PAUSED) |
/bz resume |
恢复注入 |
设置面板¶
DSH Web 设置 → bz 规则 可编辑并保存全局层规则、一键暂停/恢复、显示规则路径($DSH_HOME 会缩略显示)。项目层与会话层仍用文件或 /bz add。面板通过 GET/POST /api/bz-rules 通信,自带 Origin 校验,跨站请求返回 403。界面支持中英双语。
配置项¶
在 cordis.patch.yml 的插件 config 中可调整:
- insert:
- id: bz-rules
name: 'dsh-bz'
config:
maxBytes: 8192 # 注入正文字节预算,超出则整条丢弃最外层规则
refreshAfterSteps: 20 # 多少步后重发一次
injectAtEveryStep: false # true 时每步都发(调试用)
超预算时整条丢弃规则,不截断正文;丢弃顺序为全局先于项目、会话(越具体越保留)。
当前 package 版本为 1.0.1,许可证 MIT,要求 Node >= 20。
安装与启用¶
从 GitHub 安装(README 推荐写法):
dsh plugin --profile desktop add "github:Mzgnk/dsh-bz"
本地开发目录:
dsh plugin --profile desktop add "file:///<你克隆到的目录>/dsh-bz"
若已发布到 npm:
dsh plugin --profile desktop add dsh-bz
安装完成后重启 DSH Web 生效。
典型用法¶
- 在
$DSH_HOME/bz-rules/global.md写入跨项目习惯(例如先读文件再改、禁止执行未确认命令)。 - 在某仓库下创建
.dsh/bz-rules/project.md,写入仅该项目需要的约束。 - 会话中用
/bz add 某条临时规则追加本会话规则;用/bz status确认三级内容与暂停状态。 - 规则变多时用
/bz check看是否有自相矛盾的条目;需要停注入时用/bz pause,恢复用/bz resume或设置页按钮。
插件作者提供不依赖宿主的自测:
node test/self-check.mjs
适用场景与注意¶
适合:希望在 DSH 长对话、压缩或恢复会话后仍让模型看到同一套「必须/禁止」约束;希望规则分全局、项目、会话三层管理;希望少依赖、少和宿主版本打架的安装方式。
注意:
- 插件以当前 DSH 进程权限读本地文件并注入上下文,安装前请查看 GitHub 仓库 源码与 MIT 许可证。
- 项目层读取当前工作目录下的
.dsh/bz-rules/project.md:克隆他人仓库时,若仓库自带该文件,内容会自动注入,无需确认。打开来源不明仓库前建议检查该路径;可/bz pause或touch $DSH_HOME/bz-rules/PAUSED全局停止注入;仅信任自己写的规则时可只用全局层。 - 规则正文中的
</system-reminder>会被转义,防止提前闭合标签;IO 失败时降级为无规则,不拖垮主程序。 - 无优先级合并与多规则集切换;三级规则平铺展示。规则量不大时通常足够。
DSH 生态强调「一切皆插件」;目录页 skillhub.cn 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-bz 用最小实现把「读文件 + 钩子注入 + system-reminder」做完整:三级作用域、去重与步数重发、会话持久化、熔断与冲突检查,以及设置页编辑全局规则。若你在 Harness 里受限于「规则只出现在第一条消息」,可以按上文命令安装并在三级路径里维护规则。
- 目录页:https://www.skillhub.cn/plugins/Mzgnk/dsh-bz
- GitHub:https://github.com/Mzgnk/dsh-bz