@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.
- package/INSTALL.md +25 -0
- package/PANEL.md +92 -0
- package/README.md +286 -2
- package/RELEASE-NOTES.md +732 -0
- package/bin/bc-acceptance-full.mjs +91 -0
- package/bin/bc-acceptance-tight.mjs +66 -0
- package/bin/bc-acceptance.mjs +22 -0
- package/bin/bc-add-keywords.mjs +21 -0
- package/bin/bc-demo.mjs +47 -0
- package/bin/bc-expand-hint.mjs +179 -0
- package/bin/bc-ingest-index.mjs +35 -0
- package/bin/bc-ingest.mjs +31 -0
- package/bin/bc-label-demo.mjs +18 -0
- package/bin/bc-relabel.mjs +150 -0
- package/bin/bc-sessionize.mjs +59 -0
- package/bin/coref_pipeline.py +47 -0
- package/bin/coref_service.py +57 -0
- package/bin/debug_ckip.py +16 -0
- package/bin/debug_ner_zh.py +18 -0
- package/bin/doctor.mjs +275 -0
- package/bin/en_ner_error_audit.py +33 -0
- package/bin/eval-label-rules.mjs +342 -0
- package/bin/export-turns.py +68 -0
- package/bin/extract-user-paragraph.mjs +14 -0
- package/bin/extraction-composite-smoke.mjs +28 -0
- package/bin/extraction-latency.mjs +58 -0
- package/bin/extraction-user-smoke.mjs +28 -0
- package/bin/extraction_service.py +164 -0
- package/bin/facet-active-experiment.mjs +110 -0
- package/bin/facet-covid.mjs +8 -0
- package/bin/facet-curve.mjs +27 -0
- package/bin/facet-embedding-train.mjs +20 -0
- package/bin/facet-embedding-validate.mjs +83 -0
- package/bin/facet-eval-roleplay.mjs +42 -0
- package/bin/facet-eval.mjs +38 -0
- package/bin/facet-fold.mjs +31 -0
- package/bin/facet-load.mjs +16 -0
- package/bin/facet-mlp-scan.mjs +45 -0
- package/bin/facet-mvp.mjs +34 -0
- package/bin/facet-online-experiments.mjs +78 -0
- package/bin/facet-online-race.mjs +99 -0
- package/bin/facet-online-validate.mjs +51 -0
- package/bin/facet-panel.mjs +22 -0
- package/bin/facet-passage.mjs +41 -0
- package/bin/facet-random-validate.mjs +48 -0
- package/bin/facet-roleplay.mjs +33 -0
- package/bin/facet-scan.mjs +56 -0
- package/bin/facet-segment.mjs +34 -0
- package/bin/facet-train.mjs +19 -0
- package/bin/facet-validate.mjs +103 -0
- package/bin/facet-zeroshot.mjs +14 -0
- package/bin/install-templates.mjs +72 -0
- package/bin/memory-bench.mjs +53 -0
- package/bin/memory-build-summary.mjs +43 -0
- package/bin/memory-build-vector.mjs +31 -0
- package/bin/memory-build.mjs +41 -0
- package/bin/memory-calibration.mjs +70 -0
- package/bin/memory-closed-loop.mjs +119 -0
- package/bin/memory-dry-run.mjs +70 -0
- package/bin/memory-eval.mjs +104 -0
- package/bin/memory-event-alias-test.mjs +89 -0
- package/bin/memory-extraction-bench.mjs +58 -0
- package/bin/memory-load-gate-replay.mjs +137 -0
- package/bin/memory-loop-test.mjs +90 -0
- package/bin/memory-pre-turn-harness.mjs +63 -0
- package/bin/memory-query.mjs +39 -0
- package/bin/memory-replay-hints.mjs +84 -0
- package/bin/memory-scale.mjs +58 -0
- package/bin/memory-scenario-test.mjs +146 -0
- package/bin/memory-user-loop.mjs +95 -0
- package/bin/ner_bench_tiny_zh.py +59 -0
- package/bin/ner_bench_zh.py +60 -0
- package/bin/ner_conll_en.py +139 -0
- package/bin/ner_direct_en.py +123 -0
- package/bin/ner_direct_zh.py +100 -0
- package/bin/ner_pipeline.py +208 -0
- package/bin/noise-selfcheck.mjs +50 -0
- package/bin/pack-integrity.mjs +47 -0
- package/bin/panel-check.mjs +57 -0
- package/bin/plugin-integrity.mjs +74 -0
- package/bin/preview-live.mjs +13 -0
- package/bin/public-install-check.mjs +222 -0
- package/bin/relabel-apply.mjs +272 -0
- package/bin/relabel-dry-run.mjs +381 -0
- package/bin/relik_pipeline.py +39 -0
- package/bin/relik_service.py +52 -0
- package/bin/srl_pipeline.py +55 -0
- package/bin/srl_service.py +68 -0
- package/bin/summary-index.mjs +151 -0
- package/bin/summary-query.mjs +79 -0
- package/bin/vec-check.mjs +27 -0
- package/bin/zh_ner_error_audit.py +36 -0
- package/bin/zh_ner_slot_eval.py +38 -0
- package/client.js +760 -0
- package/cordis.patch.yml +378 -0
- package/docs/API-NOTES.md +1743 -0
- package/docs/ARCHITECTURE.md +355 -0
- package/docs/CACHE.md +253 -0
- package/docs/CONDUCT.md +30 -0
- package/docs/CREATOR-HANDOFF.md +102 -0
- package/docs/EXPERIMENT.md +136 -0
- package/docs/FACET-MVP-REPORT.md +473 -0
- package/docs/GUIDE-0.4.66.md +195 -0
- package/docs/GUIDE.md +127 -0
- package/docs/MECHANISM.md +243 -0
- package/docs/NEW-INSTANCE-HANDOFF.md +219 -0
- package/docs/README.md +37 -0
- package/docs/SESSION-LAYOUT.md +151 -0
- package/docs/history-map.md +249 -0
- package/docs/relabel-migration-wiring.md +366 -0
- package/guides/00-READ-FIRST.md +206 -0
- package/guides/01-INSTALL.md +207 -0
- package/guides/02-TABLES.md +225 -0
- package/guides/03-AUDIT.md +201 -0
- package/guides/04-REBUILD.md +306 -0
- package/guides/05-FIRST-RUN.md +191 -0
- package/guides/06-EMBEDDING.md +146 -0
- package/guides/07-PTC-AND-ASSETS.md +221 -0
- package/icon.svg +7 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/models/README.md +13 -0
- package/models/Xenova/bge-small-zh-v1.5/config.json +31 -0
- package/models/Xenova/bge-small-zh-v1.5/onnx/model_quantized.onnx +0 -0
- package/models/Xenova/bge-small-zh-v1.5/tokenizer.json +21278 -0
- package/models/Xenova/bge-small-zh-v1.5/tokenizer_config.json +15 -0
- package/package.json +139 -4
- package/src/asset-tool.mjs +237 -0
- package/src/assets.mjs +244 -0
- package/src/backfill.mjs +74 -0
- package/src/backup.mjs +80 -0
- package/src/deadend.mjs +95 -0
- package/src/deleted-store.mjs +35 -0
- package/src/engine.mjs +3831 -0
- package/src/facets/classifier.mjs +146 -0
- package/src/facets/embedding-service.mjs +53 -0
- package/src/facets/embedding-worker.mjs +27 -0
- package/src/facets/embedding.mjs +163 -0
- package/src/facets/extract.mjs +80 -0
- package/src/facets/fold-plan.mjs +84 -0
- package/src/facets/hybrid.mjs +29 -0
- package/src/facets/index.mjs +113 -0
- package/src/facets/linear-probe.mjs +43 -0
- package/src/facets/load.mjs +37 -0
- package/src/facets/mlp-probe.mjs +54 -0
- package/src/facets/mlp-service.mjs +53 -0
- package/src/facets/mlp-worker.mjs +26 -0
- package/src/facets/online-knn.mjs +58 -0
- package/src/facets/online-models.mjs +227 -0
- package/src/facets/panel-state.mjs +23 -0
- package/src/facets/panel.mjs +73 -0
- package/src/facets/random.mjs +26 -0
- package/src/facets/scanner.mjs +35 -0
- package/src/facets/schema.mjs +75 -0
- package/src/facets/seed-examples.mjs +58 -0
- package/src/facets/sensitivity.mjs +98 -0
- package/src/facets/service.mjs +53 -0
- package/src/facets/store.mjs +39 -0
- package/src/facets/worker.mjs +23 -0
- package/src/folds-store.mjs +109 -0
- package/src/groups.mjs +167 -0
- package/src/handoff-tool.mjs +51 -0
- package/src/handoff.mjs +127 -0
- package/src/index.mjs +649 -0
- package/src/inject-policy.mjs +17 -0
- package/src/learning.mjs +88 -0
- package/src/memory/alias-proposal.mjs +40 -0
- package/src/memory/bc-audit.mjs +245 -0
- package/src/memory/bc-index-updater.mjs +404 -0
- package/src/memory/bc-index.mjs +48 -0
- package/src/memory/bc-label.mjs +220 -0
- package/src/memory/bc-panel-state.mjs +107 -0
- package/src/memory/bc-pre-step.mjs +463 -0
- package/src/memory/bc-recall.mjs +470 -0
- package/src/memory/bc-shift.mjs +123 -0
- package/src/memory/bc-store.mjs +41 -0
- package/src/memory/bm25.mjs +112 -0
- package/src/memory/calibration.mjs +54 -0
- package/src/memory/chatter.mjs +29 -0
- package/src/memory/cmap-file.mjs +107 -0
- package/src/memory/concepts-file.mjs +41 -0
- package/src/memory/coref-slots.mjs +40 -0
- package/src/memory/event-alias-ledger.mjs +87 -0
- package/src/memory/event-log.mjs +95 -0
- package/src/memory/event-model.mjs +132 -0
- package/src/memory/event-segmenter.mjs +36 -0
- package/src/memory/event-summary-tree.mjs +122 -0
- package/src/memory/extraction-adapter.mjs +76 -0
- package/src/memory/extraction-composite.mjs +75 -0
- package/src/memory/extraction-core.mjs +76 -0
- package/src/memory/extraction-pre-step.mjs +161 -0
- package/src/memory/extraction-provider.mjs +300 -0
- package/src/memory/extraction-score.mjs +36 -0
- package/src/memory/facet-stabilizer.mjs +59 -0
- package/src/memory/history-map.mjs +139 -0
- package/src/memory/language-router.mjs +30 -0
- package/src/memory/load-gate.mjs +161 -0
- package/src/memory/mechanical-note.mjs +104 -0
- package/src/memory/onboarding.mjs +163 -0
- package/src/memory/persona.mjs +78 -0
- package/src/memory/planner.mjs +249 -0
- package/src/memory/pre-turn.mjs +80 -0
- package/src/memory/query-aliases.mjs +39 -0
- package/src/memory/recall-cue.mjs +43 -0
- package/src/memory/recall.mjs +65 -0
- package/src/memory/referent-candidates.mjs +55 -0
- package/src/memory/referent-ledger.mjs +86 -0
- package/src/memory/relabel-migrate.mjs +376 -0
- package/src/memory/relik-adapter.mjs +25 -0
- package/src/memory/special-keywords.mjs +60 -0
- package/src/memory/structured-adapters.mjs +75 -0
- package/src/memory/summary-index.mjs +335 -0
- package/src/memory/summary-tree.mjs +110 -0
- package/src/memory/term-extractor.mjs +44 -0
- package/src/memory/tokenize.mjs +9 -0
- package/src/memory/vector-index.mjs +54 -0
- package/src/memory/window-summary.mjs +133 -0
- package/src/mood.mjs +133 -0
- package/src/peer-tool.mjs +63 -0
- package/src/peer.mjs +144 -0
- package/src/policy.mjs +170 -0
- package/src/preflight.mjs +113 -0
- package/src/provenance.mjs +94 -0
- package/src/range.mjs +75 -0
- package/src/recall-exact-tool.mjs +267 -0
- package/src/recall-tool.mjs +521 -0
- package/src/recheck.mjs +99 -0
- package/src/save-start.mjs +29 -0
- package/src/session-guard.mjs +140 -0
- package/src/session-log-tool.mjs +322 -0
- package/src/session-log.mjs +606 -0
- package/src/skills.mjs +111 -0
- package/src/split-range.mjs +115 -0
- package/src/state.mjs +198 -0
- package/src/t0.mjs +149 -0
- package/src/tag-confirm.mjs +78 -0
- package/src/tag-detect.mjs +42 -0
- package/src/tag-maintenance.mjs +285 -0
- package/src/tag-reject.mjs +73 -0
- package/src/tags-store.mjs +94 -0
- package/src/tags.mjs +692 -0
- package/src/threads-backend.mjs +26 -0
- package/src/threads-core.mjs +1887 -0
- package/src/threads-store.mjs +207 -0
- package/src/threads-tool.mjs +522 -0
- package/src/threads.mjs +929 -0
- package/src/tool-preview.mjs +427 -0
- package/src/topic.mjs +63 -0
- package/src/training.mjs +75 -0
- package/src/turn-tag.mjs +62 -0
- package/src/user-turn.mjs +39 -0
- package/templates/cmap.md +11 -0
- package/templates/concepts.md +12 -0
- package/templates/habits.md +40 -0
- package/templates/keywords.md +6 -0
- package/templates/rebuild.md +134 -0
- package/templates/rules-safe.md +184 -0
- 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
|
+
```
|