@a9i5k4/dsh-auto-memory 2.2.2 → 2.2.3

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 (110) hide show
  1. package/docs/A3-RISK-ASSESSMENT-20260830.md +61 -0
  2. package/docs/COT-WATCH-RFC.md +88 -0
  3. package/docs/DUAL-TIER-RATIFICATION-PROMPT.md +71 -0
  4. package/docs/HANDOFF-HARNESS.md +78 -0
  5. package/docs/HANDOFF-M8-M9-M10.md +203 -0
  6. package/docs/HY4-TOUR-LOGO-HANDOFF-2.md +60 -0
  7. package/docs/HY4-TOUR-LOGO-HANDOFF.md +100 -0
  8. package/docs/ISSUE-REPLY-UNATTENDED.md +31 -0
  9. package/docs/K3-LANDING-HANDOFF.md +76 -0
  10. package/docs/LANDING-OUTLINE.md +85 -0
  11. package/docs/M-CM-PLAN.md +166 -0
  12. package/docs/M-CM-STATE.md +64 -0
  13. package/docs/M3B-CONTRACT.md +461 -0
  14. package/docs/M4-CONTRACT.md +1207 -0
  15. package/docs/M5-CONTRACT.md +383 -0
  16. package/docs/M6-CONTRACT.md +342 -0
  17. package/docs/M7-ACTIVATION-ALGO-REFERENCES.md +104 -0
  18. package/docs/M7-ACTIVATION-CALIBRATION.md +144 -0
  19. package/docs/M7-ACTIVATION-FEATURE-AGENT-PROMPT.md +79 -0
  20. package/docs/M7-ACTIVATION-FEATURE-CALIBRATION.md +58 -0
  21. package/docs/M7-ACTIVATION-FEATURE-DESIGN.md +124 -0
  22. package/docs/M7-ACTIVATION-V2-CONTROLLED-SHADOW.md +127 -0
  23. package/docs/M7-ACTIVATION-V2-HANDOFF.md +132 -0
  24. package/docs/M7-ACTIVATION-V2-HOLDEDOUT-EVAL.md +94 -0
  25. package/docs/M7-ACTIVATION-V2-HOLDEDOUT-SHADOW.md +60 -0
  26. package/docs/M7-ACTIVATION-V2-LIVE-SHADOW-PLAN.md +85 -0
  27. package/docs/M7-ACTIVATION-V2-PAPER.md +303 -0
  28. package/docs/M7-AGENT-HANDOFF-PROMPT.md +63 -0
  29. package/docs/M7-ALGORITHM-DECISION.md +174 -0
  30. package/docs/M7-AUTONOMOUS-STATE.md +252 -0
  31. package/docs/M7-BENCHMARK-PLAN.md +78 -0
  32. package/docs/M7-CLOSED-LOOP-WIRING.md +110 -0
  33. package/docs/M7-EMBEDDING-BENCHMARK.md +164 -0
  34. package/docs/M7-INTERFACE-DIGEST.md +144 -0
  35. package/docs/M7-LABEL-REVIEW-REPORT.md +107 -0
  36. package/docs/M7-LEXICAL-TUNING.md +58 -0
  37. package/docs/M7-LIVE-SHADOW-SCRIPT.md +30 -0
  38. package/docs/M7-PYTHON-IMPLEMENTATION-REPORT.md +92 -0
  39. package/docs/M7-RESEARCH-PAPER.md +442 -0
  40. package/docs/M7-TASKSET-DISPATCH.md +213 -0
  41. package/docs/M8-MEMORY-HUB.md +105 -0
  42. package/docs/MEMORY-SYSTEMS-SURVEY-2026-09.md +166 -0
  43. package/docs/NEXT-MAJOR-PROMO.md +363 -0
  44. package/docs/NEXT-MAJOR-README-DRAFT.zh.md +205 -0
  45. package/docs/NEXT-MAJOR-VISION.md +112 -0
  46. package/docs/PREVIEW-NEXT-STEPS.md +229 -0
  47. package/docs/PROJECT-FREEZE-AND-ROADMAP.md +200 -0
  48. package/docs/PROMO-STYLE-GUIDE.md +84 -0
  49. package/docs/PYTHON-SIDECAR-CONTRACT.md +539 -0
  50. package/docs/R2-POLICY-PLUMBING-BLUEPRINT.md +99 -0
  51. package/docs/RELEASE-READINESS-PLAN.md +91 -0
  52. package/docs/RELEASE-SEMANTIC-OPTION.md +181 -0
  53. package/docs/S1-SCIENTIFIC-RIGOR.md +269 -0
  54. package/docs/S2-DEEP-ABSORPTION.md +259 -0
  55. package/docs/S3-TARGET-ARCHITECTURE.md +172 -0
  56. package/docs/USER-GUIDE.zh-CN.md +98 -0
  57. package/docs/banner.jpg +0 -0
  58. package/docs/implementation-handoff-context.zh-CN.md +429 -0
  59. package/docs/landing/index.html +1745 -0
  60. package/docs/paper-figures/fig1_model_quality.png +0 -0
  61. package/docs/paper-figures/fig2_chunk_reversal.png +0 -0
  62. package/docs/paper-figures/fig3_latency.png +0 -0
  63. package/docs/paper-figures/fig4_hybrid.png +0 -0
  64. package/docs/paper-figures/fig5_rerank_tradeoff.png +0 -0
  65. package/docs/paper-figures/fig6_cluster_sweep.png +0 -0
  66. package/docs/paper-figures/fig7_resource.png +0 -0
  67. package/docs/paper-figures-v2/fig1_echo_trap.png +0 -0
  68. package/docs/paper-figures-v2/fig2_pr_paths.png +0 -0
  69. package/docs/paper-figures-v2/fig3_coefficients.png +0 -0
  70. package/docs/paper-figures-v2/fig4_calibration.png +0 -0
  71. package/docs/paper-figures-v2/fig5_order_ablation.png +0 -0
  72. package/docs/paper-figures-v2/fig6_containment.png +0 -0
  73. package/docs/proactive-associative-memory-architecture.html +659 -0
  74. package/docs/proactive-associative-memory-meta-code.html +1058 -0
  75. package/docs/proactive-associative-memory-research-report.zh-CN.md +685 -0
  76. package/docs/proactive-associative-memory-system-map.html +1580 -0
  77. package/docs/promo/first-run-guide.html +397 -0
  78. package/docs/promo/homepage.html +384 -0
  79. package/docs/screenshots/calendar-en.png +0 -0
  80. package/docs/screenshots/calendar-zh.png +0 -0
  81. package/docs/screenshots/connect-en.png +0 -0
  82. package/docs/screenshots/connect-zh.png +0 -0
  83. package/docs/screenshots/main-connect-en.png +0 -0
  84. package/docs/screenshots/main-connect-zh.png +0 -0
  85. package/docs/screenshots/overview-en.png +0 -0
  86. package/docs/screenshots/overview-zh.png +0 -0
  87. package/docs/screenshots/panel-hub.png +0 -0
  88. package/docs/screenshots/panel-overview.png +0 -0
  89. package/docs/screenshots/panel-refine.png +0 -0
  90. package/docs/screenshots/promo/promo-0-banner-v2.png +0 -0
  91. package/docs/screenshots/promo/promo-1-hero.png +0 -0
  92. package/docs/screenshots/promo/promo-2-tour.png +0 -0
  93. package/docs/screenshots/promo/promo-3-recall.png +0 -0
  94. package/docs/screenshots/promo/promo-4-unattended.png +0 -0
  95. package/docs/screenshots/promo/promo-5-external.png +0 -0
  96. package/docs/screenshots/promo/promo-6-greeting.png +0 -0
  97. package/docs/screenshots/reflections-en.png +0 -0
  98. package/docs/screenshots/search-zh.png +0 -0
  99. package/docs/screenshots/settings-2-zh.png +0 -0
  100. package/docs/screenshots/settings-debug-zh.png +0 -0
  101. package/docs/screenshots/settings-en.png +0 -0
  102. package/docs/screenshots/settings-zh.png +0 -0
  103. package/docs/screenshots/tour-core.png +0 -0
  104. package/docs/screenshots/tour-external.png +0 -0
  105. package/docs/screenshots/tour-toggles.png +0 -0
  106. package/docs/screenshots/tour-welcome.png +0 -0
  107. package/docs/screenshots/workspace-map-zh.png +0 -0
  108. package/docs/social-preview.png +0 -0
  109. package/lib/client.js +5 -0
  110. package/package.json +2 -1
