@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,99 @@
1
+ # R2:JS Policy Plumbing 实施蓝图(2026-08-26 用户批准启动)
2
+
3
+ > 状态:**规划阶段**——用户已确认 R2 启动(「既然现在基本都OK了,那我们就往R2往上走着」),
4
+ > 本文是设计基线。**尚未动代码**;待用户终裁范围/默认值后实施。
5
+ > 权威范围:docs/M7-ACTIVATION-V2-HANDOFF.md §第二轮(PII 三档硬过滤 / cross-workspace relay /
6
+ > append-only policy registry / 文件审批队列写回);与第一轮(Python feature v2)不得混合。
7
+
8
+ ## 0. 用户裁定(本轮核心,完整结构必须保留)
9
+
10
+ **「跨工作区 → 让用户选择是 A 还是 S」**
11
+ - 前半句 = 适用场景:跨工作区样本(命中当前工作区之外的记忆)。
12
+ - 后半句 = 处理方式:由用户开关决定 Activate 还是 Suppress(per-case)。
13
+ - 出处:heldout 批次 hd-048/049 rawChoice 原文「跨工作区让用户选择是A还是S。」(deferred);
14
+ label-review 批次 cal-0036/0037/0055/0058 = P(advisory,「反正做后注入是建议性的」);
15
+ hd-021/023 用户 override suppress→activate(宽松立场)。
16
+
17
+ ## 0b. 用户对 R2 默认值的两条修订意见(2026-08-26,原文钉住,实施时必须遵守)
18
+
19
+ **① 隐私/PII 与 relay 的最终决定权在用户,不在默认值。**
20
+ 「密钥、证件号这一类的数据,进不进语料库肯定还是要由用户来决断的。用户觉得自己的隐私可以进本地库,那就让他写进去;如果用户觉得不进本地库,那就不进。cross workspace relay 这个也是同理。」
21
+ → 含义:PII 三档过滤的「high 剔除」不是硬规则,而是**每类敏感数据一个用户可决断的开关**(默认可给保守值,但用户可逐项放行/禁止进本地语料库);relay 同理(off/advisory 只是初始值,最终由用户逐条/逐类决断)。R2 必须把「用户决断权」设计成显式可配置项,而非写死的策略。
22
+
23
+ **② append-only policy registry 需与分层记忆机制协调,并前瞻存储管理。**
24
+ 「append-only policy registry,我觉得可能还要跟着我后面提到的记忆机制——即 3 层记忆、长期记忆(memory)等多次分层记忆的相关内容来协调。当然,我觉得在本项目中,这个记忆机制确实是可以实现 append only,但是同时,这个存储空间可能会有一定的挑战,所以后续的这些存储管理功能可能也需要去做一些工作。」
25
+ → 含义:(a) registry 不能孤立设计——它与 M8/M9 的 3 层记忆(working/short-term/长期)/ 用户画像 / 长期记忆的分层体系耦合,未来这些层也要 append-only 留痕;(b) append-only 在本地可行,但**无限增长有存储成本**——R2 就要为「存储管理」(保留策略/合并/压缩/归档/迁移)预留机制,不能只做无限追加。R2 的 registry 设计需与分层记忆模型对齐,并含存储治理。
26
+
27
+ ## 1. R2 四大件(按 HANDOFF 顺序)
28
+
29
+ ### 1a. PII 三档硬过滤(index_sync / context_push 前置)
30
+ - 三档:`high`(凭据/密钥/证件号)/ `medium`(手机号/邮箱/地址)/ `low`(姓名/昵称)。
31
+ - **2026-08-26 修订(用户决断权)**:三档不是「high 一律剔除」的硬规则,而是**每档一个用户开关**:
32
+ `allowInCorpus: true/false`(用户认为隐私可以进本地库就放行,否则不进)。默认给保守值(high=false /
33
+ medium=false / low=true),但用户在设置里可逐档决断;放行后该档内容可进语料库,但 context_push 前
34
+ 仍带 piiClass 标记(advisory 注入时降级)。
35
+ - JS 权威层实现(index-sync-pre 投影前 / context-host 组装前);Python 只读显式下发的 piiClass 字段,
36
+ 缺失即 fail closed(沿用现有 features.piiClass='unknown' 通道)。
37
+ - 分类器:冻结词典+正则(不引入模型),先覆盖 zh 常见模式;全部命中需过黄金样本验收。
38
+ - 边界:PII 决断只影响「自动唤起」,不拦截「显式 memory_recall」;用户手动检索自己的记忆不受限。
39
+
40
+ ### 1b. cross-workspace relay(用户开关)
41
+ - 设置项(semantic 分组):`crossWorkspaceRecall: 'off' | 'advisory'`(默认 off,用户可一键开;
42
+ **2026-08-26 修订:最终决定权在用户——off/advisory 只是初始值,用户可逐条/逐类决断 A 或 S**)。
43
+ - 语义:off = 现状(当前工作区库内检索,跨工作区候选直接 dropped);advisory = 跨工作区候选并入排名,
44
+ 但 **level 降为 hint 且标记 advisoryOnly**,注入用建议性语气,「仅供参考」不打断当前任务;命中跨工作区
45
+ 记忆时,决策行输出 `requiresCrossWorkspaceRelay: true`。
46
+ - 候选来源:Python dense_search 当前按 workspaceKey 过滤 → relay 开启时放宽为「当前工作区 ∪ 全工作区
47
+ User 级记忆 ∪ 显式允许的 Workspace 级记忆」,但**注入侧仍由 JS 门控**(身份/PII/抑制名单)。
48
+ - 与 hd-048/049 的呼应:开启后这类「跨工作区但用户想知道的」从 suppress 变为可选注入;per-case
49
+ 仍可走精修面板 A/P/S 覆盖。
50
+
51
+ ### 1c. append-only policy registry(**2026-08-26 修订:与分层记忆协调 + 前瞻存储管理**)
52
+ - 位置:`~/.dsh/memory/policies-registry/` 或沿用 `python/policies/` 的 append-only 模式(决策记录已有
53
+ 先例:decision-record-*.json)。每条记录:parentPolicyVersion + diff + goldDigest + runId + createdAt +
54
+ 生效范围。目标是任何策略变更可追溯、可回滚。
55
+ - **与 M8/M9 分层记忆协调**:registry 不能孤立设计——未来 3 层记忆(working/short-term/长期记忆)、
56
+ 用户画像、长期记忆都会有自己的策略与生命周期;registry 的 schema 需预留「分层/来源」维度,
57
+ 使各层记忆的策略变更共享同一 append-only 留痕机制(parent 链可跨层追溯)。
58
+ - **存储治理(用户明确要求前瞻)**:append-only 在本地可行,但无限增长有存储成本。R2 需为存储管理
59
+ 预留机制:保留策略(按层/按类型 TTL 或体积上限)、可重建派生物标记(如聚合/索引可重建,原始事件
60
+ 可归档)、压缩/合并(对可归并的决策记录做有损合并,保留 diff 摘要与 goldDigest)、归档/迁移(旧记录
61
+ 移冷存)。**明确不删原始策略变更**(append-only 语义),但通过归档/合并控制热体积。
62
+
63
+ ### 1d. 文件审批队列写回
64
+ - 已有基础:`POST /api/dsh-auto-memory-pre/review-feedback` append 到
65
+ `~/.dsh/memory/semantic-pre/review-queue.jsonl`(append-only,A/P/S/H/E 落盘)。
66
+ - R2 补:审批队列消费端——用户确认某条后写回「策略覆盖」(per-memoryId 允许/禁止自动唤起),
67
+ 写入 append-only 覆盖表;fv2 决策读覆盖表(JS 前置层),与现有抑制名单同路径。
68
+ - **与用户决断权一致**:覆盖表即用户逐条决断的落点;relay/PII 的逐档决断也落这里。
69
+
70
+ ### 1e. 项目文档总览(用户可读的功能/指导入口;2026-08-26 用户要求)
71
+
72
+ - **需求原文**:「这个项目已经越来越复杂了,结束后一定要在设置里加上项目文档的内容,让用户能够看到所有的功能和指导。」
73
+ - 形态:设置页新增「项目文档/关于」入口(区别于现有 settings 分组的只读说明),以可滚动、可搜索的卡片/章节列出**全部功能与指导**——当前生效的检索档位/资产状态、M0-M7 各里程碑做什么、语义引擎安装与切换、跨工作区与 PII 决断开关、精修面板 A/P/S/H/E 用法、R2/未来分层记忆路线、常见问题与安全说明(记忆不出电脑等)。
74
+ - 内容源:从 docs/ 下的权威文档(PROJECT-FREEZE-AND-ROADMAP、各 M*-CONTRACT、R2 蓝图等)提取**面向用户的语言**(非实现细节),维护成一份随插件发布的 `docs-user` 数据(结构化为 section:title/content 便于 client.js 渲染)。
75
+ - 时机:**发布工程窗口**实现(与 npm 资产包、安装向导一起),但需求本身现在定稿;R2 实施时一并规划数据源与渲染接入点。
76
+
77
+ ## 2. 依赖与顺序
78
+
79
+ 1. 1a(PII 过滤)必须最先——它是 relay 的合法性前提(跨工作区先保证不带 PII)。
80
+ 2. 1b(relay)依赖 1a + 现有 workspaceRef 过滤链改造。
81
+ 3. 1c(registry)是发布工程地基,可与 1a 并行。
82
+ 4. 1d(审批写回)依赖 1b 的 advisory 通道 + 精修面板(已有)。
83
+
84
+ **不动的**:M5/M6 validator/Reference Tail/seen;fv2 阈值策略工件(configHash 不变);
85
+ worker 的 requiresRelayFlag 由 JS 下发真实值替代硬编码 False。
86
+
87
+ ## 3. 验收要点(R2 完成门)
88
+ - PII:构造三档黄金样本,index_sync 前后断言 high 被剔除、medium 被标记、low 可入候选。
89
+ - relay:开/关两态下,跨工作区候选的决策行 requiresCrossWorkspaceRelay 与 level/advisoryOnly 符合预期;
90
+ 开关一键生效(设置页)。
91
+ - registry:变更记录 append-only、可追溯 parent+diff+goldDigest。
92
+ - 审批写回:review-queue 消费 → 覆盖表 → fv2 决策读覆盖表(一条 A 覆盖生效)。
93
+
94
+ ## 4. 待用户终裁
95
+ - ~~PII 三档分类器~~ → **已定**:冻结词典+正则(零模型成本)。
96
+ - ~~relay 默认值~~ → **已定方向**:off 为安全初始值,但最终决定权在用户(逐档/逐条可决断)。
97
+ - ~~registry 位置~~ → 倾向沿用 python/policies 的 append-only 模式;与分层记忆协调后定。
98
+ - ~~审批写回粒度~~ → 倾向 per-memoryId;与用户逐条决断一致。
99
+ - **新增待定**:PII/relay 的用户决断开关放设置页哪个分组;存储治理的保留/归档阈值初始值。
@@ -0,0 +1,91 @@
1
+ # 发布就绪规划(npm 发布 = 最后的单向门)
2
+
3
+ > 裁定时间:2026-08-30 · 依据:用户明确「资产包对接应用商店,一发布用户即可更新;
4
+ > 一切就绪且功能实验正常,全量跑通之后才能上 NPM」。
5
+ > 本文取代 HANDOFF-M8-M9-M10.md §2 的 P2 发布工程排序,作为发布前的执行路线权威。
6
+ > 关系:HANDOFF §2 的 P0/P1/P3 条目仍然有效,本文只重排**顺序与门槛**。
7
+
8
+ ## 0. 核心原则
9
+
10
+ 1. **npm publish 是单向门**:发布即触达用户更新,不可撤回 → 永远放最后一步,
11
+ 且必须用户亲自确认 go 才执行。
12
+ 2. **发布前一切工作都在本地**:构建、打包、模拟首启、E2E 全部不碰 npm registry
13
+ (`npm pack` 可以,`npm publish` 不行)。
14
+ 3. **算法变更不赶首发**:lexical_pre_v3(b0.45)是算法+byte-twin 双侧变更,
15
+ 独立窗口原则 → 首发带 lexical_pre_v2,v3 留作发布后小版本。
16
+
17
+ ## 1. 阶段路线
18
+
19
+ ### 阶段 A — 功能收口(代码窗口)✅ 2026-08-30/31 完成
20
+
21
+ | # | 任务 | 状态 |
22
+ |---|---|---|
23
+ | A1 | act.skill Python canary | ✅ 技能段预算饥饿 bug 修复(renderReferenceTail 预留制)+ 重启 canary 模型逐字复述 checklist(02dacea);途中发现 F1 stale 证据振荡/F2 miv 首轮竞态 |
24
+ | A2 | G-02 v2 | ✅ 决策↔投递时间线(delivery 徽标+skill 标志)+ review-feedback GET(队列汇总+政策提示 hints);端点+面板实测(f6f59bf) |
25
+ | A3 | 风险评估 | ✅ docs/A3-RISK-ASSESSMENT-20260830.md:三者均不阻塞首发;F1 建议发布前小修(f2f0665) |
26
+
27
+ ### 阶段 A 原表(2026-08-30 规划时)— 已全部完成,留档
28
+
29
+ | # | 任务 | 依据 |
30
+ |---|---|---|
31
+ | A1 | **P0 act.skill Python canary 实证**:重启 3080 → 匹配 active skill 的 query → delivered tail 含 checklist(exactDigest 不一致则修 m83 覆盖路径) | handoff §2 P0,唯一代码缺口 |
32
+ | A2 | **G-02 v2**:决策↔delivery 关联时间线 + A/P/S/H/E 反馈消费(policy diff/回放) | 提前做——它是阶段 D 验收的观测工具 |
33
+ | A3 | **fv2 query 窗口污染**:先评估是否首发阻塞项(默认裁定:不阻塞,记为已知限制;若验收发现实际误召回则升级) | handoff §2 P3.3 |
34
+
35
+ ### 阶段 B — 自然使用观察(不改代码,2–3 天窗口)⏸ 用户裁定延后(自动化方案待定)
36
+
37
+ | # | 任务 | 通过标准 |
38
+ |---|---|---|
39
+ | B1 | episode intent 干净度 | 最新 episodes intent = 真实问题,非 "Current runtime context…" |
40
+ | B2 | 技能自然晋升 | 跨 3 会话 + ≥2 成功 → observed→candidate→validated 自动走通 |
41
+ | B3 | fact 治理写回 | fact ≥0.6 置信自动写入 MEMORY.md,无误写噪音 |
42
+ | B4 | margin 校准观察 | canary 两档共有 margin 偏小议题:记录误触发/漏触发实例 |
43
+
44
+ 观察窗期间允许的唯一改动 = A2 的 G-02 v2 可观测性(不改决策行为)。
45
+
46
+ ### 阶段 C — 发布工程本地化(全程不发布)✅ 2026-08-31 完成
47
+
48
+ | # | 任务 | 状态 |
49
+ |---|---|---|
50
+ | C1 | C2 资产包构建 | ✅ `artifacts/release-c2-asset-pack/`:tgz 78.4MB + BUILD-RECORD(SHA256 双核+解包回验全 MATCH),manifest 与 `lib/semantic-js-pre.js` 冻结表逐字节一致;**未 publish**(21f3a3b) |
51
+ | C2 | 首启下载向导 | ✅ 代码本就完备(五文件 SHA256+双镜像+原子落位下载器、引导卡);本轮补 F2 首启向导弹窗(modelDownload kind,立即安装/稍后双选)+ F3 最小推理自检(384 维+模长≈1,失败整体 degraded 回 C1)(d03b59c);实机验证向导渲染/ready 分支/触发条件 |
52
+ | C3 | 设置页三档状态机 | ✅ c1/c2/c3 档位解析+切换 stale 重建既有;本轮补 G 条款「建库中」状态(jsSemantic.embedding → UI)(d03b59c) |
53
+ | C4 | fresh-install 本地 E2E | ✅ smoke-test-c4-fresh-install-pre.mjs 8/8:干净 DSH_HOME + tgz 经 npm i 落位隔离 node_modules + 真实 e5 推理自检 + C2 稠密排序语义命中(0.785) + 词法保底(72003b2) |
54
+ | C5 | 版本冻结准备 | ✅ 全量回归 38/38(新增 c4 套件);本文档+台账同步(本提交) |
55
+
56
+ | # | 任务 | 要点 |
57
+ |---|---|---|
58
+ | C1 | C2 资产包构建 | `@deepseek-ai/dsh-auto-memory-model-e5small-q8`:`npm pack` 产 tgz + SHA256 manifest + 双镜像地址配置(npmmirror+官方),**不 publish** |
59
+ | C2 | 首启下载向导 | 弹窗确认→下载(进度/取消)→SHA256 校验→推理自检→后台建索引→原子切换;**无断点续传**(双镜像+校验兜底),UI 如实标注体积 ~130MB |
60
+ | C3 | 设置页三档状态机 | 实际 c1/c2/c3(非"七态"):词法 0GB / JS 语义 130MB / Python 563MB;切换即判 stale 重建 |
61
+ | C4 | fresh-install 本地 E2E | 干净 home 模拟首启:装插件→向导下载→三档切换→全链 canary;**JS-only(无 Python)独立可跑** + Python 档独立可跑 |
62
+ | C5 | 版本冻结准备 | policy 注册表/文档/架构图 progressLedger 同步;资产包版本号与主包兼容矩阵 |
63
+
64
+ ### 阶段 D — 全量验收(发布门槛,go/no-go)⏸ 等待阶段 B 观察窗后启动
65
+
66
+ **验收清单(全部勾完才进 D6)**:
67
+
68
+ - [ ] D1 回归全绿:全部 smoke 套件(38,含 c4 fresh-install)串行通过(C5 已预验 38/38,验收时复跑)
69
+ - [ ] D2 E2E:C4 的 fresh-install 三档切换 + 双轨独立性实证(基础形态 c4 套件已覆盖;验收时补三档切换实机)
70
+ - [ ] D3 观察窗回看:B1–B4 全部通过标准达成,有据可查(artifacts/ 留档);含 F1 stale 振荡小修后的自然表现
71
+ - [ ] D4 **发布默认值裁定**(需用户逐项确认,当前是实验值不能原样出厂):
72
+ - 激活发射档默认(现 canary-explicit 是实验档;用户包默认建议 explicit-only)
73
+ - memoryHubEnabled 首装默认值
74
+ - procedureMinSessions/MinSuccess、jsDecideDeltaExp 出厂值
75
+ - 隐私面:PII 投影/scope 默认策略复核(JS 权威层不变量)
76
+ - [ ] D5 发布物冻结:git tag 候选提交、CHANGELOG、资产包 SHA256 复核、
77
+ 架构图 progressLedger 标 R-RELEASE
78
+ - [ ] **D6 用户最终确认 go → npm publish(单向门)**
79
+
80
+ ### 发布后(小版本迭代,不再走 D 全流程)
81
+
82
+ lexical_pre_v3(b0.45+否定词豁免+Python byte-twin 同步+重校准)→ int8 档资产包 →
83
+ G-02 后续/correction 硬门对齐 → 各自独立窗口走小版本。
84
+
85
+ ## 2. 风险与红线(不变)
86
+
87
+ - 3080 重启 = 杀 `bin\.js.*web` → `dsh web`(用户已授权自动重启测试)
88
+ - 不 push;不动 M5/M6 validator / Reference Tail / seen / fv2 冻结核
89
+ - settings.yaml `llm-pi-ai.providers` 一票否决;input 模态只允许 text|image
90
+ - 每加路由改三处计数断言(smoke-test.mjs:68 / m3b3:44 / context-observer:108)
91
+ - 资产包首发后**不可 yank**:C1 的 SHA256 manifest 与实际 tgz 必须在 D5 复核一致
@@ -0,0 +1,181 @@
1
+ # 发布决策:语义增强的可选安装(Semantic Setup Option)
2
+
3
+ > 2026-08-25 用户裁定 · 归属:M7 live 之后的"最终发布"工程阶段 · 状态:已定方向,待排期
4
+
5
+ ## 用户裁定的安装形态
6
+
7
+ "自动唤起"作为**可选功能**放进设置界面:
8
+
9
+ 1. 设置中提供开关(默认关);
10
+ 2. 打开后进入安装向导:**用户自选安装/下载位置**,明确提示**约需 2GB 空间**
11
+ (venv + torch CPU + BGE-M3 模型,见下方体积矩阵);
12
+ 3. 下载与自检(health/embedding 视图 ready)**全部跑通后才真正开启**该功能;
13
+ 任一步失败则保持关闭并回退纯 JS 词法链路(lexical_pre_v2,G8/H9 已断言
14
+ Python 缺失时结果逐项不变)。
15
+
16
+ 配套事实(已核实):npm 包 `files=['lib','cordis.patch.yml']` 不含 python/;
17
+ `pythonBackendEnabled` 默认 false + assoc∧inbox∧pythonBackend 三重门;
18
+ SidecarClient spawn 失败 → circuit breaker → 结构化 unavailable → 词法回退。
19
+
20
+ ## 体积方案矩阵(基于 docs/M7-EMBEDDING-BENCHMARK.md 实测)
21
+
22
+ | 方案 | 下载体积 | 质量(L2) | 延迟 | 结论 |
23
+ | --- | --- | --- | --- | --- |
24
+ | **bge-m3 fp32(现行冻结 D1)** | ~2.3GB | R@5 **0.925** / MRR 0.793,跨语言 20/20 | p50 129ms | 默认方案:效果冠军 |
25
+ | qwen3-emb-0.6B | ~1.2GB | R@5 0.825 / MRR 0.693 | p95≈500ms 压线,RSS 3.3–4.7GB | 不换:省一半盘却损质量且更吃内存 |
26
+ | multilingual-e5-large | ~2.3GB | 跨语言 0.60 已淘汰 | — | 否决先例 |
27
+ | bge-m3 int8/ONNX 量化 | ~0.6–0.9GB(估) | 未验证(通常损失 <1%,须实测) | 待测 | **post-live 评估项**:需 onnx 导出 + 全量 benchmark 重验 + policy/configHash 重冻结 |
28
+ | 小模型(<500MB 单/多语) | <0.5GB | 未测;e5 家族中文跨语有前科,风险高 | — | 仅在量化失败后再议 |
29
+ | 纯词法(不开语义增强) | 0GB | 即当前基础层 | 零 | 两级产品的下级,长期存在 |
30
+ | 云端 embedding API | 0GB | 取决于服务 | 网络 RTT | 违背本地记忆隐私前提,否决 |
31
+
32
+ ## 结论
33
+
34
+ - 安装向导按 **~2.3GB** 如实标注;不为体积换掉效果冠军(qwen3 与 e5 的教训
35
+ 都在 benchmark 报告里)。
36
+ - "量化到 ~1GB 以内"列为 M7 live 后的独立评估项(含完整回归重验),若达标可
37
+ 在向导中作为"精简下载"选项提供,而非替换默认。
38
+ - 相关路线:M7 live → G-02 控制台 → M8/M9 → 本项 + 最终发布。
39
+
40
+ ---
41
+
42
+ ## 2026-08-25 补充:两项全网调研结论(已完成,待实测验证)
43
+
44
+ ### A. bge-m3 量化版(Python 进阶层瘦身)——✅ 有现成产物,≤600MB 达成
45
+
46
+ | 项 | 结论 |
47
+ | --- | --- |
48
+ | **首选** | `Xenova/bge-m3` 的 `onnx/model_int8.onnx` = **542MB**(+tokenizer ≈563MB 总下载)。HF transformers.js 作者维护、76k 月下载、2026-02 仍在更新;quantize_config 确认为 ORT 标准 per_channel 动态 int8 |
49
+ | 质量证据 | 唯一用户反馈称 int8 与 fp32 打平(轶事级);**全行业无公开 fp32-vs-int8 对照表** → 我们的 L2 R@5=0.925 基准复验即最终裁决;建议同时记录 fp32/int8 向量余弦均值(>0.99 绿灯) |
50
+ | 备选降级梯子 | GPUStack GGUF Q8_0 605MB → Xenova fp16 1081MB(略超线)→ optimum 自导出 avx512_vnni(⚠️ 社区教训:自导出曾掉 4–6 点,须核对 reduce_range/per_channel) |
51
+ | 关键风险 | CLS 池化必须自己切(`last_hidden_state[:,0]` + L2 归一);GGUF 默认 mean 池化会静默毁掉检索质量;sparse/ColBERT 头不在任何 ONNX 导出里 |
52
+ | 否决项 | OpenVINO(无官方产物)、GGUF ≤Q6(零精度证据)、jina-v3(CC-BY-NC 非商用) |
53
+
54
+ 执行路径:下 Xenova int8 → Python ORT/sentence-transformers 加载 → 复跑 L2 基准
55
+ → 通过则以"精简下载"进安装向导。9700X(Zen4/5 AVX-512 VNNI)硬件适配。
56
+
57
+ ### B. 纯 JS 标准语义层(普通版 npm 即用)——✅ 可行,载体 transformers.js
58
+
59
+ | 项 | 结论 |
60
+ | --- | --- |
61
+ | 运行时 | `@huggingface/transformers` v4(onnxruntime-node 预编译二进制,Windows x64 免编译直装;**锁版本**)。fastembed-js 上游已归档不用;tfjs USE 停滞不用;无需 ANN 库(几千条精确余弦毫秒级) |
62
+ | **主推模型** | `Xenova/multilingual-e5-small` q8 = **118MB**(总 ~130MB):最成熟(15 万下载)、MIT。必须实现 e5 前缀约定 query:/passage:,max seq 512 ⚠️ 风险:e5 家族在我们 L1 测试有前科(large 版跨语言 0.60 被淘汰)——small 必须先过我们自己的 L2 基准 |
63
+ | **第一替补** | `Xenova/jina-embeddings-v2-base-zh` int8 = **161MB**:已发表 C-MTEB 强数字(T2Retrieval nDCG@10 80.6 / MMarco 78.0)、官方"中英混输无偏"设计、8192 ctx(长笔记友好) |
64
+ | 中间档(stretch) | `Xenova/bge-m3` int8 ≈560MB 可在**纯 JS** 跑与 Python 同源模型(dense-only)——可作高级用户的"免 Python 准 sidecar"或交叉验证工具 |
65
+ | 分发模式 | 首启按需拉取 + 本地缓存 = 业界标准(fastembed/transformers.js 先例一致),与我们已裁定的安装向导天然吻合;postinstall 静默下载是被社区视为恶习的做法,不做 |
66
+ | 待办 | **离线实测裁决**:用我们的 L2 语料对 e5-small-q8 / jina-v2-zh-int8 / bge-small-zh 各跑一遍 R@5/MRR/nDCG/negHit(复用 lexical-tuning 评测管线思路),数字说话后再定标准层选型;预期显著高于词法 0.20,能否过 0.5 未知 |
67
+
68
+ ### 双轨(实为三级)产品形态定稿
69
+
70
+ 1. **基础层**(0GB):lexical BM25 词法检索——现状,人人可用;
71
+ 2. **标准语义层**(~130MB,纯 Node):transformers.js + 小模型 ONNX q8,
72
+ npm 装完引导一次小下载即可启用;
73
+ 3. **进阶层**(563MB 精简 / 2.3GB 完整,Python sidecar):bge-m3 int8 或 fp32,
74
+ 安装向导可选,效果冠军。
75
+ 层级间共享同一套 D6 hybrid 融合与激活策略接口;具体选型以 L2 离线实测为准。
76
+
77
+ ---
78
+
79
+ ## 2026-08-25 补充②:两级候选均已实测验证 ✅
80
+
81
+ ### C. JS 标准语义层实测(transformers.js 3.7.6 + multilingual-e5-small q8)
82
+
83
+ 环境:Windows x64 / Node 24 / onnxruntime-node 预编译二进制,模型本地离线加载。
84
+ 评测:L2 真实语料(251 episodes / 40 手写查询,e5 query:/passage: 前缀约定,
85
+ mean pooling,512 token 截断)。产物在 artifacts/m7-live-pre/js-semantic-trial/。
86
+
87
+ | 层 | R@1 | R@5 | MRR | nDCG@10 | negHit@5 |
88
+ | --- | --- | --- | --- | --- | --- |
89
+ | 词法 BM25(基础层) | 0.05 | 0.20 | 0.129 | 0.140 | 0.075 |
90
+ | **JS e5-small q8(118MB)** | **0.60** | **0.850** | **0.703** | **0.760** | 0.225 |
91
+ | Python bge-m3 fp32(进阶层) | — | 0.925 | 0.793* | 0.837* | — |
92
+
93
+ \* fp32 行为 M7-2 生产口径(para-512 分块聚合);JS 行为整篇截断口径,跨表对比仅供参考。
94
+ 性能:模型加载 679ms;文档编码 21.8ms/条(全库 251 条 5.5s);查询 3.8ms/条。
95
+ 已知取舍:hard-negative 双子对的区分力弱于大模型(negHit5 0.225 vs 词法 0.075)。
96
+
97
+ ### D. Python 进阶层 int8 精简版实测(Xenova/bge-m3 model_int8.onnx, 542MB)
98
+
99
+ 同口径 head-to-head(整篇 512 截断协议,两侧同一代码路径;bge-m3 无前缀约定):
100
+
101
+ | 后端 | R@1 | R@5 | MRR | nDCG@10 | negHit5 | 全量编码 |
102
+ | --- | --- | --- | --- | --- | --- | --- |
103
+ | **int8 (onnxruntime)** | 0.675 | **0.925** | 0.772 | 0.807 | 0.200 | **44s** |
104
+ | fp32 (torch) | 0.675 | **0.925** | 0.779 | 0.819 | 0.225 | 262s |
105
+
106
+ - **R@5 delta = 0.000**:检索质量与 fp32 完全持平;MRR/nDCG 差异为噪声级。
107
+ - 向量余弦 int8-vs-fp32 mean 0.9748(<0.99 但检索零损失,动态 int8 正常区间)。
108
+ - 编码提速 ~6×;查询延迟 p50 16ms / p95 19ms(batch=1,Zen4 CPU)。
109
+ - 产物:python/bench/models-xenova-bge-m3-int8/ + smoke_bge_m3_int8.py +
110
+ l2_bench_int8_vs_fp32.py(bench venv 已加 onnxruntime 1.23.2)。
111
+
112
+ ### E. npm 分发方案(用户裁定方向:国内国外统一源)
113
+
114
+ | 层 | 分发方式 | 说明 |
115
+ | --- | --- | --- |
116
+ | JS 语义层模型(118MB 单文件) | **首选:独立 npm 资产包**(如 `@deepseek-ai/dsh-auto-memory-model-e5small-q8`) | npmmirror 自动同步 → 国内 `npm i` 即得,无需任何运行时下载;插件以 `env.localModelPath` 指 node_modules 内路径离线加载。npm 大资产包有成熟先例(@imgly/*-data 等) |
117
+ | 同上兜底 | HF CDN 直连 / jsdelivr / GitHub Releases 多通道 | transformers.js 原生首启拉取路径;向导中作"在线获取"备选 |
118
+ | bge-m3 int8(542MB) | GitHub Releases / 对象存储多通道,向导内让用户选线路 | 单 tarball 过大不宜进 npm;沿用已裁定的安装向导(选位置→提示体积→跑通才开) |
119
+
120
+ ### 三层最终状态(2026-08-25 用户最终裁定)
121
+
122
+ | 层 | 体积 | R@5(同口径) | 裁定 |
123
+ | --- | --- | --- | --- |
124
+ | 词法 BM25 | 0GB | 0.20 | 基础回退层(lexical_pre_v3 调优窗口另计) |
125
+ | **JS e5-small q8** | ~130MB | 0.85 | **默认语义层**:npm 安装后首次打开时引导一次性下载并自检启用 |
126
+ | Python bge-m3 **int8** | ~563MB | 0.925(=fp32) | 进阶层唯一形态(安装向导可选);**fp32 2.3GB 暂不使用** |
127
+
128
+ 裁定要点:①标准层走 npm 资产包分发,用户打开功能时同步下载一次即可长期离线使用;
129
+ ②Python 端只预备 int8 量化版(实测与 fp32 检索持平且快 6×),fp32 全量下载暂缓;
130
+ ③工程接线时机由主 Agent 排期——检索路由属 R1 收口冻结区,建议受控 live shadow
131
+ 完成后再切默认,避免污染对照基线。
132
+
133
+
134
+ ---
135
+
136
+ ## 2026-08-25 补充③:主 Agent 产品与工程规范(纠正版已采纳,固化)
137
+
138
+ > 主 Agent 首轮曾误将 C1 定位为默认路径,经用户纠正后以下述规范为准:
139
+ > **C2=默认主路径,C1=永久保底(仅模型未下载/加载失败/离线/低资源时的可用性保障),C3=高级可选**。
140
+
141
+ ### F. 产品行为规范(首启序列)
142
+
143
+ 1. 插件首次启动先以 C1 运行,页面与对话立即可用;
144
+ 2. 自动弹出一次 C2 安装向导(说明 ~130MB、用途、缓存位置、隐私边界)——弹窗必须出现,
145
+ 但下载须用户明确确认:「立即安装」/「稍后」双选;稍后继续 C1 并在设置保留入口;
146
+ 3. 确认后后台下载资产 → **SHA-256 + 版本 + 维度 + 最小推理自检** → 通过则自动设为
147
+ 默认语义层并后台构建向量索引;
148
+ 4. 建库期间继续使用 C1 不阻塞对话;C2 ready 后**原子切换**;
149
+ 5. 断点续传;失败显示原因并继续使用 C1;
150
+ 6. C3 只在「高级语义引擎」设置中出现,不自动下载、不自动覆盖 C2。
151
+
152
+ ### G. 设置页规范
153
+
154
+ - 折叠组「语义检索引擎」:状态机 `未下载/下载中/校验中/建库中/就绪/损坏/更新可用`;
155
+ 展示模型版本、资产大小、缓存位置、最近校验时间、向量数量、索引版本;
156
+ 操作按钮 `安装/暂停/继续/重新校验/重建索引/卸载`。
157
+ - 追加项(2026-08-25):`reasoningObserverEnabled`(模型思维链监听,默认关、需显式开启)
158
+ 与三级模式选择并列进入设置 UI;详见 docs/COT-WATCH-RFC.md。
159
+ - **模式选择(segmented control,默认 auto 而非裸 C2)**:
160
+ `自动(推荐)`=C2 ready 则 C2 否则 C1|`仅词法`=始终 C1|`内置语义`=C2 失败回退 C1|
161
+ `高级 Python`=C3 失败先回退 C2 再回退 C1。
162
+
163
+ ### H. 三层统一候选契约(在原字段上扩展)
164
+
165
+ `memoryId/anchorId/scope/sourceRef/sourceVersion/fileDigest/recordDigest/score/
166
+ method/rank` + 新增 **`engineTier`(C1|C2|C3)与 `modelIdentity`**。
167
+ 切换比较键:`provider+model+revision+dimension+normalization+configHash`
168
+ 不一致即 stale 重建。**C2/C3 的向量、索引、配置分别存放**——退出高级模式不得破坏 C2。
169
+
170
+ ### I. 下载与更新安全清单
171
+
172
+ 固定资产清单(模型 revision/许可/SHA-256);临时文件下载校验后原子替换;
173
+ 禁止执行模型包内脚本(只加载固定 ONNX/权重/tokenizer);更新失败保留旧健康版本;
174
+ UI 显示实际下载源(直连/镜像);卸载只删 derived 资产,不碰 Markdown/MemoryId/evidence。
175
+
176
+ ### J. 排期裁定(主 Agent 确认)
177
+
178
+ M7 Feature v2 收尾不被 C2 打断;正式接入候选排序等 M7 live。发布工程窗口内部顺序:
179
+ `C2 Asset Manager + Download Wizard → C2 embedding/index adapter → fallback/router
180
+ (C2↔C1↔C3) → G-02 可视化与设置页`。允许并行预研:资产管理器与假模型适配器
181
+ (fake model adapter,不影响激活算法归因)。