@a9i5k4/dsh-auto-memory 3.0.1 → 3.1.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.
Files changed (124) hide show
  1. package/README.md +13 -8
  2. package/README.zh-CN.md +13 -8
  3. package/docs/HANDBOOK.md +88 -52
  4. package/docs/USER-GUIDE.en.md +9 -9
  5. package/docs/USER-GUIDE.zh-CN.md +9 -9
  6. package/docs/screenshots/promo/promo-0-banner-v4.png +0 -0
  7. package/docs/screenshots/promo/promo-1b-auto-recall.png +0 -0
  8. package/lib/activation-host.js +6 -1
  9. package/lib/client.js +819 -272
  10. package/lib/context-host.js +7 -1
  11. package/lib/episodic-store.js +90 -16
  12. package/lib/fact-store.js +463 -41
  13. package/lib/hub-io.js +217 -0
  14. package/lib/index.js +224 -45
  15. package/lib/intent-clean-safe.js +1 -1
  16. package/lib/memory-hub.js +37 -5
  17. package/lib/note-status.js +9 -1
  18. package/lib/procedure-store.js +252 -31
  19. package/lib/procedure-switch.js +38 -0
  20. package/lib/python-sidecar-client.js +285 -8
  21. package/package.json +6 -2
  22. package/docs/internal/ACCEPT-35-LIVE.md +0 -143
  23. package/docs/internal/ACCEPTANCE-20260914.md +0 -90
  24. package/docs/internal/ARCH-REVIEW-BRIEF.md +0 -411
  25. package/docs/internal/ARCH-REVIEW-REQUEST.md +0 -201
  26. package/docs/internal/ARCH-REVIEW-ROUND2.md +0 -169
  27. package/docs/internal/ARCH-REVIEW-ROUND3.md +0 -206
  28. package/docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md +0 -397
  29. package/docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md +0 -351
  30. package/docs/internal/ART-DIRECTION-WIREFRAME.md +0 -191
  31. package/docs/internal/ART-DIRECTION-WIREFRAME.md.bak-superseded +0 -181
  32. package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +0 -314
  33. package/docs/internal/BATTLE-PLAN-20260917.md +0 -871
  34. package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +0 -192
  35. package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +0 -72
  36. package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +0 -131
  37. package/docs/internal/CUA-VISION-FIX-NOTES.md +0 -78
  38. package/docs/internal/DECISIONS-20260914-SESSION.md +0 -269
  39. package/docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md +0 -292
  40. package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +0 -219
  41. package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +0 -132
  42. package/docs/internal/FEATURE-INVENTORY.md +0 -531
  43. package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +0 -13
  44. package/docs/internal/G-SERIES-EXECUTION-20260917.md +0 -248
  45. package/docs/internal/G3-DESIGN-20260918.md +0 -82
  46. package/docs/internal/G3-DISK-FORMAT-GAP-20260919.md +0 -92
  47. package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +0 -74
  48. package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +0 -352
  49. package/docs/internal/GPT-REVIEW-PROMPT.md +0 -216
  50. package/docs/internal/GROUP-DIGEST-SETUP.md +0 -62
  51. package/docs/internal/GROUP-LISTENER-SETUP.md +0 -49
  52. package/docs/internal/GROUP-WEBHOOK-SETUP.md +0 -93
  53. package/docs/internal/HANDOFF-TO-ZCODE-20260920.md +0 -309
  54. package/docs/internal/HANDOFF-TO-ZCODE.md +0 -168
  55. package/docs/internal/HERMES-DATA-VERIFICATION-20260919.md +0 -120
  56. package/docs/internal/HERMES-LEGACY-STATUS-20260919.md +0 -74
  57. package/docs/internal/ISSUE-55-58-VERIFICATION-20260918.md +0 -175
  58. package/docs/internal/ISSUE10-FIX-EXECUTION-20260919.md +0 -389
  59. package/docs/internal/ISSUE10-PLAN-20260919.md +0 -254
  60. package/docs/internal/ISSUE10B-FORENSICS-20260919.md +0 -468
  61. package/docs/internal/ISSUE9-PURGE-AND-R1-PLAIN-20260919.md +0 -150
  62. package/docs/internal/ISSUE9-RESIDUAL-FORENSICS-20260919.md +0 -114
  63. package/docs/internal/KICKOFF-P0.md +0 -254
  64. package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +0 -79
  65. package/docs/internal/MASTER-PLAN-3.0.md +0 -411
  66. package/docs/internal/MEMORY-GOVERNANCE-20260917.md +0 -309
  67. package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +0 -85
  68. package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +0 -222
  69. package/docs/internal/NEXT-VERSION-TODO.md +0 -95
  70. package/docs/internal/OFFICIAL-DISCUSSION-DRAFT.md +0 -80
  71. package/docs/internal/PENDING-FIXES-20260916.md +0 -289
  72. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md +0 -705
  73. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md.bak-s10 +0 -649
  74. package/docs/internal/PROCEDURAL-MEMORY-AND-APPROVAL-DESIGN-20260918.md +0 -225
  75. package/docs/internal/PROGRESS-20260917.md +0 -93
  76. package/docs/internal/PROMPT-GAP-AUDIT-20260920.md +0 -128
  77. package/docs/internal/R1-DEGRADE-AUDIT-20260918.md +0 -163
  78. package/docs/internal/R1-READABILITY-FORENSICS-20260919.md +0 -127
  79. package/docs/internal/R2-EVIDENCE-DEEP-AUDIT-20260918.md +0 -140
  80. package/docs/internal/R3-DEGRADE-LEDGER-DESIGN-20260918.md +0 -138
  81. package/docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md +0 -218
  82. package/docs/internal/RAG-KARPATHY-PROGRAM.md +0 -229
  83. package/docs/internal/RELEASE-PROCESS.md +0 -99
  84. package/docs/internal/REPORT-P0-NIGHTLY.md +0 -212
  85. package/docs/internal/REPORT-P5-ACCEPTANCE.md +0 -31
  86. package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +0 -153
  87. package/docs/internal/RESUME-20260918.md +0 -171
  88. package/docs/internal/RESUME-20260919.md +0 -104
  89. package/docs/internal/REVIEW-WB-GRAPH-SELF.md +0 -81
  90. package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +0 -198
  91. package/docs/internal/ROADMAP-20260917-WEEK.md +0 -439
  92. package/docs/internal/ROADMAP.md +0 -106
  93. package/docs/internal/RUN-P0-NIGHTLY.md +0 -227
  94. package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +0 -185
  95. package/docs/internal/S10-GAP-INVENTORY-20260917.md +0 -239
  96. package/docs/internal/S10-GAPS-PLAIN-20260917.md +0 -125
  97. package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +0 -360
  98. package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +0 -90
  99. package/docs/internal/SUBAGENT-REPORT-ROUTING-PRE-RESEARCH.md +0 -261
  100. package/docs/internal/T6-EXECUTION-20260920.md +0 -130
  101. package/docs/internal/TELEMETRY-EFFECT-REPORT-DESIGN-20260918.md +0 -146
  102. package/docs/internal/THESIS-GAP-ANALYSIS-20260918.md +0 -89
  103. package/docs/internal/THESIS-OUTLINE-20260918.md +0 -147
  104. package/docs/internal/THREE-LAYER-CONTRACT.md +0 -219
  105. package/docs/internal/TODO-BACKLOG.md +0 -263
  106. package/docs/internal/TODO-GRAPH.html +0 -715
  107. package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +0 -493
  108. package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +0 -710
  109. package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +0 -710
  110. package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +0 -703
  111. package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +0 -710
  112. package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +0 -715
  113. package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +0 -297
  114. package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +0 -104
  115. package/docs/internal/WB-FORMAT-CONVENTION.md +0 -112
  116. package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +0 -71
  117. package/docs/internal/WB-GRAPH-INTEGRATION-PLAN.md +0 -386
  118. package/docs/internal/WB-GRAPH-RESEARCH-BRIEF.md +0 -118
  119. package/docs/internal/WB-GRAPH-RESEARCH-EXTERNAL.md +0 -228
  120. package/docs/internal/WB-GRAPH-RESEARCH-LOCAL.md +0 -190
  121. package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +0 -56
  122. package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +0 -787
  123. package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +0 -112
  124. package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +0 -230
