dsh-isolation-gate 0.3.2 → 0.4.0
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/CHANGELOG.md +26 -5
- package/README.md +2 -1
- package/docs/release-0.4.0.md +56 -0
- package/docs/screenshots/02-group.png +0 -0
- package/docs/screenshots/04-audit.png +0 -0
- package/docs/screenshots/05-special-profile.png +0 -0
- package/docs/screenshots/README.md +11 -3
- package/lib/client.js +771 -33
- package/lib/index.js +87 -5
- package/lib/profiles.js +60 -16
- package/lib/store.js +81 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0 — 2026-10-23
|
|
4
|
+
|
|
5
|
+
- **改(重要)**:组类型(严格 / 宽松)以前只在按钮上写一句小字,实际是**两套相反语义** —— 严格组是白名单(没列进组的全拒),宽松组是黑名单(没列进组的照常)。实测踩坑:把目录加进严格组当「只禁这个」,结果全盘封死。现在模板卡片和编辑区都挂一条醒目的**模式横幅**(白名单模式 / 黑名单模式 + 「没列进组的怎么算」),编辑区还给一键「换成宽松组 / 严格组」(不动清单,只换清单外怎么算)。
|
|
6
|
+
- 模板卡片显示**挂在哪几个会话**(会话 id 前 8 位),不再只有一个数字。
|
|
7
|
+
- 模板编辑区原来那句「不在组里的目录不受影响」是**错的**(那是宽松组才成立),已按组类型分写。
|
|
8
|
+
- 会话头部选择器里每组也补上「没点名的全拒 / 照常」。
|
|
9
|
+
- **测试**:客户端 94 → 97 条(锁住两种组类型的横幅文案与会话头部提示),`npm test` 6/6 通过。
|
|
10
|
+
|
|
11
|
+
- **新**:会话头部小按钮(`conversation.session.header.utilities`,垃圾桶那一排右侧)—— 打开就能给**当前会话**挂一个「特别门禁」组,或者选「不额外限制」取消。单选:一个会话最多挂一个组,组本身可以被多个会话共用。
|
|
12
|
+
- 按钮直接显示当前挂的组名;没挂时显示「门禁」并保持低调(虚线灰),挂上后变强调色 —— 一眼看出这个会话是不是被额外限制着。
|
|
13
|
+
- 数据源与「特别门禁」页是同一份:`GET /profiles?sessionId=` 读、`POST /session-profile` 写,不另存副本。
|
|
14
|
+
- 弹出的清单里每组带一行说明(严格组 / 宽松组 · 多少条),并固定一句边界提示「组只会更严,不会放宽全局名单」。
|
|
15
|
+
- 弹层包在渲染错误边界里:它坏了也不会拖垮整个会话头部。
|
|
16
|
+
- **测试**:客户端 93 → 94 条(3 个座位 + 新座位 id),`npm test` 6/6 通过。
|
|
17
|
+
|
|
18
|
+
## 0.3.3 — 2026-10-22
|
|
19
|
+
|
|
20
|
+
- **改名**:「策略档」→「隔离强度」,三档一律用白话名 —— 宽松(normal)/ 严格(strict)/ 全封(sealed),每档一句「这档会发生什么」
|
|
21
|
+
- **修**:页内三个标签点了不切换。标签改用原生 `<button type="button">` + `data-gate-tab`,并把当前页记在模块级变量里(宿主若重建组件实例,回来还是刚才那页);顶栏右侧新增「当前页说明」可肉眼确认
|
|
22
|
+
- **测试**:客户端自测新增 11 条标签回归(3 个标签、白话名、`type=button`、点击回传 list/profiles/audit、首屏渲染、三档白话名),82 → 93
|
|
23
|
+
|
|
3
24
|
## 0.2.3 — 2026-10-21
|
|
4
25
|
|
|
5
26
|
- 新增 `npm run release:check`:一条命令核对「本地版本 / npm latest / git tag / GitHub Release / 元数据回链 / 发现性关键词」
|
|
@@ -49,16 +70,16 @@
|
|
|
49
70
|
- 坏配置 / 坏状态文件 ⇒ 按 `sealed` 处理(fail-closed)
|
|
50
71
|
- 联网软禁:`web_search` / `web_fetch` 等工具 + `curl` / `npm install` / `git clone` 等命令;`npm test`、`git status` 不误判
|
|
51
72
|
- `sealed` 下认不出路径的 shell 命令一律拒
|
|
52
|
-
- 自测:新增 44 + 12 条断言,套件 6/6 通过
|
|
73
|
+
- 自测:新增 44 + 12 条断言,套件 6/6 通过
|
|
53
74
|
|
|
54
75
|
### 面板拆成三页(同日)
|
|
55
76
|
|
|
56
77
|
- 侧栏三项:`门禁`(对象授权)/ `门禁 · 策略`(档位与目录绑定,只读)/ `门禁 · 审计`(磁盘差异 + 审计账本)
|
|
57
78
|
- 新增宿主路由 `GET /__dsh-isolation-gate/profiles`
|
|
58
|
-
- 原单页保留为第 1 页,内容未删
|
|
79
|
+
- 原单页保留为第 1 页,内容未删
|
|
59
80
|
|
|
60
|
-
- 修正:不做三个侧栏项,改回**一个「门禁」+ 页内标签**(对象与分组 / 策略档 / 审计与诊断),与「技能」面板同款交互
|
|
81
|
+
- 修正:不做三个侧栏项,改回**一个「门禁」+ 页内标签**(对象与分组 / 策略档 / 审计与诊断),与「技能」面板同款交互
|
|
61
82
|
|
|
62
|
-
- 审计页新增「清空审计」:清空前整份备份到 `D:\回收站\isolation-gate-audit\access-log-<时间>.jsonl`,再截断原文件;新增 `POST /__dsh-isolation-gate/audit/clear`
|
|
83
|
+
- 审计页新增「清空审计」:清空前整份备份到 `D:\回收站\isolation-gate-audit\access-log-<时间>.jsonl`,再截断原文件;新增 `POST /__dsh-isolation-gate/audit/clear`
|
|
63
84
|
|
|
64
|
-
- 修:`POST /audit/clear` 缺 `clearAudit` 导入(运行时 ReferenceError → 400);前端改用 `post()` 正确序列化 body
|
|
85
|
+
- 修:`POST /audit/clear` 缺 `clearAudit` 导入(运行时 ReferenceError → 400);前端改用 `post()` 正确序列化 body
|
package/README.md
CHANGED
|
@@ -247,7 +247,8 @@ MIT · 见 [LICENSE](./LICENSE)。
|
|
|
247
247
|
|
|
248
248
|
**已在做 / 下一步**
|
|
249
249
|
|
|
250
|
-
- [
|
|
250
|
+
- [x] 截图四张:总览 / 组卡 / 审计与诊断 / 特别组草稿(见 [docs/screenshots](./docs/screenshots))
|
|
251
|
+
- [ ] 30 秒演示 GIF(欢迎贡献:录你自己机器上的演示;我们不录,整屏会带出无关窗口)
|
|
251
252
|
- [ ] `gate export --csv`:把审计日志导出成表格
|
|
252
253
|
- [ ] 临时授权:给某对象一个到期时间,到点自动回到 `deny`
|
|
253
254
|
- [ ] 状态文件并发锁(多窗口同时改不互相覆盖)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# v0.4.0 — 组类型说清楚,会话头就能挂组
|
|
2
|
+
|
|
3
|
+
> 这一版解决一个真实误解:**在「严格组」里把 E:\ 标成「禁」,不等于"只禁 E",而是"除了 E 全放、其它一律拒"** —— 正好相反。
|
|
4
|
+
> 0.4.0 把这件事写在界面上,并且给了退路。
|
|
5
|
+
|
|
6
|
+
## 新增
|
|
7
|
+
|
|
8
|
+
**1. 组类型横幅:白名单模式 / 黑名单模式**
|
|
9
|
+
|
|
10
|
+
- 「白名单模式」(严格组):**只放清单里的;没列进组的,一律拒** —— 黄色
|
|
11
|
+
- 「黑名单模式」(宽松组):**只限清单里的;没列进组的,照常放行** —— 绿色
|
|
12
|
+
- 编辑区和每张模板卡片上都有,不用记、不用猜
|
|
13
|
+
|
|
14
|
+
**2. 一键互换类型**
|
|
15
|
+
|
|
16
|
+
编辑区有「改成宽松组(只禁我选的,其余照常)」/「改成严格组(只放我选的,其余一律拒)」。
|
|
17
|
+
**只换「清单外怎么算」,不动清单本身。**
|
|
18
|
+
|
|
19
|
+
**3. 模板卡片写明谁在用它**
|
|
20
|
+
|
|
21
|
+
每张模板卡片多一行:`成员 3 个 · 挂在 2 个会话:a1b2c3d4、e5f6g7h8`;没人挂时写「还没有会话挂它」。
|
|
22
|
+
——一个组可以被多个会话共用,这件事以前只能在脑子里记。
|
|
23
|
+
|
|
24
|
+
**4. 会话头部直接挂组**
|
|
25
|
+
|
|
26
|
+
会话标题栏那个「门禁」小按钮,点开就是当前会话的特别组列表,选中即生效、摘掉即恢复。
|
|
27
|
+
**不用重启**:挂/摘都走 `sessionOverrides`,每次工具调用现读状态。
|
|
28
|
+
|
|
29
|
+
**5. 空清单警示**
|
|
30
|
+
|
|
31
|
+
严格组清单为空时,界面直接写「**清单为空 ⇒ 这档什么都拒(等同全封)**」——这是最容易一脚踩空的地方。
|
|
32
|
+
|
|
33
|
+
## 修正
|
|
34
|
+
|
|
35
|
+
- 删掉一句错话:原文案「不在组里的目录不受影响」——这句只对**宽松组**成立,对严格组是反的。现在按组类型分写。
|
|
36
|
+
- 弹层底色:`--dsw-alias-bg-overlay` 是遮罩色不是卡片面,改用 `--dsw-alias-bg-layer-1` + 更深投影;行文字改主色。
|
|
37
|
+
|
|
38
|
+
## 质量
|
|
39
|
+
|
|
40
|
+
- 客户端自测 **97/97**;六套件全绿(数据层 / 受管辖通道 / 策略档 / 策略档运行时 / 宿主路由 / 客户端)
|
|
41
|
+
- `node --check` 全部通过;`npm pack` 26 个文件、1.0 MB
|
|
42
|
+
- 四张真机截图进 `docs/screenshots/`
|
|
43
|
+
|
|
44
|
+
## 装
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
dsh plugin --profile desktop add dsh-isolation-gate
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
或 profile `link:` / `file:` 指向本地路径(见 README)。
|
|
51
|
+
|
|
52
|
+
## 边界(不重复但要看清)
|
|
53
|
+
|
|
54
|
+
它拦的是**经过 dsh 的工具调用**与**走 `bin/gate.mjs` 的通道**。
|
|
55
|
+
`pwsh` 里套一层脚本、别的进程直接读写磁盘、已经注入的上下文——都不在它的射程内。
|
|
56
|
+
要更强,得上内核沙箱(Windows ACL / Seatbelt / bwrap),那是另一层的事。
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -2,8 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
| 文件 | 内容 | 来源 |
|
|
4
4
|
|---|---|---|
|
|
5
|
-
| `01-overview.png` | 新界面总览:摘要条(受管 3 / 分组 0 / 工具门已开 / 名字 2·路径 1)+ v1 自动迁移提示 + 三个受管对象 + 分段控件 + 未入名单目录 | 户主真机截图(2026-10-21 19:0x
|
|
6
|
-
| `02-group.png` | 「harness 隔离」组卡片:
|
|
7
|
-
| `
|
|
5
|
+
| `01-overview.png` | 新界面总览:摘要条(受管 3 / 分组 0 / 工具门已开 / 名字 2·路径 1)+ v1 自动迁移提示 + 三个受管对象 + 分段控件 + 未入名单目录 | 户主真机截图(2026-10-21 19:0x) |
|
|
6
|
+
| `02-group.png` | 「harness 隔离」组卡片:3 个成员(Zcode / opencode / D:\仓库\合作档案)、组头三档控件、组内统一「禁」,每行仍可单独切档 | 真机截图(2026-10-23 16:1x) |
|
|
7
|
+
| `04-audit.png` | 「审计与诊断」页:磁盘差异五项计数 + 审计账本(只记判定,不记内容) | 真机截图(2026-10-23 16:0x) |
|
|
8
|
+
| `05-special-profile.png` | 「特别门禁」编辑模板草稿:**白名单模式横幅**(只放清单里的;没列进组的,一律拒)+ 级别说明 + 一键「改成宽松组」+ 空清单警示(等同全封) | 真机截图(2026-10-23 17:0x) |
|
|
8
9
|
|
|
9
10
|
> 截图只用于文档;不含任何受管目录内部内容。
|
|
11
|
+
|
|
12
|
+
## 两份不做的图,及原因
|
|
13
|
+
|
|
14
|
+
| 文件 | 为什么不做 |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `03-picker-fallback.png` | 当前宿主 `picker=true`,系统的目录选择器可用 ⇒ 退路界面根本不会出现。硬凑就是假图。 |
|
|
17
|
+
| `demo.gif` | 30 秒整屏录屏会带出会话列表与其它窗口(隐私),为一张 GIF 不值。**欢迎贡献**:录你自己机器上的演示,说明用哪几个动作即可。 |
|