dsh-instruction-memory 1.4.1 → 1.4.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.
Files changed (3) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/README.md +11 -5
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,46 @@
7
7
  > 1.0.13 起由 CI 经 OIDC Trusted Publishing 发布(首个带 provenance 的版本)。
8
8
  > 这些历史 tag **不应回填**——npm 上的版本号已被占用。
9
9
 
10
+ ## [1.4.2] — 2026-10-24
11
+
12
+ 适配性复核(宿主 `0.2.1-rc.3`,桌面端 + 网页端)。**没有任何运行时代码改动**——这一版把复核证据
13
+ 固化进仓库,并补上了一条此前一直缺的**直接**证据。
14
+
15
+ ### 新增证据
16
+
17
+ - **网页端 rc.3 隔离实测**:独立 `DSH_HOME` + 真实 `dsh web` 宿主(`0.2.1-rc.3`)驱动 21 项 HTTP
18
+ 断言——**21/21 PASS**(CRUD、落盘持久化、SSE 连接帧、`section` 注册/注销、4 项请求门禁、
19
+ IPv6 同源等价与混源拒绝、30 连发稳定性、清理回基线)。冒烟 `state` p50 0.45 ms(空库)/
20
+ 0.77 ms(1 条生效)、p95 ≤ 0.93 ms、SSE 首事件 0.54–0.61 ms。
21
+ 证据:`dsh-memory-verification/out/compat-1016-live-latest-rc3.json`、`…-rc3b.json`。
22
+ - **桌面端 rc.3 活体实测**:`live-host-smoke.mjs --desktop 14582` → `registered=true`、
23
+ `chars=546`、`activeCount=3`、**`pulls=5052`**(真实 Agent 回合真的拉取过 5052 次)、
24
+ p50 0.72 ms / p95 1.11 ms、SSE 首事件 1.2232 ms、`problems=[]`。
25
+ - **首次拿到「客户端模块确实被下发」的直接证据**:`0.2.1-rc.3` 网页宿主的 boot HTML 预加载清单里
26
+ 出现 `dsh-instruction-memory/client.js`,抓取该合并 bundle 返回 `200 text/javascript`
27
+ (2,204,270 字节),正文含本插件 Client 半的源码头注释与「指令记忆」文案。此前 `0.2.0-rc.1`
28
+ 只能用"合成器硬校验 + 契约包逐字节未变"间接推断(见 README ⁽*⁾),现在这一项对 rc.3
29
+ 是直接观测。
30
+
31
+ ### 兼容面判定
32
+
33
+ - **`0.2.1-rc.2` → `0.2.1-rc.3` 只是重新构建**:与 npm 上 `rc.2` 发布物逐文件 SHA-256 比对——
34
+ `dsh-system-prompt` / `dsh-client-ui-renderer` / `dsh-client-ui-settings` / `dsh-host-webserver` /
35
+ `dsh-app-boot` **仅 `package.json` 变**(版本号与 peer 指向自身 rc.3);`dsh-client-modules` 的
36
+ 1001 行里只有 `const commit` 一行变;`dsh-agent-loop` 自身代码未变(仅把 `zod` 打进包内)。
37
+ ⇒ 对插件可见的契约面是重建,不是行为变化。
38
+
39
+ ### 仍未验证
40
+
41
+ - 设置页的**人工视觉确认**:桌面端与网页端都还没有"用眼睛看过一次"(打开 设置 → 指令记忆)。
42
+ - 隔离网页宿主的 `pulls` 为 0(没跑过真实 Agent 回合);真实回合的拉取计数只在桌面端有 5052 次观测。
43
+
44
+ ### 已知环境坑(不是缺陷)
45
+
46
+ `npm test` 第一步 `lint.mjs` 在 DSH 的 Windows 沙箱下会误报 `13 FAILED TO PARSE`:它用
47
+ `spawnSync(..., { encoding: 'utf8' })` 捕获子进程输出,而该沙箱不允许管道 stdio(EPERM),
48
+ `res.status` 变成 `null`。等价手工核验(逐个 `node --check`)13/13 全部通过,CI 亦不受影响。
49
+
10
50
  ## [1.4.1] — 2026-10-22
11
51
 
12
52
  运行期缺陷(桌面端 / 网页版审计)与安全审查(对 1.4.0 源码)发现的问题修复,
@@ -122,7 +162,8 @@
122
162
  - 本轮新增:`smoke-test.mjs` 覆盖相对 `$DSH_HOME` 的绝对化与 `planHistoryPrune()` 的
123
163
  份数/字节/保底规则;`contract-test.mjs` 断言五个逐字段上限随快照发布且与代码一致,
