@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,219 @@
|
|
|
1
|
+
# Continuity 4.11.36 — 新实例交接
|
|
2
|
+
|
|
3
|
+
> 给下一个实例。你接手的是当前 session 的目录、规则和词表,不是另一个
|
|
4
|
+
> session 的记忆。先读这份,再读当前 session 的 `rules.md` / `habits.md`。
|
|
5
|
+
|
|
6
|
+
## 1. 版本与边界
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
dsh-continuity 4.11.36
|
|
10
|
+
安全模式:pointersOnly;peer 保留
|
|
11
|
+
不包含:额外的提示词分类、自动标注或工作线注入。
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
它做:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
band 压缩 + [gist] 指针
|
|
18
|
+
每个 session 自己的 B 索引
|
|
19
|
+
每个 session 自己的 A/C/K
|
|
20
|
+
每个 session 自己的 rules/habits
|
|
21
|
+
recall(A/B/C/K + 字面)
|
|
22
|
+
右侧面板 + peer_message
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 2. 每个 session 自己的全套
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
~/.dsh/continuity/sessions/<sessionId>/
|
|
29
|
+
bc-index.jsonl
|
|
30
|
+
audit-state.json
|
|
31
|
+
expand-hint.jsonl
|
|
32
|
+
concepts.md
|
|
33
|
+
cmap.md
|
|
34
|
+
keywords.md
|
|
35
|
+
aliases.md
|
|
36
|
+
rules.md
|
|
37
|
+
habits.md
|
|
38
|
+
rebuild.md
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
新 session:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
A/C/K = 空
|
|
45
|
+
rules.md <- 插件 templates/rules.md
|
|
46
|
+
habits.md <- 插件 templates/habits.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
不继承另一个 session 的 A/C/K 或 rules/habits。
|
|
50
|
+
|
|
51
|
+
persona 只是身份/启用开关:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
session-persona.json:
|
|
55
|
+
<sessionId> -> continuity | <pid>
|
|
56
|
+
default -> continuity
|
|
57
|
+
|
|
58
|
+
personas/<pid>/persona.json:
|
|
59
|
+
{"enabled": true}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`continuity` 没文件也默认启用;disabled persona 会被 pre-step 跳过,面板
|
|
63
|
+
返回 `persona-disabled`。
|
|
64
|
+
|
|
65
|
+
## 3. 当前文件
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
sessions/<id>/bc-index.jsonl
|
|
69
|
+
sessions/<id>/audit-state.json
|
|
70
|
+
sessions/<id>/expand-hint.jsonl
|
|
71
|
+
sessions/<id>/concepts.md
|
|
72
|
+
sessions/<id>/cmap.md
|
|
73
|
+
sessions/<id>/keywords.md
|
|
74
|
+
sessions/<id>/aliases.md
|
|
75
|
+
sessions/<id>/rules.md
|
|
76
|
+
sessions/<id>/habits.md
|
|
77
|
+
sessions/<id>/dropped-ranges.json
|
|
78
|
+
|
|
79
|
+
~/.dsh/continuity/
|
|
80
|
+
session-persona.json
|
|
81
|
+
personas/<pid>/persona.json
|
|
82
|
+
folds.json
|
|
83
|
+
passes.jsonl
|
|
84
|
+
context-log.jsonl
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 4. 检索
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
recall()
|
|
91
|
+
recall({ query: "跑团", recent: true })
|
|
92
|
+
recall({ query: "A标签" }) // 当前 session 的 topic
|
|
93
|
+
recall({ query: "A标签:workflow" }) // 当前 session 的 workflow
|
|
94
|
+
recall({ query: "A标签:跑团叙事" }) // 任意 A 概念
|
|
95
|
+
recall({ query: "B标签" })
|
|
96
|
+
recall({ query: "C标签" })
|
|
97
|
+
recall({ query: "K标签" })
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- 索引和 A/C/K 只读当前 session。
|
|
101
|
+
- `via`:`A | B | C | K | live`。
|
|
102
|
+
- 候选不是事实,必须打开 turn/seq。
|
|
103
|
+
|
|
104
|
+
## 5. 注入前缀
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
[continuity:boot] 引导
|
|
108
|
+
[continuity:audit] 审计
|
|
109
|
+
[continuity:fold] 折叠回执
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`[追忆]` 是 recall 的 tool result,不是 user 通道注入。
|
|
113
|
+
|
|
114
|
+
## 6. 压缩与回执
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
high 0.60W 触发
|
|
118
|
+
low 0.40W 目标
|
|
119
|
+
protect 0.30W
|
|
120
|
+
一次 pass 折一个最老连续区
|
|
121
|
+
budget 是上限,不是必然排干
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
可达下限:
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
floor(T) = (protect * W + baseline(T)) / W
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
baseline 会变;当前值看最新 `context-log.jsonl`,历史 pass 用
|
|
131
|
+
`passes.jsonl` 的 `afterBaselineTokens`。不要把 52.7% 当固定值。
|
|
132
|
+
|
|
133
|
+
## 7. 标签版本
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
v2(新轮):
|
|
137
|
+
genericTopic / topicScore / topicConfidence / genericWorkflow
|
|
138
|
+
labelVersion: 2
|
|
139
|
+
generic = topic ∪ workflow
|
|
140
|
+
|
|
141
|
+
v1(旧轮):
|
|
142
|
+
labelVersion: 1
|
|
143
|
+
无 topicScore,不伪造
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
`topicConfidence` 的 0.4/0.5 只是展示标签,不是写入阈值。
|
|
147
|
+
|
|
148
|
+
## 8. 启动自检
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
1. 当前 session 的 persona enabled
|
|
152
|
+
2. sessions/<id>/bc-index.jsonl 存在
|
|
153
|
+
3. bc.json?sessionId=<id> 返回 available
|
|
154
|
+
4. A标签 -> 当前 session 自己的 topic
|
|
155
|
+
5. C/K 查询只命中当前 session 自己的表
|
|
156
|
+
6. 另一 session 的目录不被本 session 修改
|
|
157
|
+
7. 没有新增 gate-errors
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## 9. 规则层级
|
|
161
|
+
|
|
162
|
+
```text
|
|
163
|
+
AGENTS.md 用户所有;实例不改
|
|
164
|
+
sessions/<id>/rules.md 当前 session 硬规则;可改
|
|
165
|
+
sessions/<id>/habits.md 当前 session 软偏好;可改
|
|
166
|
+
sessions/<id>/concepts.md|cmap.md|keywords.md|aliases.md 当前 session 数据
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`rules.md` 只能规定当前 session 的这些文件;不能授权改插件或别的 session。
|
|
170
|
+
|
|
171
|
+
## 10. 保护
|
|
172
|
+
|
|
173
|
+
```text
|
|
174
|
+
不改 live profile 的 dsh-continuity 安装目录
|
|
175
|
+
不改 cordis.patch.yml / package.json / lockfile / tgz
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
插件变更只能走:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
独立副本 -> 测试 -> 备份 -> 替换 -> 重启 -> 验证
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
工具层有 best-effort 路径守卫:session 只能碰自己的 `sessions/<id>/`。
|
|
185
|
+
它不是 OS 安全边界;强隔离需要 ACL/容器。
|
|
186
|
+
|
|
187
|
+
## 11. 常见故障
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
没有 tab
|
|
191
|
+
-> personas/<pid>/persona.json 是否 enabled
|
|
192
|
+
-> bc.json 是否 persona-disabled
|
|
193
|
+
|
|
194
|
+
A标签 是 0
|
|
195
|
+
-> sessions/<id>/concepts.md 是否存在/为空
|
|
196
|
+
-> 第 4 列 kind 是否存在
|
|
197
|
+
|
|
198
|
+
recall 空
|
|
199
|
+
-> sessions/<id>/bc-index.jsonl 是否存在
|
|
200
|
+
-> C/K 是否在当前 session 目录
|
|
201
|
+
|
|
202
|
+
rules 没更新
|
|
203
|
+
-> 是否改的是当前 session 的 rules.md,而不是旧的全局文件
|
|
204
|
+
|
|
205
|
+
另一 session 被改
|
|
206
|
+
-> 工具层守卫只能挡常规工具;检查 ACL
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## 12. 原则
|
|
210
|
+
|
|
211
|
+
```text
|
|
212
|
+
每个 session 自己的全套。
|
|
213
|
+
候选不是事实。
|
|
214
|
+
[gist] 不是原文。
|
|
215
|
+
A 默认只看 topic。
|
|
216
|
+
pass 回执 append-only。
|
|
217
|
+
可达下限由 protect + baseline 现算。
|
|
218
|
+
工具守卫不是 OS 安全边界。
|
|
219
|
+
```
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 文档索引
|
|
2
|
+
|
|
3
|
+
现行文档:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
SESSION-LAYOUT.md 权威路径、角色、权限(中文)
|
|
7
|
+
ARCHITECTURE.md 当前架构(英文技术附录)
|
|
8
|
+
NEW-INSTANCE-HANDOFF.md 新实例交接(英文技术附录)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
经典说明书在包根/`guides/`:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
00-READ-FIRST.md
|
|
15
|
+
01-INSTALL.md
|
|
16
|
+
02-TABLES.md
|
|
17
|
+
03-AUDIT.md
|
|
18
|
+
04-REBUILD.md
|
|
19
|
+
05-FIRST-RUN.md
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
历史/设计档案(保留来源;路径和行为可能属于旧版本):
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
API-NOTES.md
|
|
26
|
+
CACHE.md
|
|
27
|
+
CONDUCT.md
|
|
28
|
+
CREATOR-HANDOFF.md
|
|
29
|
+
EXPERIMENT.md
|
|
30
|
+
FACET-MVP-REPORT.md
|
|
31
|
+
GUIDE-0.4.66.md
|
|
32
|
+
GUIDE.md
|
|
33
|
+
MECHANISM.md
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
现行行为以 `SESSION-LAYOUT.md` 和 `ARCHITECTURE.md` 为准。
|
|
37
|
+
历史文件不是操作说明。
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Session 布局与权限 — 4.9.102
|
|
2
|
+
|
|
3
|
+
这是本包路径/权限的权威文档。若其他文档与它冲突,以本文为准。
|
|
4
|
+
|
|
5
|
+
## 1. 一个 session,一套完整记忆
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
~/.dsh/continuity/sessions/<sessionId>/
|
|
9
|
+
bc-index.jsonl B 指针索引,只属于这个 session
|
|
10
|
+
bc-index-state.json 索引游标
|
|
11
|
+
audit-state.json 审计游标
|
|
12
|
+
expand-hint.jsonl 待注入审计提示
|
|
13
|
+
concepts.md A: 名字 | 描述词 | 覆盖 | kind
|
|
14
|
+
cmap.md C: 用户词 -> 概念
|
|
15
|
+
keywords.md K: 精确名
|
|
16
|
+
aliases.md 别名
|
|
17
|
+
rules.md 硬规则,从 templates/rules.md 起
|
|
18
|
+
habits.md 软偏好,从 templates/habits.md 起
|
|
19
|
+
rebuild.md 本地重建说明
|
|
20
|
+
turns.jsonl 可选,relabel 用
|
|
21
|
+
dropped-ranges.json 本 session 的合并覆盖(只属于本 session)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
以上全部是 session-local。任何 session 都不读另一个 session 的 A/C/K、
|
|
25
|
+
rules、habits、index、审计、提示或 dropped-ranges。
|
|
26
|
+
|
|
27
|
+
新 session:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
A/C/K 空
|
|
31
|
+
rules.md <- templates/rules.md
|
|
32
|
+
habits.md <- templates/habits.md
|
|
33
|
+
rebuild.md <- 空壳
|
|
34
|
+
index <- 第一次 pre-step
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 2. 共享文件
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
~/.dsh/continuity/
|
|
41
|
+
session-persona.json sessionId -> 身份
|
|
42
|
+
personas/<pid>/persona.json {"enabled": true|false}
|
|
43
|
+
folds.json 全局折叠历史
|
|
44
|
+
passes.jsonl 全局 pass 回执
|
|
45
|
+
context-log.jsonl 上下文测量
|
|
46
|
+
handoff-pending.json 交接标记
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`session-persona.json` 只解析身份,不选择词表路径。
|
|
50
|
+
`persona.json` 只是启用开关。
|
|
51
|
+
|
|
52
|
+
`personas/<pid>/concepts.md|cmap.md|keywords.md|aliases.md` 是**弃用归档**,
|
|
53
|
+
不是读取路径。
|
|
54
|
+
|
|
55
|
+
## 3. 权限
|
|
56
|
+
|
|
57
|
+
### 内部引擎
|
|
58
|
+
|
|
59
|
+
continuity preset 挂载的引擎可以读写:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
自己的 session 目录(含 dropped-ranges.json)
|
|
63
|
+
folds.json / passes.jsonl / context-log.jsonl
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
这是宿主代码,不是模型工具。
|
|
67
|
+
|
|
68
|
+
### 模型工具
|
|
69
|
+
|
|
70
|
+
普通工具调用可以碰:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
workspace 文件
|
|
74
|
+
自己的 sessions/<sessionId>/ 目录
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
不能碰:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
另一个 session 的 sessions/<other>/
|
|
81
|
+
personas/
|
|
82
|
+
session-persona.json
|
|
83
|
+
folds.json / passes.jsonl
|
|
84
|
+
continuity 根目录的 rules.md / habits.md
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
守卫在 `src/session-guard.mjs`。它只检查带路径的参数,不扫描完整消息/文件
|
|
88
|
+
正文;`send_message`、`peer_message`、`present` 不受影响。
|
|
89
|
+
|
|
90
|
+
守卫是 **best effort**,不是 OS ACL。任意有完整文件权限的代码可以绕过;
|
|
91
|
+
强隔离需要 OS ACL/容器。
|
|
92
|
+
|
|
93
|
+
### 禁用的 persona
|
|
94
|
+
|
|
95
|
+
禁用的 persona:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
面板:persona-disabled
|
|
99
|
+
pre-step:跳过
|
|
100
|
+
普通 workspace 工具:仍可用
|
|
101
|
+
continuity 路径:拒绝
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 4. Preset
|
|
105
|
+
|
|
106
|
+
| session | 自己的一套 | 原生工具 |
|
|
107
|
+
|---|---|---|
|
|
108
|
+
| continuity preset | A/B/C/K/rules/habits/index | `recall`、`session_log`、band 引擎 |
|
|
109
|
+
| standard preset | A/B/C/K/rules/habits/index | 没有原生 recall/session_log;原生 compaction-basic 80% |
|
|
110
|
+
| 禁用 persona | 不启用 | 只有 workspace 工具 |
|
|
111
|
+
|
|
112
|
+
standard session 仍有面板和自己的文件,但没有 continuity band 引擎和原生
|
|
113
|
+
recall/session_log。
|
|
114
|
+
|
|
115
|
+
preset 在第一个 turn 后固定。`agentPresets.select` 对已启动 session 返回
|
|
116
|
+
`agent-preset/locked`。改 session header 不是受支持的迁移路径。
|
|
117
|
+
|
|
118
|
+
## 5. 不变量
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
一个 session 拥有完整一套。
|
|
122
|
+
不继承词表/规则/习惯。
|
|
123
|
+
任何 session 不得修改另一个 session 的 continuity 文件。
|
|
124
|
+
`personas/` 已弃用。
|
|
125
|
+
全局 folds/passes 归引擎,不由模型编辑。
|
|
126
|
+
候选不是事实;必须打开 turn/seq。
|
|
127
|
+
[gist] 是重建,不是原文。
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 维护者访问(operator)
|
|
131
|
+
|
|
132
|
+
默认没有跨 session 访问。需要人工维护另一个 session 时,在
|
|
133
|
+
`~/.dsh/continuity/operator-sessions.json` 写一个显式 session id 数组:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
["session-..."]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`session-guard` 只对这份清单里的 session 放行;清单为空或不存在时,仍按
|
|
140
|
+
persona + 本 session 的规则拦截。这个文件是维护入口,不是日常权限。
|
|
141
|
+
## 根级身份/诊断文件
|
|
142
|
+
|
|
143
|
+
`read` 工具可以读取这三个根级文件(只读):
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
~/.dsh/continuity/session-persona.json
|
|
147
|
+
~/.dsh/continuity/operator-sessions.json
|
|
148
|
+
~/.dsh/continuity/context-log.jsonl
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
写入仍被拦;shell 命令里的路径也仍被拦。用 `read`,不要用 `Get-Content`。
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# History map 的既定行为
|
|
2
|
+
|
|
3
|
+
> 2026-11-06。适用于 `dsh-continuity` 的 active history-map。
|
|
4
|
+
>
|
|
5
|
+
> 这不是“可调度摘要”:它必须自动进 surface。否则它跟一份文件没有区别。
|
|
6
|
+
|
|
7
|
+
## 1. 位置
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
system/message
|
|
11
|
+
[continuity:history-map] ← system 之后第一条
|
|
12
|
+
...
|
|
13
|
+
retained original tail
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`ensureHistoryMap` 用:
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
surfaceOp: { op:'replace', startSeq, endSeq }
|
|
20
|
+
sourceEventSeqs: [...] // 顶层字段,不在 surfaceOp 里
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
把最前面的一段替换成 map。
|
|
24
|
+
|
|
25
|
+
不是 append 到尾部。
|
|
26
|
+
append 只能加在末尾,不能构成“摘要 + 原文”的顺序。
|
|
27
|
+
|
|
28
|
+
## 2. 刷新条件
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
hash 不变 + carrier 在 surface -> 不动
|
|
32
|
+
hash 变(新 fold / excerpt 规则变)-> replace front 单节点刷新
|
|
33
|
+
carrier 不在 surface(被折叠/清除)-> 重新注入
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`history-map-probe.json` 每次 `ensureHistoryMap` 写一次,字段:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
at / sessionId / nodeCount / frontSeq / frontIsCarrier
|
|
40
|
+
mapPath / mapPathExists / indexRecords / builtChars
|
|
41
|
+
range / reason / error / carrierSeq
|
|
42
|
+
startSeq / endSeq / seqCount / seqFirst / seqLast
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
常见 `reason`:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
returned-front-carrier front 已是 map,hash 未变
|
|
49
|
+
updated-front-carrier front 已是 map,hash 变了并刷新
|
|
50
|
+
returned-no-index summaries/index.json 不存在
|
|
51
|
+
returned-no-range 找不到可替换区间(兜底应只换 front)
|
|
52
|
+
returned-dedup 进程内 bootstrap 记录命中(仅同进程热路径,非持久状态)
|
|
53
|
+
ok 首次 front replace 成功
|
|
54
|
+
error 读 index / build / replace 抛错
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`returned-dedup` 不能当作“已注入”的持久证据:进程重启后 Map 清空,它会重新走 front replace。
|
|
58
|
+
|
|
59
|
+
### 模式
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
~/.dsh/continuity/history-map-mode
|
|
63
|
+
off 完全不动作(默认)
|
|
64
|
+
observe 只写 probe,不注入 / 不 replace / 不 stub
|
|
65
|
+
auto 注入 + 自刷新(实验档)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
默认 `off`:native checkpoint 是唯一小抄,fold 必写,位置由 native 保证。
|
|
69
|
+
history-map 不再作为默认中间层;`auto` 只保留为实验档。
|
|
70
|
+
|
|
71
|
+
`auto` 下 front 已是 `compact-checkpoint` 时 no-op,不再用 map 替换 native summary。
|
|
72
|
+
`observe` 下 `oldestRange` 不跳过 map,便于观察 native fold 是否把旧 map 折入。
|
|
73
|
+
|
|
74
|
+
## 3. 显隐
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
surface 上:1 条 active map + 若干 map-stub
|
|
78
|
+
raw 里:历史 map / stub 事件都保留
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`map-stub` 用独立 marker:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
[continuity:map-stub] (superseded)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
原因:stub 也以 `[continuity:history-map]` 开头的话,会被 `findHistoryMapCarriers` 当成 carrier,
|
|
88
|
+
导致每轮都误判 extras、重复注入。
|
|
89
|
+
|
|
90
|
+
stub 的 replace 也必须带顶层:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
sourceEventSeqs: [seq]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 4. cap 取舍
|
|
97
|
+
|
|
98
|
+
顺序:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
位置
|
|
102
|
+
-> 最新区间(新 -> 旧)
|
|
103
|
+
-> 上次索引之后的 fold
|
|
104
|
+
-> 长期结构
|
|
105
|
+
-> 取原文
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
规则:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
单个区间 excerpt 上限:6,000 字(总 cap 内的分配,不是每段都保证 6,000)
|
|
112
|
+
同一区间多条 record:toSeq 降序,再按正文长度降序;最多取 2 条并均分 excerpt
|
|
113
|
+
超 cap:先丢最老区间,保最新区间
|
|
114
|
+
长期结构最后才丢
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
当前 0b 实测:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
总长 12,587 字 ≈ 3,147 tokens(cap 4k)
|
|
121
|
+
最近区间 83294-84075 6,012 字
|
|
122
|
+
80911-81009 被 cap 丢掉(预期)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 5. 信息边界
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
map 是索引,不是原文。
|
|
129
|
+
细节以 raw / session_log 为准。
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`front replace` 会真的从 **surface** 移除旧文本。
|
|
133
|
+
raw 仍在 session log;这不是删除原文。
|
|
134
|
+
|
|
135
|
+
既定代价:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
surface 上的摘要可能比 raw 短;
|
|
139
|
+
map 替换 native checkpoint 后,surface 不再有那份 checkpoint 原文;
|
|
140
|
+
需要原文时按 seq 回 session_log 取。
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
不要因为“surface 摘要比 raw 短”把它当成新 bug。
|
|
144
|
+
|
|
145
|
+
## 6. bootstrap replace 与 archive
|
|
146
|
+
|
|
147
|
+
成功 front replace 后,engine 写:
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
sessions/<id>/summaries/bootstrap-ranges.json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
summary-index 构建时读取这个侧车,把 bootstrap replace 的区间并入 coverage,
|
|
154
|
+
避免重建 index 时把这段误判成 pending window。
|
|
155
|
+
|
|
156
|
+
可核对的分叉信号:
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
pendingWindows 变大 = 分叉开始
|
|
160
|
+
现在 pending 仍 0,所以尚未分叉
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
两个语义边界:
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
1 boot 段是 covered-without-summary
|
|
167
|
+
并入 coverage 后 pendingWindows 会被结构性压到 0,
|
|
168
|
+
即使那段没有可读摘要文本。
|
|
169
|
+
pending 0 不等于“都有摘要”,只等于“有 surface 替代”。
|
|
170
|
+
|
|
171
|
+
2 boot 段没有 release 语义
|
|
172
|
+
如果 front map 被折叠/删除,sidecar 记录仍在,coverage 仍宣称覆盖。
|
|
173
|
+
记录带 carrierSeq,但当前扫描不校验 carrier 是否还存在。
|
|
174
|
+
以后要加:carrier 不在 surface 时把该段标 stale,不并入 coverage。
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
侧车形状:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
{ version:1, ranges:[{ fromSeq, toSeq, tokens, carrierSeq, at }] }
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 7. pending window 生成器
|
|
184
|
+
|
|
185
|
+
当 `pendingWindows > 0`,可以显式生成抽取式 window summary:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
node bin/summary-index.mjs --raw <session.v4.jsonl.zstd> --session-dir <dir> \
|
|
189
|
+
--extract-pending --apply
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
行为:
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
1 先建 base index,列出 pending
|
|
196
|
+
2 对每个 pending 生成 300-800 tokens 的抽取式摘要
|
|
197
|
+
3 写 summaries/windows/<from>-<to>.json
|
|
198
|
+
4 用 windowRanges + windowRecords 重建 index
|
|
199
|
+
pending 归零;window 以 kind:'window-extractive'、quality:'extractive' 进入 records
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
抽取式内容是 fallback,不是 LLM 摘要;结构保留用户/助手/工具和 raw seq 指针。
|
|
203
|
+
|
|
204
|
+
过滤掉的注入前缀:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
[continuity:* / 追忆 / 抽取 / 工作线 / 标签 / 规则 / 规矩 / 习惯 / 技能 / 归位 / 候选 / 存? / 闸 / 回正 / 学习 / 记忆 / 创 / peer]
|
|
208
|
+
<system-reminder>
|
|
209
|
+
Current runtime context
|
|
210
|
+
Time sampled while preparing
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
2026-11-06 live 0b 第一次 apply 混入 `[规则]`(实际是 peer `[创]` 正文引用),已回滚;
|
|
214
|
+
最终版本把 peer 保留为独立角色:
|
|
215
|
+
|
|
216
|
+
```text
|
|
217
|
+
window-84076-88063
|
|
218
|
+
kind window-extractive / quality extractive
|
|
219
|
+
2,205 字 / 552 tokens
|
|
220
|
+
## 用户 只留真实用户
|
|
221
|
+
## 同伴 [创] 内容,标 (peer) seq ...
|
|
222
|
+
## 助手 只抽有正文的 assistant/message
|
|
223
|
+
standalone [规则] line = false
|
|
224
|
+
records 159 / pending 0 / windows 1
|
|
225
|
+
map preview 87FDA63E / 11,772 字 / 2,943 tokens
|
|
226
|
+
backup: backups/summary-index-window-20261106/index.json.before-assistant-sampling
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
peer 内容不再过滤,也不会被归进「用户」。
|
|
230
|
+
assistant 采样只收 `textOf(event)` 非空的节点,避免 479 条里只抽到空段。
|
|
231
|
+
|
|
232
|
+
## 8. 已知未完成
|
|
233
|
+
|
|
234
|
+
```text
|
|
235
|
+
1 window 生成器目前是抽取式 fallback,不是 LLM 摘要
|
|
236
|
+
2 band / protect 未改;protect 仍是 0.20
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
snapshot/summary 事件已按 `session.seq` 增量缓存;首轮全量,后续只读新增 seq。
|
|
240
|
+
|
|
241
|
+
## 9. 修改前检查
|
|
242
|
+
|
|
243
|
+
```text
|
|
244
|
+
1 sourceEventSeqs 必须在 append options 顶层
|
|
245
|
+
2 replace 端点用 surface 顺序,不要 min/max 归一化
|
|
246
|
+
3 stub 必须带顶层 sourceEventSeqs
|
|
247
|
+
4 cap 顺序不能反过来
|
|
248
|
+
5 改完先看 history-map-probe.json 的 reason
|
|
249
|
+
```
|