@@ -0,0 +1,397 @@
1
+ <!DOCTYPE html>
2
+ <!-- ============================================================
3
+ dsh-auto-memory 首次开启引导(宣传稿 · 供精修)
4
+ 结构:6 步向导(欢迎 → 基础层 → 语义增强 C2 → 进阶 C3 → 开关面板 → 完成)
5
+ 交互:纯 vanilla JS 步进 + C2 下载状态机演示(未下载→下载中→校验中→建库中→就绪)
6
+ 主题:与主页同一 liquid-glass 暗色玻璃(:root 变量可整体换肤)
7
+ 零外部依赖,单文件交付。对应工程侧已冻结的首启序列:
8
+ 弹窗确认 → 下载 → SHA256/自检 → 后台建索引 → 原子切换 → 跑通才开
9
+ ============================================================= -->
10
+ <html lang="zh-CN">
11
+ <head>
12
+ <meta charset="UTF-8">
13
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
14
+ <title>欢迎使用 dsh-auto-memory · 首次开启引导</title>
15
+ <style>
16
+ :root {
17
+ --bg0: #060913;
18
+ --glass: rgba(255, 255, 255, 0.045);
19
+ --glass-border: rgba(255, 255, 255, 0.10);
20
+ --txt: #e8ecf6;
21
+ --txt-dim: #93a0bd;
22
+ --accent: #5b8cff;
23
+ --accent2: #8f6bff;
24
+ --accent3: #38d2c2;
25
+ --ok: #3ecf8e;
26
+ --warn: #f0b34e;
27
+ --queued: #5c6a8a;
28
+ --radius: 18px;
29
+ --font: "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
30
+ --mono: "Cascadia Code", Consolas, monospace;
31
+ }
32
+ * { margin: 0; padding: 0; box-sizing: border-box; }
33
+ body {
34
+ min-height: 100vh;
35
+ display: flex; align-items: center; justify-content: center;
36
+ padding: 30px 18px;
37
+ background:
38
+ radial-gradient(1100px 560px at 20% -10%, rgba(91,140,255,.15), transparent 60%),
39
+ radial-gradient(900px 500px at 85% 5%, rgba(143,107,255,.11), transparent 55%),
40
+ radial-gradient(800px 600px at 50% 115%, rgba(56,210,194,.08), transparent 60%),
41
+ var(--bg0);
42
+ color: var(--txt); font-family: var(--font); line-height: 1.7;
43
+ }
44
+
45
+ .wizard {
46
+ width: 100%; max-width: 860px;
47
+ background: var(--glass); border: 1px solid var(--glass-border);
48
+ border-radius: 24px; backdrop-filter: blur(20px);
49
+ box-shadow: 0 30px 80px rgba(0,0,0,.45);
50
+ overflow: hidden;
51
+ }
52
+
53
+ /* ---- 头部:标识 + 步骤指示 ---- */
54
+ .head { padding: 30px 36px 0; display: flex; align-items: center; gap: 14px; }
55
+ .head .dot {
56
+ width: 40px; height: 40px; border-radius: 13px; flex: none;
57
+ background: conic-gradient(from 210deg, var(--accent), var(--accent2), var(--accent3), var(--accent));
58
+ box-shadow: 0 0 22px rgba(91,140,255,.55);
59
+ }
60
+ .head h1 { font-size: 19px; font-weight: 800; }
61
+ .head small { display: block; color: var(--txt-dim); font-size: 12.5px; font-weight: 400; }
62
+ .steps { display: flex; gap: 7px; margin-left: auto; }
63
+ .steps i {
64
+ width: 26px; height: 5px; border-radius: 3px; background: var(--glass-border);
65
+ transition: background .25s ease;
66
+ }
67
+ .steps i.on { background: linear-gradient(90deg, var(--accent), var(--accent2)); }
68
+ .steps i.done { background: var(--accent3); }
69
+
70
+ /* ---- 主体 ---- */
71
+ .body { padding: 26px 36px 8px; min-height: 372px; }
72
+ .pane { display: none; animation: fadein .3s ease; }
73
+ .pane.on { display: block; }
74
+ @keyframes fadein { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
75
+
76
+ .pane h2 { font-size: 21px; margin-bottom: 6px; }
77
+ .pane .lead { color: var(--txt-dim); font-size: 14px; margin-bottom: 22px; }
78
+ .pane b.hl { color: var(--accent3); font-weight: 700; }
79
+ .pane .dim { color: var(--txt-dim); }
80
+
81
+ .row { display: flex; gap: 14px; flex-wrap: wrap; }
82
+ .box {
83
+ flex: 1; min-width: 210px;
84
+ background: rgba(255,255,255,.03); border: 1px solid var(--glass-border);
85
+ border-radius: 14px; padding: 16px 16px;
86
+ }
87
+ .box b { font-size: 14.5px; display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
88
+ .box p { font-size: 12.5px; color: var(--txt-dim); }
89
+ .box .big { font-size: 22px; }
90
+
91
+ /* 开关行(第 5 步) */
92
+ .switch-row {
93
+ display: flex; align-items: center; gap: 14px;
94
+ background: rgba(255,255,255,.03); border: 1px solid var(--glass-border);
95
+ border-radius: 14px; padding: 14px 18px; margin-bottom: 11px;
96
+ }
97
+ .switch-row .info { flex: 1; }
98
+ .switch-row b { font-size: 14.5px; display: block; }
99
+ .switch-row span { font-size: 12px; color: var(--txt-dim); }
100
+ .sw {
101
+ width: 46px; height: 26px; border-radius: 999px; flex: none; cursor: pointer;
102
+ background: rgba(92,106,138,.35); border: 1px solid var(--glass-border);
103
+ position: relative; transition: background .2s ease;
104
+ }
105
+ .sw::after {
106
+ content: ""; position: absolute; top: 3px; left: 3px;
107
+ width: 18px; height: 18px; border-radius: 50%; background: #cfd8ec;
108
+ transition: transform .2s ease, background .2s ease;
109
+ }
110
+ .sw.on { background: linear-gradient(90deg, var(--accent), var(--accent2)); }
111
+ .sw.on::after { transform: translateX(20px); background: #fff; }
112
+ .sw .st { position: absolute; right: -40px; top: 3px; font-size: 11px; color: var(--txt-dim); font-family: var(--mono); width: 34px; }
113
+ .sw.on .st { color: var(--ok); }
114
+
115
+ /* C2 下载演示(第 3 步) */
116
+ .dl {
117
+ background: rgba(255,255,255,.03); border: 1px solid var(--glass-border);
118
+ border-radius: 14px; padding: 18px 20px; margin-top: 18px;
119
+ }
120
+ .dl-top { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
121
+ .dl-top b { font-size: 14.5px; }
122
+ .dl-state {
123
+ margin-left: auto; font-family: var(--mono); font-size: 12px;
124
+ padding: 4px 12px; border-radius: 999px;
125
+ border: 1px solid var(--glass-border); color: var(--txt-dim);
126
+ }
127
+ .dl-state.ready { color: var(--ok); border-color: rgba(62,207,142,.4); }
128
+ .dl-state.busy { color: var(--accent3); border-color: rgba(56,210,194,.4); }
129
+ .bar { height: 8px; border-radius: 5px; background: rgba(255,255,255,.06); overflow: hidden; }
130
+ .bar i {
131
+ display: block; height: 100%; width: 0%;
132
+ background: linear-gradient(90deg, var(--accent), var(--accent3));
133
+ transition: width .3s ease; border-radius: 5px;
134
+ }
135
+ .dl-meta { display: flex; justify-content: space-between; margin-top: 9px; font-size: 11.5px; color: var(--txt-dim); font-family: var(--mono); }
136
+ .dl-actions { margin-top: 14px; display: flex; gap: 10px; }
137
+ .mini-btn {
138
+ font-size: 12.5px; padding: 8px 18px; border-radius: 10px; cursor: pointer;
139
+ border: 1px solid var(--glass-border); background: var(--glass); color: var(--txt);
140
+ font-family: var(--font);
141
+ }
142
+ .mini-btn.primary { background: linear-gradient(100deg, var(--accent), var(--accent2)); border: none; color: #fff; font-weight: 700; }
143
+ .mini-btn:disabled { opacity: .4; cursor: not-allowed; }
144
+ .dl-note { margin-top: 12px; font-size: 12px; color: var(--txt-dim); }
145
+ .dl-note code { font-family: var(--mono); color: var(--accent3); font-size: 11.5px; }
146
+
147
+ /* 对比表(第 3/4 步共用) */
148
+ .cmp { width: 100%; border-collapse: collapse; font-size: 13px; }
149
+ .cmp th, .cmp td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--glass-border); }
150
+ .cmp th { color: var(--txt-dim); font-weight: 600; font-size: 11.5px; }
151
+ .cmp tr:last-child td { border-bottom: none; }
152
+ .cmp .mono { font-family: var(--mono); font-size: 12px; }
153
+
154
+ /* ---- 底部按钮 ---- */
155
+ .foot {
156
+ padding: 18px 36px 26px; display: flex; align-items: center; gap: 12px;
157
+ }
158
+ .foot .spacer { flex: 1; }
159
+ .foot .hint { font-size: 12px; color: var(--queued); }
160
+ .nav-btn {
161
+ font-size: 14px; padding: 11px 26px; border-radius: 12px; cursor: pointer;
162
+ border: 1px solid var(--glass-border); background: var(--glass); color: var(--txt);
163
+ font-family: var(--font); font-weight: 600;
164
+ }
165
+ .nav-btn.primary {
166
+ background: linear-gradient(100deg, var(--accent), var(--accent2));
167
+ border: none; color: #fff; box-shadow: 0 6px 24px rgba(91,140,255,.3);
168
+ }
169
+ .nav-btn:disabled { opacity: .35; cursor: not-allowed; }
170
+ </style>
171
+ </head>
172
+ <body>
173
+
174
+ <div class="wizard">
175
+ <div class="head">
176
+ <div class="dot"></div>
177
+ <div>
178
+ <h1>欢迎使用 dsh-auto-memory</h1>
179
+ <small>为 DeepSeek Harness 打造的本地联想记忆 · 首次开启引导</small>
180
+ </div>
181
+ <div class="steps" id="steps">
182
+ <i class="on"></i><i></i><i></i><i></i><i></i><i></i>
183
+ </div>
184
+ </div>
185
+
186
+ <div class="body">
187
+
188
+ <!-- ========== 第 1 步 · 欢迎 ========== -->
189
+ <div class="pane on">
190
+ <h2>三分钟后,你的 AI 开始拥有记忆</h2>
191
+ <p class="lead">这个插件让 DeepSeek Harness 学会「想起」:监听对话与思维链,在恰当的时刻把恰当的旧记忆以引用形式送回上下文。</p>
192
+ <div class="row">
193
+ <div class="box"><b><span class="big">🧠</span> 开箱即用</b><p>基础能力零配置:词法检索 + 记忆锚定 + 自动沉淀,装好即生效。</p></div>
194
+ <div class="box"><b><span class="big">🏠</span> 本地优先</b><p>所有记忆都是本机明文 Markdown,可读可改可备份,不出你的电脑。</p></div>
195
+ <div class="box"><b><span class="big">📎</span> 温和注入</b><p>记忆以「参考尾注」形式出现,明确标注不是指令,可审计、可关闭。</p></div>
196
+ </div>
197
+ <p class="dim" style="margin-top:18px; font-size:12.5px;">
198
+ 本引导只需走一遍。之后一切都可以在 <b class="hl">设置 → 自动化 / 语义引擎 / 记忆中枢</b> 里随时调整。
199
+ </p>
200
+ </div>
201
+
202
+ <!-- ========== 第 2 步 · 基础层 ========== -->
203
+ <div class="pane">
204
+ <h2>基础层:现在就已经在工作</h2>
205
+ <p class="lead">下面这些能力<b class="hl">不需要任何下载</b>,开启插件即生效。</p>
206
+ <div class="switch-row">
207
+ <div class="info"><b>📖 记忆锚定与索引</b><span>你的 MEMORY.md / 项目笔记 / 每日日志被稳定锚定并建立只读索引</span></div>
208
+ <div class="sw on"><span class="st">已开启</span></div>
209
+ </div>
210
+ <div class="switch-row">
211
+ <div class="info"><b>🔎 词法检索(C1)</b><span>BM25 + 中文 2-gram 的保底检索,任何机器零依赖运行</span></div>
212
+ <div class="sw on"><span class="st">已开启</span></div>
213
+ </div>
214
+ <div class="switch-row">
215
+ <div class="info"><b>🌙 自动沉淀</b><span>每轮对话结束后 AI 评估并提炼要点写入日志,寒暄自动跳过(间隔与额度可调)</span></div>
216
+ <div class="sw on"><span class="st">已开启</span></div>
217
+ </div>
218
+ <div class="switch-row">
219
+ <div class="info"><b>🧾 证据留痕</b><span>读取/引用/纠正/注入全程留痕,隐私投影,30 天自动清理</span></div>
220
+ <div class="sw on"><span class="st">已开启</span></div>
221
+ </div>
222
+ <p class="dim" style="font-size:12.5px; margin-top:14px;">
223
+ 下一页是<b class="hl">可选</b>的语义增强——如果你只想先用起来,可以一路「下一步」跳过。
224
+ </p>
225
+ </div>
226
+
227
+ <!-- ========== 第 3 步 · C2 语义增强 ========== -->
228
+ <div class="pane">
229
+ <h2>可选升级:语义检索(C2 · 默认推荐档)</h2>
230
+ <p class="lead">安装一个约 130 MB 的本地嵌入模型后,检索从「关键词匹配」升级为「语义理解」——
231
+ 换个说法也能想起旧事。完全本地推理,装不装都不影响基础层。</p>
232
+ <table class="cmp">
233
+ <tr><th>对比</th><th>C1 词法(已就绪)</th><th>C2 语义(本页可选)</th></tr>
234
+ <tr><td>体积</td><td class="mono">0 GB</td><td class="mono">~130 MB</td></tr>
235
+ <tr><td>检索质量 R@5</td><td class="mono">0.20</td><td class="mono">0.85</td></tr>
236
+ <tr><td>能力</td><td>关键词 / 精确词匹配</td><td>跨说法语义联想 · 中英文</td></tr>
237
+ </table>
238
+ <div class="dl">
239
+ <div class="dl-top">
240
+ <b>multilingual-e5-small(q8 量化)</b>
241
+ <span class="dl-state" id="dlState">未下载</span>
242
+ </div>
243
+ <div class="bar"><i id="dlBar"></i></div>
244
+ <div class="dl-meta"><span id="dlBytes">0.0 / 118 MB</span><span>SHA-256 校验 · 本地推理</span></div>
245
+ <div class="dl-actions">
246
+ <button class="mini-btn primary" id="dlBtn">立即安装</button>
247
+ <button class="mini-btn" id="dlSkip">稍后再说</button>
248
+ </div>
249
+ <div class="dl-note">
250
+ 首启序列:确认下载 → 后台下载 → <code>SHA-256 校验 + 最小推理自检</code> → 后台建索引 → 就绪后自动切换。
251
+ 任何一步失败自动回退 C1 词法,<b>检索服务永不中断</b>;建库期间可正常使用。
252
+ </div>
253
+ </div>
254
+ </div>
255
+
256
+ <!-- ========== 第 4 步 · C3 进阶 ========== -->
257
+ <div class="pane">
258
+ <h2>进阶选项:Python 深度档(C3 · 爱好者向)</h2>
259
+ <p class="lead">如果你追求检索质量上限并愿意多花一些磁盘与内存,C3 提供更强的多语嵌入模型。
260
+ 这一步完全可以跳过——之后随时可以在设置里开启。</p>
261
+ <table class="cmp">
262
+ <tr><th>对比</th><th>C2(上一页)</th><th>C3 Python 深度档</th></tr>
263
+ <tr><td>模型</td><td class="mono">e5-small q8</td><td class="mono">bge-m3 int8 ONNX</td></tr>
264
+ <tr><td>体积</td><td class="mono">~130 MB</td><td class="mono">563 MB</td></tr>
265
+ <tr><td>检索质量 R@5</td><td class="mono">0.85</td><td class="mono">0.925</td></tr>
266
+ <tr><td>运行方式</td><td>Node 内嵌推理</td><td>Python 子进程 · 懒启动 · 空闲自动退出</td></tr>
267
+ <tr><td>失败行为</td><td colspan="2">任一级不可用 → 自动降级回下一级(C3→C2→C1),零人工干预</td></tr>
268
+ </table>
269
+ <p class="dim" style="margin-top:16px; font-size:12.5px;">
270
+ 需要本机具备 Python 运行环境;引导安装器会自动检测并提示。判定策略与注入面与 C2 完全共享,体验一致。
271
+ </p>
272
+ </div>
273
+
274
+ <!-- ========== 第 5 步 · 开关面板 ========== -->
275
+ <div class="pane">
276
+ <h2>按你的习惯打开开关</h2>
277
+ <p class="lead">以下是可以现在决定的三个核心开关(之后随时可改,参数均可在设置页自定义)。</p>
278
+ <div class="switch-row">
279
+ <div class="info"><b>🔗 联想记忆(总开关)</b><span>记忆检索、证据与注入的总闸门</span></div>
280
+ <div class="sw on" data-sw><span class="st">开</span></div>
281
+ </div>
282
+ <div class="switch-row">
283
+ <div class="info"><b>👁️ 思维链监听</b><span>不只听你说的,也「听」AI 想的——CoT 中浮现的回忆意图同样参与唤起判定(滑动监测核心)</span></div>
284
+ <div class="sw on" data-sw><span class="st">开</span></div>
285
+ </div>
286
+ <div class="switch-row">
287
+ <div class="info"><b>🌱 记忆中枢</b><span>三层记忆(经历→事实→技能)治理与技能 checklist 注入;建议先用一段时间再开</span></div>
288
+ <div class="sw" data-sw><span class="st">关</span></div>
289
+ </div>
290
+ <div class="switch-row">
291
+ <div class="info"><b>📎 唤起注入模式</b><span>shadow=只记录不注入(观察期)→ canary=仅明确回忆注入(推荐)→ active=全部注入</span></div>
292
+ <div class="sw on" data-sw><span class="st">canary</span></div>
293
+ </div>
294
+ <p class="dim" style="font-size:12.5px; margin-top:14px;">
295
+ 点击开关可以体验切换。所有参数(冷却、候选方案、注入长度、margin 阈值等)都在
296
+ <b class="hl">设置页</b>提供中英双语的自定义档位。
297
+ </p>
298
+ </div>
299
+
300
+ <!-- ========== 第 6 步 · 完成 ========== -->
301
+ <div class="pane">
302
+ <h2>一切就绪 🎉</h2>
303
+ <p class="lead">你的 AI 已经开始积累会成长的记忆。几个值得知道的地方:</p>
304
+ <div class="row">
305
+ <div class="box"><b><span class="big">🧭</span> 记忆面板</b><p>侧边栏「记忆」随时查看:锚定记录、今日日志、反思与接续内容。</p></div>
306
+ <div class="box"><b><span class="big">📊</span> 观测与反馈</b><p>每次唤起决策都有理由码与证据;后续版本将提供决策时间线与一键反馈(A/P/S/H/E)。</p></div>
307
+ <div class="box"><b><span class="big">🔁</span> 随时回退</b><p>任何开关关闭即恢复零注入基线;引擎失败自动降级,删除记忆走安全事务。</p></div>
308
+ </div>
309
+ <p class="dim" style="margin-top:18px; font-size:12.5px;">
310
+ 试试对它说:<b class="hl">「我们之前是怎么定 XX 的?」</b>——看它把记忆带回来。
311
+ </p>
312
+ </div>
313
+ </div>
314
+
315
+ <div class="foot">
316
+ <span class="hint" id="stepHint">第 1 步 / 共 6 步</span>
317
+ <div class="spacer"></div>
318
+ <button class="nav-btn" id="prevBtn" disabled>上一步</button>
319
+ <button class="nav-btn primary" id="nextBtn">下一步</button>
320
+ </div>
321
+ </div>
322
+
323
+ <script>
324
+ /* ---- 向导步进(供精修:真实接入时替换为宿主向导 API) ---- */
325
+ (function () {
326
+ var cur = 0, total = 6;
327
+ var panes = document.querySelectorAll('.pane');
328
+ var dots = document.querySelectorAll('#steps i');
329
+ var prevBtn = document.getElementById('prevBtn');
330
+ var nextBtn = document.getElementById('nextBtn');
331
+ var hint = document.getElementById('stepHint');
332
+ function render() {
333
+ for (var i = 0; i < total; i++) {
334
+ panes[i].classList.toggle('on', i === cur);
335
+ dots[i].classList.toggle('on', i === cur);
336
+ dots[i].classList.toggle('done', i < cur);
337
+ }
338
+ prevBtn.disabled = cur === 0;
339
+ nextBtn.textContent = cur === total - 1 ? '开始使用' : '下一步';
340
+ hint.textContent = '第 ' + (cur + 1) + ' 步 / 共 ' + total + ' 步';
341
+ }
342
+ prevBtn.onclick = function () { if (cur > 0) { cur--; render(); } };
343
+ nextBtn.onclick = function () { if (cur < total - 1) { cur++; render(); } else { finish(); } };
344
+ function finish() {
345
+ nextBtn.disabled = true;
346
+ nextBtn.textContent = '已就绪 ✓';
347
+ hint.textContent = '引导完成 · 设置页可随时调整';
348
+ }
349
+ /* ---- 开关演示 ---- */
350
+ document.querySelectorAll('[data-sw]').forEach(function (sw) {
351
+ sw.onclick = function () {
352
+ sw.classList.toggle('on');
353
+ var st = sw.querySelector('.st');
354
+ var on = sw.classList.contains('on');
355
+ if (st) st.textContent = sw.getAttribute('data-label') || (on ? '开' : '关');
356
+ };
357
+ });
358
+ render();
359
+ })();
360
+
361
+ /* ---- C2 下载状态机演示(供精修:真实接入时对接 Asset Manager 事件) ----
362
+ 状态序列与工程侧冻结的首启序列一致:
363
+ idle(未下载) → downloading(下载中) → verifying(SHA256/自检) → indexing(建库中) → ready(就绪,原子切换) */
364
+ (function () {
365
+ var state = 'idle', pct = 0;
366
+ var btn = document.getElementById('dlBtn');
367
+ var bar = document.getElementById('dlBar');
368
+ var stEl = document.getElementById('dlState');
369
+ var bytesEl = document.getElementById('dlBytes');
370
+ var skip = document.getElementById('dlSkip');
371
+ function setState(s) {
372
+ state = s;
373
+ stEl.className = 'dl-state' + (s === 'ready' ? ' ready' : (s === 'idle' ? '' : ' busy'));
374
+ var label = { idle: '未下载', downloading: '下载中', verifying: '校验中', indexing: '建库中', ready: '就绪 ✓' }[s];
375
+ stEl.textContent = label;
376
+ if (s === 'idle') { btn.disabled = false; btn.textContent = '立即安装'; }
377
+ else { btn.disabled = true; btn.textContent = '安装中…'; }
378
+ }
379
+ function tick() {
380
+ if (state === 'downloading') {
381
+ pct = Math.min(100, pct + 4 + Math.random() * 7);
382
+ bar.style.width = pct + '%';
383
+ bytesEl.textContent = (pct / 100 * 118).toFixed(1) + ' / 118 MB';
384
+ if (pct >= 100) { setState('verifying'); setTimeout(function () { setState('indexing'); }, 900); }
385
+ } else if (state === 'indexing') {
386
+ bar.style.width = '100%';
387
+ bytesEl.textContent = '后台建索引 · 可正常使用';
388
+ if (Math.random() > 0.94) { setState('ready'); bytesEl.textContent = '118 MB · 已原子切换'; return; }
389
+ } else if (state === 'ready') { return; }
390
+ setTimeout(tick, state === 'verifying' ? 900 : 180);
391
+ }
392
+ btn.onclick = function () { setState('downloading'); tick(); };
393
+ skip.onclick = function () { setState('idle'); pct = 0; bar.style.width = '0%'; bytesEl.textContent = '0.0 / 118 MB'; };
394
+ })();
395
+ </script>
396
+ </body>
397
+ </html>