@cfitsec/dsh-ast-guard 2.0.0 → 2.0.1

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.
Files changed (2) hide show
  1. package/README.md +43 -11
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -12,22 +12,19 @@
12
12
 
13
13
  ## 拿到它
14
14
 
15
- 还没发布到 npm,先 clone:
15
+ 从 npm 装(推荐):
16
16
 
17
17
  ```powershell
18
- git clone <本仓库地址>
19
- cd <你 clone 下来的目录>
18
+ dsh plugin --profile web add @cfitsec/dsh-ast-guard
20
19
  ```
21
20
 
22
- ## 装进 DSH
21
+ 想改源码再装:`git clone https://github.com/CFITCorporation/dsh-ast-guard`,然后把那个目录交给 `dsh plugin add`。
23
22
 
24
- ```powershell
25
- dsh plugin --profile web add <你 clone 下来的目录>
26
- ```
23
+ ## 装进 DSH
27
24
 
28
- **然后重启 DSH**(插件与配置在启动时加载,**不热更新**)。
25
+ 装完**重启 DSH**(插件与配置在启动时加载,**不热更新**)。
29
26
 
30
- 装好后插件会自己把配置挂上(包里有 `cordis.patch.yml`),规则用**包内**的 `rules/default.yaml` ——
27
+ 插件会自己把配置挂上(包里有 `cordis.patch.yml`),规则用**包内**的 `rules/default.yaml` ——
31
28
  **不需要你搬任何文件**。
32
29
 
33
30
  <details>
@@ -56,7 +53,7 @@ Set-Content -Path "$env:TEMP\ast-guard-探针.txt" -Value x
56
53
 
57
54
  ```
58
55
  [ast-guard] 拒绝:content-write
59
- …(dsh-ast-guard v0.1.0;规则来自 …\rules\default.yaml;…)
56
+ …(dsh-ast-guard v2.0.0;规则来自 …\rules\default.yaml;…)
60
57
  ```
61
58
 
62
59
  **看到了 ⇒ 装好了。** 没看到的话:
@@ -77,9 +74,44 @@ Set-Content -Path "$env:TEMP\ast-guard-探针.txt" -Value x
77
74
  **三思**不是拒绝:插一道 10 秒冷却窗口,窗口内回答"是"和"否"都无效;冷却结束时先跑规则里声明的
78
75
  **只读探针**,把"这条命令会丢什么"现算出来放进窗口,再用 `ast_confirm` 带编号回答。
79
76
 
77
+ ## 两档:拒绝和三思
78
+
79
+ 命中规则后只有两种结局,区别在于**这事有没有正当用途**:
80
+
81
+ | 档 | 什么时候用 | 表现 |
82
+ |---|---|---|
83
+ | **拒绝** `deny` | 这件事**不该这么做**(有更好的做法) | 直接不执行,文案告诉你该怎么改 |
84
+ | **三思** `deliberate` | 事情**正当但代价高**(删、移、改范围) | 停一下,给你一个冷静窗口,再由你决定 |
85
+
86
+ 三思窗口长这样:
87
+
88
+ ```
89
+ [ast-guard] 三思:destructive-delete
90
+ - 命令:Remove-Item .\src -Recurse
91
+ 触发原因:带标志 -Recurse
92
+ …插一段只读探针现算出来的"这条命令会丢什么"…
93
+ 冷却期 10 秒:这段时间内你的任何回答都无效 —— 回答"是"也一样。
94
+ 待确认编号:ed885e
95
+ ```
96
+
97
+ 四条规则,缺一不可:
98
+
99
+ 1. **冷却期内回答无效** —— "是"和"否"都不算数,逼你先看一眼再决定;
100
+ 2. **必须带编号**:`ast_confirm({ id: "ed885e", decision: "yes" })`。不带编号的"是"一律无效,
101
+ 免得上一条命令的确认落到下一条上;
102
+ 3. **一次性、绑命令**:放行只对这一条命令(按哈希绑定)生效,用掉或过期即作废;
103
+ 4. **2 分钟不处理就作废** —— 防止"忘了之后顺手确认"。
104
+
105
+ 冷却秒数默认 10(规则里 `cooldownSeconds` 可调,但不能小于 10);窗口里那个"会丢什么"
106
+ 来自规则里声明的**只读探针**(`evidence`),探针带写动词会在编译期就被拒掉。
107
+
108
+ 默认规则里有四组进三思:递归/通配/`-Force` 的删除、覆盖式移动改名、注册表增删改、
109
+ `git checkout -- .` 这类范围收缩(后者带三个 `git` 只读探针)。
110
+
111
+
80
112
  ## 改规则
81
113
 
82
- 默认规则是一套能直接用的(写内容族 + 条目操作族 + 内联 + 凭据 + 受保护目录 + 五组三思)。
114
+ 默认规则是一套能直接用的(写内容族 + 条目操作族 + 内联 + 凭据 + 受保护目录 + 五条三思规则)。
83
115
  想改成自己的:
84
116
 
85
117
  1. 复制一份:`Copy-Item rules\default.yaml my-rules.yaml`,按需要改;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cfitsec/dsh-ast-guard",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "PowerShell syntax-tree guard for DSH: a resident parser plus its own rule file. Judges pwsh commands by syntax tree (not by text), and adds a deliberation tier for costly-but-legitimate actions.",
5
5
  "keywords": [
6
6
  "deepseek-harness",