@a9i5k4/dsh-auto-memory 3.0.1 → 3.1.1

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 (134) hide show
  1. package/README.md +13 -8
  2. package/README.zh-CN.md +13 -8
  3. package/docs/HANDBOOK.md +92 -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 +1376 -255
  10. package/lib/config-io.js +59 -6
  11. package/lib/context-host.js +17 -2
  12. package/lib/episodic-store.js +90 -16
  13. package/lib/evidence-store.js +27 -1
  14. package/lib/fact-store.js +463 -41
  15. package/lib/hub-io.js +217 -0
  16. package/lib/index.js +904 -87
  17. package/lib/intent-clean-safe.js +1 -1
  18. package/lib/jsonl-tail-cursor.js +75 -0
  19. package/lib/m7-index-sync-host.js +4 -6
  20. package/lib/memory-hub.js +62 -7
  21. package/lib/migrate-pack.js +351 -0
  22. package/lib/note-status.js +9 -1
  23. package/lib/procedure-store.js +252 -31
  24. package/lib/procedure-switch.js +38 -0
  25. package/lib/python-setup.js +109 -27
  26. package/lib/python-sidecar-client.js +285 -8
  27. package/lib/recall-stats.js +242 -0
  28. package/lib/rules-layer.js +106 -15
  29. package/lib/semantic-js.js +25 -7
  30. package/lib/shadow-host.js +41 -2
  31. package/package.json +6 -2
  32. package/docs/internal/ACCEPT-35-LIVE.md +0 -143
  33. package/docs/internal/ACCEPTANCE-20260914.md +0 -90
  34. package/docs/internal/ARCH-REVIEW-BRIEF.md +0 -411
  35. package/docs/internal/ARCH-REVIEW-REQUEST.md +0 -201
  36. package/docs/internal/ARCH-REVIEW-ROUND2.md +0 -169
  37. package/docs/internal/ARCH-REVIEW-ROUND3.md +0 -206
  38. package/docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md +0 -397
  39. package/docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md +0 -351
  40. package/docs/internal/ART-DIRECTION-WIREFRAME.md +0 -191
  41. package/docs/internal/ART-DIRECTION-WIREFRAME.md.bak-superseded +0 -181
  42. package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +0 -314
  43. package/docs/internal/BATTLE-PLAN-20260917.md +0 -871
  44. package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +0 -192
  45. package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +0 -72
  46. package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +0 -131
  47. package/docs/internal/CUA-VISION-FIX-NOTES.md +0 -78
  48. package/docs/internal/DECISIONS-20260914-SESSION.md +0 -269
  49. package/docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md +0 -292
  50. package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +0 -219
  51. package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +0 -132
  52. package/docs/internal/FEATURE-INVENTORY.md +0 -531
  53. package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +0 -13
  54. package/docs/internal/G-SERIES-EXECUTION-20260917.md +0 -248
  55. package/docs/internal/G3-DESIGN-20260918.md +0 -82
  56. package/docs/internal/G3-DISK-FORMAT-GAP-20260919.md +0 -92
  57. package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +0 -74
  58. package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +0 -352
  59. package/docs/internal/GPT-REVIEW-PROMPT.md +0 -216
  60. package/docs/internal/GROUP-DIGEST-SETUP.md +0 -62
  61. package/docs/internal/GROUP-LISTENER-SETUP.md +0 -49
  62. package/docs/internal/GROUP-WEBHOOK-SETUP.md +0 -93
  63. package/docs/internal/HANDOFF-TO-ZCODE-20260920.md +0 -309
  64. package/docs/internal/HANDOFF-TO-ZCODE.md +0 -168
  65. package/docs/internal/HERMES-DATA-VERIFICATION-20260919.md +0 -120
  66. package/docs/internal/HERMES-LEGACY-STATUS-20260919.md +0 -74
  67. package/docs/internal/ISSUE-55-58-VERIFICATION-20260918.md +0 -175
  68. package/docs/internal/ISSUE10-FIX-EXECUTION-20260919.md +0 -389
  69. package/docs/internal/ISSUE10-PLAN-20260919.md +0 -254
  70. package/docs/internal/ISSUE10B-FORENSICS-20260919.md +0 -468
  71. package/docs/internal/ISSUE9-PURGE-AND-R1-PLAIN-20260919.md +0 -150
  72. package/docs/internal/ISSUE9-RESIDUAL-FORENSICS-20260919.md +0 -114
  73. package/docs/internal/KICKOFF-P0.md +0 -254
  74. package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +0 -79
  75. package/docs/internal/MASTER-PLAN-3.0.md +0 -411
  76. package/docs/internal/MEMORY-GOVERNANCE-20260917.md +0 -309
  77. package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +0 -85
  78. package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +0 -222
  79. package/docs/internal/NEXT-VERSION-TODO.md +0 -95
  80. package/docs/internal/OFFICIAL-DISCUSSION-DRAFT.md +0 -80
  81. package/docs/internal/PENDING-FIXES-20260916.md +0 -289
  82. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md +0 -705
  83. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md.bak-s10 +0 -649
  84. package/docs/internal/PROCEDURAL-MEMORY-AND-APPROVAL-DESIGN-20260918.md +0 -225
  85. package/docs/internal/PROGRESS-20260917.md +0 -93
  86. package/docs/internal/PROMPT-GAP-AUDIT-20260920.md +0 -128
  87. package/docs/internal/R1-DEGRADE-AUDIT-20260918.md +0 -163
  88. package/docs/internal/R1-READABILITY-FORENSICS-20260919.md +0 -127
  89. package/docs/internal/R2-EVIDENCE-DEEP-AUDIT-20260918.md +0 -140
  90. package/docs/internal/R3-DEGRADE-LEDGER-DESIGN-20260918.md +0 -138
  91. package/docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md +0 -218
  92. package/docs/internal/RAG-KARPATHY-PROGRAM.md +0 -229
  93. package/docs/internal/RELEASE-PROCESS.md +0 -99
  94. package/docs/internal/REPORT-P0-NIGHTLY.md +0 -212
  95. package/docs/internal/REPORT-P5-ACCEPTANCE.md +0 -31
  96. package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +0 -153
  97. package/docs/internal/RESUME-20260918.md +0 -171
  98. package/docs/internal/RESUME-20260919.md +0 -104
  99. package/docs/internal/REVIEW-WB-GRAPH-SELF.md +0 -81
  100. package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +0 -198
  101. package/docs/internal/ROADMAP-20260917-WEEK.md +0 -439
  102. package/docs/internal/ROADMAP.md +0 -106
  103. package/docs/internal/RUN-P0-NIGHTLY.md +0 -227
  104. package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +0 -185
  105. package/docs/internal/S10-GAP-INVENTORY-20260917.md +0 -239
  106. package/docs/internal/S10-GAPS-PLAIN-20260917.md +0 -125
  107. package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +0 -360
  108. package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +0 -90
  109. package/docs/internal/SUBAGENT-REPORT-ROUTING-PRE-RESEARCH.md +0 -261
  110. package/docs/internal/T6-EXECUTION-20260920.md +0 -130
  111. package/docs/internal/TELEMETRY-EFFECT-REPORT-DESIGN-20260918.md +0 -146
  112. package/docs/internal/THESIS-GAP-ANALYSIS-20260918.md +0 -89
  113. package/docs/internal/THESIS-OUTLINE-20260918.md +0 -147
  114. package/docs/internal/THREE-LAYER-CONTRACT.md +0 -219
  115. package/docs/internal/TODO-BACKLOG.md +0 -263
  116. package/docs/internal/TODO-GRAPH.html +0 -715
  117. package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +0 -493
  118. package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +0 -710
  119. package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +0 -710
  120. package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +0 -703
  121. package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +0 -710
  122. package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +0 -715
  123. package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +0 -297
  124. package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +0 -104
  125. package/docs/internal/WB-FORMAT-CONVENTION.md +0 -112
  126. package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +0 -71
  127. package/docs/internal/WB-GRAPH-INTEGRATION-PLAN.md +0 -386
  128. package/docs/internal/WB-GRAPH-RESEARCH-BRIEF.md +0 -118
  129. package/docs/internal/WB-GRAPH-RESEARCH-EXTERNAL.md +0 -228
  130. package/docs/internal/WB-GRAPH-RESEARCH-LOCAL.md +0 -190
  131. package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +0 -56
  132. package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +0 -787
  133. package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +0 -112
  134. 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 工具)。本插件注册 **18 个**;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/`),共 53 条 |
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
+ │ · 端点路由(53 个) │
82
+ │ · 工具(18 个,供模型调用) │
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` 注册,共 **53** 条,前缀 `/api/dsh-auto-memory/`)
166
173
 