124
164
  并验证 `?lite=1` 的连接帧与变更帧都是紧凑 rev 标记、普通流仍收完整快照;
125
- `ui-test.mjs` 断言每个字段标签都指向真实控件、校验错误带 `role="alert"`。
165
+ `ui-test.mjs` 断言每个字段标签都指向真实控件、校验错误带 `role="alert"`,并以
166
+ EventSource 桩确认客户端确实以 `?lite=1` 订阅、收到更新的 rev 时会回拉 `state`。
126
167
 
127
168
  ## [1.4.0] — 2026-10-18
128
169
 
package/README.md CHANGED
@@ -151,13 +151,17 @@ DSH 就会得到第二份空记忆,看起来像"记忆消失"。相对的 `$DS
151
151
  `Accept: text/event-stream`),存储一旦在面板之外发生变化,已打开的面板**自动更新**,
152
152
  无需手动「重新载入」:
153
153
 
154
- - **触发来源**:其他窗口经同一宿主保存(写盘成功即向所有订阅者推送快照);`memory.json`
154
+ - **触发来源**:其他窗口经同一宿主保存(写盘成功即向所有订阅者推送变更);`memory.json`
155
155
  被外部进程或手工改写(宿主以 `fs.watch` 监听**存储目录**——原子替换在 Windows 上会
156
156
  使文件级监听失效——去抖 250ms 后经与写盘相同的队列重读,内容确有变化才重载并推送;
157
157
  自己的写入盘后磁盘与内存一致,天然被同一比较抑制,不会回声)。
158
- - **回声抑制**:发起修改的窗口也会收到自己那次写入的推送帧,但帧内容与它已吸收的响应
159
- 快照逐字节相同,客户端按内容比对直接丢弃——否则刚出现的「已保存」提示会被空消息的
160
- 推送帧瞬间冲掉。
158
+ - **推送的是变更,不是全量**:设置页以 `?lite=1` 订阅,宿主只推 `{ rev, lite: true }`
159
+ (约 40 字节),面板发现 rev 比自己渲染的更新时才回拉一次 `state`。满配存储的一份快照
160
+ 约 1.24 M 字符(中文约 3.4 MB),逐次全量推送会把这些字节乘以打开的窗口数。不带该参数
161
+ 的旧客户端仍收到完整快照,两代客户端与两代宿主可任意组合。
162
+ - **回声抑制**:发起修改的窗口也会收到自己那次写入的推送,但帧里的 rev 与它已吸收的响应
163
+ 快照相同,客户端按 rev 比对直接丢弃(旧客户端的完整帧则按内容逐字节比对)——否则刚出现
164
+ 的「已保存」提示会被空消息的推送帧瞬间冲掉。
161
165
  - **降级而非报错**:宿主不支持或连接中断时 `EventSource` 按 `retry: 5000` 自动重连,
162
166
  重连失败期间面板照常可用(「重新载入」仍是兜底),不会弹出错误。
163
167
  - 编辑器中未保存的草稿**不受推送影响**;保存时按当前 `rev` 提交,外部若已抢先修改
@@ -582,7 +586,7 @@ GUI 与路由本就同主机不同端口),`none`(用户直接导航)放
582
586
 
583
587
  | 等级 | 证明什么 | 覆盖 |
584
588
  | --- | --- | --- |
585
- | ① **真实启动** | 在该宿主版本上真的把 DSH 跑起来:插件装载、注入真的进入**组装后的提示**、插件 HTTP 路由可应答、客户端设置页模块被下发(Windows / Node 22) | `0.1.3-alpha.2` · `0.1.5-alpha.1` · `0.1.5-alpha.2` · `0.1.5-rc.1` · `0.1.5-rc.2` · `0.1.5-rc.3` · **`0.2.0-rc.1`** ⁽*⁾ · **`0.2.0-rc.2`** ⁽**⁾ · `0.2.1-alpha.2` ⁽***⁾ · **`0.2.1-alpha.3`** ⁽***⁾ · **`0.2.1-alpha.4`** ⁽***⁾ |
589
+ | ① **真实启动** | 在该宿主版本上真的把 DSH 跑起来:插件装载、注入真的进入**组装后的提示**、插件 HTTP 路由可应答、客户端设置页模块被下发(Windows / Node 22) | `0.1.3-alpha.2` · `0.1.5-alpha.1` · `0.1.5-alpha.2` · `0.1.5-rc.1` · `0.1.5-rc.2` · `0.1.5-rc.3` · **`0.2.0-rc.1`** ⁽*⁾ · **`0.2.0-rc.2`** ⁽**⁾ · `0.2.1-alpha.2` ⁽***⁾ · **`0.2.1-alpha.3`** ⁽***⁾ · **`0.2.1-alpha.4`** ⁽***⁾ · **`0.2.1-rc.2`** · **`0.2.1-rc.3`** ⁽⁴⁾ |
586
590
  | ② **契约核验** | 抓该版本**真实发布的源码**,逐个核验本插件实际用到的每个符号:`systemPrompt.section()`、`assemble()` 是否求值**函数型** `text`、`FILE_REFERENCE=900` / `TOOL_BASH=1000` 仍在(决定 order 950 是否空档)、重名注册是否抛错、`webServer.register()` / `get host()`、`ctx.inject()` / `ctx.effect()`、`dsh.client.inject` 两包在该版本是否存在且声明了 `dsh.client` | 声明范围接住的**全部 18 个已发布版本**(`0.1.3-alpha.2` → `0.2.1-alpha.4`) |
587
591
  | ③ **真实执行** | 把插件**真的挂载**进该版本的 `@deepseek-ai/cordis`,跑装载 / 路由注册 / 卸载共 9 项断言 | cordis `4.0.2` 与 `4.0.4`(各 9/9) |
588
592
 
@@ -592,6 +596,8 @@ GUI 与路由本就同主机不同端口),`none`(用户直接导航)放
592
596
 
593
597
  ⁽***⁾ **`0.2.1-alpha.2`(2026-10-10)与 `0.2.1-alpha.3` / `0.2.1-alpha.4`(2026-10-16)的①档**:隔离安装该版本宿主树 + 独立 `DSH_HOME` 装入 npm 正式发布物,真实启动 web 宿主后以 **21 项 HTTP 断言**驱动(CRUD、落盘持久化、SSE 连接帧、`section` 注册/注销、4 项请求门禁、IPv6 同源等价与混源拒绝、30 连发稳定性、清理回基线)——三个版本各 **21/21 PASS**。证据:`dsh-memory-verification/out/compat-1016-live-live-alpha2.json`、`dsh-memory-verification/out/compat-133-live-alpha{3,4}.json`。同样**未做设置页人工视觉确认**。
594
598
 
599
+ ⁽⁴⁾ **`0.2.1-rc.2` / `0.2.1-rc.3` 的①档**(2026-10-24,插件 1.4.2):`rc.3` 上隔离 `DSH_HOME` + 真实 `dsh web` 宿主驱动 **21 项 HTTP 断言 21/21 PASS**,桌面端活体 `pulls=5052`、p50 0.72 ms;并且**首次直接抓到了客户端模块的下发证据**——boot HTML 的预加载清单含 `dsh-instruction-memory/client.js`,该合并 bundle 返回 `200 text/javascript`(2,204,270 字节),正文含 Client 半源码与「指令记忆」文案。因此上一条 ⁽*⁾ 里"无法直接抓到 `window.__DSH_BOOT__`"的限制**已对 rc.3 解除**。`rc.2` 未单独起宿主,靠它与 `rc.3` 的逐文件字节比对(仅 `package.json` 与一行构建号不同)承接结论。证据:`dsh-memory-verification/out/compat-1016-live-latest-rc3.json`、`…-rc3b.json`。仍**未做设置页人工视觉确认**。
600
+
595
601
  此外 `host-range-test.mjs` 的固定矩阵覆盖 `0.1.6-alpha.2`、`0.1.7-rc.2`、`0.2.0-rc.1`、`0.2.0-rc.2` 与 `0.2.1-alpha.1`~`0.2.1-alpha.4`(回归守卫把最新验证过的宿主逐名钉住),并会**读取本机实际安装的宿主版本**做实时断言。
596
602
 
597
603
  **关于 1.0.10 新增的 `ctx.inject`。** 这是新版唯一的硬依赖增量:`inject` 去掉了 `webServer`,设置页路由改为非阻塞的 `ctx.inject(['webServer'], …)` 子 fiber(原因见上)。为此逐个核验了 **cordis 全部 8 个已发布版本**(`4.0.1-rc.1` → `4.0.5-alpha.2`)——**每一个都具备 `ctx.inject`**(其中 4.0.2 / 4.0.4 另做了真实挂载执行,4.0.5-alpha.1 与 4.0.5-alpha.2 为源码符号核验),因此声明范围内不存在因它而失效的宿主版本。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-instruction-memory",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "User-only instruction memory for DSH: long-term instructions maintained in the settings UI and auto-injected into every conversation — the model has no write access. 指令记忆:只由用户在设置页维护的长期指令,自动注入此后每轮对话;模型没有任何写入口。",
5
5
  "license": "MIT",
6
6
  "type": "module",