package/README.md CHANGED
@@ -10,18 +10,19 @@
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- <a href="docs/screenshots/promo/promo-0-banner-v3.png"><img width="820" alt="dsh-auto-memory hero: she remembers, unbidden" src="docs/screenshots/promo/promo-0-banner-v3.png"></a>
13
+ <a href="docs/screenshots/promo/promo-0-banner-v4.png"><img width="820" alt="dsh-auto-memory hero: she remembers, unbidden" src="docs/screenshots/promo/promo-0-banner-v4.png"></a>
14
14
  </p>
15
15
 
16
16
  <p align="center">
17
- <a href="docs/screenshots/promo/promo-0-banner-v3.png"><img width="130" alt="hero" src="docs/screenshots/promo/promo-0-banner-v3.png"></a>
17
+ <a href="docs/screenshots/promo/promo-0-banner-v4.png"><img width="130" alt="hero" src="docs/screenshots/promo/promo-0-banner-v4.png"></a>
18
+ <a href="docs/screenshots/promo/promo-1b-auto-recall.png"><img width="130" alt="auto recall" src="docs/screenshots/promo/promo-1b-auto-recall.png"></a>
18
19
  <a href="docs/screenshots/promo/promo-2-tour.png"><img width="130" alt="welcome tour" src="docs/screenshots/promo/promo-2-tour.png"></a>
19
20
  <a href="docs/screenshots/promo/promo-3-recall.png"><img width="130" alt="recall & crystallization" src="docs/screenshots/promo/promo-3-recall.png"></a>
20
21
  <a href="docs/screenshots/promo/promo-4-unattended.png"><img width="130" alt="unattended mode" src="docs/screenshots/promo/promo-4-unattended.png"></a>
21
22
  <a href="docs/screenshots/promo/promo-5-external.png"><img width="130" alt="external memory inheritance" src="docs/screenshots/promo/promo-5-external.png"></a>
22
23
  <a href="docs/screenshots/promo/promo-6-greeting.png"><img width="130" alt="scheduled greetings" src="docs/screenshots/promo/promo-6-greeting.png"></a>
23
24
  </p>
24
- <p align="center"><sub>Promo gallery · six frames · click any thumbnail to view full size</sub></p>
25
+ <p align="center"><sub>Promo gallery · seven frames · click any thumbnail to view full size</sub></p>
25
26
 
26
27
  <details>
27
28
  <summary><b>Promo gallery, frame by frame</b> (expand and flip through)</summary>
@@ -30,23 +31,27 @@
30
31
 
31
32
  <p align="center"><img width="720" alt="hero" src="docs/screenshots/promo/promo-1-hero.png"></p>
32
33
 
33
- #### Frame 2 · Welcome Tour — Every feature, explained and toggled on the spot
34
+ #### Frame 2 · Auto Recall — A semantic model matches it and injects it before you ask
35
+
36
+ <p align="center"><img width="720" alt="auto recall" src="docs/screenshots/promo/promo-1b-auto-recall.png"></p>
37
+
38
+ #### Frame 3 · Welcome Tour — Every feature, explained and toggled on the spot
34
39
 
35
40
  <p align="center"><img width="720" alt="welcome tour" src="docs/screenshots/promo/promo-2-tour.png"></p>
36
41
 
37
- #### Frame 3 · Recall & Crystallization — Conversation condenses into skills, traceably
42
+ #### Frame 4 · Recall & Crystallization — Conversation condenses into skills, traceably
38
43
 
39
44
  <p align="center"><img width="720" alt="recall" src="docs/screenshots/promo/promo-3-recall.png"></p>
40
45
 
41
- #### Frame 4 · Unattended Mode — Runs all night, zero small talk, zero interruptions
46
+ #### Frame 5 · Unattended Mode — Runs all night, zero small talk, zero interruptions
42
47
 
43
48
  <p align="center"><img width="720" alt="unattended" src="docs/screenshots/promo/promo-4-unattended.png"></p>
44
49
 
45
- #### Frame 5 · External Memory Inheritance — Your other AIs feed her memory too
50
+ #### Frame 6 · External Memory Inheritance — Your other AIs feed her memory too
46
51
 
47
52
  <p align="center"><img width="720" alt="external" src="docs/screenshots/promo/promo-5-external.png"></p>
48
53
 
49
- #### Frame 6 · Scheduled Greetings — Every day remembered
54
+ #### Frame 7 · Scheduled Greetings — Every day remembered
50
55
 
51
56
  <p align="center"><img width="720" alt="greeting" src="docs/screenshots/promo/promo-6-greeting.png"></p>
52
57
 
package/README.zh-CN.md CHANGED
@@ -10,18 +10,19 @@
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- <a href="docs/screenshots/promo/promo-0-banner-v3.png"><img width="820" alt="dsh-auto-memory 主视觉:无问自忆,且件件可查" src="docs/screenshots/promo/promo-0-banner-v3.png"></a>
13
+ <a href="docs/screenshots/promo/promo-0-banner-v4.png"><img width="820" alt="dsh-auto-memory 主视觉:无问自忆,且件件可查" src="docs/screenshots/promo/promo-0-banner-v4.png"></a>
14
14
  </p>
15
15
 
16
16
  <p align="center">
17
- <a href="docs/screenshots/promo/promo-0-banner-v3.png"><img width="130" alt="主视觉" src="docs/screenshots/promo/promo-0-banner-v3.png"></a>
17
+ <a href="docs/screenshots/promo/promo-0-banner-v4.png"><img width="130" alt="主视觉" src="docs/screenshots/promo/promo-0-banner-v4.png"></a>
18
+ <a href="docs/screenshots/promo/promo-1b-auto-recall.png"><img width="130" alt="自动唤起" src="docs/screenshots/promo/promo-1b-auto-recall.png"></a>
18
19
  <a href="docs/screenshots/promo/promo-2-tour.png"><img width="130" alt="欢迎向导" src="docs/screenshots/promo/promo-2-tour.png"></a>
19
20
  <a href="docs/screenshots/promo/promo-3-recall.png"><img width="130" alt="唤起与固化" src="docs/screenshots/promo/promo-3-recall.png"></a>
20
21
  <a href="docs/screenshots/promo/promo-4-unattended.png"><img width="130" alt="无人值守" src="docs/screenshots/promo/promo-4-unattended.png"></a>
21
22
  <a href="docs/screenshots/promo/promo-5-external.png"><img width="130" alt="外部记忆继承" src="docs/screenshots/promo/promo-5-external.png"></a>
22
23
  <a href="docs/screenshots/promo/promo-6-greeting.png"><img width="130" alt="定时问候" src="docs/screenshots/promo/promo-6-greeting.png"></a>
23
24
  </p>
24
- <p align="center"><sub>宣传图六幕 · 点击任意一张查看大图</sub></p>
25
+ <p align="center"><sub>宣传图七幕 · 点击任意一张查看大图</sub></p>
25
26
 
26
27
  <details>
27
28
  <summary><b>宣传图分幕浏览</b>(点击展开,逐幕翻看)</summary>
@@ -30,23 +31,27 @@
30
31
 