167
174
  | 端点 | 用途 | 关键返回字段 |
168
175
  |---|---|---|
@@ -171,27 +178,47 @@ 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` | 存储管理 | 文件/统计 |
178
185
  | `workspaces` | 工作区列表 | 工作区标识 |
179
186
  | `update` / `update-check` | 更新 | 版本信息 |
187
+ | `migrate-export` | **迁移搬包:导出本工作区**(POST,`outPath` 可选) | `path` / `stats` / `checksum` |
188
+ | `migrate-inspect` | **迁移搬包:预演差异**(POST,`packPath`;**只读,不写任何文件**) | `plan`(`pathChanged` / `additions` / `overwrites` / `rewrite`) |
189
+ | `migrate-import` | **迁移搬包:确认导入**(POST,`packPath` / `onConflict`) | `written` / `backup` / `summaryAction` |
180
190
  | `calendar`、`file`、`browse-dir`、`external*`、`summarize`、`shadow-recent`、`subagent-gc`、`greet` | 其余辅助端点 | — |
181
191
 
182
- > 端点名以代码为准:`grep -oE "'/api/dsh-auto-memory-pre/[a-z0-9-]+'" lib/index.js | sort -u`
192
+ > 端点名与条数以代码为准(**一条命令自核**,`50` 与 `/api/dsh-auto-memory/` 都由它推出,不是写死的):
193
+ >
194
+ > ```bash
195
+ > 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('/')+'/')"
196
+ > ```
197
+ >
198
+ > 在工程根执行,输出应为 `端点条数: 53` / `发布名前缀: /api/dsh-auto-memory/`。命令读的是**源码 + 发布转换表**,所以两条线的拼写都能对上。
183
199
 
184
200
  ### 5.2 日志
185
201
 
186
- - **诊断日志**:`C:\Users\JH Z\.dsh\memory\dsh-auto-memory-pre-diagnose.log`
202
+ - **诊断日志**:`~/.dsh/dsh-auto-memory-diagnose.log`(Windows:`%USERPROFILE%\.dsh\dsh-auto-memory-diagnose.log`)
203
+ - **★它不在 `memory/` 下面**:代码是 `path.join(dshHome(), 'dsh-auto-memory-pre-diagnose.log')`(pre 树),无 `'memory'` 段
187
204
  - 关键线索:插件加载异常、`diag(...)` 输出的降级与状态(如 `hub success evidence: +N`、`p9a correction attribution: ...`)
188
- - **证据事件**:`C:\Users\JH Z\.dsh\memory\evidence-pre\events\YYYY-MM-DD.jsonl`
205
+ - **证据事件**:`~/.dsh/memory/evidence/events/YYYY-MM-DD.jsonl`(pre 树为 `~/.dsh/memory/evidence-pre/events/`)
189
206
  - 单行结构(实测):顶层 `kind` / `memoryId` / `recordedAt` / `anchorId` …,**时间戳在 `event.ts`**(顶层无 `ts`/`createdAt`)
190
- - **M8 数据**:`C:\Users\JH Z\.dsh\memory\hub-pre\{episodes,facts,procedures}.json`(原子写)
207
+ - **M8 数据**:`~/.dsh/memory/hub/{episodes,facts,procedures}.json`(原子写;pre 树为 `memory/hub-pre/`)
208
+ - **降级台账**:`~/.dsh/memory/degrade-pre/latest.json` —— ★**这条没有发布名,两条线都叫 `degrade-pre`**,见下方自核
209
+
210
+ > **一条命令自核上面 4 条路径的「发布名」**(读源码 + 发布转换表,所以两条线都对得上):
211
+ >
212
+ > ```bash
213
+ > 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))"
214
+ > ```
215
+ >
216
+ > 输出应为:`诊断日志(发布名): dsh-auto-memory-diagnose.log`,以及 `hub-pre -> hub`、`evidence-pre -> evidence`、
217
+ > `index-pre -> index`、`semantic-pre -> semantic-pre`、**`degrade-pre -> degrade-pre`**(最后一行就是「不能整体替换」的证据)。
191
218
 
192
219
  ### 5.3 「前端操作 → 后端确认」判定方法(通用三步)
193
220
 
194
- 1. **操作前**取基线快照:`GET /api/dsh-auto-memory-pre/config`(或 `state`)+ 记录相关文件条目数/修改时间
221
+ 1. **操作前**取基线快照:`GET /api/dsh-auto-memory/config`(或 `state`)+ 记录相关文件条目数/修改时间
195
222
  2. **在前端执行操作**(改开关、点按钮)
196
223
  3. **操作后再取**:对比配置值是否变化、端点返回是否变化、磁盘文件 mtime/条数是否变化
197
224
 
@@ -200,27 +227,38 @@ dsh web --no-open --port 0
200
227
  **示例(改 `memoryHubEnabled`)**:
201
228
 
202
229
  ```
