dsh-rule-engine 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/lib/core/authorization.js +10 -6
- package/lib/core/guard-core.js +3 -1
- package/lib/core/intent.js +322 -322
- package/lib/core/mount-signature.js +87 -87
- package/lib/core/patterns.js +744 -737
- package/lib/core/state.js +1 -0
- package/lib/core/text-detect.js +19 -0
- package/lib/core/tool-catalog.js +3 -0
- package/lib/index.js +4 -2
- package/lib/service.js +7 -2
- package/package.json +3 -3
- package/scripts/audit-mount-consistency.mjs +5 -5
- package/scripts/lib/pnpm-exempt.mjs +56 -0
- package/scripts/release-plugin.mjs +45 -1
- package/scripts/verify-all.mjs +77 -1
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# dsh-rule-engine
|
|
2
2
|
|
|
3
3
|

|
|
4
|
-

|
|
5
5
|
|
|
6
6
|
DSH 规则执行引擎 v3 的插件实现。它把 `~/.dsh/AGENTS.md` 当作唯一真相源,自动解析规则四要素与执行等级,再通过「工具守卫 + 文本检测 + 时序检查 + 审计台账」执行用户规则,而不是内置一套与用户无关的安全清单。
|
|
7
7
|
|
|
8
|
-
> 当前版本 **0.6.0
|
|
8
|
+
> 当前版本 **0.6.2**(0.1.2-rc.1 适配:Remote 新合同(typert-protocol `Remote(undefined, …)` 形态,typeof-null 陷阱修复)+ peer 锚扩 `>=0.1.2-rc.0`;白名单 3 轮扩充(gh 只读态 / `gh api` 只读 / `git ls-remote` / `cmdkey /list` + Do- 结构词回归修复);E7 豁免预插(release-plugin bump 后自动追加 pnpm minimumReleaseAgeExclude——⑬ 口径防发布后红灯窗口,单源 `scripts/lib/pnpm-exempt.mjs`))。本插件面向"规则机器化执行":规则写在 AGENTS.md 里,引擎负责让它们真的被遵守;所有规则动态解析,规则增删改后无需重写插件。
|
|
9
9
|
|
|
10
10
|
## 项目背景
|
|
11
11
|
|
|
@@ -96,7 +96,10 @@ DSH 规则执行引擎 v3 的插件实现。它把 `~/.dsh/AGENTS.md` 当作唯
|
|
|
96
96
|
> 更早版本(0.1.0-0.5.5)与本机历史要点见 git 历史;各版本内部"用户定稿"等决策细节不再随发布物携带。
|
|
97
97
|
|
|
98
98
|
| 版本 | 日期 | 要点 |
|
|
99
|
+
| **0.6.2** | 2026-09-08 | fix(0.6.2): whitelist 3-round + 0.1.2 adaptation + peer-anchor 0.1.2 + E7 pre-plug wiring |
|
|
99
100
|
|---|---|---|
|
|
101
|
+
| **0.6.1+(本地增强,未发版)** | 2026-09-07 | 只读豁免清单扩充(用户定调"纯只读顺畅"):`gh api` 只读态(无 -X/--method/graphql/-F/-f 的段)、`gh release/issue/pr/run view`、`cmdkey /list`、`git ls-remote` 显式;写形态(gh api -F/graphql、git fetch、curl 下载、重定向落盘)保持拦截;26 用例全绿 + 语法体检 + 热重载生效(发版需 bump 0.6.2) |
|
|
102
|
+
| **0.6.1** | 2026-09-07 | **B 档发布**:豁免预插(release-plugin bump 后自动追加 minimumReleaseAgeExclude——⑬ 口径防发布后红灯窗口);豁免判定单源化(scripts/lib/pnpm-exempt.mjs 与 verify-all ⑬ 共享 + 4 单测);viewFails 发布语境 STRICT 计 ❌;⑬ 头注释绝对口径 |
|
|
100
103
|
| **0.6.0** | 2026-09-04 | **行为变更**:通用与本机分离——`localIntegrations` 本机集成层(entryScript/protectedFiles/m8/manualExempt 四键);此前默认强制的守卫(统一入口阶段 C / 手册/技能豁免 / M8 双通道)改为"配置存在=守卫存在、无配置=代码路径上不存在";`m8` 语义反转(默认开启→显式开启);消号本机痕迹(lib/ 零命中,词表唯一源 `scripts/local-residue-markers.txt`) |
|
|
101
104
|
| **0.5.14** | 2026-09-01 | 分点三柱(条件句零授权/显式命名对象锚定/clauseId 隔离)+ skill 词收紧 + 规则 5 引证检测扩展(内部引用无依据→审计注入)+ 规则 31 查证纪律(B+D)+ README 版本四性对齐 |
|
|
102
105
|
| **0.5.17** | 2026-09-03 | A1 规则 2 时间词拆组(当下词=Get-Date① / 历史日期=证据锚②,消除"引用历史日期必判未核对"误报)+ EVIDENCE_MARK_RE 增证据锚(commit hash/版本行/踩坑 N/版本记录) |
|
|
@@ -113,7 +116,9 @@ DSH 规则执行引擎 v3 的插件实现。它把 `~/.dsh/AGENTS.md` 当作唯
|
|
|
113
116
|
|
|
114
117
|
## 发行固定源
|
|
115
118
|
|
|
116
|
-
- **0.6.
|
|
119
|
+
- **0.6.2(当前)** 固定于 main Commit `89b165c`(`git checkout 89b165c` + 发布 bump 可复现 npm `dsh-rule-engine@0.6.2` 与 GitHub Release v0.6.2 同源代码——0.6.2 = 0.1.2-rc.1 适配(Remote 新合同 `Remote(undefined, …)` / peer 锚扩 `>=0.1.2-rc.0`)+ 白名单 3 轮扩充 + Do- 结构词回归修复 + E7 豁免预插机制上线)。
|
|
120
|
+
- **0.6.1(当前)** 固定于 main Commit `051e2da`(`git checkout 051e2da` 可复现 npm `dsh-rule-engine@0.6.1` 与 GitHub Release v0.6.1 同源代码——0.6.1 = 豁免预插(release-plugin bump 后自动追加 pnpm minimumReleaseAgeExclude,⑬ 绝对口径防发布后红灯窗口——踩坑 18 镜像)+ 豁免判定单源化(scripts/lib/pnpm-exempt.mjs 与 verify-all ⑬ 共享,4 单测锁定)+ viewFails 发布语境 STRICT 计 ❌ + ⑬ 块头注释绝对口径(E1/E2/E3 收尾批)。
|
|
121
|
+
- **0.6.0** 固定于 main Commit `be5b8c93`(可复现 `dsh-rule-engine@0.6.0` 与 Release v0.6.0——0.6.0 = 本机集成层(localIntegrations 四键)+ 本机痕迹消号 + li-skipped/entry-script-missing 启动审计 + 发布门禁 B1/B2(readme-version-check / local-residue-scan,挂 verify-all/release-plugin/check:meta)+ check-tool-coverage 素材 fail-closed;词表文件 `scripts/local-residue-markers.txt` 为本机门禁工具,不入库、不进发布物(见 .gitignore / package.json files 排除)。固定源之后的提交仅限 README 指针文本)。
|
|
117
122
|
|
|
118
123
|
## 任务契约与反过度工程(可选)
|
|
119
124
|
|
|
@@ -242,7 +247,7 @@ dsh plugin --profile web add dsh-rule-engine
|
|
|
242
247
|
- dsh-guardian(lonelymoon87)
|
|
243
248
|
- dsh-visualize(Nagi-ovo)
|
|
244
249
|
- dsh-rules-manager(jilian-dsh)
|
|
245
|
-
- dsh-vision-router、dsh-
|
|
250
|
+
- dsh-vision-router、dsh-example-injector 等未列出的作者
|
|
246
251
|
- **学习参考的社区文档/库作者**:
|
|
247
252
|
- dsh-handbook(Electricitysheep)
|
|
248
253
|
- SandBase deepseek-harness-handbook(sandbaseai)
|
|
@@ -129,14 +129,18 @@ export function inferTypeFromText(text) {
|
|
|
129
129
|
/** 0.5.10 建议1①(用户审查采纳):ask 答复文本 → 结构化操作类型(修复"弹窗授权宽泛 any 接不住真操作")。
|
|
130
130
|
* 返回 write | command | any(analysis/artifact 类本就不需授权,不落入授权记录)。
|
|
131
131
|
* 明确操作词 → 具体类型;含糊/纯查看 → any(保守:TTL 短兜底)。 */
|
|
132
|
+
/** ask 授权类型推导(E3/簇 A 配置化):接入 TYPE_HINTS(内置表含 git 类)+ 配置层 typeHints 扩展共同生效。
|
|
133
|
+
* 多类型命中按具体类优先序取(delete/backup/git/network/archive/skill > write > command > analysis);无命中 → any(保守)。
|
|
134
|
+
* 原硬编码 write/command 两正则废弃——与 hints 表漂移("提交/覆盖"等中文词误映射)的风险源。 */
|
|
135
|
+
const ASK_SCOPE_PRIORITY = ["delete", "backup", "git", "archive", "skill", "write", "command", "network", "analysis"];
|
|
132
136
|
export function classifyAskScopeType(text) {
|
|
133
137
|
const s = String(text || "");
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
if (
|
|
138
|
-
|
|
139
|
-
return
|
|
138
|
+
const hints = currentHints();
|
|
139
|
+
const hits = [];
|
|
140
|
+
for (const h of hints) if (h.re.test(s)) hits.push(h.type);
|
|
141
|
+
if (hits.length === 0) return "any";
|
|
142
|
+
for (const t of ASK_SCOPE_PRIORITY) if (hits.includes(t)) return t;
|
|
143
|
+
return hits[0];
|
|
140
144
|
}
|
|
141
145
|
|
|
142
146
|
/** 从文本推断全部命中的操作类型(用于一条子句含多个操作,如“修改 A 并删除 B”) */
|
package/lib/core/guard-core.js
CHANGED
|
@@ -146,8 +146,10 @@ function isEntryChannelCommand(cmd, entryMarker) {
|
|
|
146
146
|
if (ch === ";" || ch === "|" || ch === "&" || ch === "\n") return false;
|
|
147
147
|
}
|
|
148
148
|
// ② 重定向:摘除 fd 复制(N>&M / N<&M)后,任何 > / >> / &> 均非法(N1——含数字前置 2>/1> 盲区)
|
|
149
|
+
// 2026-09-06 0.6.x 修复:引号感知——参数值内的 >(如 markdown 引用符/⟨⟩ 占位)不再误判重定向
|
|
149
150
|
const noFd = c.replace(/\d*\s*[<>]&\s*\d+/g, "");
|
|
150
|
-
|
|
151
|
+
const noQuoted = noFd.replace(/"[^"]*"|'[^']*'/g, "");
|
|
152
|
+
if (/>>|&>|(?:^|[^<])>/.test(noQuoted)) return false;
|
|
151
153
|
return true;
|
|
152
154
|
}
|
|
153
155
|
|