@theseus-whale/dsh-continuity 0.0.0-stage → 4.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/INSTALL.md +25 -0
  2. package/PANEL.md +92 -0
  3. package/README.md +286 -2
  4. package/RELEASE-NOTES.md +732 -0
  5. package/bin/bc-acceptance-full.mjs +91 -0
  6. package/bin/bc-acceptance-tight.mjs +66 -0
  7. package/bin/bc-acceptance.mjs +22 -0
  8. package/bin/bc-add-keywords.mjs +21 -0
  9. package/bin/bc-demo.mjs +47 -0
  10. package/bin/bc-expand-hint.mjs +179 -0
  11. package/bin/bc-ingest-index.mjs +35 -0
  12. package/bin/bc-ingest.mjs +31 -0
  13. package/bin/bc-label-demo.mjs +18 -0
  14. package/bin/bc-relabel.mjs +150 -0
  15. package/bin/bc-sessionize.mjs +59 -0
  16. package/bin/coref_pipeline.py +47 -0
  17. package/bin/coref_service.py +57 -0
  18. package/bin/debug_ckip.py +16 -0
  19. package/bin/debug_ner_zh.py +18 -0
  20. package/bin/doctor.mjs +275 -0
  21. package/bin/en_ner_error_audit.py +33 -0
  22. package/bin/eval-label-rules.mjs +342 -0
  23. package/bin/export-turns.py +68 -0
  24. package/bin/extract-user-paragraph.mjs +14 -0
  25. package/bin/extraction-composite-smoke.mjs +28 -0
  26. package/bin/extraction-latency.mjs +58 -0
  27. package/bin/extraction-user-smoke.mjs +28 -0
  28. package/bin/extraction_service.py +164 -0
  29. package/bin/facet-active-experiment.mjs +110 -0
  30. package/bin/facet-covid.mjs +8 -0
  31. package/bin/facet-curve.mjs +27 -0
  32. package/bin/facet-embedding-train.mjs +20 -0
  33. package/bin/facet-embedding-validate.mjs +83 -0
  34. package/bin/facet-eval-roleplay.mjs +42 -0
  35. package/bin/facet-eval.mjs +38 -0
  36. package/bin/facet-fold.mjs +31 -0
  37. package/bin/facet-load.mjs +16 -0
  38. package/bin/facet-mlp-scan.mjs +45 -0
  39. package/bin/facet-mvp.mjs +34 -0
  40. package/bin/facet-online-experiments.mjs +78 -0
  41. package/bin/facet-online-race.mjs +99 -0
  42. package/bin/facet-online-validate.mjs +51 -0
  43. package/bin/facet-panel.mjs +22 -0
  44. package/bin/facet-passage.mjs +41 -0
  45. package/bin/facet-random-validate.mjs +48 -0
  46. package/bin/facet-roleplay.mjs +33 -0
  47. package/bin/facet-scan.mjs +56 -0
  48. package/bin/facet-segment.mjs +34 -0
  49. package/bin/facet-train.mjs +19 -0
  50. package/bin/facet-validate.mjs +103 -0
  51. package/bin/facet-zeroshot.mjs +14 -0
  52. package/bin/install-templates.mjs +72 -0
  53. package/bin/memory-bench.mjs +53 -0
  54. package/bin/memory-build-summary.mjs +43 -0
  55. package/bin/memory-build-vector.mjs +31 -0
  56. package/bin/memory-build.mjs +41 -0
  57. package/bin/memory-calibration.mjs +70 -0
  58. package/bin/memory-closed-loop.mjs +119 -0
  59. package/bin/memory-dry-run.mjs +70 -0
  60. package/bin/memory-eval.mjs +104 -0
  61. package/bin/memory-event-alias-test.mjs +89 -0
  62. package/bin/memory-extraction-bench.mjs +58 -0
  63. package/bin/memory-load-gate-replay.mjs +137 -0
  64. package/bin/memory-loop-test.mjs +90 -0
  65. package/bin/memory-pre-turn-harness.mjs +63 -0
  66. package/bin/memory-query.mjs +39 -0
  67. package/bin/memory-replay-hints.mjs +84 -0
  68. package/bin/memory-scale.mjs +58 -0
  69. package/bin/memory-scenario-test.mjs +146 -0
  70. package/bin/memory-user-loop.mjs +95 -0
  71. package/bin/ner_bench_tiny_zh.py +59 -0
  72. package/bin/ner_bench_zh.py +60 -0
  73. package/bin/ner_conll_en.py +139 -0
  74. package/bin/ner_direct_en.py +123 -0
  75. package/bin/ner_direct_zh.py +100 -0
  76. package/bin/ner_pipeline.py +208 -0
  77. package/bin/noise-selfcheck.mjs +50 -0
  78. package/bin/pack-integrity.mjs +47 -0
  79. package/bin/panel-check.mjs +57 -0
  80. package/bin/plugin-integrity.mjs +74 -0
  81. package/bin/preview-live.mjs +13 -0
  82. package/bin/public-install-check.mjs +222 -0
  83. package/bin/relabel-apply.mjs +272 -0
  84. package/bin/relabel-dry-run.mjs +381 -0
  85. package/bin/relik_pipeline.py +39 -0
  86. package/bin/relik_service.py +52 -0
  87. package/bin/srl_pipeline.py +55 -0
  88. package/bin/srl_service.py +68 -0
  89. package/bin/summary-index.mjs +151 -0
  90. package/bin/summary-query.mjs +79 -0
  91. package/bin/vec-check.mjs +27 -0
  92. package/bin/zh_ner_error_audit.py +36 -0
  93. package/bin/zh_ner_slot_eval.py +38 -0
  94. package/client.js +760 -0
  95. package/cordis.patch.yml +378 -0
  96. package/docs/API-NOTES.md +1743 -0
  97. package/docs/ARCHITECTURE.md +355 -0
  98. package/docs/CACHE.md +253 -0
  99. package/docs/CONDUCT.md +30 -0
  100. package/docs/CREATOR-HANDOFF.md +102 -0
  101. package/docs/EXPERIMENT.md +136 -0
  102. package/docs/FACET-MVP-REPORT.md +473 -0
  103. package/docs/GUIDE-0.4.66.md +195 -0
  104. package/docs/GUIDE.md +127 -0
  105. package/docs/MECHANISM.md +243 -0
  106. package/docs/NEW-INSTANCE-HANDOFF.md +219 -0
  107. package/docs/README.md +37 -0
  108. package/docs/SESSION-LAYOUT.md +151 -0
  109. package/docs/history-map.md +249 -0
  110. package/docs/relabel-migration-wiring.md +366 -0
  111. package/guides/00-READ-FIRST.md +206 -0
  112. package/guides/01-INSTALL.md +207 -0
  113. package/guides/02-TABLES.md +225 -0
  114. package/guides/03-AUDIT.md +201 -0
  115. package/guides/04-REBUILD.md +306 -0
  116. package/guides/05-FIRST-RUN.md +191 -0
  117. package/guides/06-EMBEDDING.md +146 -0
  118. package/guides/07-PTC-AND-ASSETS.md +221 -0
  119. package/icon.svg +7 -0
  120. package/locale/en.json +6 -0
  121. package/locale/zh.json +6 -0
  122. package/models/README.md +13 -0
  123. package/models/Xenova/bge-small-zh-v1.5/config.json +31 -0
  124. package/models/Xenova/bge-small-zh-v1.5/onnx/model_quantized.onnx +0 -0
  125. package/models/Xenova/bge-small-zh-v1.5/tokenizer.json +21278 -0
  126. package/models/Xenova/bge-small-zh-v1.5/tokenizer_config.json +15 -0
  127. package/package.json +139 -4
  128. package/src/asset-tool.mjs +237 -0
  129. package/src/assets.mjs +244 -0
  130. package/src/backfill.mjs +74 -0
  131. package/src/backup.mjs +80 -0
  132. package/src/deadend.mjs +95 -0
  133. package/src/deleted-store.mjs +35 -0
  134. package/src/engine.mjs +3831 -0
  135. package/src/facets/classifier.mjs +146 -0
  136. package/src/facets/embedding-service.mjs +53 -0
  137. package/src/facets/embedding-worker.mjs +27 -0
  138. package/src/facets/embedding.mjs +163 -0
  139. package/src/facets/extract.mjs +80 -0
  140. package/src/facets/fold-plan.mjs +84 -0
  141. package/src/facets/hybrid.mjs +29 -0
  142. package/src/facets/index.mjs +113 -0
  143. package/src/facets/linear-probe.mjs +43 -0
  144. package/src/facets/load.mjs +37 -0
  145. package/src/facets/mlp-probe.mjs +54 -0
  146. package/src/facets/mlp-service.mjs +53 -0
  147. package/src/facets/mlp-worker.mjs +26 -0
  148. package/src/facets/online-knn.mjs +58 -0
  149. package/src/facets/online-models.mjs +227 -0
  150. package/src/facets/panel-state.mjs +23 -0
  151. package/src/facets/panel.mjs +73 -0
  152. package/src/facets/random.mjs +26 -0
  153. package/src/facets/scanner.mjs +35 -0
  154. package/src/facets/schema.mjs +75 -0
  155. package/src/facets/seed-examples.mjs +58 -0
  156. package/src/facets/sensitivity.mjs +98 -0
  157. package/src/facets/service.mjs +53 -0
  158. package/src/facets/store.mjs +39 -0
  159. package/src/facets/worker.mjs +23 -0
  160. package/src/folds-store.mjs +109 -0
  161. package/src/groups.mjs +167 -0
  162. package/src/handoff-tool.mjs +51 -0
  163. package/src/handoff.mjs +127 -0
  164. package/src/index.mjs +649 -0
  165. package/src/inject-policy.mjs +17 -0
  166. package/src/learning.mjs +88 -0
  167. package/src/memory/alias-proposal.mjs +40 -0
  168. package/src/memory/bc-audit.mjs +245 -0
  169. package/src/memory/bc-index-updater.mjs +404 -0
  170. package/src/memory/bc-index.mjs +48 -0
  171. package/src/memory/bc-label.mjs +220 -0
  172. package/src/memory/bc-panel-state.mjs +107 -0
  173. package/src/memory/bc-pre-step.mjs +463 -0
  174. package/src/memory/bc-recall.mjs +470 -0
  175. package/src/memory/bc-shift.mjs +123 -0
  176. package/src/memory/bc-store.mjs +41 -0
  177. package/src/memory/bm25.mjs +112 -0
  178. package/src/memory/calibration.mjs +54 -0
  179. package/src/memory/chatter.mjs +29 -0
  180. package/src/memory/cmap-file.mjs +107 -0
  181. package/src/memory/concepts-file.mjs +41 -0
  182. package/src/memory/coref-slots.mjs +40 -0
  183. package/src/memory/event-alias-ledger.mjs +87 -0
  184. package/src/memory/event-log.mjs +95 -0
  185. package/src/memory/event-model.mjs +132 -0
  186. package/src/memory/event-segmenter.mjs +36 -0
  187. package/src/memory/event-summary-tree.mjs +122 -0
  188. package/src/memory/extraction-adapter.mjs +76 -0
  189. package/src/memory/extraction-composite.mjs +75 -0
  190. package/src/memory/extraction-core.mjs +76 -0
  191. package/src/memory/extraction-pre-step.mjs +161 -0
  192. package/src/memory/extraction-provider.mjs +300 -0
  193. package/src/memory/extraction-score.mjs +36 -0
  194. package/src/memory/facet-stabilizer.mjs +59 -0
  195. package/src/memory/history-map.mjs +139 -0
  196. package/src/memory/language-router.mjs +30 -0
  197. package/src/memory/load-gate.mjs +161 -0
  198. package/src/memory/mechanical-note.mjs +104 -0
  199. package/src/memory/onboarding.mjs +163 -0
  200. package/src/memory/persona.mjs +78 -0
  201. package/src/memory/planner.mjs +249 -0
  202. package/src/memory/pre-turn.mjs +80 -0
  203. package/src/memory/query-aliases.mjs +39 -0
  204. package/src/memory/recall-cue.mjs +43 -0
  205. package/src/memory/recall.mjs +65 -0
  206. package/src/memory/referent-candidates.mjs +55 -0
  207. package/src/memory/referent-ledger.mjs +86 -0
  208. package/src/memory/relabel-migrate.mjs +376 -0
  209. package/src/memory/relik-adapter.mjs +25 -0
  210. package/src/memory/special-keywords.mjs +60 -0
  211. package/src/memory/structured-adapters.mjs +75 -0
  212. package/src/memory/summary-index.mjs +335 -0
  213. package/src/memory/summary-tree.mjs +110 -0
  214. package/src/memory/term-extractor.mjs +44 -0
  215. package/src/memory/tokenize.mjs +9 -0
  216. package/src/memory/vector-index.mjs +54 -0
  217. package/src/memory/window-summary.mjs +133 -0
  218. package/src/mood.mjs +133 -0
  219. package/src/peer-tool.mjs +63 -0
  220. package/src/peer.mjs +144 -0
  221. package/src/policy.mjs +170 -0
  222. package/src/preflight.mjs +113 -0
  223. package/src/provenance.mjs +94 -0
  224. package/src/range.mjs +75 -0
  225. package/src/recall-exact-tool.mjs +267 -0
  226. package/src/recall-tool.mjs +521 -0
  227. package/src/recheck.mjs +99 -0
  228. package/src/save-start.mjs +29 -0
  229. package/src/session-guard.mjs +140 -0
  230. package/src/session-log-tool.mjs +322 -0
  231. package/src/session-log.mjs +606 -0
  232. package/src/skills.mjs +111 -0
  233. package/src/split-range.mjs +115 -0
  234. package/src/state.mjs +198 -0
  235. package/src/t0.mjs +149 -0
  236. package/src/tag-confirm.mjs +78 -0
  237. package/src/tag-detect.mjs +42 -0
  238. package/src/tag-maintenance.mjs +285 -0
  239. package/src/tag-reject.mjs +73 -0
  240. package/src/tags-store.mjs +94 -0
  241. package/src/tags.mjs +692 -0
  242. package/src/threads-backend.mjs +26 -0
  243. package/src/threads-core.mjs +1887 -0
  244. package/src/threads-store.mjs +207 -0
  245. package/src/threads-tool.mjs +522 -0
  246. package/src/threads.mjs +929 -0
  247. package/src/tool-preview.mjs +427 -0
  248. package/src/topic.mjs +63 -0
  249. package/src/training.mjs +75 -0
  250. package/src/turn-tag.mjs +62 -0
  251. package/src/user-turn.mjs +39 -0
  252. package/templates/cmap.md +11 -0
  253. package/templates/concepts.md +12 -0
  254. package/templates/habits.md +40 -0
  255. package/templates/keywords.md +6 -0
  256. package/templates/rebuild.md +134 -0
  257. package/templates/rules-safe.md +184 -0
  258. package/templates/rules.md +177 -0