203
- 改前:GET /config → memoryHubEnabled=false;hub-pre\*.json 无新写入
230
+ 改前:GET /config → memoryHubEnabled=false;memory/hub\*.json 无新写入
204
231
  前端:开启「记忆中枢」开关
205
- 改后:GET /config → memoryHubEnabled=true;对话若干轮后 hub-pre\*.json mtime 更新、条目增加
232
+ 改后:GET /config → memoryHubEnabled=true;对话若干轮后 memory/hub\*.json mtime 更新、条目增加
206
233
  ```
207
234
 
208
235
  ---
209
236
 
210
- ## 6. 工具(模型可调用,10 个)
237
+ ## 6. 工具(模型可调用,18 个)
211
238
 
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` | 外部记忆源管理 |
239
+ > 下表给的是**发布名**;pre 树各加 `_pre` 后缀(`memory_recall` ↔ `memory_recall_pre`)。
240
+ > 自核(数一遍源码里的注册调用):`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(' '))"`
241
+
242
+ | 工具(发布名) | pre 树名 | 作用 |
243
+ |---|---|---|
244
+ | `memory_recall` | `memory_recall_pre` | 记忆检索(默认返回 L0,`expand` 展开原文) |
245
+ | `memory_read` | `memory_read_pre` | 按锚点读取记忆原文 |
246
+ | `memory_note` | `memory_note_pre` | 写入记忆(含 `kind` 区分日志/笔记/白板 `plan`/账本 `handoff` 等) |
247
+ | `memory_log` | `memory_log_pre` | 记录日志条目 |
248
+ | `memory_reflect` | `memory_reflect_pre` | 生成反思 |
249
+ | `memory_consolidate` | `memory_consolidate_pre` | 记忆巩固 |
250
+ | `memory_maintain` | `memory_maintain_pre` | 存储维护(30 天蒸馏) |
251
+ | `memory_status` | `memory_status_pre` | 状态查询 |
252
+ | `memory_user` | `memory_user_pre` | 用户级记忆读写 |
253
+ | `memory_external` | `memory_external_pre` | 外部记忆源管理(list / import) |
254
+ | `memory_procedure` | `memory_procedure_pre` | 流程(技能)直写:write 进审批列表 / activate 写入+晋升+激活 |
255
+ | `memory_rules` | `memory_rules_pre` | 用户级硬约束的条目级增删改:list / add / update / remove(删改须带 `expect` 内容锚定) |
256
+ | `memory_expand` | `memory_expand_pre` | 白板结构化展开(需 `boardMode=graph`) |
257
+ | `memory_trace` | `memory_trace_pre` | 白板结构化回溯(需 `boardMode=graph`) |
258
+ | `calendar_add` | `calendar_add_pre` | 添加日历事项 |
259
+ | `calendar_list` | `calendar_list_pre` | 列出日历条目 |
260
+ | `calendar_done` | `calendar_done_pre` | 标记日历条目完成 |
261
+ | `calendar_remove` | `calendar_remove_pre` | 删除日历条目 |
224
262
 
