dsh-rule-engine
jilian-dsh/dsh-rule-engine
Rules execution engine for dsh: parses AGENTS.md, hard-blocks rule-violating tool calls, text-based B/D rule auditing, /guard command, version-guard for versioned files, and free-zone support (engine skips free-zone sections).
설치
dsh plugin --profile web add github:jilian-dsh/dsh-rule-engineREADME
dsh-rule-engine
DSH 规则执行引擎 v3 的插件实现。它把 ~/.dsh/AGENTS.md 当作唯一真相源,自动解析规则四要素与执行等级,再通过「工具守卫 + 文本检测 + 时序检查 + 审计台账」执行用户规则,而不是内置一套与用户无关的安全清单。
项目背景
这个项目来自一个非常具体的个人需求:
- 作者是零编程基础用户,但极其重视规则的制定、执行、遵守与复盘。
- 作者发现:规则如果只写在文本里、靠模型“自觉”执行,会反复失效(例如时间词写错、内联命令违规、交付前漏验证等)。
- 因此核心思路是:规则的执行不能只靠自觉,要尽量靠插件在机制层强制。
- 本插件所有规则均从
AGENTS.md动态解析,规则增删改后无需重写插件。
当前实现基于已有的 AGENTS.md 规则体系拓展,社区暂无类似插件供参考(大概率为该等约束可能限制开发自由性,不适用于专业编程人员),可能存在大量不完备、误判或边界问题。欢迎任何使用者提出调整建议、提交 issue 或 PR。项目仍处于“可运行但需要持续打磨”的阶段。
功能分层
- 阶段 1 容器:解析 AGENTS.md 全部规则 → 理解产物(
rule-understanding.json可生成) - 阶段 2 匹配机 + 工具守卫 + 文本检测
- 阶段 3 时序检查 + 授权询问集成
- 阶段 4 D 级自证调度 +
/guard命令完善
当前实现以「模式库兜底」为主,LLM 理解器预留扩展点;所有规则均从 AGENTS.md 实时解析。
命令
| 命令 | 作用 |
|---|---|
/guard status | 引擎状态(规则数/置信度/放行/解锁) |
/guard rules | 规则清单 + 理解产物 |
/guard active | 最近激活了哪些规则、为什么 |
/guard log [N] | 最近 N 条审计 |
/guard unlock [N] | 解锁配置写保护 N 分钟(仅用户) |
/guard bypass [N] | 临时整体放行 N 分钟(仅用户) |
/guard lock | 立即恢复全部守卫(取消解锁/放行) |
/guard revoke | 撤销全部授权记录 |
/guard reload | 强制重解析 AGENTS.md |
装配方式
本插件已按官方 bundle 规范打包,包内自带 cordis.patch.yml。
推荐安装方式:
dsh plugin --profile web add dsh-rule-engine
或手动将 dsh-rule-engine 加入 profile 的 dsh.profile.bundles 数组。包内的 cordis.patch.yml 会自动挂载插件行:
- insert:
- id: dsh-rule-engine
name: 'dsh-rule-engine'
如果你是从源码手动调试,也可以沿用 insert 方式挂载,但正式安装建议走 bundle。
安全设计
- 只读操作(read/grep/glob/read_image/str_replace_editor view)无条件放行,拦截只针对变更类操作
- 插件自身配置/理解产物对模型只读:直接
edit/write会被守卫拒绝,需/guard unlock - AGENTS.md mtime 变化后自动重解析(
fs.watch+ stat 兜底),规则增删改无需重启 - 低置信规则不参与硬拦,避免误伤;在
/guard rules中标记人工复核 - 授权证据按“操作类型 + 目标路径前缀”结构化匹配,区分“询问”与“授权”
- 备份证据按“目标路径 → 备份路径”记录,删除/覆盖前必须存在对应路径且备份文件真实存在
- 版本/手册类文件写后自检:版本号连续、append 不覆盖上一行,失败自动回滚并审计
- 跨工具一致性:同一敏感操作经
edit/write/str_replace_editor/pwsh必须得到相同拦截/放行结论 - 命令输出静默错误检测:全 false/0/null 或与上一条完全一致时审计 + 注入提醒,不阻断
- 技能目录实时联动:
ctx.skills目录变化后自动刷新,已禁用/不存在的技能不触发 12B - LLM 增量理解:对非 high 置信规则调用
ctx.llm补全结构化理解,失败自动回退模式库 - D 级自证泛化:按规则特征触发自证提示,每规则每会话限 3 次
- 授权记录默认 10 分钟 TTL,无路径的全局授权 TTL 缩短为 2 分钟;可用
/guard revoke撤销 - 用户直接命令式指令(如“删除这个文件”)也视为授权
- 规则 1 支持“用户明确要求重试”豁免
- 会话状态有容量上限并自动清理,防止长跑内存膨胀
- LLM 理解按“规则 + AGENTS.md mtime”去重,避免重复烧 token
- 审计日志:
~/.dsh/rule-engine.log.jsonl - 守卫使用
ctx.tools.guard()单调拒绝,模型无法自行绕过
当前局限与后续优化路线
当前版本已经具备完整四层骨架,但距离“成熟”仍有距离。以下是一些难度较高、尚未完全实现的优化方向,欢迎社区共同推进:
-
LLM 理解器深化 当前只对非 high 置信规则做一次 LLM 增量理解;未来应支持“规则变更窗口期”、增量重理解、低置信人工复核队列。
-
授权语义精确化 当前 ask 授权记录为宽泛
any+ 路径前缀;未来可要求 ask 面板显式声明操作类型,或支持“一次授权仅针对单个 callId”。 -
备份证据完整化 当前校验备份文件存在;未来可增加哈希/大小一致性校验、备份链管理与自动清理。
-
规则 12C / 13B / 10 / 15 / 19 等流程类规则深度执行 这些规则需要更多业务语义(下载校验、会话三层验证、版本判断、知识沉淀),目前偏“自证提示”,尚未做到机器可判定。
-
跨会话持久化 授权/备份目前为内存态,重启失效。持久化涉及写入保护、并发与恢复,风险较高,暂未实现。
-
输出文本实时拦截 受 DSH 官方架构限制,
assistant/message无法“拦下不发”,只能事后审计 + 纠正注入;这是平台边界,不是插件能单独突破的。
致谢
感谢以下项目与作者的无私开源付出,本项目在开发过程中直接受益:
- DeepSeek Harness 官方团队(@deepseek-ai):提供了 DSH 平台、插件机制与官方文档。
- 本机已安装插件的作者们:
- dsh-guardian(lonelymoon87)
- dsh-visualize(Nagi-ovo)
- dsh-usage(kestiny18)
- dsh-rules-manager(jilian-dsh)
- dsh-vision-router、dsh-super-injector 等未列出的作者
- 学习参考的社区文档/库作者:
- dsh-handbook(Electricitysheep)
- SandBase deepseek-harness-handbook(sandbaseai)
- 以及 DSH 官方文档镜像与源码维护者
免责声明
本项目是个人/社区项目,不属于 DeepSeek Harness 官方项目,与官方无隶属关系。使用风险自负,请在生产环境前充分测试。
开发与测试
npm test
bash scripts/build.sh
License
MIT