@@ -0,0 +1,306 @@
1
+ # 04 — 重建记忆宫殿(九步)
2
+
3
+ ## 先读这一段
4
+
5
+ 重建不是“点一下自动生成一套完美 A 表”。
6
+
7
+ 它是一次**有损的、需要判断的整理**:
8
+
9
+ ```text
10
+ 从已经存在的历史里
11
+ 导出文本
12
+ 重新打一遍标签
13
+ 再决定哪些东西值得变成 A
14
+ ```
15
+
16
+ 所以它有三条原则:
17
+
18
+ ```text
19
+ 先备份
20
+ 先 dry-run
21
+ 不覆盖已有表
22
+ ```
23
+
24
+ **比如这种情况:**
25
+
26
+ ```text
27
+ 如果直接对 live index 跑 --write,
28
+ 而没有备份,
29
+ 则一次错误的 relabel 就可能把原来的 B 标签覆盖掉。
30
+ ```
31
+
32
+ ## 实战状态
33
+
34
+ ```text
35
+ 已验证:continuity preset 的 session,有真实历史
36
+ 未验证:standard preset 的 session
37
+ ```
38
+
39
+ 九步在 continuity preset 上跑通过。
40
+ standard preset 没有原生 recall/session_log,只有 80% 原生压缩;那条路仍算未验证。
41
+
42
+ ## 0. 对齐目标
43
+
44
+ ```text
45
+ <sessionId> = 精确 session id
46
+ <sessionDir> = ~/.dsh/continuity/sessions/<sessionId>/
47
+ ```
48
+
49
+ 只有 session 自己可以做重建。不要跨 session。
50
+
51
+ **比如这种情况:**
52
+
53
+ ```text
54
+ 如果拿 0b 的 concepts.md 去给另一个 session 重建,
55
+ 则重建出来的不是那个 session 的记忆,只是 0b 的副本。
56
+ ```
57
+
58
+ ## 1. 数一遍并备份
59
+
60
+ 先回答:
61
+
62
+ ```text
63
+ bc-index.jsonl 是否存在?
64
+ 多少行?
65
+ maxTurn 是多少?
66
+ session.v4.jsonl.zstd 是否还在?
67
+ ```
68
+
69
+ 然后把整个 `<sessionDir>` 复制到备份位置。
70
+
71
+ 为什么先数?
72
+
73
+ 因为后面每一步都要拿“行数/轮数”对照。没有基线,就无法判断有没有丢数据。
74
+
75
+ **比如这种情况:**
76
+
77
+ ```text
78
+ 如果原 index 有 507 行,
79
+ 重建后只剩 490 行,
80
+ 但没有原行数做对照,
81
+ 则你可能以为只是“少了几个弱轮”,其实是丢了 17 轮。
82
+ ```
83
+
84
+ ## 2. 导出 turns
85
+
86
+ ```powershell
87
+ python bin\export-turns.py `
88
+ --session-file 'C:\Users\...\session.v4.jsonl.zstd' `
89
+ --session-id '<sessionId>' `
90
+ --out '<sessionDir>\turns.jsonl'
91
+ ```
92
+
93
+ 它只导出真人 prompt:
94
+
95
+ ```text
96
+ { "turn": N, "text": "..." }
97
+ ```
98
+
99
+ 为什么不能直接拿 `bc-index.jsonl` 当 turns?
100
+
101
+ 因为 index 里只有指针和标签,没有完整用户文本。
102
+ relabel 需要原文才能重新算 B。
103
+
104
+ **比如这种情况:**
105
+
106
+ ```text
107
+ 如果 turns 少了几个 turn,
108
+ 则 relabel 会报 missing turn text,
109
+ 或者悄悄只处理它能对上的部分。
110
+ ```
111
+
112
+ ## 3. 建/重标索引
113
+
114
+ ```powershell
115
+ node bin\bc-relabel.mjs `
116
+ --index '<sessionDir>\bc-index.jsonl' `
117
+ --turns '<sessionDir>\turns.jsonl' `
118
+ --concepts '<sessionDir>\concepts.md' `
119
+ --out '<sessionDir>\bc-index.relabeled.jsonl'
120
+ ```
121
+
122
+ 先 dry-run。
123
+
124
+ 它做的是:
125
+
126
+ ```text
127
+ 读取旧 index
128
+ 读取 A 表
129
+ 用 A 给每一轮重新算 conceptScores / generic
130
+ 写到新文件
131
+ 不直接覆盖源文件
132
+ ```
133
+
134
+ **比如这种情况:**
135
+
136
+ ```text
137
+ 如果 A 还是空的,
138
+ 则 relabel 会因为没有概念而无法产生有意义的 B。
139
+ ```
140
+
141
+ 所以第 3 步之前,至少要先有一个能用的 A 表;
142
+ 如果没有,就先做第 6 步的种 A,再回来 relabel。
143
+
144
+ ## 4. 补 vec + chatter
145
+
146
+ ```powershell
147
+ node bin\bc-relabel.mjs --vectors `
148
+ --index '<sessionDir>\bc-index.jsonl' `
149
+ --turns '<sessionDir>\turns.jsonl' `
150
+ --out '<sessionDir>\bc-index.vec.jsonl' --write
151
+ ```
152
+
153
+ 新记录通常已经有 `vec`/`chatter`。
154
+ 这一步是给旧记录补。
155
+
156
+ 为什么审计需要 vec?
157
+
158
+ 因为审计要用向量聚类。
159
+ 没有 vec,就只剩关键词,候选会很粗。
160
+
161
+ **比如这种情况:**
162
+
163
+ ```text
164
+ 如果旧记录没有 vec,
165
+ 则审计可能跳过,或者聚类结果完全不可用。
166
+ ```
167
+
168
+ ## 5. 种 K
169
+
170
+ ```text
171
+ 只收专名:
172
+ 出现 >= 2–3 次
173
+ 能按名字直接定位
174
+ 不是普通动词/泛词
175
+ ```
176
+
177
+ 写进:
178
+
179
+ ```text
180
+ sessions/<id>/keywords.md
181
+ ```
182
+
183
+ 一行一个。
184
+
185
+ **比如这种情况:**
186
+
187
+ ```text
188
+ 如果把“昨天”写进 K,
189
+ 则每次出现“昨天”都可能被当成精确锚,噪声会变大。
190
+ ```
191
+
192
+ ## 6. 种 A
193
+
194
+ 这是重建里最需要判断的一步。
195
+
196
+ 大致规则:
197
+
198
+ ```text
199
+ k = clamp(round(N/50), 20, 60)
200
+ 簇大小 >= 10
201
+ topicMax < 0.5
202
+ 名字是话题词,不是人名/道具/英文标识
203
+ 每次最多 +2;总数约 0.6*N
204
+ 两条覆盖 Jaccard > 0.6 就合并
205
+ ```
206
+
207
+ 写入:
208
+
209
+ ```text
210
+ 名字 | 描述词 | 参考覆盖 | kind
211
+ kind = topic | workflow
212
+ ```
213
+
214
+ 为什么要限制数量?
215
+
216
+ 因为 A 不是越多越好。
217
+ 太多、太碎,B 标签会变得没有区分度;
218
+ 太少、太宽,B 又会把所有轮都归到同一个概念。
219
+
220
+ **比如这种情况:**
221
+
222
+ ```text
223
+ 如果 A 只有“工作”和“生活”两个概念,
224
+ 则 B 几乎每轮都会落在这两个上,等于没有标签。
225
+ ```
226
+
227
+ ```text
228
+ 如果 A 有 200 个近义概念,
229
+ 则同一轮可能被拆到很多小标签里,也失去区分度。
230
+ ```
231
+
232
+ ## 7. 种 C + 别名
233
+
234
+ ```text
235
+ cmap.md:
236
+ 用户词 => B:概念 | K:关键词 | minB:1 | limit:20 | 摘要
237
+
238
+ aliases.md:
239
+ 只放跨语言标识符
240
+ ```
241
+
242
+ 为什么 C 不是 A?
243
+
244
+ A 是“话题叫什么”,C 是“用户怎么称呼它”。
245
+
246
+ **比如这种情况:**
247
+
248
+ ```text
249
+ 如果用户一直说“换箍”,
250
+ 而 A 里叫“示例主题”,
251
+ 则没有 C 的桥接,recall("换箍") 很难稳定命中。
252
+ ```
253
+
254
+ ## 8. 用新 A 重标一次
255
+
256
+ 重复第 3 步。
257
+
258
+ 为什么?
259
+
260
+ 因为第 3 步可能是在 A 还不完整时跑的。
261
+ 新 A 建好后,历史轮需要重新用新 A 打分。
262
+
263
+ **比如这种情况:**
264
+
265
+ ```text
266
+ 如果 A 加完了但不重标,
267
+ 则历史轮的 B 仍然是用旧 A / 空 A 算出来的。
268
+ ```
269
+
270
+ ## 9. 验收与审计
271
+
272
+ ```text
273
+ index 行数覆盖预期轮次
274
+ 前几轮 A > 0,B > 0
275
+ recall("A标签") 只显示本 session 的概念
276
+ C/K 只命中本 session 的文件
277
+ 没有新的 gate-errors
278
+ 其他 session 没有被改
279
+ ```
280
+
281
+ **比如这种情况:**
282
+
283
+ ```text
284
+ 如果 index 行数对,但 B 全是 weak,
285
+ 则可能 A 太宽,或者 relabel 用的 concepts.md 不是最新的。
286
+ ```
287
+
288
+ ## 失败规则
289
+
290
+ ```text
291
+ 没有备份就不覆盖
292
+ 不写别的 session 的文件
293
+ 不用改 header 来切 preset
294
+ 验证失败就恢复并停止
295
+ ```
296
+
297
+ 重建不是“跑完就算成功”。
298
+
299
+ 真正的成功是:
300
+
301
+ ```text
302
+ 数据对得上
303
+ B 有区分度
304
+ 原文还能打开
305
+ 没有污染别的 session
306
+ ```
@@ -0,0 +1,191 @@
1
+ # 05 — 第一次运行
2
+
3
+ ## 1. 先确认这是一个新 session
4
+
5
+ 新 session 应该是:
6
+
7
+ ```text
8
+ 没有本地 bc-index.jsonl
9
+ A/C/K 空
10
+ ```
11
+
12
+ 为什么强调这个?
13
+
14
+ 因为很多人会把“新 session 空表”误认为“插件没工作”。
15
+
16
+ **比如这种情况:**
17
+
18
+ ```text
19
+ 如果 session 是新的,A 空、B 空,
20
+ 则这是正确起点,不是故障。
21
+ ```
22
+
23
+ ## 2. 安装并重启
24
+
25
+ 安装 tgz,重启 DSH,确认版本。
26
+
27
+ ```text
28
+ dsh-continuity-4.11.36.tgz
29
+ ```
30
+
31
+ **比如这种情况:**
32
+
33
+ ```text
34
+ 如果只复制了文件没有重启,
35
+ 则版本号和面板都可能是旧的。
36
+ ```
37
+
38
+ ## 3. 第一次启动应该看到什么
39
+
40
+ ```text
41
+ sessions/<id>/ 出现基础文件
42
+ rules.md / habits.md 来自 templates/
43
+ 第一次 pre-step 后出现 bc-index.jsonl
44
+ 左侧“连续性”出现
45
+ 右侧“更多工具”出现 A/B/C/K
46
+ ```
47
+
48
+ 如果左侧没有“连续性”:
49
+
50
+ ```text
51
+ 不是表空,是 client 没加载。
52
+ ```
53
+
54
+ 如果右侧没有 A/B/C/K:
55
+
56
+ ```text
57
+ 不是表空,是宿主缺少 sidebarRight 或 tab 注册失败。
58
+ ```
59
+
60
+ 如果 tab 打开是空表:
61
+
62
+ ```text
63
+ 正常,继续往下看。
64
+ ```
65
+
66
+ ## 4. 空表阶段
67
+
68
+ ```text
69
+ A 空 -> B 空
70
+ C 空 -> 没有 C 命中
71
+ K 空 -> 没有 K 命中
72
+ ```
73
+
74
+ 这不是“什么都没发生”。
75
+ 索引已经在积累,只是还没有概念。
76
+
77
+ **比如这种情况:**
78
+
79
+ ```text
80
+ 如果 A 一直是空,
81
+ 则 B 也一直是空,
82
+ 即使已经聊了 500 轮。
83
+ ```
84
+
85
+ 因为 B 不是从对话自动生成,而是用 A 给对话打分。
86
+
87
+ ## 5. 前 200 轮做什么
88
+
89
+ ```text
90
+ 正常聊天
91
+ 需要回忆时用 recall(query)
92
+ 重要结论写进本 session 的 files 或工作区 log
93
+ ```
94
+
95
+ 不要做的:
96
+
97
+ ```text
98
+ 不要等系统自动生成 A
99
+ 不要复制别的 session 的 A
100
+ 不要为了“有表”而编概念
101
+ ```
102
+
103
+ **比如这种情况:**
104
+
105
+ ```text
106
+ 如果前 200 轮一直在聊,但 A 从未写,
107
+ 则第一次审计也可能因为没有 A 而跳过。
108
+ ```
109
+
110
+ 这是当前设计的一个坑,4.9.112 起 rules 已明确要求维护 A,但已有 session 不会自动改 rules。
111
+
112
+ ## 6. 第一次写 A
113
+
114
+ 当聊天里出现一个稳定、反复出现的话题:
115
+
116
+ ```text
117
+ 在 sessions/<id>/concepts.md 追加一行:
118
+ 名字 | 描述词 | 参考覆盖 | kind
119
+ ```
120
+
121
+ 例子:
122
+
123
+ ```text
124
+ 示例主题 | 项目、决定、复盘 | 5 | topic
125
+ ```
126
+
127
+ 不需要一次写很多。
128
+ 先写一条,观察 B 是否开始有区分度。
129
+
130
+ **比如这种情况:**
131
+
132
+ ```text
133
+ 如果 A 只有一条“工作”,
134
+ 则 B 会把很多不同话题都打成“工作”,
135
+ 看起来有标签,其实没有区分。
136
+ ```
137
+
138
+ ## 7. 第一次审计
139
+
140
+ 到 200 轮左右,可能出现:
141
+
142
+ ```text
143
+ [continuity:audit]
144
+ ```
145
+
146
+ 但它不是必然出现:
147
+
148
+ ```text
149
+ A 空 -> 跳过
150
+ 没有 vec -> 可能跳过
151
+ 没有明显未决簇 -> 没有候选
152
+ ```
153
+
154
+ **比如这种情况:**
155
+
156
+ ```text
157
+ 如果 200 轮到了但没有审计,
158
+ 不要立刻认为审计坏了;
159
+ 先看 A 是否为空、index 是否有 vec。
160
+ ```
161
+
162
+ ## 8. 第一次重建
163
+
164
+ 如果 session 已经有很长的历史,但 A/B/C/K 一直空:
165
+
166
+ ```text
167
+ 不要从当前轮开始补
168
+ 直接读 04-REBUILD.md
169
+ ```
170
+
171
+ **比如这种情况:**
172
+
173
+ ```text
174
+ 如果已经聊了 507 轮,A 还是空,
175
+ 则从第 508 轮开始写 A,只能覆盖以后,
176
+ 前 507 轮仍然没有 B。
177
+ ```
178
+
179
+ 需要 rebuild + relabel 历史。
180
+
181
+ ## 9. 验收
182
+
183
+ ```text
184
+ A/B/C/K 文件存在且只属于本 session
185
+ recall 使用本 session 的索引
186
+ B 对至少部分轮次有标签
187
+ 没有改到别的 session
188
+ 没有新的 gate-errors
189
+ ```
190
+
191
+ 如果这些都对,第一次运行才算完成。
@@ -0,0 +1,146 @@
1
+ # 06 — vec / embedding 没跑起来
2
+
3
+ ## 1. 症状
4
+
5
+ ```text
6
+ A/B/C/K 有内容
7
+ 面板正常
8
+ 但审计不来
9
+ bc-index.jsonl 里 vec 为空
10
+ ```
11
+
12
+ 这不是 A 表的问题。
13
+ 这是**索引里的向量没有生成**。
14
+
15
+ ## 2. vec 是干什么的
16
+
17
+ B 的标签可以用概念词算,但审计要做聚类:
18
+
19
+ ```text
20
+ 把很多轮按语义放进不同的簇
21
+ 看哪个簇和现有 A 都不太像
22
+ ```
23
+
24
+ 聚类需要:
25
+
26
+ ```text
27
+ bc-index.jsonl 的 vec
28
+ ```
29
+
30
+ **比如这种情况:**
31
+
32
+ ```text
33
+ 如果 vec 为空,
34
+ 则审计没有可聚类的点,
35
+ 会报 "audit needs vec on at least 90% of records"。
36
+ ```
37
+
38
+ ## 3. 为什么 pnpm 会跳过
39
+
40
+ 本地 embedding 用:
41
+
42
+ ```text
43
+ @huggingface/transformers
44
+ onnxruntime-node
45
+ ```
46
+
47
+ pnpm 默认可能不执行依赖的 install/postinstall 脚本。
48
+
49
+ **比如这种情况:**
50
+
51
+ ```text
52
+ 如果 pnpm 跳过了 onnxruntime-node 的构建,
53
+ 则 transformers 加载模型时会失败,
54
+ 新记录的 vec 就会是空。
55
+ ```
56
+
57
+ ## 4. 先自检
58
+
59
+ 在安装目录运行:
60
+
61
+ ```powershell
62
+ cd <dsh-continuity 安装目录>
63
+ node bin\vec-check.mjs
64
+ ```
65
+
66
+ 成功应该看到:
67
+
68
+ ```text
69
+ { "ok": true, "dimensions": 512, ... }
70
+ ```
71
+
72
+ 失败会输出类似:
73
+
74
+ ```text
75
+ embedding runtime unavailable ...
76
+ ```
77
+
78
+ ## 5. 修复 pnpm 的 build 跳过
79
+
80
+ 在 DSH profile 目录(不是工作区)执行:
81
+
82
+ ```powershell
83
+ pnpm approve-builds
84
+ ```
85
+
86
+ 在列表里允许:
87
+
88
+ ```text
89
+ onnxruntime-node
90
+ sharp
91
+ ```
92
+
93
+ 然后:
94
+
95
+ ```powershell
96
+ pnpm rebuild onnxruntime-node sharp
97
+ ```
98
+
99
+ 再跑一次:
100
+
101
+ ```powershell
102
+ node bin\vec-check.mjs
103
+ ```
104
+
105
+ 如果 `ok: true`,embedding 恢复了。
106
+
107
+ ## 6. 已有空 vec 的记录怎么办
108
+
109
+ 不要删索引。
110
+
111
+ 先备份,然后回填:
112
+
113
+ ```powershell
114
+ $s = 'C:\Users\...\sessions\<sessionId>'
115
+
116
+ node bin\bc-relabel.mjs --vectors `
117
+ --index "$s\bc-index.jsonl" `
118
+ --turns "$s\turns.jsonl" `
119
+ --out "$s\bc-index.vec.jsonl" --write
120
+ ```
121
+
122
+ 这会把旧记录缺的 `vec`/`chatter` 补上。
123
+
124
+ ## 7. 然后审计才会运行
125
+
126
+ ```text
127
+ vec 恢复
128
+ -> 审计有聚类点
129
+ -> 下一次达到 200 轮阈值时才会执行
130
+ ```
131
+
132
+ **比如这种情况:**
133
+
134
+ ```text
135
+ 如果已经 507 轮,但 audit-state.lastAuditTurn 已经接近 507,
136
+ 则修好 vec 后不一定立刻触发;
137
+ 要等下一次满足阈值,或手动调整/重建审计状态。
138
+ ```
139
+
140
+ ## 8. 一句话
141
+
142
+ ```text
143
+ A/B/C/K 有,不代表 vec 有。
144
+ vec 空,审计就不工作。
145
+ vec 空通常不是规则问题,是本机 onnxruntime 没构建。
146
+ ```