225
263
  ---
226
264
 
@@ -228,6 +266,7 @@ dsh web --no-open --port 0
228
266
 
229
267
  > **通用前置**:`dsh web --no-open` 已启动;插件已装载;已确认端口并手动打开 UI。
230
268
  > **通用通过标准**:每一步都要有**证据**(截图 / 日志原文 / 数据快照)。禁止"看起来正常"这类无证据结论。
269
+ > ★**端点写法**:本节一律写发布名 `GET /api/dsh-auto-memory/xxx`;**在 pre 开发树里跑要换成 `/api/dsh-auto-memory-pre/xxx`**(别把手册里的写法当成 pre 树的写法)。工具名同理(`memory_recall` ↔ `memory_recall_pre`)。
231
270
 
232
271
  ### A. 启动与装载
233
272
 
@@ -235,14 +274,14 @@ dsh web --no-open --port 0
235
274
  |---|---|---|---|
236
275
  | A1 | — | `dsh web --no-open` | 终端打印监听地址;**没有自动弹出浏览器** |
237
276
  | A2 | A1 | 查看诊断日志与终端输出 | 无 `SyntaxError` / `ReferenceError` / 模块加载失败 |
238
- | A3 | A2 | `GET /api/dsh-auto-memory-pre/state` | 返回 200 且含状态字段 |
277
+ | A3 | A2 | `GET /api/dsh-auto-memory/state` | 返回 200 且含状态字段 |
239
278
 
