dsh-prime-memory 0.26.28 → 0.26.29
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 +10 -0
- package/dist/embedding-child.cjs +7 -2
- package/dsh.plugin.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# 更新日志(Changelog)
|
|
2
2
|
|
|
3
|
+
## [0.26.29] — 2026-11-02
|
|
4
|
+
|
|
5
|
+
> #22 报告人(DESXIE)回验 `0.26.28`:**自动档预算 = 1536、`5×5000` 串行全过**,且用同脚本换 `--budget 2048` 作对照组仍在第 2 条 SIGTRAP——说明“全过”不是环境变了,是 1536 真拦住了。同时他拓出一个真 bug。
|
|
6
|
+
|
|
7
|
+
- **修:`tokensMax=未知` 在真实链路上根本到不了**(报告人实测发现)。子进程侧 `tokensMax` **初值是 0**,而累加用严格大于(`if (cut.seq > tokensMax)`),所以永远量不出 seq 的情形(tokenizer 不可达、预算为 0、护栏被关)得到的 `-1` **永远赢不了 0**;而主线程 `>= 0` 判据会把残留的 0 当有效值印出来——正好印成这行日志本想避免的「一条也没进」。现初值改为 `-1`,“不可证”与“真的零”不再撞同一取值。一行修复,但它使能了整条取证链:`tokensMax` 仅在“护栏被关/tokenizer 不可达”这种最需要告警的时刻才有价值,之前那时它说谎。
|
|
8
|
+
- **为什么没被自己的测试抓到**(比修复本身更值得记):`describeEmbedBatch(…, -1, …)` 的用例只测了**纯函数收到 -1 时印什么**,从来没测**子进程会不会送来 -1**。现已补 3 例:① 哨兵钉死子进程侧初值必须为 -1(结构改动时会提示同步);② 复现归并语义本身(初值 0 吃掉了不可证、初值 -1 不会,且任一有效值仍能抬高);③ 端到端走真 `shrinkToBudget`(预算 0 时)→ `-1` → 印「未知」。已反向验证:把初值改回 0,哨兵即转红。
|
|
9
|
+
- **报告人的其他三项标注(无需改动,但记下来防重复讨论)**:`code/signal` 归因与「停摆 warn + 带 record id 的失败日志」与 `0.26.25` 逐字相同,属**既有实现而非本批新增**(他说得对,我之前的行文容易让人误读成每版新修);`tokensMax` 独立复核与自报值一致(1535/2047 两档均双路吻合),护栏真截了。
|
|
10
|
+
- **采纳他的口径澄清**:`graph` 投影那串「连发」是**连续多次单条 `priority` 请求**(所以日志里 `n` 常见为 1),真正成批多条的只有 reindex(`CHUNK=16`);这不影响护栏结论,但读 `tokensMax` 时应知道 `n` 的含义。机理本身仍未动(1536 是实测经验值,不是证明)。
|
|
11
|
+
- 全量 **1938 例 / 191 文件**全绿(+3);typecheck 0、lint 0 error、build/build:smoke/smoke/verify-catalog 均 0。公开配置面无变更。
|
|
12
|
+
|
|
3
13
|
## [0.26.28] — 2026-11-02
|
|
4
14
|
|
|
5
15
|
> 本版只修一个错:**我在 `0.26.26`/`0.26.27` 的 CHANGELOG 与 issue 留言里说「子进程上报本批实测进模型的最大 token 数」,但那个值从来没进过日志**。它只被本地验证脚本的探针读到,插件自己的 `memory.log` 里一行都没有——而 #22 这类问题事后能核的只有日志。计划本身是要求这一行落盘的(每批 info 记 `n / 最大tokens / inferMs`,fork 时记 `pid`),是我执行时漏了两项。
|
package/dist/embedding-child.cjs
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
* - 出向:{id,ok:true,type:'pong'|'ready'|'embedded',vectors?,tokensMax?}(vectors 为
|
|
16
16
|
* number[][],fork IPC 默认 JSON 序列化不支持 TypedArray,主线程侧重建
|
|
17
17
|
* Float32Array;512d×32 条 ≈64KB,序列化 <5ms,瓶颈在推理不在传输)。
|
|
18
|
-
* tokensMax =
|
|
18
|
+
* tokensMax = 本批**实测**进模型的最大 token 数(#22 护栏自证用,主线程不消费也不报错);
|
|
19
|
+
* 初值为 -1 而非 0 —— -1 表示「不可证」,与「真的一个 token 也没进」必须区分开。
|
|
19
20
|
* | {id,ok:false,stage:'load'|'infer',error} | {type:'fatal',error}
|
|
20
21
|
*
|
|
21
22
|
* 信任边界(沿 AGENTS.md 审查记录):runtime/ 目录在数据目录信任边界内,
|
|
@@ -173,7 +174,11 @@ function handleEmbed(msg) {
|
|
|
173
174
|
postReply({ id: msg.id, ok: true, type: 'embedded', vectors: [] });
|
|
174
175
|
return;
|
|
175
176
|
}
|
|
176
|
-
|
|
177
|
+
// tokensMax 初值必须是 -1(不可证)而不是 0:下面的累加用严格大于,若初值为 0,
|
|
178
|
+
// 则永远量不出 seq 的情形(tokenizer 不可达/预算为 0)会把 -1 压成 0,
|
|
179
|
+
// 而主线程的 `>= 0` 判据会把 0 当有效值印出来——正好印成「一条也没进」,
|
|
180
|
+
// 与「不可证」撞车,使这行日志在最需要它的时刻说谎(#22 报告人回验实测)。
|
|
181
|
+
const request = { id: msg.id, vectors: new Array(texts.length), remaining: texts.length, failed: false, tokensMax: -1 };
|
|
177
182
|
// 单条请求(召回 query)插队到队首;批次追加到队尾(批内条目间仍会被后来的插队)
|
|
178
183
|
const priority = msg.priority === true && texts.length === 1;
|
|
179
184
|
for (let i = 0; i < texts.length; i++) {
|
package/dsh.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dsh-prime-memory",
|
|
3
3
|
"name": "dsh-prime-memory",
|
|
4
|
-
"version": "0.26.
|
|
4
|
+
"version": "0.26.29",
|
|
5
5
|
"description": {
|
|
6
6
|
"en": "Layered distilled memory plugin (L0 capture → L1 atomic memory → L2 scenes → L3 persona) with automatic recall injection before each model step.",
|
|
7
7
|
"zh": "L0~L3 分层蒸馏记忆插件:自动捕获对话、抽取原子记忆、整合场景块、蒸馏核心画像,并在模型步骤前自动召回注入。"
|