31
32
  <p align="center"><img width="720" alt="主视觉" src="docs/screenshots/promo/promo-1-hero.png"></p>
32
33
 
33
- #### 第二幕 · 欢迎向导 —— 每个功能,当场看懂、当场开关
34
+ #### 第二幕 · 自动唤起 —— 语义模型自动匹配,不等你问就已注入
35
+
36
+ <p align="center"><img width="720" alt="自动唤起" src="docs/screenshots/promo/promo-1b-auto-recall.png"></p>
37
+
38
+ #### 第三幕 · 欢迎向导 —— 每个功能,当场看懂、当场开关
34
39
 
35
40
  <p align="center"><img width="720" alt="欢迎向导" src="docs/screenshots/promo/promo-2-tour.png"></p>
36
41
 
37
- #### 第三幕 · 唤起与固化 —— 对话凝成技能,每一步有迹可循
42
+ #### 第四幕 · 唤起与固化 —— 对话凝成技能,每一步有迹可循
38
43
 
39
44
  <p align="center"><img width="720" alt="唤起与固化" src="docs/screenshots/promo/promo-3-recall.png"></p>
40
45
 
41
- #### 第四幕 · 无人值守模式 —— 整夜安静跑,零寒暄,零打扰
46
+ #### 第五幕 · 无人值守模式 —— 整夜安静跑,零寒暄,零打扰
42
47
 
43
48
  <p align="center"><img width="720" alt="无人值守" src="docs/screenshots/promo/promo-4-unattended.png"></p>
44
49
 
45
- #### 第五幕 · 外部记忆继承 —— 你的其他 AI,也在喂她记忆
50
+ #### 第六幕 · 外部记忆继承 —— 你的其他 AI,也在喂她记忆
46
51
 
47
52
  <p align="center"><img width="720" alt="外部记忆继承" src="docs/screenshots/promo/promo-5-external.png"></p>
48
53
 
49
- #### 第六幕 · 定时暖心问候 —— 让每一天都被记得
54
+ #### 第七幕 · 定时暖心问候 —— 让每一天都被记得
50
55
 
51
56
  <p align="center"><img width="720" alt="定时问候" src="docs/screenshots/promo/promo-6-greeting.png"></p>
52
57
 
package/docs/HANDBOOK.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # dsh-auto-memory 接手与全量验证手册(自包含)
2
2
 
3
3
  > **适用对象**:完全不了解本项目与插件背景的新 Agent。只凭本文件即可接手操作并完成全量验证。
4
- > **版本基准**:插件 v2.2.6(BSD-3-Clause)/DSH v0.1.2-rc.1/Windows。
5
- > **最后核对**:2026-09-10(以代码与 DSH CLI help 原文为准)。
4
+ > **版本基准**:插件 v3.0.1(BSD-3-Clause,版本号以 `package.json` 为准)/DSH v0.1.2-rc.1/Windows。
5
+ > **最后核对**:2026-09-22(以代码与 DSH CLI help 原文为准;本手册的路径类事实统一按「发布名」口径重取,见 §0 命名口径)。
6
6
 
7
7
  ---
8
8
 
@@ -10,13 +10,14 @@
10
10
 
11
11
  | 术语 | 全称 / 含义 |
12
12
  |---|---|
13
- | **DSH** | **DeepSeek Harness**,宿主应用。以 CLI `dsh` 启动,提供浏览器 UI(`dsh web`)与插件装载能力。本机安装在 `C:\Users\JH Z\AppData\Roaming\npm\node_modules\@deepseek-ai\dsh` |
13
+ | **DSH** | **DeepSeek Harness**,宿主应用。以 CLI `dsh` 启动,提供浏览器 UI(`dsh web`)与插件装载能力。Windows 默认装在 `%APPDATA%\npm\node_modules\@deepseek-ai\dsh`(**不要写死某个用户名**) |
14
14
  | **Cordis** | DSH 使用的插件框架(`@deepseek-ai/cordis ^4.0.1`)。本插件是 Cordis 插件,通过 `cordis.patch.yml` 注入宿主 |
15
15
  | **本插件** | `dsh-auto-memory`,包名同名,工程根目录 `D:\dsh-auto-memory` |
16
- | **pre 线 / `-pre.js`** | 源码约定:新增模块一律命名为 `lib/xxx-pre.js`(纯函数、零 IO、IO 注入)。发布时由流水线剥去 `-pre` 生成同名 `lib/xxx.js`。**改源码改 `-pre.js`;`lib/xxx.js` 是产物,禁止手改** |
16
+ | **pre 线 / `-pre.js`** | 源码约定:新增模块一律命名为 `lib/xxx-pre.js`(纯函数、零 IO、IO 注入)。发布时由 `tools/release.mjs` 的**转换表**剥去 `-pre` 生成同名 `lib/xxx.js`。**改源码改 `-pre.js`;`lib/xxx.js` 是产物,禁止手改** |
17
+ | **命名口径(发布名 vs pre 名)** | 同一份身份在两条线上拼写不同,**本手册正文一律给「发布名」——即用户实际装到的那个**;pre 开发树各加 `-pre`。成对关系:端点前缀 `/api/dsh-auto-memory/` ↔ `/api/dsh-auto-memory-pre/`;诊断日志 `dsh-auto-memory-diagnose.log` ↔ `dsh-auto-memory-pre-diagnose.log`;配置 `dsh-auto-memory.json` ↔ `dsh-auto-memory-pre.json`;目录 `memory/hub/` ↔ `memory/hub-pre/`、`memory/evidence/` ↔ `memory/evidence-pre/`、`memory/index/` ↔ `memory/index-pre/`、`memory/semantic/` ↔ `memory/semantic-pre/`。**★例外:`memory/degrade-pre/` 转换表里没有对应规则 ⇒ 发布物里仍叫 `degrade-pre`,不要改成 `degrade`**。依据:`tools/release.mjs` 转换表 + 已发布产物 `D:\dsh_debug\_publish_dsh-auto-memory\lib\index.js` |
17
18
  | **宿主侧 / 后端** | `lib/index.js`,运行在 Node 进程里,负责存储、检索、端点、工具、调度 |
18
19
  | **浏览器侧 / 前端** | `lib/client.js`,注入到 DSH 浏览器 UI,负责面板与设置页 |
19
- | **工具(tool)** | 供模型调用的函数(类似 MCP 工具)。本插件注册 10 个,统一以 `_pre` 结尾 |
20
+ | **工具(tool)** | 供模型调用的函数(类似 MCP 工具)。本插件注册 **17 个**;pre 树名字以 `_pre` 结尾,发布名去掉 `_pre`(如 `memory_recall`) |
20
21
  | **水位(water level)** | 当前会话上下文占用比例(0–1)。用于决定何时触发接续 |
21
22
  | **接续 / handoff** | 上下文将满时,把进度交接给一个新会话继续工作的机制 |
22
23
  | **主动联想** | 不等用户询问,由系统主动判断"该想起什么"并注入上下文——本插件的核心差异化能力 |
@@ -26,7 +27,7 @@
26
27
  | **BM25** | 经典词法相关性算法 |
27
28
  | **M8 / 记忆中枢** | 三层记忆存储(fact 事实/episodic 经历/procedure 技能)与编排器 memory-hub 的合称 |
28
29
  | **evidence(证据)** | 记忆被使用情况的记录,六类:`seen`(曝光)/`read`(读到原文)/`cite`(回复引用)/`reuse`(跨会话复用)/`success`(任务成功)/`correction`(用户纠正) |
29
- | **endpoint / 端点** | 后端 HTTP 接口,路径前缀统一为 `/api/dsh-auto-memory-pre/` |
30
+ | **endpoint / 端点** | 后端 HTTP 接口,路径前缀统一为 `/api/dsh-auto-memory/`(pre 树为 `/api/dsh-auto-memory-pre/`),共 49 条 |
30
31
 