240
279
  ### B. 记忆检索主流程
241
280
 
242
281
  | # | 步骤 | 通过标准 |
243
282
  |---|---|---|
244
- | B1 | 调用 `memory_recall_pre` 查一个常见主题 | 返回 L0 列表,含 `id`/`score`/`match_reason` |
245
- | B2 | 用返回的 `id` 调 `expand="mem_xxx"`(或 `memory_read_pre`) | 能取到对应原文,且**不串条** |
283
+ | B1 | 调用 `memory_recall` 查一个常见主题 | 返回 L0 列表,含 `id`/`score`/`match_reason` |
284
+ | B2 | 用返回的 `id` 调 `expand="mem_xxx"`(或 `memory_read`) | 能取到对应原文,且**不串条** |
246
285
  | B3 | **语义验证**:查一个词法不重合但语义相关的查询(如记忆里写"npm 发布报 ENEEDAUTH",查"发布凭证问题") | 能召回。若失败,切 `legacy` 融合再测对比;legacy 正常而 rrf 失败 = **P8 回归,停止** |
247
286
  | B4 | **时间臂验证**:查含时间表达的查询(如"上周"),再查一条不含时间词的同类查询做对照 | 含时间词 → 对应时间段条目排序上升;不含时间词 → 排序与对照一致(**零行为变更**) |
248
287
  | B5 | 异常:查一个明显不存在的主题 | 不报错,返回空或弱命中,不阻塞 |
@@ -258,16 +297,16 @@ dsh web --no-open --port 0
258
297
 
259
298
  | # | 步骤 | 通过标准 |
260
299
  |---|---|---|
261
- | D1 | `GET /api/dsh-auto-memory-pre/memory-hub` | 200,含 `policyVersion`/`stats`/三栏数据 |
300
+ | D1 | `GET /api/dsh-auto-memory/memory-hub` | 200,含 `policyVersion`/`stats`/三栏数据 |
262
301
  | D2 | 打开记忆窗格 → 记忆中枢页签 | 三栏有内容或正确空态 |
