@a9i5k4/dsh-auto-memory 2.2.6 → 2.3.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/README.md +20 -10
- package/README.zh-CN.md +22 -10
- package/docs/CONTINUITY-FLOW.md +222 -0
- package/docs/HANDBOOK.md +354 -0
- package/docs/INTEGRATION-ANALYSIS.md +348 -0
- package/docs/M-CM7-HANDOFF-LAYERED-RETRIEVAL.md +311 -0
- package/docs/M8-MEMORY-HUB.md +1 -1
- package/docs/PROMPT-PACK-LAYERED-RECALL.md +474 -0
- package/docs/PROMPT-SET-STRICT.md +389 -0
- package/docs/RELEASE-GO-NOGO.md +82 -0
- package/docs/ROADMAP.md +162 -0
- package/docs/STATUS-BOARD.md +147 -0
- package/docs/USER-GUIDE.en.md +382 -0
- package/docs/USER-GUIDE.zh-CN.md +382 -289
- package/docs/prompts/EXEC-ORDER.md +77 -0
- package/docs/prompts/FEEDING-SCRIPT.md +174 -0
- package/docs/prompts/FEEDING-SEQUENCE.md +61 -0
- package/docs/prompts/FIX-AGENT-M8-2b.md +119 -0
- package/docs/prompts/FIX-AGENT-P11.md +97 -0
- package/docs/prompts/FIX-AGENT-P12-FULL-REGRESSION.md +135 -0
- package/docs/prompts/FIX-AGENT-P12.md +113 -0
- package/docs/prompts/FIX-AGENT-P13-PYTHON-RANK.md +100 -0
- package/docs/prompts/FIX-AGENT-P8.md +120 -0
- package/docs/prompts/FIX-AGENT-P9.md +110 -0
- package/docs/prompts/FIX-AGENT-P9a.md +94 -0
- package/docs/prompts/FIX-AGENT-P9d.md +114 -0
- package/docs/prompts/FIX-AGENT-TEMPORAL-ARM.md +148 -0
- package/docs/prompts/LIVE-VERIFY-ZCODE.md +105 -0
- package/docs/prompts/M8-1-fact-metadata.md +45 -0
- package/docs/prompts/M8-2-ADJUDICATION.md +98 -0
- package/docs/prompts/M8-2-importance-wiring.md +42 -0
- package/docs/prompts/M8-2b-evidence-pipeline.md +52 -0
- package/docs/prompts/M8-3-enable-verify.md +49 -0
- package/docs/prompts/M8-R-REPORT.md +156 -0
- package/docs/prompts/M8-R-research.md +67 -0
- package/docs/prompts/P1-l0-index.md +30 -0
- package/docs/prompts/P10-importance-calibration.md +45 -0
- package/docs/prompts/P11-silent-catch-observability.md +43 -0
- package/docs/prompts/P2-semantic-recall.md +30 -0
- package/docs/prompts/P3-fusion.md +28 -0
- package/docs/prompts/P4-l0-response.md +28 -0
- package/docs/prompts/P5-handoff-anchor.md +28 -0
- package/docs/prompts/P6-ledger-weight.md +27 -0
- package/docs/prompts/P7-write-fix.md +26 -0
- package/docs/prompts/P8-rrf-wiring.md +47 -0
- package/docs/prompts/P9-REVIEW-DECISION.md +95 -0
- package/docs/prompts/P9-evidence-write-coverage.md +113 -0
- package/docs/prompts/README.md +105 -0
- package/docs/prompts/ZCODE-DROPIN.md +229 -0
- package/docs/prompts/_COMMON.md +88 -0
- package/lib/client.js +36 -2
- package/lib/context-host.js +77 -2
- package/lib/evidence-agg.js +81 -0
- package/lib/fact-store.js +32 -0
- package/lib/handoff-anchor.js +114 -0
- package/lib/index.js +402 -43
- package/lib/l0-extract.js +149 -0
- package/lib/l0-index.js +239 -0
- package/lib/m7-wire.js +4 -3
- package/lib/memory-importance.js +70 -0
- package/lib/python-setup.js +16 -4
- package/lib/recall-fusion.js +99 -0
- package/lib/shadow-retrieval.js +2 -2
- package/lib/storage-manage.js +17 -0
- package/lib/subagent-gc.js +8 -1
- package/lib/temporal-parse.js +159 -0
- package/package.json +1 -1
- package/python/worker_semantic_v1.py +28 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
> 依赖:**M8-1**(可选,不强依赖);建议 P3(融合层)之后再执行,避免权重叠加冲突。
|
|
3
|
+
|
|
4
|
+
## 【M8-2】evidence → importance 权重接入检索排序
|
|
5
|
+
|
|
6
|
+
**背景(有代码证据)**:
|
|
7
|
+
- 六类证据 `['seen','read','cite','reuse','success','correction']` 已由 M5 写入:`lib/context-bridge-pre.js:45`(枚举)、`:292`(cite)、`:307/:309`(correction)、`:112`(聚合,含 `distinctSessions`)。
|
|
8
|
+
- `lib/fact-store-pre.js` 的 `evidenceFor()` 是**消费侧聚合**。
|
|
9
|
+
- **但六类计数目前只用于 M-04 技能晋升**(`lib/procedure-store-pre.js` 文件头 "promote 读 evidence stats"),**从未接入记忆检索排序**——检索侧 `shadow-retrieval-pre.js` / `semantic-js-pre.js` 均无 evidence 权重。
|
|
10
|
+
|
|
11
|
+
**结论**:importance 的**数据源早已具备,缺的是接线**。本段即补这条线。
|
|
12
|
+
|
|
13
|
+
**目标**:把 evidence 聚合值转换为**不随查询变化**的重要性权重,参与候选排序(作为绝对量,可缓解 P3 中"分数丧失绝对性"的问题)。
|
|
14
|
+
|
|
15
|
+
**涉及功能模块**:新增 `lib/memory-importance-pre.js`;接入检索/融合(具体接入点须先搜索确认)。
|
|
16
|
+
|
|
17
|
+
**验收标准**:
|
|
18
|
+
1. 提供纯函数:输入 evidence 聚合(`{distinctSessions, seen, read, cite, reuse, success, correction}`)→ 输出 `importance ∈ [0,1]`
|
|
19
|
+
2. **correction 必须为负向**(被纠正多的记忆重要性下降);`success` / `reuse` / `distinctSessions` 为正向
|
|
20
|
+
3. 缺省(无 evidence 记录)时返回**中性值**,不得因此把记忆排到末尾或置顶
|
|
21
|
+
4. 纯函数 + fixture 锁定;确定性
|
|
22
|
+
5. 五套基线不降
|
|
23
|
+
|
|
24
|
+
**需先检索的仓库路径与符号关键词**:
|
|
25
|
+
- 路径:`lib/context-bridge-pre.js`、`lib/fact-store-pre.js`、`lib/procedure-store-pre.js`、`lib/shadow-retrieval-pre.js`、`lib/semantic-js-pre.js`
|
|
26
|
+
- 关键词:`evidenceFor`、`ACCESS_KINDS_PRE_V1`、`distinctSessions`、`promote`、`correctionRate`、`fuseD6Pre`、`lexicalSearch`、`scores.total`
|
|
27
|
+
- **必须先确认**:① `evidenceFor()` 的返回结构确切字段名 ② procedure-store 现有如何把 evidence 转成 `correctionRate`(**直接复用其口径,不得另立一套**)③ 检索侧候选结构里 scores 的字段名(决定 importance 加到哪里)
|
|
28
|
+
|
|
29
|
+
**改动边界**:
|
|
30
|
+
- ✅ 允许新增:`lib/memory-importance-pre.js`、`tests/smoke/smoke-test-memory-importance-pre.mjs`
|
|
31
|
+
- ❌ **禁止修改**:`lib/context-bridge-pre.js`(写入侧)、`lib/procedure-store-pre.js`、evidence 的写入逻辑
|
|
32
|
+
- ❌ 禁止:另立一套与 `correctionRate` 冲突的纠正口径;把 importance 用作唯一排序依据(只能是加权因子之一)
|
|
33
|
+
- ❌ 若 P3 尚未完成,本段**只交付纯函数与测试,不接线**,并在回报中说明
|
|
34
|
+
|
|
35
|
+
**集成位置正确性(回报必写)**:
|
|
36
|
+
- 说明 importance 加在融合公式的哪一项、为何不破坏 P3 的绝对性改造
|
|
37
|
+
- 列出下游影响(哪些排序结果会变)
|
|
38
|
+
- 回滚:删除新增文件;若已接线则 `git checkout` 对应文件
|
|
39
|
+
|
|
40
|
+
**停止条件**:若 `evidenceFor()` 返回结构与 procedure-store 的 `correctionRate` 口径无法确认,**立即停止回报**,不得自创公式。
|
|
41
|
+
|
|
42
|
+
**自检清单**:按 `_COMMON.md` §5 执行。
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
> 依赖:**P8(必须已完成)** —— importance 加权需要 P8 建好的融合入口。
|
|
3
|
+
> 本段完成 M8-2 的原始目标(311e2e8 仅交付纯核心)。
|
|
4
|
+
|
|
5
|
+
## 【M8-2b】evidence → 检索数据管道 + importance 加权接入
|
|
6
|
+
|
|
7
|
+
**背景(实读代码,2026-09-09 核实)**:
|
|
8
|
+
- **数据在盘上,只是没人读**:evidence 事件落盘于 `~/.dsh/memory/evidence-pre/events/`,**按日 JSONL**(如 `2026-08-23.jsonl` 2491B、`2026-08-25.jsonl` 18102B),行结构含 `{kind, memoryId, ts 或 event.ts}`。
|
|
9
|
+
- `lib/index.js:6861-6876` **已有读取范式**(读最近 2 个 `.jsonl`、每文件末 400 行、按 `kind==='seen'` 过滤、5s 聚类)——**直接复用此范式,不要另造**。
|
|
10
|
+
- 六类 kind 枚举:`lib/context-bridge-pre.js:45` `ACCESS_KINDS_PRE_V1 = ['seen','read','cite','reuse','success','correction']`。
|
|
11
|
+
- **零调用方**:`grep -rn "evidenceFor" lib/` 仅命中注释(含构建产物 `fact-store.js`);`lib/procedure-store-pre.js` 注释明确"由调用方传入,本模块不直接读 evidence store"。
|
|
12
|
+
- `lib/memory-importance-pre.js`(M8-2, 311e2e8)**已交付纯函数但未接线**。
|
|
13
|
+
|
|
14
|
+
**目标**:补上「evidence 事件 → 按 memoryId 聚合 → importance → 参与 P8 融合排序」这条管道。
|
|
15
|
+
|
|
16
|
+
**涉及功能模块**:
|
|
17
|
+
- 新增 `lib/evidence-agg-pre.js`(只读聚合层)
|
|
18
|
+
- 消费 `lib/memory-importance-pre.js`(已存在)
|
|
19
|
+
- 接入点:P8 建好的 `recall()` 融合入口
|
|
20
|
+
|
|
21
|
+
**验收标准**:
|
|
22
|
+
1. `lib/evidence-agg-pre.js` 为**纯函数 + IO 注入**(沿用项目惯例:零内置 IO、可 fixture 锁定)
|
|
23
|
+
2. 按 `memoryId` 聚合六类计数 + 去重会话数(`distinctSessions`),输出形状**与 `memory-importance-pre.js` 的输入契约一致**(以其源码为准)
|
|
24
|
+
3. **有界读取**:默认最近 7 天 / 每文件末 400 行(沿用既有范式),可配置;**不得全量扫描历史**
|
|
25
|
+
4. **空数据返回中性值**:无 evidence 记录的记忆既不置顶也不沉底
|
|
26
|
+
5. **只读、零副作用**:不写回、不修改 events 文件;读取失败 → fail-soft(importance 取中性值),**绝不阻塞检索**
|
|
27
|
+
6. importance 作为**加权因子之一**接入 P8 融合,**不得作为唯一排序依据**;`correction` 必须为负向(复用 procedure-store 的 `correctionRate` 口径)
|
|
28
|
+
7. 确定性:相同 events 输入 → 相同聚合结果
|
|
29
|
+
8. 基线不降:**memory-importance 17**、**p4 34** 及十三套基线;新增聚合层 smoke
|
|
30
|
+
|
|
31
|
+
**需先检索的仓库路径与符号关键词**:
|
|
32
|
+
- 路径:`lib/index.js`(读取范式 `6861-6876`)、`lib/context-bridge-pre.js`、`lib/memory-importance-pre.js`、`lib/fact-store-pre.js`、`lib/procedure-store-pre.js`、`lib/recall-fusion-pre.js`
|
|
33
|
+
- 关键词:`evidence-pre`、`events`、`kind`、`memoryId`、`ACCESS_KINDS_PRE_V1`、`distinctSessions`、`correctionRate`、`importance`、`rankFusionRRFPre`、`_jsSemanticRank`
|
|
34
|
+
- **必须先确认**:① `memory-importance-pre.js` 的**确切输入契约**(字段名与缺省处理)② events 行的真实结构(`ts` 还是 `event.ts`?`sessionId` 字段名?)——**必须实读一个真实 events 文件确认,不得假设** ③ P8 融合入口的当前形态(`rankFusionRRFPre` 的 `pairs`/`opts` 是否已支持权重项)
|
|
35
|
+
|
|
36
|
+
**改动边界**:
|
|
37
|
+
- ✅ 允许新增:`lib/evidence-agg-pre.js`、`tests/smoke/smoke-test-evidence-agg-pre.mjs`
|
|
38
|
+
- ✅ 允许:`recall()` 中调用聚合层并加权(**最小 diff,仅在 P8 建好的融合入口处加一项**)
|
|
39
|
+
- ❌ **禁止修改**:`lib/context-bridge-pre.js`(写入侧)、`lib/memory-importance-pre.js`(M8-2 已锁定)、`lib/recall-fusion-pre.js`(P8 已锁定)、`lib/procedure-store-pre.js`
|
|
40
|
+
- ❌ 禁止:另立一套与 `correctionRate` 冲突的纠正口径;修改/删除 evidence 事件文件;在聚合层引入写入能力
|
|
41
|
+
- ❌ 禁止:把 importance 变成唯一排序依据
|
|
42
|
+
|
|
43
|
+
**集成位置正确性(回报必写)**:
|
|
44
|
+
- 说明 importance 加在融合公式的哪一项、为何不破坏 P8 的 rank-space 结构
|
|
45
|
+
- 列出下游影响(哪些查询的排序结果会变)
|
|
46
|
+
- 回滚:删除新增文件 + `git checkout lib/index.js`
|
|
47
|
+
|
|
48
|
+
**停止条件**:
|
|
49
|
+
1. 若真实 events 文件结构与预期不符(缺 `kind` 或 `memoryId`),**立即停止回报**,不得猜测字段
|
|
50
|
+
2. 若 `memory-importance-pre.js` 输入契约无法确认,**立即停止回报**,不得自造公式
|
|
51
|
+
|
|
52
|
+
**自检清单**:按 `_COMMON.md` §5 执行(本段重点:`node --check lib/evidence-agg-pre.js` + memory-importance smoke ≥17 + 只读性断言)。
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
> ⚠️ **本段涉及改变运行时默认行为,投喂前必须先经用户书面确认**(见下方"前置确认")。
|
|
3
|
+
|
|
4
|
+
## 【M8-3】M8 启用与 live 验证
|
|
5
|
+
|
|
6
|
+
**背景(有代码证据)**:
|
|
7
|
+
- `lib/index.js:365` `memoryHubEnabled: false` —— **M8 三层记忆系统默认关闭**。
|
|
8
|
+
- `docs/M8-MEMORY-HUB.md` §7 验收矩阵中,**唯一未完成项是 `[ ] live 验证(用户重启 3080 后)`**;其余(H1–H6、74 断言、35 套件全绿、持久化 restore)均已 `[x]`。
|
|
9
|
+
- 调研结论:M8 的问题是**"未启用、未实证"**,而非"设计残缺"。
|
|
10
|
+
|
|
11
|
+
**前置确认(未确认禁止执行)**:
|
|
12
|
+
1. 是否同意将 `memoryHubEnabled` 默认值改为 `true`?
|
|
13
|
+
2. 若同意,是否需要保留回滚开关(例如通过设置项或环境变量)?
|
|
14
|
+
3. live 验证由谁执行(Agent 只能产出验证清单与断言,无法代替用户重启宿主)?
|
|
15
|
+
|
|
16
|
+
**目标**:
|
|
17
|
+
- 若确认启用:改默认值 + 补回归断言 + 产出 live 验证清单
|
|
18
|
+
- 若未确认:**仅产出验证清单,不改任何代码**
|
|
19
|
+
|
|
20
|
+
**涉及功能模块**:`lib/index.js`(默认值)、`docs/M8-MEMORY-HUB.md`(验收矩阵勾选)。
|
|
21
|
+
|
|
22
|
+
**验收标准(启用情形)**:
|
|
23
|
+
1. `memoryHubEnabled` 默认值改变被明确记录在回报中(旧值 → 新值 + 行号)
|
|
24
|
+
2. 三层 store 在启用后能正常 restore(`episodes.json` / `facts.json` 可读)
|
|
25
|
+
3. `GET /api/dsh-auto-memory-pre/memory-hub` 返回 overview(`lib/index.js:171` / `:6785`)
|
|
26
|
+
4. 五套基线不降
|
|
27
|
+
|
|
28
|
+
**需先检索的仓库路径与符号关键词**:
|
|
29
|
+
- 路径:`lib/index.js`、`docs/M8-MEMORY-HUB.md`
|
|
30
|
+
- 关键词:`memoryHubEnabled`、`_memoryHub`、`memory-hub`、`hubIo`、`restore`
|
|
31
|
+
- **必须先确认**:① `memoryHubEnabled` 的所有读取点(哪些逻辑因它开关)② `hubIo()` 落盘目录 ③ 端点 `memory-hub` 的 GET/POST 实现行号
|
|
32
|
+
|
|
33
|
+
**改动边界**:
|
|
34
|
+
- ✅ 允许修改(**仅在用户确认后**):`lib/index.js` 的默认值一行
|
|
35
|
+
- ❌ 禁止:未经确认擅自改默认值;同时改多个配置;改三层 store 逻辑
|
|
36
|
+
- ❌ 禁止修改:`lib/fact-store-pre.js` 等 M8-1 范围文件(避免与 M8-1 冲突)
|
|
37
|
+
|
|
38
|
+
**live 验证清单(无论是否启用都必须产出)**:
|
|
39
|
+
- [ ] 重启 dsh web
|
|
40
|
+
- [ ] 设置页「记忆中枢」分组可见,总开关状态符合预期
|
|
41
|
+
- [ ] 记忆面板「记忆中枢」页签:技能 / 事实 / 经历三栏有内容或正确空态
|
|
42
|
+
- [ ] `GET /memory-hub` 返回 overview 且无异常
|
|
43
|
+
- [ ] 对话若干轮后,`facts.json` / `episodes.json` 有新条目落盘
|
|
44
|
+
- [ ] 重启后数据能 restore(不丢)
|
|
45
|
+
- [ ] 观察是否有性能异常(内存/响应)
|
|
46
|
+
|
|
47
|
+
**回滚**:`git checkout lib/index.js`;若已落盘 `facts.json` / `episodes.json`,说明清理方式。
|
|
48
|
+
|
|
49
|
+
**自检清单**:按 `_COMMON.md` §5 执行。
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# M8-R 调研报告(已执行)
|
|
2
|
+
|
|
3
|
+
> 执行时间:2026-09-09。本段为**只读调研**,未修改任何文件(`git status` 保持投喂前状态)。
|
|
4
|
+
> 所有结论均附 `文件:行号` 代码证据;无法证实的部分已明确标注。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 原始结论回溯:「参考 Hermes / 架构极不成熟」
|
|
9
|
+
|
|
10
|
+
### 1.1 「参考 Hermes」——**有明确出处,但范围比口头印象窄得多**
|
|
11
|
+
|
|
12
|
+
| 出处 | 内容 |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `docs/HANDOFF-M8-M9-M10.md:31` | `M8 Hermes 移植 \| tested \| touch/setPinned/自动归档/gates getter 活读` |
|
|
15
|
+
| `docs/landing/index.html:1704` | `M8: 记忆中枢三店持久化 + fact 治理式写回 MEMORY.md + Hermes 借鉴(procedure touch/pinned/90 天归档/evidence 直达分流)` |
|
|
16
|
+
| `docs/M-CM-PLAN.md:51` | `90 天归档复用 Hermes 规则` |
|
|
17
|
+
|
|
18
|
+
**结论**:Hermes 借鉴**只覆盖 M-04 Procedural 层的具体机制**(touch / setPinned / 90 天归档 / evidence 直达分流)。**episodic / semantic / procedural 这个三层分类本身并非来自 Hermes**——其权威设计源是:
|
|
19
|
+
|
|
20
|
+
> `docs/M8-MEMORY-HUB.md:4` —「权威设计源:`docs/proactive-associative-memory-system-map.html` M-02/M-03/M-04 模块卡」
|
|
21
|
+
|
|
22
|
+
即三层分类是**自研设计**(基于主动联想记忆系统地图),Hermes 只贡献了技能层的生命周期细节。**此前"参考 Hermes"的印象需要收窄。**
|
|
23
|
+
|
|
24
|
+
### 1.2 「架构极不成熟」——⚠️ **文档中未找到该表述**
|
|
25
|
+
|
|
26
|
+
已检索 `docs/` 全部文件,关键词包括 `Hermes`、`不成熟`、`架构`、`episodic`、`procedural`、`元代码`,**未发现"架构极不成熟"的文档记录**。
|
|
27
|
+
|
|
28
|
+
按 M8-R 的停止条件,此处本应停止回报。但为避免空转,我改为**用代码事实客观评估现状**,不做评价性措辞:
|
|
29
|
+
|
|
30
|
+
| 客观事实 | 证据 | 性质 |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| 三层纯核心已实现并 tested | `docs/M8-MEMORY-HUB.md:5` | 成熟 |
|
|
33
|
+
| **持久化 restore 已验收** | `docs/M8-MEMORY-HUB.md` §7 `[x] 持久化 restore(H5)` | 成熟 |
|
|
34
|
+
| fact 41 断言 + hub 33 断言,35 套件全绿 | 同 §7 | 成熟 |
|
|
35
|
+
| **Host 接线已完成**(import + 实例化 + 端点) | `lib/index.js:39-42` import;`:5590-5592` 实例化 | 成熟 |
|
|
36
|
+
| **总开关默认关闭** | `lib/index.js:365` `memoryHubEnabled: false` | **未启用** |
|
|
37
|
+
| **live 验证未完成** | `docs/M8-MEMORY-HUB.md` §7 唯一 `[ ]` 项:live 验证(用户重启 3080 后) | **未验证** |
|
|
38
|
+
|
|
39
|
+
**判定**:M8 的**工程质量成熟**(74 断言 + 持久化 + 接线完成),但**从未在真实环境启用运行**(默认 false + 无 live 验证)。所谓"不成熟",实为**"未启用、未实证"**,而非"设计残缺"。这是两个完全不同的问题,对应完全不同的处置:前者该**开启验证**,后者才需要**重构**。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 2. 现有实现:数据流 / 存储结构 / 调用点
|
|
44
|
+
|
|
45
|
+
### 2.1 数据流(证据:`docs/M8-MEMORY-HUB.md:9-56` 路径图 + 代码)
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
M2 segments(对话段) M5 evidence(访问证据) M7 judgement-shadow(建议)
|
|
49
|
+
user/assistant/reasoning seen/read/cite/reuse/ semantic/profile/procedure_
|
|
50
|
+
success/correction candidate(Python 只建议)
|
|
51
|
+
│ │ │
|
|
52
|
+
▼ ▼ ▼
|
|
53
|
+
M-02 Episodic M-03 Semantic M-04 Procedural
|
|
54
|
+
episodic-store-pre fact-store-pre procedure-store-pre
|
|
55
|
+
append(段)→consolidate upsert/冲突/revoked/ observed→candidate→validated
|
|
56
|
+
巩固→episode supersede/TTL →active→deprecated
|
|
57
|
+
失败→candidate(防污染) 用户声明>推断 promote: ≥3会话+≥2成功
|
|
58
|
+
│ │ correction≤30%,高风险需批准
|
|
59
|
+
└──── success episode / crossFeed ──────┬──────────────┘
|
|
60
|
+
▼
|
|
61
|
+
memory-hub-pre.js(编排器)
|
|
62
|
+
ingestJudgement / crossFeed /
|
|
63
|
+
renderChecklists / overview
|
|
64
|
+
▼
|
|
65
|
+
active procedure → checklist
|
|
66
|
+
▼
|
|
67
|
+
M7 召回系统 emit → 词法匹配 active skill 标题
|
|
68
|
+
→ M6 Reference Tail 投递
|
|
69
|
+
→ AI 按固定流程执行
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**分工边界**:M7 决定「怎么送达」,记忆中枢决定「有什么可送达」(`docs/M8-MEMORY-HUB.md:8`)。**Python 侧仅建议,JS 侧才固化**(`lib/episodic-store-pre.js` 文件头)。
|
|
73
|
+
|
|
74
|
+
### 2.2 存储结构
|
|
75
|
+
|
|
76
|
+
| 层 | 数据结构 | 文件 |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| M-02 Episodic | `{intent, actions, entities, unresolved, outcome, provenance}` 六元组 | `lib/episodic-store-pre.js` |
|
|
79
|
+
| M-03 Semantic | `{scope, subject, predicate, object?}` 四元组 + provenance + confirmedAt + ttl? + revoked? | `lib/fact-store-pre.js` |
|
|
80
|
+
| M-04 Procedural | 状态机 `observed→candidate→validated→active→deprecated` + 六级激活 index→hint→excerpt→checklist→resource→full | `lib/procedure-store-pre.js` |
|
|
81
|
+
|
|
82
|
+
**持久化方式**:三层 store 自身为**纯内存状态机**,持久化通过**可注入 IO 接口**实现,Host 接线时传入真实 IO:
|
|
83
|
+
|
|
84
|
+
```js
|
|
85
|
+
// lib/index.js:5590-5592
|
|
86
|
+
episodic: createEpisodicStorePre({ config: {…}, io: hubIo('episodes.json') }),
|
|
87
|
+
facts: createFactStorePre({ io: hubIo('facts.json') }),
|
|
88
|
+
procedures: createProcedureStorePre({ … })
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
即落盘为 `episodes.json` / `facts.json`(目录由 `hubIo()` 决定)。
|
|
92
|
+
|
|
93
|
+
### 2.3 调用点(关键)
|
|
94
|
+
|
|
95
|
+
| 位置 | 内容 |
|
|
96
|
+
|---|---|
|
|
97
|
+
| `lib/index.js:39-42` | import 三层 store + `createMemoryHubPre` |
|
|
98
|
+
| `lib/index.js:365` | `memoryHubEnabled: false`(默认关闭) |
|
|
99
|
+
| `lib/index.js:5590-5592` | 三层实例化 + `hubIo()` 注入 |
|
|
100
|
+
| `lib/index.js:171`、`:6785` | `memory-hub` 端点 |
|
|
101
|
+
| `lib/context-bridge-pre.js:45` | `ACCESS_KINDS_PRE_V1 = ['seen','read','cite','reuse','success','correction']` |
|
|
102
|
+
| `lib/context-bridge-pre.js:292` | `kind: 'cite'` 证据生成 |
|
|
103
|
+
| `lib/context-bridge-pre.js:307,:309` | `kind: 'correction'` 证据生成 |
|
|
104
|
+
| `lib/context-bridge-pre.js:112` | 聚合 `distinctSessions` + 六类计数 |
|
|
105
|
+
| `lib/fact-store-pre.js` 的 `evidenceFor()` | **消费侧**聚合(不是写入点) |
|
|
106
|
+
|
|
107
|
+
**结论**:evidence 由 **M5 context-bridge 写入**,fact-store 的 `evidenceFor()` 是**读取聚合**。
|
|
108
|
+
|
|
109
|
+
### 2.4 关键缺口(有代码证据)
|
|
110
|
+
|
|
111
|
+
> **evidence 六类计数已存在,但只用于 M-04 技能晋升,未接入记忆检索排序。**
|
|
112
|
+
> 证据:`procedure-store-pre.js` 文件头「promote 读 evidence stats(seen/read/cite/reuse/success/correction)」;而检索侧 `shadow-retrieval-pre.js` / `semantic-js-pre.js` 均未出现 evidence 权重。
|
|
113
|
+
|
|
114
|
+
即:**importance 的数据源早已具备,只是从未接到检索上**。这修正了此前"缺 importance 维度"的判断——不是没有数据,是没有接线。
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 3. 候选架构方案对比
|
|
119
|
+
|
|
120
|
+
| 维度 | A. 保留三层 + 补强 | B. 改为认识论分层 | C. 事件流 + 投影 |
|
|
121
|
+
|---|---|---|---|
|
|
122
|
+
| 核心结构 | 沿用 fact/episodic/procedure,补时间三价 + 认识论状态字段 + importance 接线 | 改为 事实证据 / 推断观察 / 行为指令(按可推导性与可变性) | 原始事件 append-only + 由事件重算的投影视图(投影可丢弃重建) |
|
|
123
|
+
| 对现有代码改动 | **小**(加字段 + 接线,不重构) | 大(store 语义重写) | **极大**(等于重写 M8) |
|
|
124
|
+
| 既有 74 断言 | 基本可保留 | 大量失效 | 几乎全废 |
|
|
125
|
+
| 持久化 | 沿用 episodes.json/facts.json | 需迁移 | 需重设计 |
|
|
126
|
+
| 理论优雅度 | 中 | 高 | **最高** |
|
|
127
|
+
| 落地风险 | **低** | 中高 | 高 |
|
|
128
|
+
| 参考来源 | 本地既有 + Hindsight 时间三价/巩固规则 | Hindsight world/experience/observation | 事件溯源(Event Sourcing) |
|
|
129
|
+
|
|
130
|
+
### 选型建议:**A+(保留三层,叠加认识论状态字段,补时间三价与 importance 接线)**
|
|
131
|
+
|
|
132
|
+
**理由(基于代码事实)**:
|
|
133
|
+
|
|
134
|
+
1. **三层本身没有错,错在缺三个横切属性**。episodic/semantic/procedural 解决的是"记什么",而真正影响存取的是"这条记忆的时间语义、认识论地位、重要程度"——这三者是**正交维度**,不需要替换分类,只需**加字段**。
|
|
135
|
+
2. **B 方案可与 A 融合而非对立**:给 Fact 加 `epistemicStatus: 'fact'|'observation'|'directive'` 字段,即可获得认识论分层的全部收益,且**不动既有 store 逻辑**。
|
|
136
|
+
3. **C 方案作为远期方向记录,不当下实施**:它最优雅,但等于重写 M8,而 M8 当前最大的问题不是设计差,而是**从未启用验证过**——先让它跑起来拿到真实数据,再谈重构,这才是正确顺序。
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 4. 待确认的开放问题
|
|
141
|
+
|
|
142
|
+
1. **`memoryHubEnabled` 是否同意改为默认 `true`?** 这是让 M8 从"已实现"变成"已验证"的关键一步,但会改变所有用户的运行时行为(需评估)。
|
|
143
|
+
2. **持久化文件落盘位置**:`hubIo()` 具体落在哪个目录?是否在 `memoryRoot` 内、是否可整体删除?(我未追到 `hubIo` 的定义体,需执行 Agent 在 M8-1 中确认)
|
|
144
|
+
3. **`facts.json` / `episodes.json` 的既有数据是否需要迁移?** 若已存在真实数据,加字段必须向后兼容。
|
|
145
|
+
4. **是否接受"先启用验证、后谈重构"的路线?** 若你判断三层分类必须替换,则应选 B,我可据此重写 M8 prompt。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 5. 本段自检
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
git status --short → 与投喂前一致(无改动)✅
|
|
153
|
+
所有结论均附 文件:行号 ✅
|
|
154
|
+
「架构极不成熟」在 docs/ 中未找到出处 → 已明确标注,未臆造 ✅
|
|
155
|
+
hubIo 定义体未追到 → 已列入开放问题,未猜测 ✅
|
|
156
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
|
|
3
|
+
## 【M8-R】M8 记忆系统调研(前置,阻塞后续)
|
|
4
|
+
|
|
5
|
+
**目标(本段只调研,不改代码)**:回溯「原记忆系统参考 Hermes、架构极不成熟」这一结论,核实现有 M8 三层实现的真实数据流、存储结构与调用点,给出替代架构的方案对比与选型理由。**产出报告,等待确认。**
|
|
6
|
+
|
|
7
|
+
### 调研任务
|
|
8
|
+
|
|
9
|
+
**任务 1 · 回溯原始结论与架构细节**
|
|
10
|
+
- 检索路径:`docs/`(尤其 `PROACTIVE-*`、`M8-MEMORY-HUB.md`、`HANDOFF-M8-M9-M10.md`、`PROJECT-FREEZE-AND-ROADMAP.md`、`proactive-associative-memory-*.md/html`)
|
|
11
|
+
- 关键词:`Hermes`、`三层记忆`、`episodic`、`semantic`、`procedural`、`procedural memory`、`记忆中枢`、`M-02`、`M-03`、`M-04`、`元代码`
|
|
12
|
+
- 要求:引用**具体文件与行号**说明——① 当初判定"参考 Hermes"的依据 ② "架构极不成熟"具体指什么(分类边界?转化条件?存取策略?)③ 原设计的目标形态
|
|
13
|
+
|
|
14
|
+
**任务 2 · 梳理现有实现的数据流与存储结构**
|
|
15
|
+
- 检索路径:`lib/fact-store-pre.js`、`lib/episodic-store-pre.js`、`lib/procedure-store-pre.js`、`lib/memory-hub-pre.js`、`lib/memory-index-pre.js`、`lib/memory-writer-pre.js`、`lib/index.js`、`lib/m7-index-sync-host-pre.py?`(应为 `.js`)、`python/worker_semantic_pre_v1.py`
|
|
16
|
+
- 关键词:`createFactStorePre`、`createEpisodicStorePre`、`createProcedureStorePre`、`createMemoryHubPre`、`ingestJudgementRows`、`evidenceFor`、`append(`、`consolidate(`、`promote`、`judgement-shadow`、`episodic_candidate`、`semantic_candidate`、`profile_candidate`、`procedure_candidate`、`KIND_TO_LAYER_PRE_V1`
|
|
17
|
+
- 要求:画出并写清——
|
|
18
|
+
1. **数据流**:对话段 →(哪段代码)→ episode → consolidate → candidate →(哪段代码)→ fact / procedure
|
|
19
|
+
2. **存储结构**:三层各存什么字段、有无持久化(落到哪个文件/目录)、是否仅内存
|
|
20
|
+
3. **调用点**:`index.js` 中三层 store 的实例化位置、消费位置、以及 Python sidecar 与 JS 侧的分工边界
|
|
21
|
+
4. **证据系统**:`evidenceFor` 六类计数由谁写入(grep 写入点)
|
|
22
|
+
|
|
23
|
+
**任务 3 · 替代长期记忆架构方案对比与选型**
|
|
24
|
+
- 至少三套候选,每套写:核心数据结构、冲突处理、巩固机制、对现有代码的改动量、风险
|
|
25
|
+
- 候选建议(可增补):
|
|
26
|
+
- A. **保留三层,补强语义**(沿用 fact/episodic/procedure,补时间三价 + 巩固规则 + 趋势分类)
|
|
27
|
+
- B. **改为认识论分层**(借鉴 Hindsight:事实证据 / 推断观察 / 行为指令,按可推导性与可变性划分)
|
|
28
|
+
- C. **双层 + 投影**(原始事件流 append-only + 由事件重算的投影视图,投影可丢弃重建)
|
|
29
|
+
- 选型理由必须基于**任务 2 的真实代码**,不得泛泛而谈
|
|
30
|
+
|
|
31
|
+
### 交付物(报告格式)
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
# M8 调研报告
|
|
35
|
+
## 1. 原始结论回溯(含文件:行号引用)
|
|
36
|
+
## 2. 现有实现数据流 / 存储结构 / 调用点(含文件:行号 + 调用链)
|
|
37
|
+
## 3. 问题清单(现有实现的确切缺陷,每条附代码证据)
|
|
38
|
+
## 4. 候选架构对比(表格)
|
|
39
|
+
## 5. 选型建议与理由(含改动量估算、风险)
|
|
40
|
+
## 6. 待你确认的开放问题
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 改动边界
|
|
44
|
+
|
|
45
|
+
- ❌ **本段禁止修改任何文件**。`git status` 必须保持投喂前状态。
|
|
46
|
+
- ✅ 允许只读搜索与阅读。
|
|
47
|
+
|
|
48
|
+
### 停止条件
|
|
49
|
+
|
|
50
|
+
若任务 1 的"参考 Hermes""架构极不成熟"在 `docs/` 中**检索不到明确出处**,立即停止并回报:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
停止原因:未能定位「参考 Hermes / 架构极不成熟」的文档出处
|
|
54
|
+
已尝试:<关键词列表>、<检索路径>
|
|
55
|
+
需要:请确认该结论的原始来源(哪个文档/哪次对话),或允许以代码现状为准重新评估
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**禁止猜测、禁止把"我推测这里不成熟"当证据。**
|
|
59
|
+
|
|
60
|
+
### 自检清单(本段)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git status --short # 必须与投喂前一致(无任何改动)
|
|
64
|
+
# 报告中每一条结论都必须能给出 文件:行号
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
|
|
3
|
+
## 【P1】L0 向量索引与增量更新
|
|
4
|
+
|
|
5
|
+
**目标**:为 T1 产出的 L0 建立向量索引,供语义检索使用。参照 OpenViking「Vector Index 只存 URI+向量+元数据,不含文件内容」(来源见 PROMPT-PACK §0.5)。
|
|
6
|
+
|
|
7
|
+
**涉及功能模块**:新增 `lib/l0-index-pre.js`;消费 `lib/l0-extract-pre.js`;参考 `lib/memory-index-pre.js`(既有索引范式)。
|
|
8
|
+
|
|
9
|
+
**验收标准**:
|
|
10
|
+
1. 177 条真实记忆全量建索引,每条 `{id, vector, l0, source, l0Hash, updatedAt}`,**零丢失**
|
|
11
|
+
2. 增量:改一条 → 仅重算该条(可断言"重算条数")
|
|
12
|
+
3. 失效条目可移除
|
|
13
|
+
4. 索引缺失/非法 → fail-soft 回退,**不阻塞任何调用方**
|
|
14
|
+
5. 新增 smoke 全绿;既有五套基线不下降
|
|
15
|
+
|
|
16
|
+
**需先检索的仓库路径与符号关键词**:
|
|
17
|
+
- 路径:`lib/l0-extract-pre.js`、`lib/memory-index-pre.js`、`lib/semantic-js-pre.js`、`lib/m4-corpus-pre.js`
|
|
18
|
+
- 关键词:`buildL0IndexPre`、`extractL0Pre`、`MemoryFileIndex`、`createJsSemanticEnginePre`、`JS_SEMANTIC_ENGINE_VERSION`、`memoryIndexVersion`、`sourceVersion`、`recordDigest`
|
|
19
|
+
- 必须先确认:① `buildL0IndexPre` 的返回字段 ② C2 引擎的创建函数名与 embedding 调用方式(含 `query:`/`passage:` 前缀如何传)③ 既有索引落在哪个目录
|
|
20
|
+
|
|
21
|
+
**改动边界**:
|
|
22
|
+
- ✅ 允许新增:`lib/l0-index-pre.js`、`tests/smoke/smoke-test-l0-index-pre.mjs`
|
|
23
|
+
- ❌ 禁止修改:`lib/l0-extract-pre.js`(T1 已锁定)、`lib/index.js`、`lib/semantic-js-pre.js`、任何既有 `.js`
|
|
24
|
+
- ❌ 禁止:引入依赖、在索引中存原文
|
|
25
|
+
|
|
26
|
+
**完成自检**:按 §5 模板(本段 `node --check lib/l0-index-pre.js`)。
|
|
27
|
+
|
|
28
|
+
**回滚**:删除新增两个文件即可(本段不接线,零残留)。
|
|
29
|
+
|
|
30
|
+
---
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
> 依赖:**P9 排查结论出来之后**(写入侧覆盖率决定 importance 的实际分布,先定标可能白做)。
|
|
3
|
+
> ⚠️ 本段**不阻塞发版**(属参数标定),但要求把权重做成**可配置项**,以便发版后无需改码即可调。
|
|
4
|
+
|
|
5
|
+
## 【P10】importance 效应定标(权重系数可调 + 翻转率实测)
|
|
6
|
+
|
|
7
|
+
**背景(实读代码 + 真实数据,2026-09-09 核实)**:
|
|
8
|
+
- M8-2b 在 `recall()` 的 L0 分支对 dense 臂加权:`dense: c.sem * (0.5 + 0.5 * importance)`(`lib/index.js` L0 段,行号以实际 grep 为准)。
|
|
9
|
+
- 真实数据:1268 事件 → 148 个 memoryId,importance ∈ **[0.30, 0.65]** → factor ∈ **[0.65, 0.825]**。
|
|
10
|
+
- **摆幅仅 1.27×**:只有 dense 分差小于约 **27%** 的候选对才可能被 importance 翻转。偏保守,**是否真能改变排序从未实测过**。
|
|
11
|
+
|
|
12
|
+
**目标**:① 把固定系数改为可配置;② 用真实查询测出翻转率,给出标定建议。
|
|
13
|
+
|
|
14
|
+
**涉及功能模块**:`lib/index.js`(dense 臂表达式 + 配置项读取);量测脚本(临时,用完即删)。
|
|
15
|
+
|
|
16
|
+
**验收标准**:
|
|
17
|
+
1. 系数改为 `0.5 + w × importance`,**`w` 必须可配置**(设置项或配置键),**默认值 0.5**(与当前行为等价,零行为变更)
|
|
18
|
+
2. 配置缺失/非法 → 回退默认 0.5,fail-soft
|
|
19
|
+
3. **提供翻转率实测**:至少 10 条真实查询(覆盖主题性 / 错误码 / 文件名 / 时间类),对比 **w=0(关闭)vs w=0.5(默认)vs w=1(最大)** 三档下 top-10 的 `id` 序列,给出:
|
|
20
|
+
- 每档相对 w=0 的 **排序变化条数** 与 **Kendall τ**(或简单的"位置变动数")
|
|
21
|
+
- 至少 1 个「importance 确实翻转了顺序」的具体样例(含 id、sem、importance、factor、前后位次)
|
|
22
|
+
4. 若 w=0.5 下翻转率显著偏低(建议阈值:<10% 查询发生任何 top-10 变化),在回报中给出**推荐 w 值**及依据;**不要擅自改默认值**
|
|
23
|
+
5. 不破坏 rank-space:importance 仍只作用于 dense 臂输入值,`lib/recall-fusion-pre.js` 一字不改
|
|
24
|
+
6. 基线不降:p8 14 / p4 34 / evidence-agg 14 / memory-importance 18;新增断言覆盖 w 缺省与非法值
|
|
25
|
+
|
|
26
|
+
**需先检索的仓库路径与符号关键词**:
|
|
27
|
+
- 路径:`lib/index.js`、`lib/memory-importance-pre.js`、`lib/recall-fusion-pre.js`
|
|
28
|
+
- 关键词:`impMap`、`computeImportancePre`、`dense:`、`rankFusionRRFPre`、`l0Top`、`0.5 + 0.5`
|
|
29
|
+
- **必须先确认**:① 项目**既有配置项如何读取与落盘**(是否 `settings.yaml` / `config` 对象 / 环境变量)——**必须复用既有机制,不得自造一套** ② `diag()` 是否可用于输出量测结果 ③ dense 臂表达式的当前准确行号
|
|
30
|
+
|
|
31
|
+
**改动边界**:
|
|
32
|
+
- ✅ 允许修改:`lib/index.js` 中 dense 臂那一行 + 配置项读取(最小 diff)
|
|
33
|
+
- ✅ 允许新增:临时量测脚本(**用完即删**);如需固化量测,另建 `tools/` 脚本并说明
|
|
34
|
+
- ❌ **禁止修改**:`lib/recall-fusion-pre.js`、`lib/memory-importance-pre.js`、`lib/evidence-agg-pre.js`、`lib/semantic-js-pre.js`
|
|
35
|
+
- ❌ 禁止:擅自改默认 `w`;把 importance 变成唯一排序依据;改 RRF 公式
|
|
36
|
+
|
|
37
|
+
**集成位置正确性(回报必写)**:配置项键名、默认值、读取位置行号;下游影响(哪些查询排序会变)。
|
|
38
|
+
|
|
39
|
+
**停止条件**:若项目**没有统一配置读取机制**(配置项均为硬编码),**立即停止回报**,由用户决定配置落点,不得自行引入配置文件或新依赖。
|
|
40
|
+
|
|
41
|
+
**回滚**:`git checkout lib/index.js`(或把 `w` 设为 0 即等价关闭加权)。
|
|
42
|
+
|
|
43
|
+
**自检清单**:按 `_COMMON.md` §5 执行(本段重点:`node --check lib/index.js` + p8 ≥14 + w 缺省/非法值断言)。
|
|
44
|
+
|
|
45
|
+
**⚠️ 接线类任务额外要求(见 `_COMMON.md` §7)**:本段为参数标定,回报中必须给出「**加权在生产路径真实生效**」的证据——不得只报告纯函数测试通过。
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
> 依赖:无。**风险低、价值高,建议尽早做**(可与 P9 并行)。
|
|
3
|
+
> 起因:M8-2b 的 P0 缺陷(裸 `readdirSync` → 管道静默失效)之所以藏得住,根本原因就是 `catch (eImp) {}` 静默吞异常。
|
|
4
|
+
|
|
5
|
+
## 【P11】fail-soft 空 catch 统一可观测(只加日志,不改行为)
|
|
6
|
+
|
|
7
|
+
**背景(实读代码,2026-09-09 核实)**:
|
|
8
|
+
- M8-2b 的 P0 已修(`4d54664`),同提交给 `catch (eImp)` 加了 `diag('evidence-agg 降级为中性(impMap 空): …')`。
|
|
9
|
+
- 但同一条 recall 融合链上**仍有同款静默空 catch**:`eRrf`、`eL0Sem`、`eAnchor`(名称以实际 grep 为准)。
|
|
10
|
+
- 这类空 catch 让任何接线失效都**完全不可观测**:单测全绿,生产路径从不执行。
|
|
11
|
+
|
|
12
|
+
**目标**:把**记忆/检索链路**上的 fail-soft 空 catch 统一加上可辨识的 diag 日志。**只加日志,控制流一律不变**。
|
|
13
|
+
|
|
14
|
+
**涉及功能模块**:`lib/index.js`(recall / 融合 / 接续锚点相关链路)。
|
|
15
|
+
|
|
16
|
+
**验收标准**:
|
|
17
|
+
1. 先给出**完整清单**:grep 全仓 `catch` 后直接 `{}` 或仅注释的空捕获,按模块分组列出 `文件:行号`;**明确标注本次改哪些、不改哪些及理由**(建议只改记忆/检索/接续链路,避免全仓噪声)
|
|
18
|
+
2. 每个补日志的 catch:
|
|
19
|
+
- 使用**可辨识前缀**(如 `recall-fusion 降级:` / `l0-sem 降级:` / `handoff-anchor 降级:`),便于日志检索
|
|
20
|
+
- 含异常摘要(`String(e && e.message || e).slice(0, 140)`)
|
|
21
|
+
- **外层再包一层 try/catch**,确保 diag 本身抛错也不会影响主流程
|
|
22
|
+
3. **行为不变**:异常仍被吞掉(保持 fail-soft,不向上抛);不得改变任何控制流分支
|
|
23
|
+
4. **日志不得进入提示词/注入内容**(遵守 I1 / I3)——diag 只写日志文件
|
|
24
|
+
5. 基线不降:p8 14 / p4 34 / evidence-agg 14 / handoff 51 / continue-chain 58
|
|
25
|
+
|
|
26
|
+
**需先检索的仓库路径与符号关键词**:
|
|
27
|
+
- 路径:`lib/index.js`(重点 recall 与接续链路)、`lib/client.js`
|
|
28
|
+
- 关键词:`catch`、`eRrf`、`eL0Sem`、`eAnchor`、`eImp`、`diag(`
|
|
29
|
+
- **必须先确认**:① `diag()` 的定义位置、输出目标文件、是否有开关 ② diag 是否已被高频调用(评估日志量,避免刷屏)③ 空 catch 的真实数量与分布
|
|
30
|
+
|
|
31
|
+
**改动边界**:
|
|
32
|
+
- ✅ 允许修改:`lib/index.js` 中**记忆/检索/接续链路**的 catch 行(最小 diff)
|
|
33
|
+
- ❌ **禁止修改**:任何 `try` 块内的业务逻辑;任何控制流(不得改成抛出、不得加重试)
|
|
34
|
+
- ❌ 禁止:全仓无差别改造;给与记忆无关的 catch 加日志;引入日志库或新依赖
|
|
35
|
+
- ❌ 禁止:把异常信息写入提示词、注入内容或对外响应
|
|
36
|
+
|
|
37
|
+
**集成位置正确性(回报必写)**:清单 + 取舍理由 + 每处 `文件:行号 — 原 → 新`。
|
|
38
|
+
|
|
39
|
+
**停止条件**:若 `diag()` 不存在或其输出目标不在 `~/.dsh/memory` 内(可能污染用户记忆目录或造成隐私外泄),**立即停止回报**。
|
|
40
|
+
|
|
41
|
+
**回滚**:`git checkout lib/index.js`。
|
|
42
|
+
|
|
43
|
+
**自检清单**:按 `_COMMON.md` §5 执行(本段重点:`node --check lib/index.js` + 五套基线 + 确认无控制流改动:`git diff` 仅含 catch 行)。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
|
|
3
|
+
## 【P2】语义臂接入 recall
|
|
4
|
+
|
|
5
|
+
**目标**:`memory_recall` 当前为纯词法(工具描述自述"关键词匹配")。接入语义臂,**输入用 L0 而非全文**(全文会超 e5 512 token 上限被截断)。
|
|
6
|
+
|
|
7
|
+
**涉及功能模块**:`lib/index.js` 的 `recall()` 实现与 `memory_recall_pre` 工具定义;`lib/semantic-js-pre.js`(C2);`lib/shadow-retrieval-pre.js`(词法臂)。
|
|
8
|
+
|
|
9
|
+
**验收标准**:
|
|
10
|
+
1. 主题性查询("发布踩坑")能召回词法不重合但语义相关的记忆
|
|
11
|
+
2. **词法臂必须保留并继续打全文**(错误码/变量名/路径在 L0 里没有)
|
|
12
|
+
3. 语义引擎不可用 → fail-soft 退回纯词法,**不报错、不阻塞**
|
|
13
|
+
4. `recall(query, limit, agent, scope)` **签名不变**
|
|
14
|
+
5. 五套基线不下降
|
|
15
|
+
|
|
16
|
+
**需先检索的仓库路径与符号关键词**:
|
|
17
|
+
- 路径:`lib/index.js`、`lib/semantic-js-pre.js`、`lib/shadow-retrieval-pre.js`、`lib/context-host-pre.js`
|
|
18
|
+
- 关键词:`async recall(`、`defineTool('memory_recall_pre'`、`engine.recall(`、`lexicalSearch`、`buildQueryPlan`、`D6_FUSION_WEIGHTS_PRE_V1`、`fuseD6Pre`、`SHADOW_GATE_POLICY_PRE_V1`
|
|
19
|
+
- 必须先确认:① `recall()` 真实行号与完整函数体 ② 当前召回走的是 `lexicalSearch` 还是别的函数 ③ C2 引擎实例在 `index.js` 中如何持有(字段名)④ 是否已有 `scope='sessions'` 走 host 的分支
|
|
20
|
+
|
|
21
|
+
**改动边界**:
|
|
22
|
+
- ✅ 允许修改:`lib/index.js` 中 `recall()` 函数体内部(最小 diff)
|
|
23
|
+
- ❌ 禁止修改:`recall()` 签名、`defineTool` 的参数 schema 既有字段(只能新增可选字段)、`lib/semantic-js-pre.js`、`lib/shadow-retrieval-pre.js`、激活决策层
|
|
24
|
+
- ❌ 禁止:把全文送进 embedding
|
|
25
|
+
|
|
26
|
+
**集成位置正确性**:必须说明为何改在 `recall()` 内部而非工具定义处;列出 `recall()` 的所有调用点行号。
|
|
27
|
+
|
|
28
|
+
**回滚**:`git checkout lib/index.js`(本段改动仅限该文件)。
|
|
29
|
+
|
|
30
|
+
---
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
|
|
3
|
+
## 【P3】融合层改造(rank-space + 绝对分数决策)
|
|
4
|
+
|
|
5
|
+
**目标**:修复 `fuseD6Pre` 的 minmax 归一化三宗罪:① 分数随候选集漂移 ② 矮子里拔将军 ③ 候选 ≤1 时退化为常数 0.5(排序失效)。本项目核心是"是否注入"的决策,依赖分数与阈值比较,**相对量会腐蚀决策基础**。
|
|
6
|
+
|
|
7
|
+
**涉及功能模块**:`lib/semantic-js-pre.js` 的 `fuseD6Pre`。
|
|
8
|
+
|
|
9
|
+
**验收标准**:
|
|
10
|
+
1. 决策用**绝对分数 + 校准阈值**,排序用融合分数——两者解耦
|
|
11
|
+
2. 候选 < 3 时不退化(新增断言)
|
|
12
|
+
3. 提供 **rank-space** 融合:`score = Σ 1/(k + rank/divisor)`,**k=60**
|
|
13
|
+
4. 保留原始分数供审计
|
|
14
|
+
|
|
15
|
+
**需先检索的仓库路径与符号关键词**:
|
|
16
|
+
- 路径:`lib/semantic-js-pre.js`、`lib/shadow-retrieval-pre.js`、`lib/context-bridge-pre.js`
|
|
17
|
+
- 关键词:`fuseD6Pre`、`D6_FUSION_WEIGHTS_PRE_V1`、`normArm`、`flat`、`reciprocal_rank_fusion`、`rrf`
|
|
18
|
+
- 必须先确认:① `fuseD6Pre` 的所有调用点 ② 现有返回值结构被谁消费(哪些字段不能删)③ 是否已有 RRF 实现
|
|
19
|
+
|
|
20
|
+
**改动边界**:
|
|
21
|
+
- ✅ 允许:在 `lib/semantic-js-pre.js` **新增**融合函数(并存),由配置/参数切换;或新增 `lib/recall-fusion-pre.js`
|
|
22
|
+
- ❌ **禁止删除或改写 `fuseD6Pre` 既有行为**(并存优先,避免破坏调用方)
|
|
23
|
+
- ❌ **禁止 score-space 加权 RRF**:Hindsight issue #3956 实测——k=60 时动态范围仅 5.9 倍,加权会让排序退化为字典序,recall@20 从 **0.97 崩到 0.40**
|
|
24
|
+
- ❌ 禁止照搬 OpenViking 的 `α=0.5` 父分数传播(本地无深目录树;若实现须映射为「工作区/日志文件/主题块」三级父且默认关闭)
|
|
25
|
+
|
|
26
|
+
**回滚**:新增文件则删除;若改了 `semantic-js-pre.js` 则 `git checkout` 该文件。
|
|
27
|
+
|
|
28
|
+
---
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
|
|
3
|
+
## 【P4】recall 返回 L0 + 按需展开
|
|
4
|
+
|
|
5
|
+
**目标**:recall 当前返回整条原文(平均 814 字符)。改为默认返回 L0 列表,按需按 id 展开原文(对齐 OpenViking 渐进式加载:L0 已在结果中,`is_leaf` 决定取 L1/L2)。
|
|
6
|
+
|
|
7
|
+
**涉及功能模块**:`lib/index.js` 的 `recall()` 返回结构;可能复用 `memory_read` 或新增展开入口。
|
|
8
|
+
|
|
9
|
+
**验收标准**:
|
|
10
|
+
1. 默认返回 L0 列表(每条 ~93 字符),含 `id/score/match_reason`
|
|
11
|
+
2. 提供按 `mem_xxx` 展开原文的入口
|
|
12
|
+
3. 5 条场景:约 4070 字符 → 约 590 字符
|
|
13
|
+
4. 展开不串条;旧调用方式(不传新参数)行为不变
|
|
14
|
+
5. 五套基线不下降
|
|
15
|
+
|
|
16
|
+
**需先检索的仓库路径与符号关键词**:
|
|
17
|
+
- 路径:`lib/index.js`、`lib/memory-index-pre.js`
|
|
18
|
+
- 关键词:`async recall(`、`memory_read`、`readTextSafe`、`byteStart`、`byteEnd`、`recordDigest`、`locator`
|
|
19
|
+
- 必须先确认:① 现有是否已能按 id 定位到字节区间(若能则复用,不要新造)② `recall()` 返回字符串还是对象
|
|
20
|
+
|
|
21
|
+
**改动边界**:
|
|
22
|
+
- ✅ 允许:`lib/index.js` 的 `recall()` 返回组装部分
|
|
23
|
+
- ❌ 禁止:改变静态纪律层注入内容(I1);删除既有返回字段
|
|
24
|
+
- ❌ 禁止修改:`lib/memory-index-pre.js`
|
|
25
|
+
|
|
26
|
+
**回滚**:`git checkout lib/index.js`。
|
|
27
|
+
|
|
28
|
+
---
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
> **投喂方式**:本段须与 `_COMMON.md` 一并投喂。
|
|
2
|
+
|
|
3
|
+
## 【P5】接续锚点表注入
|
|
4
|
+
|
|
5
|
+
**目标**:`buildContinueCarry()` 当前机械截断(白板 3000 / 账本 8000 / 总 18000)。G1/G3 已改指令为"按需取用",但**没有锚点表可供下钻**。本段用 T1 的 L0 抽取生成锚点表。
|
|
6
|
+
|
|
7
|
+
**涉及功能模块**:`lib/index.js` 的 `buildContinueCarry()`。
|
|
8
|
+
|
|
9
|
+
**验收标准**:
|
|
10
|
+
1. 注入含锚点表(每条 ~20–30 token),材料仍可达
|
|
11
|
+
2. **字节稳定**:相同输入两次注入内容 hash 一致
|
|
12
|
+
3. 锚点生成失败 → fail-soft 回退现有平铺,**绝不阻塞接续**
|
|
13
|
+
4. **不引入新的 LLM 轮次**(纯解析),满足 0.75 早于官方 0.80 的时序
|
|
14
|
+
5. handoff 51 / continue-chain 58 不下降
|
|
15
|
+
|
|
16
|
+
**需先检索的仓库路径与符号关键词**:
|
|
17
|
+
- 路径:`lib/index.js`
|
|
18
|
+
- 关键词:`buildContinueCarry`、`carryText`、`slice(0, 3000)`、`slice(0, 8000)`、`slice(0, 18000)`、`truncateHead`、`stripSensitiveSections`、`snapshotPlanTitle`、`snapshotHandoffTitle`
|
|
19
|
+
- 必须先确认:① `buildContinueCarry` 的真实行号与返回字段 ② 三处截断的准确位置 ③ `carryText` 被谁消费(下游)
|
|
20
|
+
|
|
21
|
+
**改动边界**:
|
|
22
|
+
- ✅ 允许:`buildContinueCarry()` 内部(最小 diff)
|
|
23
|
+
- ❌ 禁止:新增 LLM 调用;让注入内容随查询/任务动态变化;改动静态纪律层
|
|
24
|
+
- ❌ 禁止修改:`refreshRitualPrompt()`(那是 P6/P7 范围)
|
|
25
|
+
|
|
26
|
+
**回滚**:`git checkout lib/index.js`。
|
|
27
|
+
|
|
28
|
+
---
|