31
32
  ---
32
33
 
@@ -35,7 +36,7 @@
35
36
  本插件给 DSH 加一套**长期记忆系统**:记忆以 Markdown 文件存放在用户目录下,插件负责写入、检索、在合适时机主动提醒模型,并在上下文将满时把进度交给新会话。
36
37
 
37
38
  - 工程根:`D:\dsh-auto-memory`
38
- - 源码:`lib/index.js`(宿主侧,约 8000 行)、`lib/client.js`(浏览器侧)、`lib/*-pre.js`(各纯核心模块,58 个文件)
39
+ - 源码:`lib/index.js`(宿主侧,约 11,600 行)、`lib/client.js`(浏览器侧)、`lib/*-pre.js`(各纯核心模块,62 个文件)
39
40
  - 发布产物:`lib/`(含剥名后的 `.js`)、`python/`、`docs/`、`cordis.patch.yml`
40
41
  - 运行时依赖:**零**。`dependencies` 为空;peer 为 cordis;optional 为 transformers
41
42
 
@@ -74,28 +75,34 @@ dsh web --no-open --port 0
74
75
  │ · 语义引擎环境检测面板 │
75
76
  │ 仅负责「展示 + 收集用户操作」,通过 DSH 远程 API 调用后端 │
76
77
  └───────────────┬───────────────────────────────────────────┘