263
302
  | D3 | 关闭 `memoryHubEnabled` → 重载 → 对话若干轮 | 无新落盘;端点反映未启用 |
264
- | D4 | 重新开启 → 对话若干轮 | `hub-pre\*.json` 有新条目 |
303
+ | D4 | 重新开启 → 对话若干轮 | `memory/hub\*.json` 有新条目 |
265
304
 
266
305
  ### E. 证据链
267
306
 
268
307
  | # | 步骤 | 通过标准 |
269
308
  |---|---|---|
270
- | E1 | 对话若干轮后查看当日 `evidence-pre\events\*.jsonl` | 新增 `seen` 事件 |
309
+ | E1 | 对话若干轮后查看当日 `memory/evidence\events\*.jsonl` | 新增 `seen` 事件 |
271
310
  | E2 | 触发一次用户纠正(对话里说"不对,你记错了"之类) | 新增 `kind:"correction"` 事件(且归因到最近被 cite/read 的记忆) |
272
311
  | E3 | 异常:events 目录缺失/损坏 | 检索不报错(fail-soft),重要性取中性 |
273
312
 
@@ -284,7 +323,7 @@ dsh web --no-open --port 0
284
323
 
285
324
  | # | 步骤 | 通过标准 |
286
325
  |---|---|---|
287
- | G1 | 对话若干轮 | 工作区日志 `*.md` 有新条目;`hub-pre\*.json` 更新 |
326
+ | G1 | 对话若干轮 | 工作区日志 `*.md` 有新条目;`memory/hub\*.json` 更新 |
288
327
  | G2 | **重启 dsh web**(带 `--no-open`) | 数据 restore 不丢 |
289
328
  | G3 | 异常:磁盘不可写 | 不崩溃,日志有记录 |
290
329
 
@@ -321,7 +360,7 @@ node tests/smoke/smoke-test-continue-chain-pre.mjs # 58
321
360
  | 启动后 UI 空白/无插件入口 | 检查插件是否装载到 web profile;看诊断日志加载错误 |
322
361
  | 改了设置没效果 | 查 `/config` 是否回写;确认是否需要重载 |
323
362
  | recall 返回空 | 确认记忆目录有内容;确认 `semanticEngineMode` 与引擎可用;看日志降级记录 |
324
- | 证据不落盘 | 检查 `evidence-pre\events` 目录权限;确认相关开关 |
363
+ | 证据不落盘 | 检查 `memory/evidence\events` 目录权限;确认相关开关 |
325
364
  | 接续不触发 | 确认水位确实到 0.75;`autoContinueEnabled` 为 true |
326
365
  | 检索很慢 | 当前词法检索为全量扫描(无倒排索引,属已知待办) |
327
366
 
@@ -345,10 +384,11 @@ node tests/smoke/smoke-test-continue-chain-pre.mjs # 58
345
384
  | 工程根 | `D:\dsh-auto-memory` |
346
385
  | 宿主侧入口 | `lib/index.js` |
347
386
  | 浏览器侧入口 | `lib/client.js` |
348
- | 端点前缀 | `/api/dsh-auto-memory-pre/`(39 个) |
387
+ | 端点前缀 | `/api/dsh-auto-memory/`(53 条;pre 树 `/api/dsh-auto-memory-pre/`) |
349
388
  | 工具 | 10 个,`memory_*_pre` |
350
389
  | 记忆根 | `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` |
390
+ | 证据事件 | `...\memory\evidence\events\YYYY-MM-DD.jsonl`(时间戳在 `event.ts`) |
391
+ | 诊断日志 | `...\dsh-auto-memory-diagnose.log`(**与 `memory\` 同级**,不在其下) |
392
+ | M8 数据 | `...\memory\hub\{episodes,facts,procedures}.json` |
393
+ | 降级台账 | `...\memory\degrade-pre\latest.json`(★两条线同名,无发布名) |
354
394
  | 水位/接续阈值 | 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()