77
- │ HTTP /api/dsh-auto-memory-pre/*
78
+ │ HTTP /api/dsh-auto-memory/*(pre 树为 /api/dsh-auto-memory-pre/*)
78
79
  ┌───────────────▼───────────────────────────────────────────┐
79
80
  │ 宿主侧(后端)lib/index.js + lib/*-pre.js │
80
- │ · 端点路由(39 个) │
81
- │ · 工具(10 个,供模型调用) │
81
+ │ · 端点路由(49 个) │
82
+ │ · 工具(17 个,供模型调用) │
82
83
  │ · 存储:记忆文件、M8 三层 JSON、evidence 事件 JSONL │
83
84
  │ · 检索:C1 词法 / C2 语义 / C3 Python 语义 │
84
85
  │ · 决策:主动联想门控、接续调度、水位监测 │
85
86
  └───────────────┬───────────────────────────────────────────┘
86
87
  │ 读写
87
88
  ┌───────────────▼───────────────────────────────────────────┐
88
- │ 磁盘 C:\Users\JH Z\.dsh\memory\ │
89
- │ · workspaces\<工作区>\*.md 记忆日志/笔记/白板/账本 │
90
- │ · hub-pre\episodes|facts|procedures.json M8 三层 │
91
- │ · evidence-pre\events\YYYY-MM-DD.jsonl 证据事件(按日) │
92
- │ · dsh-auto-memory-pre-diagnose.log 诊断日志 │
89
+ │ 磁盘 ~/.dsh/(Windows:%USERPROFILE%\.dsh\) │
90
+ │ · memory\workspaces\<工作区>\*.md 日志/笔记/白板/账本 │
91
+ │ · memory\hub\episodes|facts|procedures.json M8 三层 │
92
+ │ · memory\evidence\events\YYYY-MM-DD.jsonl 证据事件(按日) │
93
+ │ · (诊断日志**不在本目录**,见 §5.2) │
93
94
  └────────────────────────────────────────────────────────────┘
94
95
  ```
95
96
 
97
+ > ⚠️ **诊断日志的位置**:`~/.dsh/dsh-auto-memory-diagnose.log` —— 它与 `memory/` **同级**,不在 `memory/` 里面
98
+ > (代码依据:`lib/index.js` 里是 `path.join(dshHome(), 'dsh-auto-memory-pre-diagnose.log')`,没有 `'memory'` 这一段)。
99
+ > 打包日志时先确认文件存在再交:`ls -l ~/.dsh/*diagnose*.log`
100
+
101
+ ```
102
+
96
103
  **数据流向(一次典型记忆检索)**:
97
104
 
98
- 1. 模型调用工具 `memory_recall_pre`(或前端点选)→ 宿主侧 `recall()`
105
+ 1. 模型调用工具 `memory_recall`(pre 树 `memory_recall_pre`;或前端点选)→ 宿主侧 `recall()`
99
106
  2. `recall()` 构建 L0 语料(从日志/反思/笔记抽取摘要)
100
107
  3. 词法臂(C1)打 L0、语义臂(C2)打 L0;若查询含时间表达,追加时间臂
101
108
  4. 三臂经 `rankFusionRRFPre`(rank-space,k=60)融合排序
@@ -125,7 +132,7 @@ dsh web --no-open --port 0
125
132
 
126
133
  - **位置**:记忆窗格内的「记忆中枢」页签
127
134
  - **内容**:技能(procedure)/事实(fact)/经历(episodic)三栏
128
- - **预期**:有内容时显示条目;无内容显示正确空态;数据来自 `hub-pre\*.json`
135
+ - **预期**:有内容时显示条目;无内容显示正确空态;数据来自 `memory\hub\*.json`(pre 树为 `memory\hub-pre\*.json`)
129
136
 
130
137
  ### 4.3 设置分组(`data-dam-settings-group`)
131
138
 
@@ -147,7 +154,7 @@ dsh web --no-open --port 0
147
154
  | `procedurePromotionEnabled` | false | 开启 → 技能晋升可用 |
148
155
  | `unattendedMode` / `awayMinutes` | false / 60 | 无人值守相关(**设置页 UI 尚未核实,属待办**) |
149
156
 
150
- > ⚠️ 修改设置后需要**重载/重启 dsh web**才生效的场景,以实际观察为准;若改完无变化,先查 `/api/dsh-auto-memory-pre/config` 是否已回写。
157
+ > ⚠️ 修改设置后需要**重载/重启 dsh web**才生效的场景,以实际观察为准;若改完无变化,先查 `/api/dsh-auto-memory/config`(pre 树 `/api/dsh-auto-memory-pre/config`)是否已回写。
151
158
 
152
159
  ### 4.4 语义引擎环境检测面板(`data-dam-detect-panel`)
153
160
 
@@ -162,7 +169,7 @@ dsh web --no-open --port 0
162
169
 
163
170
  ## 5. 后端状态来源(如何确认前端操作已生效)
164
171
 
165
- ### 5.1 主要端点(`lib/index.js` 注册,共 39 个,前缀 `/api/dsh-auto-memory-pre/`)
172
+ ### 5.1 主要端点(`lib/index.js` 注册,共 **49** 条,前缀 `/api/dsh-auto-memory/`)
166
173
 
167
174
  | 端点 | 用途 | 关键返回字段 |
168
175
  |---|---|---|
@@ -171,7 +178,7 @@ dsh web --no-open --port 0
171
178
  | `state` | 运行状态总览 | 水位、启用状态等 |
172
179
  | `debug` | 调试视图 | 含 `shadowRetrieval` 等 |
173
180
  | `semantic-status` / `semantic-emit` / `semantic-download` | 语义引擎状态/发射/下载 | 档位、模型状态 |
174
- | `activation-inbox-pre` | 激活收件箱 | 候选与投递记录 |
181
+ | `activation-inbox` | 激活收件箱 | 候选与投递记录 |
175
182
  | `auto-continue-state` / `auto-continue-decide` / `handoff-continue` | 接续状态与决策 | 水位、是否触发、材料层 |
176
183
  | `smart-recall` | 智能检索 | 命中列表 |
177
184
  | `storage-manage` | 存储管理 | 文件/统计 |
@@ -179,19 +186,36 @@ dsh web --no-open --port 0
179
186
  | `update` / `update-check` | 更新 | 版本信息 |
180
187
  | `calendar`、`file`、`browse-dir`、`external*`、`summarize`、`shadow-recent`、`subagent-gc`、`greet` | 其余辅助端点 | — |
181
188
 
182
- > 端点名以代码为准:`grep -oE "'/api/dsh-auto-memory-pre/[a-z0-9-]+'" lib/index.js | sort -u`
189
+ > 端点名与条数以代码为准(**一条命令自核**,`49` 与 `/api/dsh-auto-memory/` 都由它推出,不是写死的):
190
+ >
191
+ > ```bash
192
+ > node -e "const f=require('fs');const s=f.readFileSync('lib/index.js','utf8'),r=f.readFileSync('tools/release.mjs','utf8');const P=[...r.matchAll(/\['([^']+)',\s*'([^']+)'\]/g)].map(m=>[m[1],m[2]]);const c=x=>P.reduce((a,[b,d])=>a.split(b).join(d),x);const e=[...new Set([...s.matchAll(/'(\/api\/dsh-auto-memory[^']*)'/g)].map(m=>m[1]))];console.log('端点条数:',e.length);console.log('发布名前缀:',c(e[0]).split('/').slice(0,3).join('/')+'/')"
193
+ > ```
194
+ >
195
+ > 在工程根执行,输出应为 `端点条数: 49` / `发布名前缀: /api/dsh-auto-memory/`。命令读的是**源码 + 发布转换表**,所以两条线的拼写都能对上。
183
196
 
184
197
  ### 5.2 日志
185
198
 
186
- - **诊断日志**:`C:\Users\JH Z\.dsh\memory\dsh-auto-memory-pre-diagnose.log`
199
+ - **诊断日志**:`~/.dsh/dsh-auto-memory-diagnose.log`(Windows:`%USERPROFILE%\.dsh\dsh-auto-memory-diagnose.log`)
200
+ - **★它不在 `memory/` 下面**:代码是 `path.join(dshHome(), 'dsh-auto-memory-pre-diagnose.log')`(pre 树),无 `'memory'` 段
187
201
  - 关键线索:插件加载异常、`diag(...)` 输出的降级与状态(如 `hub success evidence: +N`、`p9a correction attribution: ...`)
188
- - **证据事件**:`C:\Users\JH Z\.dsh\memory\evidence-pre\events\YYYY-MM-DD.jsonl`
202
+ - **证据事件**:`~/.dsh/memory/evidence/events/YYYY-MM-DD.jsonl`(pre 树为 `~/.dsh/memory/evidence-pre/events/`)
189
203
  - 单行结构(实测):顶层 `kind` / `memoryId` / `recordedAt` / `anchorId` …,**时间戳在 `event.ts`**(顶层无 `ts`/`createdAt`)
190
- - **M8 数据**:`C:\Users\JH Z\.dsh\memory\hub-pre\{episodes,facts,procedures}.json`(原子写)
204
+ - **M8 数据**:`~/.dsh/memory/hub/{episodes,facts,procedures}.json`(原子写;pre 树为 `memory/hub-pre/`)
205
+ - **降级台账**:`~/.dsh/memory/degrade-pre/latest.json` —— ★**这条没有发布名,两条线都叫 `degrade-pre`**,见下方自核
206
+
207
+ > **一条命令自核上面 4 条路径的「发布名」**(读源码 + 发布转换表,所以两条线都对得上):
208
+ >
209
+ > ```bash
210
+ > node -e "const f=require('fs');const s=f.readFileSync('lib/index.js','utf8'),r=f.readFileSync('tools/release.mjs','utf8');const P=[...r.matchAll(/\['([^']+)',\s*'([^']+)'\]/g)].map(m=>[m[1],m[2]]);const c=x=>P.reduce((a,[b,d])=>a.split(b).join(d),x);const d=s.match(/'dsh-auto-memory[^']*diagnose\.log'/)[0].slice(1,-1);console.log('诊断日志(发布名):',c(d));for(const k of ['hub-pre','evidence-pre','index-pre','semantic-pre','degrade-pre'])console.log(' ',k,'->',c(k))"
211
+ > ```
212
+ >
213
+ > 输出应为:`诊断日志(发布名): dsh-auto-memory-diagnose.log`,以及 `hub-pre -> hub`、`evidence-pre -> evidence`、
214
+ > `index-pre -> index`、`semantic-pre -> semantic-pre`、**`degrade-pre -> degrade-pre`**(最后一行就是「不能整体替换」的证据)。
191
215
 
192
216
  ### 5.3 「前端操作 → 后端确认」判定方法(通用三步)
193
217
 
194
- 1. **操作前**取基线快照:`GET /api/dsh-auto-memory-pre/config`(或 `state`)+ 记录相关文件条目数/修改时间
218
+ 1. **操作前**取基线快照:`GET /api/dsh-auto-memory/config`(或 `state`)+ 记录相关文件条目数/修改时间
195
219
  2. **在前端执行操作**(改开关、点按钮)
196
220
  3. **操作后再取**:对比配置值是否变化、端点返回是否变化、磁盘文件 mtime/条数是否变化
197
221
 
@@ -200,27 +224,37 @@ dsh web --no-open --port 0
200
224
  **示例(改 `memoryHubEnabled`)**:
201
225
 
202
226
  ```
203
- 改前:GET /config → memoryHubEnabled=false;hub-pre\*.json 无新写入
227
+ 改前:GET /config → memoryHubEnabled=false;memory/hub\*.json 无新写入
204
228
  前端:开启「记忆中枢」开关
205
- 改后:GET /config → memoryHubEnabled=true;对话若干轮后 hub-pre\*.json mtime 更新、条目增加
229
+ 改后:GET /config → memoryHubEnabled=true;对话若干轮后 memory/hub\*.json mtime 更新、条目增加
206
230
  ```
207
231
 
208
232
  ---
209
233
 
210
- ## 6. 工具(模型可调用,10 个)
234
+ ## 6. 工具(模型可调用,17 个)
211
235
 
212
- | 工具 | 作用 |
213
- |---|---|
214
- | `memory_recall_pre` | 记忆检索(默认返回 L0,`expand` 展开原文) |
215
- | `memory_read_pre` | 按锚点读取记忆原文 |
216
- | `memory_note_pre` | 写入记忆(含 `kind` 区分日志/笔记/白板 `plan`/账本 `handoff` 等) |
217
- | `memory_log_pre` | 记录日志条目 |
218
- | `memory_reflect_pre` | 生成反思 |
219
- | `memory_consolidate_pre` | 记忆巩固 |
220
- | `memory_maintain_pre` | 存储维护 |
221
- | `memory_status_pre` | 状态查询 |
222
- | `memory_user_pre` | 用户级记忆读写 |
223
- | `memory_external_pre` | 外部记忆源管理 |
236
+ > 下表给的是**发布名**;pre 树各加 `_pre` 后缀(`memory_recall` ↔ `memory_recall_pre`)。
237
+ > 自核(数一遍源码里的注册调用):`node -e "const s=require('fs').readFileSync('lib/index.js','utf8');const n=[...s.matchAll(/defineTool\('([a-z_]+)'/g)].map(m=>m[1]);console.log(n.length,'个:',n.sort().join(' '))"`
238
+
239
+ | 工具(发布名) | pre 树名 | 作用 |
240
+ |---|---|---|
241
+ | `memory_recall` | `memory_recall_pre` | 记忆检索(默认返回 L0,`expand` 展开原文) |
242
+ | `memory_read` | `memory_read_pre` | 按锚点读取记忆原文 |
243
+ | `memory_note` | `memory_note_pre` | 写入记忆(含 `kind` 区分日志/笔记/白板 `plan`/账本 `handoff` 等) |
244
+ | `memory_log` | `memory_log_pre` | 记录日志条目 |
245
+ | `memory_reflect` | `memory_reflect_pre` | 生成反思 |
246
+ | `memory_consolidate` | `memory_consolidate_pre` | 记忆巩固 |
247
+ | `memory_maintain` | `memory_maintain_pre` | 存储维护(30 天蒸馏) |
248
+ | `memory_status` | `memory_status_pre` | 状态查询 |
249
+ | `memory_user` | `memory_user_pre` | 用户级记忆读写 |
250
+ | `memory_external` | `memory_external_pre` | 外部记忆源管理(list / import) |
251
+ | `memory_procedure` | `memory_procedure_pre` | 流程(技能)直写:write 进审批列表 / activate 写入+晋升+激活 |
252
+ | `memory_expand` | `memory_expand_pre` | 白板结构化展开(需 `boardMode=graph`) |
253
+ | `memory_trace` | `memory_trace_pre` | 白板结构化回溯(需 `boardMode=graph`) |
254
+ | `calendar_add` | `calendar_add_pre` | 添加日历事项 |
255
+ | `calendar_list` | `calendar_list_pre` | 列出日历条目 |
256
+ | `calendar_done` | `calendar_done_pre` | 标记日历条目完成 |
257
+ | `calendar_remove` | `calendar_remove_pre` | 删除日历条目 |
224
258
 
225
259
  ---
226
260
 
@@ -228,6 +262,7 @@ dsh web --no-open --port 0
228
262
 
229
263
  > **通用前置**:`dsh web --no-open` 已启动;插件已装载;已确认端口并手动打开 UI。
230
264
  > **通用通过标准**:每一步都要有**证据**(截图 / 日志原文 / 数据快照)。禁止"看起来正常"这类无证据结论。
265
+ > ★**端点写法**:本节一律写发布名 `GET /api/dsh-auto-memory/xxx`;**在 pre 开发树里跑要换成 `/api/dsh-auto-memory-pre/xxx`**(别把手册里的写法当成 pre 树的写法)。工具名同理(`memory_recall` ↔ `memory_recall_pre`)。
231
266
 
232
267
  ### A. 启动与装载
233
268
 
@@ -235,14 +270,14 @@ dsh web --no-open --port 0
235
270
  |---|---|---|---|
236
271
  | A1 | — | `dsh web --no-open` | 终端打印监听地址;**没有自动弹出浏览器** |
237
272
  | A2 | A1 | 查看诊断日志与终端输出 | 无 `SyntaxError` / `ReferenceError` / 模块加载失败 |
238
- | A3 | A2 | `GET /api/dsh-auto-memory-pre/state` | 返回 200 且含状态字段 |
273
+ | A3 | A2 | `GET /api/dsh-auto-memory/state` | 返回 200 且含状态字段 |
239
274
 
240
275
  ### B. 记忆检索主流程
241
276
 
242
277
  | # | 步骤 | 通过标准 |
243
278
  |---|---|---|
244
- | B1 | 调用 `memory_recall_pre` 查一个常见主题 | 返回 L0 列表,含 `id`/`score`/`match_reason` |
245
- | B2 | 用返回的 `id` 调 `expand="mem_xxx"`(或 `memory_read_pre`) | 能取到对应原文,且**不串条** |
279
+ | B1 | 调用 `memory_recall` 查一个常见主题 | 返回 L0 列表,含 `id`/`score`/`match_reason` |
280
+ | B2 | 用返回的 `id` 调 `expand="mem_xxx"`(或 `memory_read`) | 能取到对应原文,且**不串条** |
246
281
  | B3 | **语义验证**:查一个词法不重合但语义相关的查询(如记忆里写"npm 发布报 ENEEDAUTH",查"发布凭证问题") | 能召回。若失败,切 `legacy` 融合再测对比;legacy 正常而 rrf 失败 = **P8 回归,停止** |
247
282
  | B4 | **时间臂验证**:查含时间表达的查询(如"上周"),再查一条不含时间词的同类查询做对照 | 含时间词 → 对应时间段条目排序上升;不含时间词 → 排序与对照一致(**零行为变更**) |
248
283
  | B5 | 异常:查一个明显不存在的主题 | 不报错,返回空或弱命中,不阻塞 |
@@ -258,16 +293,16 @@ dsh web --no-open --port 0
258
293
 
259
294
  | # | 步骤 | 通过标准 |
260
295
  |---|---|---|
261
- | D1 | `GET /api/dsh-auto-memory-pre/memory-hub` | 200,含 `policyVersion`/`stats`/三栏数据 |
296
+ | D1 | `GET /api/dsh-auto-memory/memory-hub` | 200,含 `policyVersion`/`stats`/三栏数据 |
262
297
  | D2 | 打开记忆窗格 → 记忆中枢页签 | 三栏有内容或正确空态 |
263
298
  | D3 | 关闭 `memoryHubEnabled` → 重载 → 对话若干轮 | 无新落盘;端点反映未启用 |
264
- | D4 | 重新开启 → 对话若干轮 | `hub-pre\*.json` 有新条目 |
299
+ | D4 | 重新开启 → 对话若干轮 | `memory/hub\*.json` 有新条目 |
265
300
 
266
301
  ### E. 证据链
267
302
 
268
303
  | # | 步骤 | 通过标准 |
269
304
  |---|---|---|
270
- | E1 | 对话若干轮后查看当日 `evidence-pre\events\*.jsonl` | 新增 `seen` 事件 |
305
+ | E1 | 对话若干轮后查看当日 `memory/evidence\events\*.jsonl` | 新增 `seen` 事件 |
271
306
  | E2 | 触发一次用户纠正(对话里说"不对,你记错了"之类) | 新增 `kind:"correction"` 事件(且归因到最近被 cite/read 的记忆) |
272
307
  | E3 | 异常:events 目录缺失/损坏 | 检索不报错(fail-soft),重要性取中性 |
273
308
 
@@ -284,7 +319,7 @@ dsh web --no-open --port 0
284
319
 
285
320
  | # | 步骤 | 通过标准 |
286
321
  |---|---|---|
287
- | G1 | 对话若干轮 | 工作区日志 `*.md` 有新条目;`hub-pre\*.json` 更新 |
322
+ | G1 | 对话若干轮 | 工作区日志 `*.md` 有新条目;`memory/hub\*.json` 更新 |
288
323
  | G2 | **重启 dsh web**(带 `--no-open`) | 数据 restore 不丢 |
289
324
  | G3 | 异常:磁盘不可写 | 不崩溃,日志有记录 |
290
325
 
@@ -321,7 +356,7 @@ node tests/smoke/smoke-test-continue-chain-pre.mjs # 58
321
356
  | 启动后 UI 空白/无插件入口 | 检查插件是否装载到 web profile;看诊断日志加载错误 |
322
357
  | 改了设置没效果 | 查 `/config` 是否回写;确认是否需要重载 |
323
358
  | recall 返回空 | 确认记忆目录有内容;确认 `semanticEngineMode` 与引擎可用;看日志降级记录 |
324
- | 证据不落盘 | 检查 `evidence-pre\events` 目录权限;确认相关开关 |
359
+ | 证据不落盘 | 检查 `memory/evidence\events` 目录权限;确认相关开关 |
325
360
  | 接续不触发 | 确认水位确实到 0.75;`autoContinueEnabled` 为 true |
326
361
  | 检索很慢 | 当前词法检索为全量扫描(无倒排索引,属已知待办) |
327
362
 
@@ -345,10 +380,11 @@ node tests/smoke/smoke-test-continue-chain-pre.mjs # 58
345
380
  | 工程根 | `D:\dsh-auto-memory` |
346
381
  | 宿主侧入口 | `lib/index.js` |
347
382
  | 浏览器侧入口 | `lib/client.js` |
348
- | 端点前缀 | `/api/dsh-auto-memory-pre/`(39 个) |
383
+ | 端点前缀 | `/api/dsh-auto-memory/`(49 条;pre 树 `/api/dsh-auto-memory-pre/`) |
349
384
  | 工具 | 10 个,`memory_*_pre` |
350
385
  | 记忆根 | `C:\Users\JH Z\.dsh\memory` |
351
- | 证据事件 | `...\evidence-pre\events\YYYY-MM-DD.jsonl`(时间戳在 `event.ts`) |
352
- | 诊断日志 | `...\dsh-auto-memory-pre-diagnose.log` |
353
- | M8 数据 | `...\hub-pre\{episodes,facts,procedures}.json` |
386
+ | 证据事件 | `...\memory\evidence\events\YYYY-MM-DD.jsonl`(时间戳在 `event.ts`) |
387
+ | 诊断日志 | `...\dsh-auto-memory-diagnose.log`(**与 `memory\` 同级**,不在其下) |
388
+ | M8 数据 | `...\memory\hub\{episodes,facts,procedures}.json` |
389
+ | 降级台账 | `...\memory\degrade-pre\latest.json`(★两条线同名,无发布名) |
354
390
  | 水位/接续阈值 | 0.75 / 0.75(**须低于官方压缩 0.80**) |
@@ -50,7 +50,7 @@
50
50
  - The version number in the panel title and in Settings → "Check for updates" both show the **installed** version.
51
51
  - A **floating pin** (line-drawn quick-access icon) also lives in the sidebar for one-click access to memory actions from anywhere.
52
52
  - Since DSH 0.1.2-rc.1 the Web UI sits behind a token gate (new token every restart; the `?token=…` URL in the startup log is your address). This plugin's HTTP endpoints are loopback-only and unaffected by the gate.
53
- - All data stays on your machine: `~/.dsh/memory/` (memory files), `~/.dsh/dsh-auto-memory-pre.json` (config; `dsh-auto-memory.json` in release builds).
53
+ - All data stays on your machine: `~/.dsh/memory/` (memory files), `~/.dsh/dsh-auto-memory.json` (config). **Note**: inside this repo's pre dev tree the same file carries a `-pre` suffix; the build you install from npm uses the suffix-less name. Same applies to every path below.
54
54
 
55
55
  ## 2. First launch
56
56
 
@@ -194,7 +194,7 @@ The static injection face: the `<memory_system>` block composed into every turn.
194
194
  | Item | Notes |
195
195
  |---|---|
196
196
  | Version / check for updates | Compares with the npm registry; registry installs get one-click updates. Local dev links show the update command `cd ~/.dsh/profiles/web && pnpm up @a9i5k4/dsh-auto-memory@latest` |
197
- | Diagnostics log | `~/.dsh/dsh-auto-memory-pre-diagnose.log` (subagent circuit-breaking, consolidation skips, GC, recall degradation — all in here) |
197
+ | Diagnostics log | `~/.dsh/dsh-auto-memory-diagnose.log` (subagent circuit-breaking, consolidation skips, GC, recall degradation — all in here; **it sits next to `memory/`, not inside it**) |
198
198
  | Community | QQ group feedback — faster than GitHub issues (link in README) |
199
199
 
200
200
  ---
@@ -250,7 +250,7 @@ Every decision lands in the **Recall review** tab for A/P/S/H/E grading. Every i
250
250
 
251
251
  ## 7. Evidence chain & memory importance
252
252
 
253
- Every memory keeps an auditable usage dossier — six event types, filed daily under `~/.dsh/memory/evidence-pre/events/YYYY-MM-DD.jsonl`:
253
+ Every memory keeps an auditable usage dossier — six event types, filed daily under `~/.dsh/memory/evidence/events/YYYY-MM-DD.jsonl` (this repo's pre dev tree uses `evidence-pre/`):
254
254
 
255
255
  | Event | Meaning |
256
256
  |---|---|
@@ -366,7 +366,7 @@ All three write tools (log/note/user) pass the **write gate**: GBK mojibake, stu
366
366
  | pnpm blocks a same-day update | pnpm v11 `minimumReleaseAge` blocks <24h packages: set `minimumReleaseAge: 0` or pin the version |
367
367
  | Web UI asks for a token | DSH 0.1.2-rc.1 security gate; the token is in the `dsh web` startup-log URL and rotates each restart |
368
368
  | Sidebar Memory button vanished | Likely a conflict with another sidebar-injecting plugin; disable the suspect in plugin management |
369
- | Feedback / grab logs | `~/.dsh/dsh-auto-memory-pre-diagnose.log`; QQ group in README |
369
+ | Feedback / grab logs | `~/.dsh/dsh-auto-memory-diagnose.log` (run `ls -l ~/.dsh/*diagnose*.log` first to confirm it is non-empty); QQ group in README |
370
370
 
371
371
  ---
372
372
 
@@ -374,16 +374,16 @@ All three write tools (log/note/user) pass the **write gate**: GBK mojibake, stu
374
374
 
375
375
  | Content | Path |
376
376
  |---|---|
377
- | Plugin config | `~/.dsh/dsh-auto-memory-pre.json` (`dsh-auto-memory.json` in release builds) |
377
+ | Plugin config | `~/.dsh/dsh-auto-memory.json` (this repo's pre dev tree uses `dsh-auto-memory-pre.json`) |
378
378
  | User-level memory | `~/.dsh/memory/MEMORY.md` |
379
379
  | Workspace memory | `~/.dsh/memory/workspaces/<workspace>/` (MEMORY.md, daily logs, handoff/, reflections/, summaries/) |
380
380
  | Whiteboard & ledgers | `~/.dsh/memory/workspaces/<workspace>/handoff/` (PLAN.md + handoff-*.md) |
381
- | Memory Hub layers | `~/.dsh/memory/hub-pre/` (episodes / facts / procedures .json, atomic writes) |
382
- | Evidence events | `~/.dsh/memory/evidence-pre/events/YYYY-MM-DD.jsonl` (six types, per day) |
383
- | Semantic-engine data | `~/.dsh/memory/semantic-pre/` (embedding-config.json, decision shadow logs, vector cache) |
381
+ | Memory Hub layers | `~/.dsh/memory/hub/` (episodes / facts / procedures .json, atomic writes; this repo's pre dev tree uses `hub-pre/`) |
382
+ | Evidence events | `~/.dsh/memory/evidence/events/YYYY-MM-DD.jsonl` (six types, per day; pre dev tree uses `evidence-pre/`) |
383
+ | Semantic-engine data | `~/.dsh/memory/semantic/` (embedding-config.json, decision shadow logs, vector cache; pre dev tree uses `semantic-pre/`) |
384
384
  | Models / venv | `~/.dsh/models/js-semantic/` (C2 model) · `~/.dsh/python-engine/` (C3 venv + model; plugin upgrades never touch these) |
385
385
  | Subagent trace backups | `~/.dsh/subagent-gc-backup/` (move back into `~/.dsh/sessions/` to roll back) |
386
- | Diagnostics log | `~/.dsh/dsh-auto-memory-pre-diagnose.log` |
386
+ | Diagnostics log | `~/.dsh/dsh-auto-memory-diagnose.log` (next to `memory/`, **not** inside it) |
387
387
 
388
388
  ---
389
389
 
@@ -50,7 +50,7 @@
50
50
  - 面板标题里的版本号与 设置 →「检查更新」显示的都是**当前安装的版本**。
51
51
  - 侧栏还有一颗**悬浮钉**(线描快捷入口),可从任何页面快速唤出记忆操作。
52
52
  - DSH 0.1.2-rc.1 起 Web UI 有 token 认证闸门(每次重启换新 token,启动日志里 `?token=…` 即访问地址);本插件的 HTTP 端点仅本机回环可访问,不受闸门影响。
53
- - 数据全在本机:`~/.dsh/memory/`(记忆文件)、`~/.dsh/dsh-auto-memory-pre.json`(配置,发布版为 `dsh-auto-memory.json`)。
53
+ - 数据全在本机:`~/.dsh/memory/`(记忆文件)、`~/.dsh/dsh-auto-memory.json`(配置)。**注意**:本仓库的 pre 开发树里同一个文件名带 `-pre` 后缀;你从 npm 装到的版本是**不带**后缀的那个,下面所有路径同理。
54
54
 
55
55
  ## 2. 第一次启动
56
56
 
@@ -194,7 +194,7 @@
194
194
  | 项 | 说明 |
195
195
  |---|---|
196
196
  | 插件版本 / 检查更新 | 与 npm registry 比对;registry 安装可一键更新。本地开发链接会显示更新命令 `cd ~/.dsh/profiles/web && pnpm up @a9i5k4/dsh-auto-memory@latest` |
197
- | 诊断日志 | `~/.dsh/dsh-auto-memory-pre-diagnose.log`(子代理熔断、巩固跳过、回收、唤起降级等事件全在内) |
197
+ | 诊断日志 | `~/.dsh/dsh-auto-memory-diagnose.log`(子代理熔断、巩固跳过、回收、唤起降级等事件全在内;**与 `memory/` 同级,不在 `memory/` 里面**) |
198
198
  | 交流群 | QQ 群反馈,响应比 issue 快(链接见 README) |
199
199
 
200
200
  ---
@@ -250,7 +250,7 @@
250
250
 
251
251
  ## 7. 证据链与记忆重要性
252
252
 
253
- 每条记忆都有可审计的使用档案,六类事件按日落盘 `~/.dsh/memory/evidence-pre/events/YYYY-MM-DD.jsonl`:
253
+ 每条记忆都有可审计的使用档案,六类事件按日落盘 `~/.dsh/memory/evidence/events/YYYY-MM-DD.jsonl`(本仓库 pre 开发树为 `evidence-pre/`):
254
254
 
255
255
  | 事件 | 含义 |
256
256
  |---|---|
@@ -366,7 +366,7 @@ AI 在对话中可直接调用(共 14 个,你不需要记):
366
366
  | pnpm 安装当天新版被拦 | pnpm v11 `minimumReleaseAge` 拦 24h 内新版:`minimumReleaseAge: 0` 或 pin 版本 |
367
367
  | Web UI 打开要 token | DSH 0.1.2-rc.1 起的安全闸门,token 在 `dsh web` 启动日志的 URL 里,重启即换 |
368
368
  | 侧栏插件按钮消失 | 可能与其他注入侧栏的插件冲突,到插件管理停用嫌疑插件 |
369
- | 想反馈 / 拿日志 | `~/.dsh/dsh-auto-memory-pre-diagnose.log`;QQ 群见 README |
369
+ | 想反馈 / 拿日志 | `~/.dsh/dsh-auto-memory-diagnose.log`(打包前先 `ls -l ~/.dsh/*diagnose*.log` 确认非空);QQ 群见 README |
370
370
 
371
371
  ---
372
372
 
@@ -374,16 +374,16 @@ AI 在对话中可直接调用(共 14 个,你不需要记):
374
374
 
375
375
  | 内容 | 路径 |
376
376
  |---|---|
377
- | 插件配置 | `~/.dsh/dsh-auto-memory-pre.json`(发布版 `dsh-auto-memory.json`) |
377
+ | 插件配置 | `~/.dsh/dsh-auto-memory.json`(本仓库 pre 开发树为 `dsh-auto-memory-pre.json`) |
378
378
  | 用户级记忆 | `~/.dsh/memory/MEMORY.md` |
379
379
  | 工作区记忆 | `~/.dsh/memory/workspaces/<工作区>/`(MEMORY.md、每日日志、handoff/、reflections/、summaries/) |
380
380
  | 白板与账本 | `~/.dsh/memory/workspaces/<工作区>/handoff/`(PLAN.md + handoff-*.md) |
381
- | 记忆中枢三层 | `~/.dsh/memory/hub-pre/`(episodes / facts / procedures .json,原子写) |
382
- | 证据事件 | `~/.dsh/memory/evidence-pre/events/YYYY-MM-DD.jsonl`(六类,按日) |
383
- | 语义引擎数据 | `~/.dsh/memory/semantic-pre/`(发射配置 embedding-config.json、决策影子日志、向量缓存) |
381
+ | 记忆中枢三层 | `~/.dsh/memory/hub/`(episodes / facts / procedures .json,原子写;本仓库 pre 开发树为 `hub-pre/`) |
382
+ | 证据事件 | `~/.dsh/memory/evidence/events/YYYY-MM-DD.jsonl`(六类,按日;本仓库 pre 开发树为 `evidence-pre/`) |
383
+ | 语义引擎数据 | `~/.dsh/memory/semantic/`(发射配置 embedding-config.json、决策影子日志、向量缓存;本仓库 pre 开发树为 `semantic-pre/`) |
384
384
  | 语义模型/venv | `~/.dsh/models/js-semantic/`(C2 模型)· `~/.dsh/python-engine/`(C3 venv+模型,升级插件不受影响) |
385
385
  | 子代理痕迹备份 | `~/.dsh/subagent-gc-backup/`(移回 `~/.dsh/sessions/` 即回滚) |
386
- | 诊断日志 | `~/.dsh/dsh-auto-memory-pre-diagnose.log` |
386
+ | 诊断日志 | `~/.dsh/dsh-auto-memory-diagnose.log`(与 `memory/` 同级,不在 `memory/` 里面) |
387
387
 
388
388
  ---
389
389
 
@@ -21,6 +21,7 @@ import { createAccessEvidencePre } from './context-bridge.js'
21
21
  import path from 'node:path'
22
22
  import { resolveDshHomeForEnginePre } from './dsh-home.js'
23
23
  import { buildSourceCatalog, loadCorpusSnapshot, CorpusRegistry, canonicalize } from './m4-corpus.js'
24
+ import { resolveProcedureInjectEnabledPre } from './procedure-switch.js'
24
25
 
25
26
  /** §11 capability 快照版本。 */
26
27
  export const CAPABILITY_SNAPSHOT_V1 = 'capability_v1'
@@ -327,7 +328,11 @@ export function createActivationHost(opts = {}) {
327
328
  const hub = engine._memoryHub
328
329
  if (!hub || !hub.stores || !hub.stores.procedures) return null
329
330
  if (engine.config.memoryHubEnabled !== true) return null
330
- if (engine.config.procedurePromotionEnabled === false) return null
331
+ // B-2:旧键 procedurePromotionEnabled 是**语义错配的兼容别名**(键名写的是「技能固化与晋升」,
332
+ // 实际控制的是「主动唤起」这条臂是否开启),统一交给接口契约模块 lib/procedure-switch.js
333
+ // 解析:新键 procedureInjectEnabled 优先,缺省回退旧键,两键都缺省按开启处理;
334
+ // 显式关闭过总闸的仍然在此短路。此处只替换开关解析口径,不新增任何前置条件。
335
+ if (!resolveProcedureInjectEnabledPre(engine.config)) return null
331
336
  const actives = hub.stores.procedures.activeProcedures()
332
337
  if (!actives.length) return null
333
338
  const candIds = new Set()