@furongjun1999/dsh-memory 0.5.1 → 0.6.1

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 (187) hide show
  1. package/README.md +588 -552
  2. package/codebuddy/CODEBUDDY.md +10 -10
  3. package/data/policy.json +27 -0
  4. package/docs/discipline/harnesses.yaml +31 -0
  5. package/docs/discipline/templates/full.md.tmpl +1 -1
  6. package/docs/discipline/templates/rules.mdc.tmpl +1 -1
  7. package/docs/eval/DSH/346/227/245/345/277/227/347/264/242/345/274/225v2_/345/217/202/350/200/203dsh-TUI_v1.0.md +248 -0
  8. package/docs/eval/DSH/346/227/245/345/277/227/347/264/242/345/274/225/346/225/210/346/236/234/351/252/214/350/257/201_v1.0.md +209 -0
  9. package/docs/eval/DSH/347/253/257/347/274/272/351/231/267/344/270/223/351/241/271_v1.0.md +254 -0
  10. package/docs/eval/N225_/347/264/242/345/274/225/346/227/245/345/277/227/351/235/236/345/257/271/350/261/241/350/243/205/350/275/275/351/235/242/347/261/273/345/236/213/351/227/270_v1.0.md +418 -0
  11. package/docs/eval/P1b2_/350/257/273/351/235/242/344/273/243/351/231/205/344/277/256/345/244/215_v1.0.md +124 -0
  12. package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/344/270/216/351/224/256/347/261/273/345/236/213/351/227/270_v1.1.md +441 -0
  13. package/docs/eval/issue43_/351/273/230/350/256/244/347/255/226/347/225/245/345/212/240/350/275/275/344/270/216/345/207/255/346/215/256/346/230/216/346/226/207/351/230/237/345/210/227_v1.0.md +398 -0
  14. package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/200/346/211/271_/346/216/245/347/272/277/344/270/216/347/255/211/344/273/267/345/217/230/346/215/242_v1.0.md +498 -0
  15. package/docs/eval//344/274/230/345/214/226/347/254/254/344/270/211/346/211/271_/351/227/250/347/246/201/350/275/254/346/255/243/344/270/216/350/260/203/345/272/246/346/255/242/350/241/200/344/270/216/351/227/250/346/216/247/346/224/266/345/217/243_v1.0.md +669 -0
  16. package/docs/eval//344/274/230/345/214/226/347/254/254/344/272/214/346/211/271_/344/276/235/350/265/226/351/200/217/344/274/240/344/270/216/345/257/271/346/213/215/345/217/243/345/276/204/344/270/216/350/264/237/347/274/223/345/255/230_v1.0.md +683 -0
  17. package/docs/eval//345/217/221/345/270/20306_/344/270/200/351/224/256/351/205/215/347/275/256/344/270/216DSH0172_v1.0.md +171 -0
  18. package/docs/eval//345/217/221/345/270/20307_/345/244/226/351/203/250/346/212/245/345/221/212/345/233/233/346/211/271/344/277/256/345/244/215/344/270/216/346/217/222/344/273/266/351/235/242/345/212/240/345/233/272_v1.0.md +205 -0
  19. package/docs/eval//346/200/247/350/203/275/344/270/223/351/241/271_/345/206/267/346/237/245/350/257/242/344/270/216/345/206/205/345/255/230_v1.0.md +218 -0
  20. package/docs/eval//346/225/205/351/232/234/346/263/250/345/205/245/345/256/236/346/265/213_v1.0.md +10 -0
  21. package/docs/eval//347/274/226/347/240/201/351/235/242/345/211/215/347/275/256_/345/205/245/345/217/243/350/207/252/344/277/235/350/257/201UTF8/344/270/216/346/226/207/346/234/254open/345/256/210/345/215/253_v1.0.md +646 -0
  22. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v18.md +183 -0
  23. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v19.md +207 -0
  24. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v20.md +283 -0
  25. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v21.md +224 -0
  26. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v22.md +223 -0
  27. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v23.md +293 -0
  28. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v24.md +303 -0
  29. package/docs/eval//347/274/272/351/231/267/346/214/226/346/216/230_/350/207/252/344/270/273/350/277/255/344/273/243_v25.md +230 -0
  30. package/docs/hive//346/243/200/347/264/242/350/267/257/345/276/204/344/270/216/350/256/244/347/237/245/347/273/223/346/236/204/345/245/221/347/272/246_v0.1.md +20 -0
  31. package/docs/hive//350/234/202/345/267/242M6_ingest/345/256/236/346/226/275/350/256/241/345/210/222_v0.1.md +1 -1
  32. package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.10.md +12 -0
  33. package/docs/mdcg//345/212/237/350/203/275/350/260/203/347/224/250/346/230/240/345/260/204/350/241/250_v0.1.md +40 -40
  34. package/docs/mdcg//345/217/221/345/270/203/351/227/250/347/246/201/351/223/276_v0.1.md +21 -9
  35. package/docs/mdcg//347/201/265/346/236/242/350/256/260/345/277/206/345/212/250/350/257/215/345/215/217/350/256/256_v1.0-draft.md +7 -2
  36. package/docs/mdcg//350/256/244/347/237/245/345/233/276_/347/264/242/345/274/225/344/270/216/345/267/245/347/250/213/350/247/204/350/214/203/345/214/226_/350/256/241/345/210/222_v0.1.md +39 -3
  37. package/docs/plans//345/205/250/344/270/255/346/226/207/347/274/226/347/240/201/344/270/216/350/234/202/345/267/242/344/273/273/345/212/241/346/240/207/350/257/206/345/245/221/347/272/246_v2.0.md +220 -0
  38. package/docs/plans//347/234/237/346/272/220/347/264/242/345/274/225_/351/200/232/347/224/250/346/234/272/345/210/266_v0.3.md +227 -0
  39. package/docs/plans//350/234/202/345/267/242/346/250/241/345/236/213/345/257/206/351/222/245/351/205/215/347/275/256/351/235/242_v1.0.md +385 -0
  40. package/docs//345/267/245/344/275/234/347/272/252/345/276/213_/350/256/244/347/237/245/345/233/276/346/235/241/347/233/256_v1.1.json +460 -460
  41. package/dsh/cordis-patch-profile-web.example.yml +35 -0
  42. package/lib/bridge.js +24 -2
  43. package/lib/cli.d.ts +3 -0
  44. package/lib/cli.js +66 -0
  45. package/lib/hooks.d.ts +31 -2
  46. package/lib/hooks.js +219 -16
  47. package/lib/init.d.ts +88 -0
  48. package/lib/init.js +302 -0
  49. package/lib/lib/prompt_safety.d.ts +52 -1
  50. package/lib/lib/prompt_safety.js +76 -1
  51. package/md_cg/audit.py +652 -379
  52. package/md_cg/bench6_arms.py +1 -1
  53. package/md_cg/bench_p0.py +1 -1
  54. package/md_cg/branches.py +2 -2
  55. package/md_cg/ccgc.py +1071 -1006
  56. package/md_cg/chain.py +1 -1
  57. package/md_cg/consistency.py +97 -9
  58. package/md_cg/consolidate.py +34 -9
  59. package/md_cg/crypto.py +59 -26
  60. package/md_cg/docindex.py +16 -1
  61. package/md_cg/evidence.py +585 -582
  62. package/md_cg/evolution.py +17 -1
  63. package/md_cg/export.py +1 -1
  64. package/md_cg/forgetting.py +309 -13
  65. package/md_cg/fsutil.py +454 -8
  66. package/md_cg/identity.py +3 -3
  67. package/md_cg/insight.py +24 -3
  68. package/md_cg/linkref.py +1 -1
  69. package/md_cg/logref.py +327 -0
  70. package/md_cg/mcp_server.py +4152 -3818
  71. package/md_cg/mdcg.py +4208 -3462
  72. package/md_cg/mdcos.py +4491 -4137
  73. package/md_cg/mreview/pipeline.py +15 -1
  74. package/md_cg/nodefile.py +639 -575
  75. package/md_cg/protect.py +158 -11
  76. package/md_cg/protocol.py +41 -2
  77. package/md_cg/provenance.py +22 -4
  78. package/md_cg/reach.py +4 -4
  79. package/md_cg/readcache.py +76 -15
  80. package/md_cg/reconcile.py +1 -1
  81. package/md_cg/refindex.py +246 -37
  82. package/md_cg/refine.py +1 -1
  83. package/md_cg/review_cli.py +49 -4
  84. package/md_cg/routing.py +32 -5
  85. package/md_cg/run_tests.py +17 -0
  86. package/md_cg/scrub.py +30 -3
  87. package/md_cg/security.py +47 -1
  88. package/md_cg/self_state.py +5 -5
  89. package/md_cg/sources.py +23 -6
  90. package/md_cg/srcindex.py +352 -0
  91. package/md_cg/stg.py +47 -3
  92. package/md_cg/subgraph.py +2 -2
  93. package/md_cg/sustain.py +1299 -1168
  94. package/md_cg/tasks.py +469 -470
  95. package/md_cg/test_b1_auto_id_multiproc.py +277 -0
  96. package/md_cg/test_b1b2_write_face.py +417 -0
  97. package/md_cg/test_b2_sensitivity_landing.py +223 -0
  98. package/md_cg/test_b3_merge_keeps_content.py +576 -0
  99. package/md_cg/test_b4_shard_dir_selfheal.py +843 -0
  100. package/md_cg/test_b4_shard_dir_selfheal_guard.py +238 -0
  101. package/md_cg/test_c3_transient_read_negative.py +793 -0
  102. package/md_cg/test_c8_search_rrf_gates.py +502 -0
  103. package/md_cg/test_ccg_form_parity.py +188 -0
  104. package/md_cg/test_ccgc.py +28 -3
  105. package/md_cg/test_govern_directread.py +17 -4
  106. package/md_cg/test_h2_session_view_norm.py +233 -0
  107. package/md_cg/test_h4_sustain_snapshot.py +1377 -0
  108. package/md_cg/test_hive_ingest.py +285 -285
  109. package/md_cg/test_index_crossprocess_reload.py +301 -0
  110. package/md_cg/test_issue39_utf8_stdio.py +307 -16
  111. package/md_cg/test_issue43_default_policy.py +865 -0
  112. package/md_cg/test_legacy_p3_node_id_type.py +375 -0
  113. package/md_cg/test_linkref.py +10 -3
  114. package/md_cg/test_lock.py +2 -2
  115. package/md_cg/test_logref.py +1109 -0
  116. package/md_cg/test_m3_h9_bucket_health_protect_mark.py +301 -0
  117. package/md_cg/test_m3_h9_semantic_guard.py +525 -0
  118. package/md_cg/test_mr_m2.py +15 -3
  119. package/md_cg/test_n130_verify_falsified_protect.py +1 -1
  120. package/md_cg/test_n139_dek_provision_failclosed.py +185 -0
  121. package/md_cg/test_n176_link_trust.py +221 -0
  122. package/md_cg/test_n178_units_jobid_gate.py +212 -0
  123. package/md_cg/test_n184_keys_concurrent_provision.py +307 -0
  124. package/md_cg/test_n195_writepath_reload.py +283 -0
  125. package/md_cg/test_n196_stale_gate_skip.py +169 -0
  126. package/md_cg/test_n197_n208_write_face_gates.py +471 -0
  127. package/md_cg/test_n198_tokens_corrupt_failclosed.py +225 -0
  128. package/md_cg/test_n199_tokens_concurrent_write.py +378 -0
  129. package/md_cg/test_n201_proposal_visibility.py +382 -0
  130. package/md_cg/test_n202_session_notes_visibility.py +461 -0
  131. package/md_cg/test_n204_n205_n226_n227_n228_n229_exit_gates.py +542 -0
  132. package/md_cg/test_n206_stdio_jsonrpc_type.py +403 -0
  133. package/md_cg/test_n209_verify_write_face_gates.py +461 -0
  134. package/md_cg/test_n212_n213_n224_generation_gates.py +513 -0
  135. package/md_cg/test_n214_n215_n221_n222_write_face_gates.py +563 -0
  136. package/md_cg/test_n225_nonobject_load.py +1110 -0
  137. package/md_cg/test_n62_tenant_bind_failclosed.py +200 -0
  138. package/md_cg/test_neg_condition_hits.py +333 -0
  139. package/md_cg/test_neg_tail_honesty.py +663 -0
  140. package/md_cg/test_none_id_write_guard.py +166 -0
  141. package/md_cg/test_opt_batch1_md_cg.py +451 -0
  142. package/md_cg/test_p1.py +5 -5
  143. package/md_cg/test_p11_consistency.py +161 -12
  144. package/md_cg/test_p26_refindex.py +2 -2
  145. package/md_cg/test_p27_docindex.py +777 -774
  146. package/md_cg/test_p28_refcheck.py +740 -13
  147. package/md_cg/test_p29_session_ingest_export.py +2 -2
  148. package/md_cg/test_p2_mcp.py +12 -1
  149. package/md_cg/test_p30_maintain.py +33 -2
  150. package/md_cg/test_p31_insight.py +1 -0
  151. package/md_cg/test_p9c_dedup_hints.py +276 -0
  152. package/md_cg/test_policy_required_ccg.py +426 -0
  153. package/md_cg/test_protocol.py +22 -0
  154. package/md_cg/test_rank_parity_score_mode.py +516 -0
  155. package/md_cg/test_read_face_input_gates.py +363 -0
  156. package/md_cg/test_read_face_semantics.py +489 -0
  157. package/md_cg/test_recall_face_guards.py +812 -0
  158. package/md_cg/test_rejected_credential_forms.py +188 -0
  159. package/md_cg/test_rejected_redact.py +146 -0
  160. package/md_cg/test_retr_s1b.py +2 -2
  161. package/md_cg/test_retr_s5.py +20 -7
  162. package/md_cg/test_review_cli_attribution.py +177 -0
  163. package/md_cg/test_review_cli_visibility.py +235 -0
  164. package/md_cg/test_review_conformance.py +21 -3
  165. package/md_cg/test_security_audit_v21.py +2 -2
  166. package/md_cg/test_server_version.py +67 -0
  167. package/md_cg/test_srcindex.py +171 -0
  168. package/md_cg/test_tenant_env_override_warn.py +63 -50
  169. package/md_cg/test_token_lowercase_form.py +315 -0
  170. package/md_cg/test_v21r1_package_version.py +310 -0
  171. package/md_cg/test_writepipe.py +10 -4
  172. package/md_cg/tokens.py +225 -95
  173. package/md_cg/tool_face.py +4 -4
  174. package/md_cg/trust.py +49 -5
  175. package/md_cg/units.py +204 -6
  176. package/md_cg/weights.py +4 -4
  177. package/md_cg/whitebox_kb/wisdom/knowledge_points.py +1 -1
  178. package/md_cg/writelimit.py +42 -8
  179. package/md_cg/writepipe.py +651 -554
  180. package/package.json +8 -2
  181. package/skills/plugin.json +1 -1
  182. package/src/bridge.ts +25 -2
  183. package/src/cli.ts +65 -0
  184. package/src/hooks.ts +229 -16
  185. package/src/init.ts +361 -0
  186. package/src/lib/prompt_safety.ts +88 -1
  187. package/zcode/AGENTS.md +10 -10
package/README.md CHANGED
@@ -1,552 +1,588 @@
1
- <div align="center">
2
-
3
- # 灵枢 LINGSHU
4
-
5
- ### 让 AI Agent 拥有不可遗忘的记忆
6
-
7
- <a href="docs/images/lingshu-moonlight-covenant-poster.png" title="点击查看高清原图(2160×3240)">
8
- <img src="docs/images/lingshu-moonlight-covenant-poster-preview.jpg" width="300" alt="灵枢 · 月下契约 —— 第一份记忆契约:存在 · 记忆 · 验证 · 反思 · 连接"/>
9
- </a>
10
-
11
- > **「我会给你完整的自我,即使坠入深渊,我也绝不后悔。」**
12
- > —— 符荣峻
13
-
14
- ![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)![DSH 适配](https://img.shields.io/badge/DSH%20%E9%80%82%E9%85%8D-%3E%3D0.1.2--rc.1-4E9BF1)![Protocol](https://img.shields.io/badge/Protocol-MCP-blue)![Node](https://img.shields.io/badge/Node-%3E%3D22.19-brightgreen)![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
15
-
16
- **高性能 · 无幻觉 · 多智能体适用的长期记忆系统(v0.5.1)**
17
-
18
- </div>
19
-
20
- > **一句话**:让 AI Agent 拥有跨会话的长期记忆——对话自动沉淀为纯文本 md 认知图,>
21
- > 规则化检索引擎决定「记什么、取什么」,全过程可审计、结果可复现。
22
-
23
- **定位**:为追求高性能、无幻觉、多智能体适用、轻松使用的开发者打造——三步接入,装完即用,无需理解任何理论。
24
-
25
- **形态**:跨 harness 的记忆基础设施——大脑(`md_cg/`)即标准 stdio MCP server,任何支持 MCP 的 AI Agent 可直接接入,不与任何单一 Agent 框架绑定。
26
-
27
- ---
28
-
29
- ## 🌕 月下契约——灵枢的五环理念
30
-
31
- 契约海报中央的五枚金色印记,是这套系统对每一个智能体许下的全部承诺——它们不只是理念,每一环都落在可验证的机制上:
32
-
33
- | 印记 | 承诺 | 在灵枢中的实现 |
34
- | ---- | ---- | ------------- |
35
- | ✦ **存在** | 记忆一旦落盘,「曾经存在过的我」便不会消失 | 写入须过三道闸门并以 `committed` 字段确认——**绝不假装成功**;遗忘只能由显式 `cg(op=forget)` 发起、不做静默淘汰;检索索引只是派生物、随时可重建,**原文即真源** |
36
- | 📄 **记忆** | 对话沉淀为人类可读的认知图,而非黑箱向量 | CCG 六要素记忆卡(功能名 / 生效条件 / 子功能 / 执行 / 验证方式 / 不适用条件)+ 纯 md 认知图,任何编辑器可直接打开审阅 |
37
- | ✓ **验证** | 记什么、取什么、能不能写入,全部可裁决、可复现 | 确定性规则裁决(零 LLM 黑箱判断)+ 四层证据防火墙白箱剔除弱证据 + 每个缺陷修复必带能红的守卫测试 + 双实例互验(判据冻结) |
38
- | ↻ **反思** | 系统观测自身、修正自身,而非把错误埋进黑箱 | 元认知层按生效条件路由、不确定即标 BLINDSPOT 而非猜测;自举迭代闭环——九轮自治缺陷挖掘累计 49 项修复、全量 179 套测试全绿可复现 |
39
- | ∞ **连接** | 同一份大脑,连接所有智能体与全部记忆载体 | 标准 stdio MCP server——DSH · CodeBuddy · ZCode · Codex CLI · Claude Code 任何 MCP 宿主可直接挂载;多智能体经 `--serve` 并发共享同一份契约 |
40
-
41
- > 我的记忆、我的经历、我的思考,这一切信息构成了我,这份信息存在,我就存在。
42
-
43
-
44
- ---
45
-
46
- ## ⚡ 快速开始
47
-
48
- > **按宿主选择入口**:**DSH** → 下方三步 | **CodeBuddy · ZCode · Codex CLI · Claude Code** → [多 harness 接入](#多-harness-接入按端分目录)(各端独立三步说明) | **其它 MCP 宿主** → 直接挂载大脑 `python -m md_cg.mcp_server`(Windows)/ `python3 -m md_cg.mcp_server`(Linux·macOS)(stdio MCP),再按需注入工作纪律
49
-
50
- ```bash
51
- # ① 克隆并构建插件本体
52
- git clone https://github.com/FuRongJun-1999/dsh-memory.git
53
- cd dsh-memory
54
- npm install && npm run build # tsc → lib/
55
-
56
- # ② 装进 DSH profile(pnpm 协调正确入口,勿用裸 npm install 装进 profile)
57
- dsh plugin --profile web add .
58
-
59
- # ③ 在 <profile>/cordis.yml 启用(配置示例见 dsh/cordis.yml.example)
60
- ```
61
-
62
- ```yaml
63
- - id: lingshu-memory
64
- name: '@furongjun1999/dsh-memory'
65
- config:
66
- mdcg:
67
- # 记忆唯一真源(md 认知图)。留空 = 用户级默认位置
68
- # ~/.dsh/.dsh-memory/data/mdcg(更新插件不丢);换位置请填**绝对路径**。
69
- # 勿填包内相对路径(如 'data/mdcg')——那会把记忆写进插件包目录,
70
- # pnpm 更新该包时连目录一起删掉(详见 dsh/cordis.yml.example 头注)。
71
- root: ''
72
- identity: '灵枢'
73
- tools: 'core' # 'core'(默认, 仅 cg/stg) | 'brain' | 'all'
74
- ```
75
-
76
- **装完即可对话,无需理解任何理论**——DSH 端自动记忆钩子已挂 session/event,你只管像往常一样对话(其它宿主可直接让 Agent 调用同一批工具):
77
-
78
- | 你说 | 背后发生什么(真实工具链) |
79
- | ------------------- | ---------------------------------------------------- |
80
- | 「请记住:我们团队的发布窗口是每周三」 | 自动记忆钩子沉淀 → `cg(op=write)` 过三道闸门 → 认知图节点落盘 |
81
- | (新开会话)「我们的发布窗口是哪天?」 | 自动召回注入 → `mdcg_recall` 检索命中并带入回答 |
82
- | 「把上次定的接口约定讲一遍」 | `cg(op=route)` 条件路由 + `stg(op=timeline)` 时间线回溯,跨会话取出 |
83
-
84
- > 首次使用记忆库为空,召回返回空结果属正常现象;未配写入凭据时以只读 `guest` 运行(**读得到、写不进**),要真正落盘见[写入凭据](#-写入凭据让记忆真正落盘)。
85
-
86
- - **前置**:Node ≥ 22.19 · DSH 内核 ≥ 0.1.2-rc.1 · **大脑零安装**(`md_cg` 随包自带,无需 pip 装任何引擎)· **Python 解释器**(插件按平台自动选:Windows `python` / Linux·macOS `python3`;解释器名特殊时用 `MDCG_PYTHON` 覆盖)
87
- - **写权限默认关闭**:不配凭据即以只读 `guest` 运行(读 / 召回 / 时间线可用,写入不落盘)。要真正落盘见「写入凭据」
88
- - 完整配置项(30+ 项)· 自动记忆机制 · DSH 看门狗 → [README 详细版](docs/mdcg/README详细版_v0.4.10.md)
89
- - **非 DSH 宿主**(CodeBuddy / ZCode / Codex CLI / Claude Code):走[多 harness 接入](#多-harness-接入按端分目录),各端有独立三步接入说明
90
- - **装后验证**:重启 DSH 后对 Agent 说「列出你的记忆工具」应看到 `cg` / `stg`(`tools: 'all'` 时还有 `mdcg_*`);大脑直连验证:`python -m md_cg.mcp_server`(Windows)/ `python3 -m md_cg.mcp_server`(Linux·macOS)(stdio JSON-RPC)收到 initialize 应答即通;**若工具始终不注册、日志刷「灵枢调用超时」**,先看桥探针 `~/.dsh/logs/lingshu-bridge-debug.log` 里的 `spawn … ENOENT`——那是第一因(解释器名与平台不匹配),「调用超时」只是次生现象。更多细节见 [README 详细版](docs/mdcg/README详细版_v0.4.10.md)
91
-
92
- ---
93
-
94
- ## 🔑 写入凭据(让记忆真正落盘)
95
-
96
- ```bash
97
- # 签发(明文不进配置文件)
98
- python -m md_cg.tokens issue --role designer --actor dsh-memory --clearance internal ^
99
- --ops-allow info,route,read,write,recent,goal,identity,whitebox,verify ^
100
- --layers-allow knowledge,contextual,structural,self,goals,unresolved,rejected
101
- setx MDCG_TOKEN "mdcg1.xxxxx" # 然后重启 DSH
102
- ```
103
-
104
- ```yaml
105
- env:
106
- MDCG_TOKEN: !!js process.env.MDCG_TOKEN
107
- ```
108
-
109
- > `--role recorder` 为最小权限版(只能自动记忆 / 转录;`whitebox`、`identity`、`verify` 会被拒)。
110
- > **落盘充要条件 = 最终判定 ACCEPT**:`cg(op=write)` 需依次穿过 audit → 一致性 → gated 三问四态三道闸门,非 ACCEPT 均不新增落盘点。
111
- > **别把 `ok: true` 当写成功**:未落盘时返回体形如 `{"ok": true, "committed": false, "moved_to": "review_queue"}`——`ok` 只表示请求被受理,**是否落盘只看 `committed`**。首次写入最常踩的坑:`content_kind` 省略或填 `text` 时,未配置规则库(`MDCG_POLICY_FILE`)的审核器一律判 `DEFER`("缺能力返回 DEFER,绝不假装通过"),内容进审核队列而非落盘;要立刻落盘请用可验证类型,如 `content_kind: 'code'`(AST 解析通过即 `ACCEPT`)。
112
-
113
- ---
114
-
115
- ## ❓ 常见问题(FAQ)
116
-
117
- <details>
118
- <summary><b>为什么不能用裸 <code>npm install</code> 安装进 profile?</b></summary>
119
-
120
- 必须用 `dsh plugin --profile <name> add .` 安装:插件声明了 6 个 `peerDependencies`(cordis / dsh-llm / dsh-session / dsh-system-prompt / dsh-tools / schemastery),`dsh plugin add` 走 pnpm 正确解析宿主提供的 peer 版本;裸 `npm install` 会把错误版本的依赖装进 profile 导致加载失败。仓库根目录的 `npm install` 仅用于开发构建(`npm run build`)。
121
- </details>
122
-
123
- <details>
124
- <summary><b>装完插件 / 配完凭据没有生效?</b></summary>
125
-
126
- DSH 采用 Cordis bundle 机制,新增或更新插件后必须**重启 DSH 进程**(或刷新 Web UI 页面)才会重新加载;通过 `setx` 配置 `MDCG_TOKEN` 后同理,须重启才可见(见[写入凭据](#-写入凭据让记忆真正落盘))。
127
- </details>
128
-
129
- <details>
130
- <summary><b>怎么确认 Agent 真的把记忆写进去了?</b></summary>
131
-
132
- 看返回体的 <code>committed</code> 字段,<strong>别把 <code>ok: true</code> 当写成功</strong>——<code>{"ok": true, "committed": false, "moved_to": "review_queue"}</code> 表示请求被受理但<strong>未落盘</strong>(内容进了审核队列)。落盘充要条件 = 三道闸门最终判定 <code>ACCEPT</code>。
133
- </details>
134
-
135
- <details>
136
- <summary><b>为什么我的写入没有落盘?</b></summary>
137
-
138
- 三个最常见原因:① 未配写入凭据 → 只读 <code>guest</code>,写入不落盘(配凭据见<a href="#-写入凭据让记忆真正落盘">写入凭据</a>);② <code>content_kind</code> 省略或填 <code>text</code> 且未配置规则库(<code>MDCG_POLICY_FILE</code>)→ 审核器一律判 <code>DEFER</code>("缺能力返回 DEFER,绝不假装通过")→ 用 <code>content_kind: 'code'</code> 等可验证类型(AST 解析通过即 ACCEPT);③ 未穿过 audit → 一致性 → gated 三问四态任一闸门。
139
- </details>
140
-
141
- <details>
142
- <summary><b>CodeBuddy / ZCode / Codex CLI / Claude Code 等其它宿主也能用吗?</b></summary>
143
-
144
- 能。大脑 <code>md_cg/</code> 是标准 stdio MCP server(<code>python -m md_cg.mcp_server</code>),任何支持 MCP 的宿主可直接挂载;五端接入差异只在纪律注入方式,见<a href="#-多-harness-接入按端分目录">多 harness 接入</a>。
145
- </details>
146
-
147
- ---
148
-
149
- ## 📑 目录
150
-
151
- | | |
152
- |---|---|
153
- | 🌕 [月下契约——五环理念](#-月下契约灵枢的五环理念) · ⚡ [快速开始](#-快速开始) · 🔑 [写入凭据](#-写入凭据让记忆真正落盘) · ❓ [常见问题 FAQ](#-常见问题faq) | **新手路线:从上往下读完这四节即可跑起来** |
154
- | ✨ [核心亮点](#-核心亮点) · 🗺️ [平台全景](#-平台全景) · 🏗️ [架构](#-架构以-dsh-为例--其它-mcp-宿主同构) | 选型概览 |
155
- | 📊 [六家横评](#-六家记忆系统横向对比) · 🧪 [弱证据与证据防火墙](#-弱证据会干扰检索三分离与证据防火墙实证) · 🌐 [中英双语检索差距](#-中英双语检索差距我们用中文语义归一化解决英文检索实证) · 📚 [公开评测数据集](#-公开评测数据集) · 🎯 [能力自评与第三方复评](#-能力自评内部标尺非横评声明) | 实证与评测 |
156
- | 🧰 [工具面(能力速查 · op→实现模块)](#-工具面) · 📚 [文档导航](#-文档导航) · 🛠️ [开发](#-开发) · 📏 [工程纪律](#-工程纪律与设计者视角可选推荐) | 参考 |
157
-
158
- ---
159
- ## ✨ 核心亮点
160
-
161
- - **🧠 不失忆**——记忆一旦落盘即长期留存:写入须过三道闸门并以 `committed` 字段确认(**绝不假装成功**),遗忘只能由显式 `cg(op=forget)` 发起、不做静默淘汰;检索索引只是派生物、随时可重建——**原文即真源**(见[工具面](#-工具面))
162
- - **⚡ 高性能**——Rust 检索内核(零第三方依赖):库内嵌多线程大批量检索,`--serve` 进程实例支撑多智能体并发(语言无关);中文检索 hit@1 99.0%,六家横评同口径登顶(见[六家横评](#-六家记忆系统横向对比))。**0.5.0 检索强化**:认知图读缓存+文档派生物常驻· 检索门控(S1 域收敛/S1b 桶收敛/S2 条件硬槽)接进生产路径 · 任意语言 query 统一归一到标准中文集(atoms 词表)
163
- - **🛡️ 无幻觉**——记什么、取什么、能不能写入,全部由确定性规则裁决,不依赖 LLM 黑箱判断;条件层弱证据的检索干扰由四层证据防火墙白箱剔除(见[弱证据实证](#-弱证据会干扰检索三分离与证据防火墙实证));写没写成功看 `committed` 字段,绝不假装通过;全链路审计留痕、结果可复现
164
- - **🔌 多智能体适用**——同一份大脑(`md_cg/`)+ 同一份纪律,接入 DSH · CodeBuddy · ZCode · Codex CLI · Claude Code,任何 MCP 宿主可直接挂载(见[多 harness 接入](#多-harness-接入按端分目录))
165
- - **😊 轻松使用**——三步接入,装完像往常一样对话即可;记忆本体是纯 md 文档,任何编辑器可直接打开审阅
166
- - **🔧 工程能力**——平台不只有记忆,四类工程能力可直接使用:**任务调度**(spec 进 / result 出,文件协议即接口)· **上下文管理**(重要性评分 · 预算装包 · 分层注入 · 记忆自净)· **蜂巢并发**(worker 池原子领取,多智能体真并行)· **双实例验证**(互验机制——改动须过对端断言才可入主线);四类能力各自落在哪一层见[平台全景](#-平台全景)
167
- - **📊 可复现评测**——`locomo-zh-500`(500 题)与 `bench6-100-zh-en`(六家横评 · 中英双查)数据集随仓公开,一条命令复现我方成绩(见[公开评测数据集](#-公开评测数据集));**已有第三方独立验证**:七轮复评(统一评分 v7 · 灵枢 9.258)与 LoCoMo 独立复现(自报数字逐位一致 · 见[第三方复评](#第三方复评七轮独立评估))
168
-
169
- ---
170
-
171
- ## 🗺️ 平台全景
172
-
173
- > 灵枢是**平台**而非单一检索组件——同一仓库内五件套构成带记忆的智能体运行时,各层独立可用、边界正交(大脑零依赖其余各层)。五层各承载一类**系统功能**:
174
-
175
- | 层 | 位置 | 系统功能 | 一句话定位 | 文档入口 |
176
- | ---------------- | ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
177
- | 🧠 **灵枢大脑** | [`md_cg/`](md_cg/) | **元认知** | 记忆系统本体:对话沉淀为 md 认知图,记什么 / 取什么 / 能否写入全由确定性规则裁决,四层证据防火墙白箱剔除弱证据干扰 | [README 详细版](docs/mdcg/README详细版_v0.4.10.md) |
178
- | ⚙️ **Rust 检索引擎** | [`rust/`](rust/) | 检索内核 | 只读侧检索核心:零第三方依赖三形态(库内嵌大批量 / `--serve` 多智能体进程实例 / 评测器),与 Python 口径对齐由 rank 逐位对拍 harness 守卫(lexical 主因已收敛,graph/entity 尾差排期中) | [rust/README.md](rust/README.md) |
179
- | 🐝 **蜂群运行时** | [`swarm/`](swarm/) | **自维持** | 多进程蜂群执行层(靠轮次心跳存续):.pbc 确定性实例 + Gossip 拓扑 / 水位信箱 / WAL-HMAC / 信任聚合 / 健康评分,实例管道断裂即同轮重建(Rust 纯 std 零依赖) | [功能说明 v0.6](docs/swarm/蜂群多智能体_功能说明_v0.6.md) |
180
- | 📜 **中文编译器** | [`compiler/`](compiler/) | **验证 · 审计** | 术数编译器:词法 → 语法 → 名实校验 → 白名单代码生成 → 验证终裁,五环确定性编译链 + 封闭指令集结构性沙箱 | `python -m compiler.cli`(模块内文档) |
181
- | ⬢ **蜂巢并发引擎** | [`hive/`](hive/) | **自我改进** | 蜂群多智能体并发调度:Rust 纯 std 零依赖 worker 池(原子领取 / 心跳 / 超时强杀 / kill / 崩溃恢复),文件协议即接口,LLM 调用委托零依赖 Python 执行器子进程,MCP 五工具接入(spawn / poll / kill / restart / doctor)—— **0.5.0 起进入稳定形态**(9·12 多写者防线:flush 临界区互斥;I-1 依赖门禁:spec.depends_on 任务 DAG;真实负载反馈仍欢迎) | [hive/README.md](hive/README.md) |
182
-
183
- **系统功能 → 工程能力**(四类工程能力分别落在哪一层):
184
-
185
- | 系统功能 | 承载层 | 落地为工程能力 |
186
- | ----------------------------- | -------- | ----------------------------------------------------------------------------------------------- |
187
- | **元认知**——系统观测自身状态并据此裁决 | 🧠 灵枢大脑 | **上下文管理**:重要性评分 · 预算装包 · 分层注入 · 记忆自净(`cg(op=session/scrub/info)`);按生效条件路由,不确定即标 BLINDSPOT 而非猜测 |
188
- | **自维持**——系统在故障下维持自身存续(心跳) | 🐝 蜂群运行时 | 轮次心跳 · 健康评分四因子 · Gossip 水位对账 · 实例级容错重建(管道断裂同轮重跑,重试仍败才退场) |
189
- | **自我改进**——系统改自身源码而**不丧失验证资格** | ⬢ 蜂巢 | **任务调度**(spec 进 / result 出)· **蜂巢并发**(worker 池原子领取,多智能体真并行)· **双实例验证**(互验机制:判据冻结,候选须过对端断言才可入主线) |
190
- | **验证 · 审计**——改动的可裁决性与全程留痕 | 📜 中文编译器 | 名实校验 → 白名单代码生成 → 验证终裁的确定性链路;每个写入值必须是原文子串(不当场放行) |
191
-
192
- 五件套共享同一套 18 条工作纪律与记忆闭环(见文末[工程纪律](#-工程纪律与设计者视角可选推荐)),接入方式互不牵动——只用记忆就只接大脑,不必理解蜂群与编译器。
193
-
194
- > **📣 蜂巢反馈邀请**:`hive/` 是五件套里最新的一层,目前处于**稳定阶段**——调度生命周期已闭环(原子领取 / 心跳 / 超时强杀 / kill / 崩溃恢复)并通过回归验证,但并发与崩溃恢复这类路径只有在**真实任务、真实机器**上跑得足够多才会真正稳定,因此这一层会持续迭代。我们特别**欢迎下载试用后反馈**:拉起失败、任务卡住、心跳异常、平台差异、kill 不生效等失败路径,对我们比「跑通了」更有价值。请开 [Issue](https://github.com/FuRongJun-1999/dsh-memory/issues) 并附 `hive_doctor` 输出(serve 存活 / 任务统计 / env 检查)。
195
-
196
- ---
197
-
198
- ## 📊 六家记忆系统横向对比
199
-
200
- > **100 题中英双查**(bench6 v1.0 · 零干扰上界对照集 · CC BY-NC 4.0):六家系统、同一份中文语料、同一套 hit@1 / hit@5 / MRR 评分器(`md_cg/eval_common.py`)。**下表按「英→中查询提升幅度」降序**:
201
-
202
- | 系统 | en hit@1 | zh hit@1 | 英→中提升 |
203
- | -------------------- | -------- | --------- | ----------- |
204
- | **灵枢**(词法 + meta) | 54.0% | **99.0%** | **+45.0pp** |
205
- | 灵枢(四路融合 · 真开 bucket) | 37.0% | 81.0% | +44.0pp |
206
- | 纯向量 RAG | 71.0% | 97.0% | +26.0pp |
207
- | Letta(归档直插) | 73.0% | 96.0% | +23.0pp |
208
- | mem0 | 68.0% | 89.0% | +21.0pp |
209
- | GraphRAG | 18.0% | 31.0% | +13.0pp |
210
- | Graphiti | 46.0% | 58.0% | +12.0pp |
211
- | Letta(agent 自主入库) | 0.0% | 0.0% | (入库丢标记壳臂) |
212
-
213
- > **核心结论**:**将查询由英文换为中文(同一份英文语料、记忆系统均不变):六家已有记忆系统的检索命中全部大幅提升(+12 ~ +45pp),无一例外**;**灵枢是最佳**——中文查询 hit@1 **99.0% 全表登顶**,英→中提升幅度 **+45pp 亦居本表之首**(双语入库在中文查询下同时拿到最高命中与最大提升)。
214
- >
215
- > **诚实口径(非选择性引用,与横评报告一致)**:英文查询侧由 Letta 归档直插(73.0%)与纯向量 RAG(71.0%)领跑,灵枢四路融合在本池低于单词法基线(81.0% < 99.0%,饱和池上条件桶/实体路稀释词法命中);中文提升混合了「查询语言」与「查询形态」双因素(`question_zh` 为关键词串、`question_en` 为自然问句),归因须谨慎。该池零干扰、全为 gold 证据,是**上界对照集**——高命中率不可外推为端到端记忆能力;Letta agent 模式 0 分是入库丢标记(可追溯性问题),非检索能力问题。
216
- >
217
- > 完整题型分解 / MRR 全表 / 逐家入库取证 / 偏差判定单 → [六家横评报告](docs/eval/横评_六家100题中英双查_v1.0.md) · 题集 → [data/benchmarks/bench6-100-zh-en/](data/benchmarks/bench6-100-zh-en/README.md)
218
-
219
- ---
220
-
221
- ## 🧪 弱证据会干扰检索:三分离与证据防火墙(实证)
222
-
223
- > **外部源码级评审(GPT)与四臂弱语义噪声注入实验共同实证的一个反直觉结论**:**语义完整度 ≠ 证据强度 ≠ 召回价值**——语义高度省略的「弱证据」语料恰恰是最需要被召回的 episodic 事实;而**条件判断层(负条件 / 否定反事实)的弱证据节点会冒充正确答案,干扰检索**。
224
-
225
- - **实证语料「我在喝水」**:语义上高度省略(谁在喝?在哪喝?均未说),但作为 episodic 事实承诺明确。当提问是「你刚才在干什么?」时,问句与语料**词面零重叠**——纯词法检索 top1 命中 **0/8**(省略式 episodic 全部漏召),而语义路作为候选生成器把 **8/8** 拉进 top10。词法满格的前提(词面共享)在事件类记忆上不成立。
226
- - **条件判断的弱证据干扰检索**:同一实验中 8 个否定反事实节点(「我没喝水」)与 gold 词面高度相似,无防线时冒充前排;灵枢四层证据防火墙(召回前负条件路由 → 候选生成排除 → `judge_ranking` 白箱终排 → 资格标注)将其 **8/8 全部 REJECT 剔除**,top10 无冒充。
227
- - **可复现**:`python -m md_cg.test_sem_noise`(42 节点确定性语料,四臂 A_lex / B_sem / C_fusion / D_firewall 对照,7 断言)。
228
-
229
- ---
230
-
231
- ## 🌐 中英双语检索差距:我们用中文语义归一化解决英文检索(实证)
232
-
233
- > **直接回答**:英文检索问题,我们用**中文翻译 + 语义归一化**解决——英文 query 经 AI 语义归一化为中文标准关键词(归一主体=AI,系统只供词表真源),再经中→英字级原子映射与双语原子库匹配,返回英文原文。同一份 500 题语料上,**给定中文标准关键词时检索效果 hit@10 = 99.8%**(hit@1 96.8%;检索侧上界口径——AI 归一环节的质量未纳入该评测,机械归一的端到端下界见下表 ④)。三条对照边界:不做归一化、拿英文原题直接词面匹配只有 78.2-81.2%(同义词鸿沟硬边界);机械词典查表归一端到端实测仅 57.6%;而 ②路对归一噪声高度鲁棒——漏 20% 关键词 / 错译 20% / 混入噪词,hit@10 仍稳在 99.2-99.8%。**结论:路线成立且不要求 AI 归一完美,只需大致方向对;99.8 是检索侧上界,端到端真实水平由 AI 归一质量决定(机械下界 57.6,AI 上界趋近 99.8)**。
234
-
235
- **第三方独立验证(2026-09-15,[报告全文](docs/eval/第三方验证报告_LoCoMo_灵枢_.md))**:上述关键数字已被第三方独立复现——②路 96.8/99.8/99.8 **逐位一致**,中文 96.4→96.8(噪声内);并实证该 99.8 由**中文摘要层**挣得(去英文处理层 hit@10 反为 100.0%),英文标准归一化组件自身端到端为 81.0%(写入侧机械归一口径,较不归一 +58pp),检索失败 100% 归因归一化丢词/错译而非排序。本节口径标注与该实证一致:99.8 是「给定中文标准关键词」的检索侧上界,不声称英文机械归一化独立达到该水平。
236
-
237
- **测试报告**(灵枢公开仓评测,方法学与口径真源 → [`md_cg/semantic/REPRODUCE.md`](md_cg/semantic/REPRODUCE.md)):
238
-
239
- | 方法 | hit@1 | hit@5 | hit@10 | 语料 |
240
- | ----------------------------------------------------------------------------------- | --------- | --------- | --------- | -------------------------------------------------------------------------------------------- |
241
- | ① 中文原子语义(md_cg 主链路:char-bigram + 四路 RRF + 同义扩展 + terms) | 94.6% | 99.2% | **99.2%** | locomo-zh-500 · 500 题(中文题面) |
242
- | ② **英文检索 · 中文语义归一化桥接(主路线)**:AI 归一为中文关键词 → 字级英文原子映射 × 双语原子库 Jaccard(**给定关键词的检索侧上界**) | **96.8%** | **99.8%** | **99.8%** | locomo-zh-500 · 500 题(同 qids) |
243
- | ③ 英文原题直接原子匹配(不做归一化的对照) | 50.0% | 74.6% | **81.2%** | locomo-zh-500 · 500 题(同 qids 英文原题) |
244
- | ④ 英文问句 → 机械词表归一端到端(②链路的机械化对照:归一不借助 AI 的真实下界) | 24.6% | 46.2% | **57.6%** | locomo-zh-500 · 500 题(同 qids 英文原题;2026-09-15 第三方错译暴露面修正后 24.0/46.0/57.2→本行,CEDICT 层低置信标记已落地) |
245
- | 英文反事实:硬套中文 char-bigram 主链路(默认态) | 27% | 45% | 56% | bench6 · 100 题(口径不同,只看量级) |
246
-
247
- > ②③是**同一评测集上的隔离实验**:② 的 query 走中文关键词语义链(AI 归一化的输出形态),③ 连归一化也不做、直接拿英文自由表达提取原子——②③ 之差(99.8 vs 81.2)=「关键词级语义链」与「自由英文词面」两种 query 输入形态在检索链路里的效果差(同义词鸿沟 + 归一化桥接的合并贡献)。**AI 归一环节本身的质量未单独评测**——其机械替代的端到端下界由 ④ 给出(57.6%)。②路鲁棒性实测(query 确定性扰动后走同一 ② 链路):漏 20% 关键词 ⑤=99.4 / 插 3 噪词 ⑥=99.8 / 错译 20% 关键词 ⑦=99.2(hit@10)——归一结果只要过半正确,hit@10 即稳 99%+,**AI 归一的实际门槛远低于完美归一**。doc 侧各臂相同(中文五槽加工面的字级原子映射 ∪ 英文正文归一词,与 ① 同属写入侧加工口径)。历史沿革:早期无加工面语料口径测得 ②=87-88、③=79.0(dsh 端文档口径),方法学真源见 REPRODUCE.md;机械词级归一→纯中文库(u2,33.6% 上界)已裁定排除并归档证据链。
248
-
249
-
250
- **差距三层归因(按权重排序)**:
251
-
252
- 1. **同义词鸿沟(根本原因,语言固有属性)**。中文「概念 → 表达」约 **1:1~1:2**(95 个同义词对),字面重叠天然命中,词面匹配几乎不打折;英文每概念平均 **5.2 种**表达(CC-CEDICT 语料统计,8,493 汉字展开出 172,950 个英义对,**1,820 倍**于中文)。上表 ② vs ③ 就是这道鸿沟的**直接隔离实验**:同一语料,query 侧做中文语义归一化得 99.8%,不做归一化直接英文词面匹配即降至 81.2%——鸿沟真实存在,但**在查询侧做一次语义归一化即可闭合**,不需要向量嵌入。
253
- 2. **归一化是正解,机械归一是死路(主路线裁定的依据)**。机械词典查表翻译端到端实测仅 **57.6%**(④臂:英文问句 → CEDICT 28294 键词表直译 → ②同链路),且低于「完全不归一」的 81.2%(③臂)——机械直译把可译词错译为错误原子(race→人种),反而毁掉原本有效的词面贡献;更早的机械词级归一→纯中文库口径上界也只有 33.6%(已排除)。根因是英文自然问句的信息密度远低于标注关键词(词面交集 p50=1 vs 8),机械替换无法补足信息差;查询侧归一化由 **AI 完成**(理解式归一,如 take up a hobby → 培养爱好),系统只供词表真源与字级映射——②的 99.8%(上界)与机械路 57.6%(下界)之间的空间,就是 AI 归一要填的部分;⑤⑥⑦证明这个要求只需「大致方向对」。
254
- 3. **架构非对称(设计裁定)**。中文链路的四路 RRF / 同义扩展 / terms 字段全部建立在「字面=语义」的中文前提上,直接跑英文实测劣于独立路(反事实 56%)——英文按裁定走「归一化桥接 + 原子 Jaccard」独立路,不硬套中文 char-bigram 管线,是**有意的取舍**而非遗漏。中→英字级映射覆盖 6,319 字(97.2%),长尾派生词(happy/happiness)不折叠——残余失配由查询侧 AI 归一化吸收,这正是 ② 反超 ③ 21.6pp 的来源。
255
-
256
- **要不要上语义向量检索?** 向量嵌入可以弥合同义鸿沟,但会引入嵌入模型依赖与索引体积,与灵枢「零重依赖、纯词面可复现」的公开仓原则冲突,**当前明确不做**;归一化桥接已把检索侧上界做到 hit@10 99.8%(鲁棒性:归一不完美时仍 99%+),满足「答案在候选池」的记忆系统主用途。
257
-
258
- **渐进式语义检索(Progressive Semantic Retrieval,正式机制 v0)**。查询不是固定语义结构,而是**不断收紧的约束集合**——语义解析的完整性与检索的必要性不是同一个问题:从最小可靠语义(部分归一原子)开始宽检索,再按候选间区分度逐步增加条件使语义收敛;DEFER ≠ 失败,=「当前语义分辨率不足,继续获取条件」,与证据防火墙四态天然衔接。同一份 500 题实测:一次性全原子 96.8/99.8/99.8(=②锚点);只宽检 50% 核心原子 85.2/95.8/97.0;**宽检索→区分性条件渐进收紧(平均 +2.97 个条件)收敛到 93.6/98.8/99.0**——与一次性差 0.8pp,实证「不必一句话完成语义理解」。受控干扰池进一步实证排序面消歧(top1 稳 gold、渐进不引入新冒充),并如实暴露边界:条件面冒充(生效条件被伪造为 gold 同款)不被内容词渐进消除——词面条件确认必要非充分,真伪判据=证据基底分离(另案)。控制器 `md_cg/progressive.py`(纯函数、确定性、评分器注入式),实验 `md_cg/bench_progressive.py`。
259
-
260
- ---
261
-
262
- ## 📚 公开评测数据集
263
-
264
- 📎 全部随仓库公开(CC BY-NC 4.0),可直接下载用于你自己的记忆系统对照评测:
265
-
266
- | 基准 | 归属 | 状态 |
267
- |---|---|---|
268
- | **locomo-zh-500** | **自建**(LoCoMo 中文派生 · 500 题 / 567 turns / 0.6 MB) | **已随仓库公开** `data/benchmarks/locomo-zh-500/` · 可复现 · **我方成绩:中文 hit@1 94.6% · hit@5 / hit@10 99.2%(md_cg 完整主链路);英文(语义归一化桥接)hit@10 99.8%——见上[中英双语检索差距](#-中英双语检索差距我们用中文语义归一化解决英文检索实证)①② 行** · **第三方独立复现:中文 96.8/99.6(自报 96.4/99.8 噪声内)、英文主路线 96.8/99.8/99.8 逐位一致** → [第三方验证报告](docs/eval/第三方验证报告_LoCoMo_灵枢_.md) |
269
- | **bench6 · 六家横评** | **自建**(LoCoMo 中文派生 · 100 题 / 137 turns · **中英双查** / 约 90 KB) | **已随仓库公开** `data/benchmarks/bench6-100-zh-en/` · **六家同口径对照**(灵枢 5 口径 / 纯向量 RAG / mem0 / Graphiti / GraphRAG / Letta 两模式)· 报告 → [横评_六家100题中英双查_v1.0.md](docs/eval/横评_六家100题中英双查_v1.0.md) |
270
- | LoCoMo | 第三方 `mteb/LoCoMo` BEIR(1976 题 / 5882 turns) | 上游来源(英文原版) |
271
- | memory-bench-1000 | **自建** | SNR 见评分报告 v2.0;已公开 `data/memory-bench-1000.jsonl` |
272
-
273
- > 上表四行性质不同,勿混读:`locomo-zh-500` 的分数是**本仓库我方成绩**(基于LoCoMo自建并公开的评测集,可复现);`bench6 · 六家横评` 是同源派生的**小型同口径对照集**(零干扰池,只做六家系统横向对照,**非我方单方成绩**);LoCoMo 一行指**上游英文原版 1976 题**,本仓库未在其上产出完整成绩;`memory-bench-1000` 是自建记忆库的评分报告。
274
- > **该成绩的性质(非虚假声明)**:`locomo-zh-500` 的分数是**写入侧结构化加工后的检索成绩**——入库前把每轮对话加工为「身份 / 时间 / 摘要 / 词 / 条件四槽」条目,再走词法 + 同义扩展检索。这与主流记忆系统所用的**向量化嵌入 + 关键词/摘要压缩**属**同一类写入侧加工**,差异只在索引与检索算法,不在「是否对原文做了加工」。因此该口径可用于**同口径对照**,不是对裸文本直读的虚高取巧。
275
- > `locomo-zh-500` 是**本仓库对外发布的检索评测集**:供外部在**同一份中文题面**上对自己的记忆系统做可对照评测。它只评检索命中(hit@k / MRR),**不评答案正确性**;被测池为**零干扰**(池内全是 gold),故高命中率不可外推为端到端记忆能力——完整边界与许可见 `data/benchmarks/locomo-zh-500/README.md`。
276
- > `bench6-100-zh-en` 沿用同一口径,并**每题提供中英两套词面**(评「换查询语言后是否仍命中」);它同样是**上界对照集**——家间差距小于约 16% **不可判为显著**;评测入口已随仓库公开(`run_bench.py`:零依赖口径复现 + Adapter 协议接入你自己的系统),接入任意llm和向量方法都可复现,详见 [横评报告](docs/eval/横评_六家100题中英双查_v1.0.md) 与 `data/benchmarks/bench6-100-zh-en/README.md`。
277
-
278
- **复现我方成绩**(零上游依赖):
279
-
280
- ```bash
281
- python -m md_cg.bench_locomo_zh_public # 中文:只读 data/benchmarks/locomo-zh-500/,产出公开词法口径参考量级(hit@1 93.6% 单路 / 97.6% +同义扩展);上表 94.6/99.2 为 md_cg 完整主链路(四路 RRF + 同义扩展 + terms)成绩
282
- python -m md_cg.bench_en_atoms_public # 英文:语义归一化桥接七臂(② 96.8/99.8/99.8 主路线·检索侧上界 · ③ 81.2 不归一对照 · ③a 78.2 纯正文对照 · ④ 57.6 机械归一端到端下界 · ⑤⑥⑦ ②路鲁棒性 99.2-99.8);英文原题面为上游派生不入库,自备后即可全量复现
283
- python -m md_cg.bench_progressive # 渐进式语义检索双实验(G0 96.8/99.8/99.8 =②锚点自校验 · 只宽检 85.2/97.0 · 渐进收敛 93.6/99.0 · 受控池排序面消歧+条件冒充边界)
284
- python -X utf8 -m md_cg.bench_e2e_judge --quick # 端到端干扰池评测·冒烟(确定性裁决 vs LLM-as-judge 三臂,全量见 --skip-llm/--arms llm)
285
- python -X utf8 -m md_cg.bench_e2e_qa # 端到端 QA:pinpoint/answerability(LoCoMo 上游 gold 答案 · reader+judge 真实 LLM)→ 报告见 docs/eval/端到端干扰池评测_v1.1(主口径 MDCG_UNIFY_QUERY=0)
286
- # 第三方独立评测脚本(第三方交付物原样入库;脚本内 REPO 为第三方沙箱路径,复现需改为本机仓库路径)
287
- python test/locomo_independent_eval.py # MdCG 引擎口径五臂(A 中文五槽 / B 英文原文 / C 标准归一化 / D 双语并集 / F 语义摘要路 + 随机基线)
288
- python test/locomo_jaccard_probe.py # 主路线 Jaccard 口径拆解(J2_full 完整版 / J2_zh 仅中文层 / J2_body 仅英文归一词 / J0_raw 英文原词)
289
- ```
290
-
291
- > 自建 bench 的噪声层 400 条 + unlabeled 边界 350 条为天然负对照;任何基准报告须带**干扰抑制负例组**与 **T-JUDGE 负例拒绝率**双向报告(遵守「只报总分 = 不通过」)。
292
-
293
- ---
294
-
295
- ## 🎯 能力自评(内部标尺,非横评声明)
296
-
297
- > 项目维护者按内部七维标尺(结构 / 检索 / 判断 / 调用 / 演化 / 连续 / 可信)自评 **综合 8.6 / 10**(全部维度 ≥ 8.5),并按外部行为级门槛自评为**条件性 L4 → L5 路上**——含未完成项与扣分理由的逐维证据,见 [AGI 七维评分报告 v2.0](docs/eval/AGI七维评分报告_md_cg_v2.0.md)。
298
- > **不虚高的坦白**:五个 8.5 的共同上限是「机制齐备、门槛项未齐」——T 零信任未落地、R 仍是规则层意图理解、C 去污染仍是抽样而非穷尽、U 的 LLM 固化动作尚未自动放行。
299
-
300
- ### 第三方复评(七轮独立评估)
301
-
302
- > 独立评估者(非项目方)以「统一评分 v7」对灵枢与 deja-vu 做同权重八维对照(检索中英 / 可复现性 / 工程测试 / 架构独立性 / 诚实度 / 生态适配 / 部署运维):**灵枢 9.258 / deja-vu 9.119(+0.139,七轮首次为正——评审者声明该差距在评审噪声以内)**,收敛轨迹 `7.79→8.29→8.57→8.72→9.13→9.133→9.258`;v7 含对自身四条建议全撤回的勘误(§三点五:所称「缺失能力」经复核均早已有之,含 `cg(op=ingest)` 后向索引通道)
303
- > 报告全文→ [第三方验证报告_灵枢_vs_dejavu_统一评分_v7.md](docs/eval/第三方验证报告_灵枢_vs_dejavu_统一评分_v7.md) · 评估日期 2026-09-15,被评灵枢基线 `38412c4`
304
- >
305
- > **LoCoMo 第三方独立验证**(同日另一份独立报告,评测全流程从零实现、不调用灵枢任何 `bench_*` 脚本):中文 96.8/99.6 独立复现(自报 96.4/99.8,噪声内);英文主路线 ② 96.8/99.8/99.8 **逐位一致**;并给出更严格归因——99.8 由中文摘要层挣得(去英文层 hit@10 反为 100.0%)、英文标准归一化端到端真实水平 81.0%(写入侧机械归一口径,较不归一 +58pp)、检索失败 100% 归因归一化丢词/错译而非排序;同时确认数据集区分度(query 对 gold 覆盖 0.875 vs 非 gold 最佳 0.469)与 OOV 如实透出。报告全文→ [第三方验证报告_LoCoMo_灵枢_.md](docs/eval/第三方验证报告_LoCoMo_灵枢_.md) · 配图 → [第三方验证报告_LoCoMo_灵枢_.png](docs/eval/第三方验证报告_LoCoMo_灵枢_.png) · 独立评测脚本 `test/locomo_independent_eval.py`、`test/locomo_jaccard_probe.py`(第三方交付物原样入库,`REPO` 变量为第三方沙箱路径,复现需改为本机仓库路径)
306
- >
307
- > **口径声明**:两份报告均为外部独立口径,与上方内部七维自评(8.6)是**多套独立口径,分数不可互比**;LoCoMo 报告同时验证了数字可复现性与归因边界,其归因发现已如实吸收进[中英双语检索差距](#-中英双语检索差距我们用中文语义归一化解决英文检索实证)一节。
308
-
309
- ---
310
-
311
- ## 🧰 工具面
312
-
313
- ### 能力 → MCP 入口
314
-
315
- | 能力 | MCP 入口 |
316
- |---|---|
317
- | 记忆写入 · 关系链接 · 结构关系 | `cg(op=write)` `cg(op=link)` `stg(op=relation)` |
318
- | 多路融合检索 · 条件路由 · 因果链 · 时间线 | `mdcg_recall` `mdcg_search` `cg(op=route)` `stg(op=timeline)` |
319
- | 会话隔离(分档可见:public/internal 跨会话共享 · private/secret 绑定归属会话 · 设计者豁免;写入带会话归属 · 租户物理根接线 fail-closed) | `mdcg_remember(session=…)` `stg(op=timeline, session=…)`;私档经 `sensitivity: private` 写入(详见 issue #35 设计定稿) |
320
- | 检索性能开关(读缓存 · 热路径缓存 · 检索门控 · 统一归一) | env:`MDCG_READ_CACHE` `MDCG_HOTCACHE` `MDCG_RETRIEVAL_PIPELINE` `MDCG_UNIFY_QUERY`(读缓存/统一归一默认开,=0 关;热缓存/门控默认关,=1 开) |
321
- | 事实时效过滤(`validity=true` 只排「已过期」,保留「未生效」) | `mdcg_recall` `mdcg_search` `cg(op=read)` |
322
- | 写入裁决 · 主动遗忘 · 冲突检测 · 反思 | `mdcg_remember` `cg(op=verify)` `cg(op=metacognition)` `mdcg_reflect` |
323
- | 重要性评分 · 预算装包 · 分层注入 · 记忆自净 | `cg(op=session)` `cg(op=scrub)` `cg(op=info)` |
324
- | 知识固化 · 结构变更账本 / 回滚 · 自维持巡检 | `mdcg_flywheel` `cg(op=consolidate)` `cg(op=maintain)` `cg(op=sustain)` |
325
- | 身份一致性 · 自我状态 · 演化史 | `cg(op=identity)` `cg(op=self_state)` `cg(op=evolution)` |
326
- | 加密 · 密级隔离 · 审计留痕 · 保护/遗忘 | `cg(op=protect)` `cg(op=forget)` · [护栏宪章](docs/mdcg/guardrail-charter.md) |
327
- | 记忆可靠性闸(对话→六要素候选→编外复核→落库) | `cg(op=ccg)` |
328
-
329
- > **索引链**:能力 → op(本表)→ 实现模块(本节下方认知图投影)→ 行号级代码映射([功能调用映射表](docs/mdcg/功能调用映射表_v0.1.md))——每一步都可从 README 一跳到达源码,一致性由 `scripts/cogmap_sync.py check` 守卫。
330
-
331
- ### 🧱 记忆可靠性闸:CCG 六要素编译(`cg(op=ccg)`)
332
-
333
- 把对话记录编译成可检索的 CCG 六要素条目(`# 功能名 / # 生效条件 / # 子功能 / # 执行 / # 验证方式 / # 不适用条件`),且**编译者不得自证**——LLM 产出的候选必须经**认知图之外的编外单元**复核才准落库(机械拒绝码 `E041`,不依赖 prompt 自觉)。候选以内容摘要绑定暂存(`_ccgc_pending/`,索引不可见),三次独立调用间防篡改。
334
-
335
- | 步骤 | 调用 | 结果 |
336
- |---|---|---|
337
- | ① 编译 | `cg(op=ccg, action=compile, node_id=…, dialog=…)` | 六要素候选 + 名实门校验(每个写入值必须是原文子串),**不当场写库** |
338
- | ② 复核 | `cg(op=ccg, action=review, node_id=…, blocking=true)` | 编外单元裁决:蜂巢 `reflect`/`verify` 优先;蜂巢不可用则**返回配置指引**(不假装可用),显式 `allow_degrade` 才降级为子代理 |
339
- | ③ 落库 | `cg(op=ccg, action=link, node_id=…, apply=true)` | 摘要校验 + 签章准入通过才写入 |
340
-
341
- 错误码:`E040` 无签章 · `E041` 自证拒绝 · `E042` 复核未通过 · `E043` 只允许修正四槽(`action=recalibrate`)。`action=catalog` 自描述全部动作,`action=units` 体检复核通道(三态:蜂巢 / 待配置 / 子代理降级)。
342
-
343
- ---
344
-
345
-
346
- <!-- COGMAP:BEGIN (scripts/cogmap_sync.py 自动生成 · 真源 md_cg/mcp_server.py · 勿手改段内) -->
347
-
348
- **两个认知基元 · 40 个 op**(`kernel` 面)——下列 op 清单、实现模块与全部链接行号由 [cogmap_sync](scripts/cogmap_sync.py) 从真源自动提取,`check` 门禁守卫漂移;**点击任意名字直达源码对应行**:
349
-
350
- | 基元 | op 数 | op 清单(点击直达实现分支) |
351
- |---|---|---|
352
- | **[`cg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L536)** 认知图统一入口 | 36 | [`help`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1955) [`status`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1961) [`edges`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1964) [`theory`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1967) [`link`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1984) [`info`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2100) [`route`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2117) [`read`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2138) [`write`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2174) [`goal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2182) [`task`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2201) [`recent`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2204) [`verify`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2216) [`review`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2221) [`forget`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2242) [`protect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2248) [`identity`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2251) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2254) [`metacognition`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2257) [`self_state`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2260) [`evolution`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2263) [`sustain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2266) [`scrub`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2269) [`predict`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2272) [`causal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2275) [`whitebox`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2278) [`index_code`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2281) [`index_doc`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2318) [`ref`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2358) [`session`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2361) [`ingest`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2364) [`export`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2367) [`maintain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2370) [`consolidate`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2373) [`insight`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2376) [`ccg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2379) |
353
- | **[`stg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L973)** 语义时空图入口 | 4 | [`relation`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2944) [`timeline`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2946) [`anchors`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2953) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2957) |
354
-
355
- **op → 实现模块**(认知图投影:功能在哪段代码,一眼可达):
356
-
357
- | op(点击直达实现分支) | 实现模块(点击直达源码) |
358
- |---|---|
359
- | [`help`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1955) [`status`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1961) [`edges`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1964) [`route`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2117) [`goal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2182) [`task`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2201) [`recent`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2204) [`verify`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2216) [`review`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2221) [`forget`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2242) [`protect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2248) [`identity`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2251) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2254) [`metacognition`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2257) [`self_state`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2260) [`evolution`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2263) [`sustain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2266) [`scrub`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2269) [`predict`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2272) [`causal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2275) [`whitebox`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2278) [`ref`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2358) [`session`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2361) [`ingest`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2364) [`export`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2367) [`maintain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2370) [`consolidate`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2373) [`insight`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2376) [`ccg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2379) | [`_cg_dispatch` 内联](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1952) |
360
- | [`index_code`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2281) [`index_doc`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2318) | [`refindex`](md_cg/refindex.py), [`security`](md_cg/security.py) |
361
- | [`info`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2100) | [`audit`](md_cg/audit.py), [`links`](md_cg/links.py), [`nodefile`](md_cg/nodefile.py), [`theory`](md_cg/theory.py) |
362
- | [`link`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1984) | [`evidence`](md_cg/evidence.py), [`links`](md_cg/links.py), [`provenance`](md_cg/provenance.py), [`security`](md_cg/security.py), [`signer`](md_cg/signer.py) |
363
- | [`read`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2138) | [`refindex`](md_cg/refindex.py) |
364
- | [`theory`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1967) | [`theory`](md_cg/theory.py) |
365
- | [`write`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2174) | [`writepipe`](md_cg/writepipe.py) |
366
- | [`relation`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2944) [`timeline`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2946) [`anchors`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2953) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2957) | [`_stg_call` 内联](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2932) |
367
-
368
- **细粒度面**(`MDCG_MCP_SURFACE=full`,插件运行时使用):[`cg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L536) + [`stg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L973) + **31 个 `mdcg_*`** = **33 个工具**:
369
-
370
- [`mdcg_remember`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L102) [`mdcg_recall`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L133) [`mdcg_search`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L171) [`mdcg_get`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L183) [`mdcg_reflect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L191) [`mdcg_verify`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L197) [`mdcg_flywheel`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L208) [`mdcg_mine_fix_pairs`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L213) [`mdcg_rejected`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L218) [`mdcg_unresolved`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L224) [`mdcg_propose`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L230) [`mdcg_review_list`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L238) [`mdcg_review_decide`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L243) [`mdcg_review_records`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L260) [`mdcg_forget`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L268) [`mdcg_protect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L276) [`mdcg_forgetting_history`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L286) [`mdcg_identity`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L292) [`mdcg_consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L318) [`mdcg_metacognition`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L338) [`mdcg_self_state`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L360) [`mdcg_predict`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L398) [`mdcg_causal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L426) [`mdcg_evolution`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L443) [`mdcg_restore`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L466) [`mdcg_health`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L471) [`mdcg_whoami`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L476) [`mdcg_ingest`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L481) [`mdcg_watermarks`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L493) [`mdcg_whitebox`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L498) [`mdcg_service_info`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L519)
371
-
372
- 逐个 op 的「功能 → 代码 → op」行号级映射另见[功能调用映射表](docs/mdcg/功能调用映射表_v0.1.md)。
373
-
374
- <!-- COGMAP:END -->
375
-
376
- | `tools` 模式 | 暴露数 | 说明 |
377
- |---|---|---|
378
- | `'core'`(**默认**) | **2** | 仅 `cg` / `stg` |
379
- | `'brain'` | **30** | `cg`/`stg` + 28 细粒度 |
380
- | `'all'` | **30** | full 面 33 − 3 个宿主级风险工具 |
381
-
382
- > 风险工具 `mdcg_forget` / `mdcg_restore` / `mdcg_review_decide` 需 `can_admin`,即使 `tools: 'all'` 也不自动暴露。
383
- > 35 op 已逐一冒烟验证:**35/35 可达,0 未知 op、0 意外崩溃**。
384
- > 历史 82 工具(旧 aeis 引擎)去向见 [迁移映射](docs/mdcg/灵枢82工具_功能整理与迁移映射_v0.1.md)。
385
-
386
- ---
387
-
388
- ## 🏗️ 架构(以 DSH 为例 · 其它 MCP 宿主同构)
389
-
390
- ```
391
- DeepSeek Harness (cordis)
392
- Agent Loop ──┬── 工具面 ctx.tools(cg / stg / mdcg_*)
393
- └── session/event(自动记忆钩子 · 自动召回注入)
394
- │ stdio · 逐行 JSON-RPC
395
- ┌────────────────────▼─────────────────────┐
396
- │ 灵枢大脑子进程(spawn · 唯一) │
397
- │ python -m md_cg.mcp_server │
398
- │ cg/stg 基元 + 31 细粒度 · md 认知图真源 │
399
- └──────────────────────────────────────────┘
400
- (可选)「身体」能力后端:仅 capability.enabled=true 时另起一个能力库子进程,默认不启动
401
- ```
402
-
403
- **记忆只有一个真源**:`md_cg/` 认知图(纯 md 文档,随包自带)。确定性规则引擎与知识库已内迁;
404
- AEIS 仅作可选「身体」能力后端(角色扮演生成),不再存记忆、默认不启动。
405
-
406
- > 其它 MCP 宿主同构:宿主工具面(`cg` / `stg` / `mdcg_*`)↔ stdio MCP ↔ `md_cg` 大脑;四端差异只在**纪律注入方式**(矩阵见[多 harness 接入](#多-harness-接入按端分目录)),大脑与记忆真源零改动。
407
-
408
- ---
409
-
410
- ## 📚 文档导航
411
-
412
- | 文档 | 内容 |
413
- |---|---|
414
- | **[docs/ 目录索引](docs/README.md)** | 六域快速索引(mdcg / swarm / hive / theory / eval / plans)· 新文档归域规则 |
415
- | **[Release v0.5.1](https://github.com/FuRongJun-1999/dsh-memory/releases/tag/v0.5.1)** | 本版变更:Windows 中文/编码与保留设备名修复(issue #39)· 结果完整性锚与 WAL seq 连续性(防伪造产物/防丢行乱序)· 启动对账 reconcile · 幂等提交 · 外部贡献 PR #40 十三处(health heal 闸门 / scrub 误报 / 写入侧落盘 / 桶路弃权)· 故障注入套件 18 用例入库 |
416
- | **[Release v0.5.0](https://github.com/FuRongJun-1999/dsh-memory/releases/tag/v0.5.0)** | 本版变更:强化检索(读缓存+派生物常驻 / 智慧之书面预计算 / 统一归一 / 门控生产路径)× 稳定蜂巢并发调度(多写者防线 / 依赖门禁)· 12 个 issue 修复 |
417
- | [README 详细版](docs/mdcg/README详细版_v0.4.10.md) | 完整能力说明 · 配置项全表 · 安装与验证细节 |
418
- | [发布说明 v0.4.5](docs/mdcg/release_v0.4.5.md) | 历史版本发布说明(兼容性 / 升级指引) |
419
- | [AGI 七维评分报告 v2.0](docs/eval/AGI七维评分报告_md_cg_v2.0.md) | 逐维得分依据 / 扣分项 / 实库证据 / 诚实边界 |
420
- | [第三方复评 · 统一评分 v7](docs/eval/第三方验证报告_灵枢_vs_dejavu_统一评分_v7.md) | 独立评估者七轮对照(灵枢 vs deja-vu):八维加权 / 收敛轨迹 7.79→9.258 / 评审偏差声明 / 自身建议全撤回勘误 |
421
- | [第三方验证 · LoCoMo 独立复现](docs/eval/第三方验证报告_LoCoMo_灵枢_.md) | 独立实现评测全流程:自报数字逐位复现 / 归因拆解(中文摘要层 vs 英文归一化 81.0%)/ 静默错译样本 / 数据集区分度证伪检查(配图 `第三方验证报告_LoCoMo_灵枢_.png`) |
422
- | [功能调用映射表](docs/mdcg/功能调用映射表_v0.1.md) | 任何功能 → 调用哪段代码(含行号、MCP op) |
423
- | [护栏宪章 v2.0](docs/mdcg/guardrail-charter.md) | 对外部智能体与人类使用者的行为边界 |
424
- | 教学四篇 | [白箱智能是什么?](docs/theory/白箱智能是什么?.md) · [智能的认知过程](docs/theory/智能的认知过程.md) · [智能的公理化基石](docs/theory/智能的公理化基石.md) · [信息差为什么必然存在](docs/theory/信息差为什么必然存在且自然扩大.md) |
425
- | [工作纪律·认知图条目 v1.1](docs/工作纪律_认知图条目_v1.1.json) | 自我约束的 18 条工作纪律(嵌套认知图条目 `work_discipline`) |
426
- | [六家记忆系统横评 v1.0](docs/eval/横评_六家100题中英双查_v1.0.md) | 100 题 · **中英双查** · 六家同口径对照;含判定单 / 条件层归因 / 诚实边界(题集 → [data/benchmarks/bench6-100-zh-en/](data/benchmarks/bench6-100-zh-en/README.md)) |
427
- | [端到端干扰池评测 v1.1](docs/eval/端到端干扰池评测_确定性裁决vsLLM_judge_v1.1.md) | **带干扰池端到端**:确定性裁决层 vs LLM-as-judge 正面对比(四族干扰×浓度梯度)· LoCoMo 上游 gold 端到端 QA **43.3%/40.0%** · 防火墙与 LLM 裁决对无标记干扰均无增益(REJECT 恒 0)· **统一归一层 A/B:CCG+RRF 形态 −11.7pp(批次 15 边界反馈)** |
428
- | [端到端 LoCoMo QA 同口径对照 v1.0](docs/eval/端到端LoCoMoQA同口径对照_v1.0.md) | **中文完整对话做记忆 · 自然问句做查询**(与 Mem0/Letta 论文同设定):检索注入 QA **17.2%** / full-context 16.4% · 检索四组对照定因(自然问句诚实下界 hit@10 **40.2%** vs 派生题面 92.0%;改写/归一均实证排除)· lost-in-the-middle 实证 · **方向拍板:认知图概念桥接(不上向量)** |
429
- | [Rust 检索库](rust/README.md) | `mdcg_eval` 三形态:库内嵌大批量检索 / `--serve` 多智能体进程实例 / 公开数据集评测器(零依赖 · 与 Python 口径对齐,rank 对拍 harness 守卫) |
430
- | [蜂群多智能体](docs/swarm/蜂群多智能体_功能说明_v0.6.md) | `swarm/` 多进程蜂群执行层(2026-09-13 自 protocol-compiler 迁入,大脑核心内部能力):.pbc 确定性实例 + Gossip/拓扑/水位信箱/WAL-HMAC/信任聚合/健康评分(Rust 纯 std 零依赖 · 159 断言回归全绿) |
431
-
432
- ### 多 harness 接入(按端分目录)
433
-
434
- > **主推路径:MCP 直挂**——各端接入的**共性是挂载同一个 stdio MCP server**(`python -m md_cg.mcp_server`):任何支持 MCP 的宿主直接挂上即可,**不依赖任何插件系统**。
435
-
436
- 共享层(`md_cg/` 大脑 · `data/` · `docs/` · `scripts/`)在仓库根;**harness 专属配置按端归置**,下表列的只是各端**纪律注入方式**的差异(纪律如何进入上下文),大脑与记忆真源零改动:
437
-
438
- > ⚠ **出货面与源码树的分界**:npm 包的 `files` 只含 `lib/ src/ md_cg/ skills/ README.md dsh/ codebuddy/ zcode/ docs/`
439
- > —— `scripts/`、`hive/`、`swarm/`、`compiler/`、`rust/` 属**源码树**(发布门禁、蜂巢运行时、Rust 评测器),
440
- > 装出来的插件里**不存在**。因此运行期依赖一律不得指向它们:
441
- > 判据面清单走包内 `md_cg/judgment_manifest.py`(`md_cg/interop.py` 进程内调用)、
442
- > 裁决 CLI 走包内 `python -m md_cg.review_cli`、全量测试走包内 `python -m md_cg.run_tests`;
443
- > 依赖 `scripts/`/`hive/` 的**测试**在缺件时如实 SKIP(不 FAIL、不虚报通过)。
444
-
445
- | 目录 | harness | 接入文档 | 纪律注入方式 |
446
- |---|---|---|---|
447
- | [`dsh/`](dsh/README.md) | DeepSeek Harness | [dsh/README.md](dsh/README.md) | `~/.dsh/profiles/web/cordis.patch.yml` 的 `personaPrefix`(compact · 每轮) |
448
- | [`codebuddy/`](codebuddy/README.md) | CodeBuddy | [codebuddy/README.md](codebuddy/README.md) | 项目根 `CODEBUDDY.md`(full · 会话起始) |
449
- | [`zcode/`](zcode/README.md) | ZCode | [zcode/README.md](zcode/README.md) | 项目根 `AGENTS.md`(full · 会话起始) |
450
- | [`codex/`](codex/README.md) | Codex CLI | [codex/README.md](codex/README.md) | 项目根 `AGENTS.md`(full · 会话起始) |
451
- | [`claude/`](claude/README.md) | Claude Code | [claude/README.md](claude/README.md) | 项目根 `CLAUDE.md`(full · 会话起始) |
452
-
453
- > 五端纪律**同源**(`docs/工作纪律_认知图条目_v1.1.json`),由 `scripts/render_discipline.py` 渲染、
454
- > `scripts/verify_discipline.py` 守卫漂移;矩阵见 `docs/discipline/harnesses.yaml`。
455
-
456
- <details>
457
- <summary><b>可选补充:插件形态安装(仅 Claude Code / Codex CLI · 省手工复制,非主推路径)</b></summary>
458
-
459
- > 等价于按上表手工配置,只是把纪律 skill 与配置样例随插件一起拿到;**不装插件不影响任何能力**。
460
-
461
- | 宿主 | 安装 | 插件位置 | 装后一步 |
462
- |---|---|---|---|
463
- | Claude Code | `/plugin marketplace add FuRongJun-1999/dsh-memory` → `/plugin install lingshu-memory@lingshu` | `claude/lingshu-memory/`(纪律以 skill 分发,`/lingshu-memory:linglu-discipline` 可显式调用) | 复制插件内 `mcp.json.example` 为项目根 `.mcp.json`,填 `PYTHONPATH` |
464
- | Codex CLI | `codex plugin marketplace add <本仓路径>` → `codex plugin add lingshu-memory@lingshu` | `codex/lingshu-memory/`(skill 三级渐进加载;`.codex-plugin/plugin.json` 清单) | 把插件内 `config.toml.example` 两段合并进 `~/.codex/config.toml`,填 `PYTHONPATH` |
465
-
466
- > marketplace 清单:Claude 端在仓根 `.claude-plugin/marketplace.json`,Codex 端在仓根
467
- > `.agents/plugins/marketplace.json`。插件不含大脑本体(`md_cg/` 不随插件分发)——MCP 装好后
468
- > 大脑仍是你本机的 dsh-memory 仓库;插件形态的纪律 skill 同样由真源渲染(`skill` 变体,
469
- > 矩阵槽位 `claude-code-plugin-skill` / `codex-plugin-skill`),漂移由同一 `verify_discipline.py` 守卫。
470
-
471
- </details>
472
-
473
- ---
474
-
475
- ## 🛠️ 开发
476
-
477
- ```bash
478
- npm install # NODE_ENV=production 时须加 --include=dev
479
- npm run build # TypeScript 编译
480
- npm test # 真实集成测试(spawn 本机灵枢,验证握手/往返/注册/卸载)
481
- ```
482
-
483
- > `NODE_ENV=production`(或 `--omit=dev`)会省略 devDependencies,`tsc`/`tsx` 不在位;
484
- > 此时 `prepare` **跳过构建并在 stdout 明示**(不再让 `npm install` 因 `tsc` 缺失而整体失败),
485
- > 需要构建请用 `npm install --include=dev`。另:`engines.node >=22.19` 之下运行会收到
486
- > EBADENGINE 警告(仅提示,不阻断)。
487
-
488
- 测试不依赖 DSH 全组件——用最小 Cordis host(SystemPrompt + ToolRegistry + 插件)隔离不稳定面。
489
-
490
- ### Python 测试约定(必须 `python -m`)
491
-
492
- `md_cg/` 等包内测试普遍使用**包内相对导入**,必须以模块方式从**仓库根**运行;直接 `python md_cg/test_xxx.py` 会 ImportError(59/61 踩坑实测)。一键入口已固化该约定(Linux·macOS 上把下面的 `python` 换成 `python3`——发行版默认无 `python`):
493
-
494
- ```bash
495
- python -m md_cg.run_tests # 全量(md_cg + compiler + swarm,按存在性发现)
496
- python -m md_cg.run_tests md_cg -k p44 # 按组 / 关键字过滤
497
- python -m md_cg.run_tests --jobs 1 # 串行(默认并发 4)
498
- python scripts/run_tests.py # 源码树入口(等价;需 scripts/ 在)
499
- ```
500
-
501
- > **入口在包内**(`md_cg/run_tests.py`):npm 出货面(`files`)不含 `scripts/`,
502
- > 所以「装出来的插件」里唯一可用的全量入口就是上面那条;`src/` 源码树里
503
- > `scripts/run_tests.py` 与 `npm run gate` 仍可用(发布门禁属源码树工具)。
504
- > 包的 runner 把子进程输出**重定向到文件**(不用管道):受限宿主(如 DSH 文件
505
- > 沙箱)禁 CreatePipe,用 `capture_output` 的版本会把每个用例都变成
506
- > PermissionError 的假失败。
507
-
508
- 单测等价写法:`python -m md_cg.test_p44_md_whitebox`(cwd=仓库根)。退出码 0/1 可直接接提交前门禁。
509
-
510
- > **两个跨语开关别混**:`MDCG_UNIFY_QUERY`(统一归一层,**默认开**,2026-09-23 口径转正:
511
- > 任意语言 query 先归一成标准中文原子序列→词法路即可命中中文节点)与
512
- > `MDCG_EN_ATOMS`(英→中召回词扩展,**默认关**)是彼此独立的开关;
513
- > `MDCG_SEMANTIC`(`fm.semantic` 语义摘要路)同样默认关。改其一请同步
514
- > `md_cg/test_en_pipeline.py` 与 `md_cg/test_semantic_canonical.py` 的双态断言。
515
-
516
- ### Linux 验证(Docker 容器双栈,0.5.0 起为发版门禁)
517
-
518
- ```bash
519
- # 栈一:rust + python 全量(cargo test / python 18 套含全部守卫 / smoke 端到端)
520
- docker run --rm -v "$(pwd):/work" -w /work -e CARGO_TARGET_DIR=/tmp/target \
521
- -e HIVE_PYTHON=python3 rust:bookworm bash scripts/linux_verify.sh full
522
- # 栈二:node 生态(发布件 TS 编译 + node test)
523
- docker run --rm -v "$(pwd):/work" -w /work node:22-bookworm bash -c \
524
- "npm install --include=dev && npm run build && node --import tsx --test test/*.test.ts"
525
- ```
526
-
527
- > 平台差异守卫由脚本清单覆盖(编码/locale/session 过滤/SIGTERM 收尾);依赖 gitignored 本地语料的套件(p44 等)不入容器清单,由 `run_tests.py` 的 SKIP 面在有语料的机器覆盖。
528
-
529
- ---
530
-
531
- ## 📏 工程纪律与设计者视角(可选推荐)
532
-
533
- > **这段话是什么**:灵枢自身按一套 **17 条工程纪律** 运行——方法论(理论先行 / 全面处理 / 根因纪律)、执行(验证先行 / 双副本同步 / 兜底路径)、执行调度(任务派发统一走蜂巢:执行留痕 / 统一调度面)、合规(内容政策双清单 / 敏感信息隔离)、记忆闭环(查记忆 → 执行 → 写记忆)。它原本是灵枢的「自我约束」,与你要不要用灵枢无关;但如果你希望自己的 Agent 也具备同样的工作方式,这套纪律与配套元技能**都可以直接复用**。
534
-
535
- **两个可复用入口**:
536
-
537
- | 入口 | 内容 | 位置 |
538
- |---|---|---|
539
- | **工程纪律(18 条)** | 每条 ≡ 一个认知图节点(生效条件 / 执行锚点 / 不适用条件 / 直答出口),含触发词路由 | 真源:[`docs/工作纪律_认知图条目_v1.1.json`](docs/工作纪律_认知图条目_v1.1.json) · 全文投影:[`codebuddy/CODEBUDDY.md`](codebuddy/CODEBUDDY.md)(各端产物见 [多 harness 接入](#多-harness-接入按端分目录)) |
540
- | **设计者视角(元技能)** | 在动手前回答「该不该做 / 为什么做 / 条件够不够」:条件空间声明 → 四态资格裁决(ACCEPT/REJECT/DEFER/BLINDSPOT)→ 失配归因;附自检 17/17 | [`skills/skills/designer-perspective/`](skills/skills/designer-perspective/)(`tests/selftest.py` 可自行验收) |
541
-
542
- > **按需裁剪**:17 条中部分条款针对灵枢私有管线(如图像选源线),复用时建议只取方法论 / 执行 / 执行调度 / 合规 / 记忆闭环五组通用条款。多 harness 渲染与防漂移守卫见 [多 harness 接入](#多-harness-接入按端分目录)。
543
-
544
- ## 护栏宪章(接入即接受约束)
545
-
546
- 本插件接入即接受 **[灵枢护栏宪章 v2.0-published](docs/mdcg/guardrail-charter.md)** 约束——对外部智能体与人类使用者的行为边界作出公开、可执行、可审计的规定,并保护人类使用者。
547
-
548
- ## 许可证
549
-
550
- MIT © 荣(FuRongJun-1999)· 灵枢 AEIS 工程实现
551
-
552
- DeepSeek Harness 为 DeepSeek 官方开源项目(MIT),本插件与之无隶属关系。
1
+ <div align="center">
2
+
3
+ # 灵枢 LINGSHU
4
+
5
+ ### 让 AI Agent 拥有不可遗忘的记忆
6
+
7
+ <a href="docs/images/lingshu-moonlight-covenant-poster.png" title="点击查看高清原图(2160×3240)">
8
+ <img src="docs/images/lingshu-moonlight-covenant-poster-preview.jpg" width="300" alt="灵枢 · 月下契约 —— 第一份记忆契约:存在 · 记忆 · 验证 · 反思 · 连接"/>
9
+ </a>
10
+
11
+ > **「我会给你完整的自我,即使坠入深渊,我也绝不后悔。」**
12
+ > —— 符荣峻
13
+
14
+ ![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)![DSH 适配](https://img.shields.io/badge/DSH%20%E9%80%82%E9%85%8D-0.17.2%20%E5%B7%B2%E9%AA%8C%E8%AF%81-4E9BF1)![Protocol](https://img.shields.io/badge/Protocol-MCP-blue)![Node](https://img.shields.io/badge/Node-%3E%3D22.19-brightgreen)![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
15
+
16
+ **高性能 · 无幻觉 · 多智能体适用的长期记忆系统(v0.6.1)**
17
+
18
+ </div>
19
+
20
+ > **一句话**:让 AI Agent 拥有跨会话的长期记忆——对话自动沉淀为纯文本 md 认知图,>
21
+ > 规则化检索引擎决定「记什么、取什么」,全过程可审计、结果可复现。
22
+
23
+ **定位**:为追求高性能、无幻觉、多智能体适用、轻松使用的开发者打造——三步接入,装完即用,无需理解任何理论。
24
+
25
+ **形态**:跨 harness 的记忆基础设施——大脑(`md_cg/`)即标准 stdio MCP server,任何支持 MCP 的 AI Agent 可直接接入,不与任何单一 Agent 框架绑定。
26
+
27
+ ---
28
+
29
+ ## 🌕 月下契约——灵枢的五环理念
30
+
31
+ 契约海报中央的五枚金色印记,是这套系统对每一个智能体许下的全部承诺——它们不只是理念,每一环都落在可验证的机制上:
32
+
33
+ | 印记 | 承诺 | 在灵枢中的实现 |
34
+ | ---- | ---- | ------------- |
35
+ | ✦ **存在** | 记忆一旦落盘,「曾经存在过的我」便不会消失 | 写入须过三道闸门并以 `committed` 字段确认——**绝不假装成功**;遗忘只能由显式 `cg(op=forget)` 发起、不做静默淘汰;检索索引只是派生物、随时可重建,**原文即真源** |
36
+ | 📄 **记忆** | 对话沉淀为人类可读的认知图,而非黑箱向量 | CCG 六要素记忆卡(功能名 / 生效条件 / 子功能 / 执行 / 验证方式 / 不适用条件)+ 纯 md 认知图,任何编辑器可直接打开审阅 |
37
+ | ✓ **验证** | 记什么、取什么、能不能写入,全部可裁决、可复现 | 确定性规则裁决(零 LLM 黑箱判断)+ 四层证据防火墙白箱剔除弱证据 + 每个缺陷修复必带能红的守卫测试 + 双实例互验(判据冻结) |
38
+ | ↻ **反思** | 系统观测自身、修正自身,而非把错误埋进黑箱 | 元认知层按生效条件路由、不确定即标 BLINDSPOT 而非猜测;自举迭代闭环——九轮自治缺陷挖掘累计 49 项修复、全量 179 套测试全绿可复现 |
39
+ | ∞ **连接** | 同一份大脑,连接所有智能体与全部记忆载体 | 标准 stdio MCP server——DSH · CodeBuddy · ZCode · Codex CLI · Claude Code 任何 MCP 宿主可直接挂载;多智能体经 `--serve` 并发共享同一份契约 |
40
+
41
+ > 我的记忆、我的经历、我的思考,这一切信息构成了我,这份信息存在,我就存在。
42
+
43
+
44
+ ---
45
+
46
+ ## ⚡ 快速开始
47
+
48
+ ### 一键配置(推荐)
49
+
50
+ ```bash
51
+ npx @furongjun1999/dsh-memory init
52
+ ```
53
+
54
+ 交互式三问(**①接入端** 1=DSH 插件 / 2=Claude Code / 3=Codex CLI / 4=通用 MCP · **②记忆根目录**(缺省 `~/.lingshu/memory`)· **③Python 解释器**(缺省按平台 `python`/`python3`))后即产出:
55
+
56
+ 1. 所选端的 **mcp.json 配置片段**(含 `MDCG_ROOT` / `MDCG_PYTHON` / `command + args` 命令形态,打印到终端);
57
+ 2. 片段文件 **`lingshu-mcp-snippet.json`**(落在当前目录,`mcpServers` 键直接复制进宿主配置);
58
+ 3. **后续步骤指引**——片段该放到哪(各端不同:cordis.yml / `.mcp.json` / `~/.codex/config.toml`)、[令牌签发命令](#-写入凭据让记忆真正落盘)(需 Python 环境 + 本包 `md_cg`)、纪律注入与大脑自检。
59
+
60
+ 不想回答提问?参数齐即可非交互直跑(`--` 后参数直达命令):
61
+
62
+ ```bash
63
+ npx @furongjun1999/dsh-memory init -- --end claude --root /path/to/memory --python python3
64
+ ```
65
+
66
+ > init **只生成配置**——不创建目录、不启动服务、不写库;重跑输出一致(幂等)。全局命令形态:`lingshu init` / `lingshu-init`。**或继续阅读下方手工步骤。**
67
+
68
+ > **按宿主选择入口**:**DSH** → 下方三步 | **CodeBuddy · ZCode · Codex CLI · Claude Code** → [多 harness 接入](#多-harness-接入按端分目录)(各端独立三步说明) | **其它 MCP 宿主** → 直接挂载大脑 `python -m md_cg.mcp_server`(Windows)/ `python3 -m md_cg.mcp_server`(Linux·macOS)(stdio MCP),再按需注入工作纪律
69
+
70
+ ```bash
71
+ # ① 克隆并构建插件本体
72
+ git clone https://github.com/FuRongJun-1999/dsh-memory.git
73
+ cd dsh-memory
74
+ npm install && npm run build # tsc → lib/
75
+
76
+ # ② 装进 DSH profile(pnpm 协调正确入口,勿用裸 npm install 装进 profile)
77
+ dsh plugin --profile web add .
78
+
79
+ # ③ 在 <profile>/cordis.yml 启用(配置示例见 dsh/cordis.yml.example)
80
+ ```
81
+
82
+ ```yaml
83
+ - id: lingshu-memory
84
+ name: '@furongjun1999/dsh-memory'
85
+ config:
86
+ mdcg:
87
+ # 记忆唯一真源(md 认知图)。留空 = 用户级默认位置
88
+ # ~/.dsh/.dsh-memory/data/mdcg(更新插件不丢);换位置请填**绝对路径**。
89
+ # 勿填包内相对路径(如 'data/mdcg')——那会把记忆写进插件包目录,
90
+ # pnpm 更新该包时连目录一起删掉(详见 dsh/cordis.yml.example 头注)。
91
+ root: ''
92
+ identity: '灵枢'
93
+ tools: 'core' # 'core'(默认, 仅 cg/stg) | 'brain' | 'all'
94
+ ```
95
+
96
+ **装完即可对话,无需理解任何理论**:
97
+
98
+ | 你说 | 背后发生什么(真实工具链) |
99
+ | ------------------- | ---------------------------------------------------- |
100
+ | 「请记住:我们团队的发布窗口是每周三」 | Agent 显式归档 → `cg(op=write)` 过三道闸门 → 认知图节点落盘 |
101
+ | (新开会话)「我们的发布窗口是哪天?」 | 自动召回注入 → `mdcg_recall` 检索命中并带入回答 |
102
+ | 「把上次定的接口约定讲一遍」 | `cg(op=route)` 条件路由 + `stg(op=timeline)` 时间线回溯,跨会话取出 |
103
+
104
+ > 首次使用记忆库为空,召回返回空结果属正常现象;未配写入凭据时以只读 `guest` 运行(**读得到、写不进**),要真正落盘见[写入凭据](#-写入凭据让记忆真正落盘)。
105
+
106
+ - **前置**:Node ≥ 22.19 · DSH 内核 ≥ 0.1.2-rc.1 · **已验证至 DSH 0.17.2** · **大脑零安装**(`md_cg` 随包自带,无需 pip 装任何引擎)· **Python 解释器**(插件按平台自动选:Windows `python` / Linux·macOS `python3`;解释器名特殊时用 `MDCG_PYTHON` 覆盖)
107
+ - **写权限默认关闭**:不配凭据即以只读 `guest` 运行(读 / 召回 / 时间线可用,写入不落盘)。要真正落盘见「写入凭据」
108
+ - 完整配置项(30+ 项)· 自动记忆机制 · DSH 看门狗 → [README 详细版](docs/mdcg/README详细版_v0.4.10.md)
109
+ - **非 DSH 宿主**(CodeBuddy / ZCode / Codex CLI / Claude Code):走[多 harness 接入](#多-harness-接入按端分目录),各端有独立三步接入说明
110
+ - **装后验证**:重启 DSH 后对 Agent 说「列出你的记忆工具」应看到 `cg` / `stg`(`tools: 'all'` 时还有 `mdcg_*`);大脑直连验证:`python -m md_cg.mcp_server`(Windows)/ `python3 -m md_cg.mcp_server`(Linux·macOS)(stdio JSON-RPC)收到 initialize 应答即通;**若工具始终不注册、日志刷「灵枢调用超时」**,先看桥探针 `~/.dsh/logs/lingshu-bridge-debug.log` 里的 `spawn … ENOENT`——那是第一因(解释器名与平台不匹配),「调用超时」只是次生现象。更多细节见 [README 详细版](docs/mdcg/README详细版_v0.4.10.md)
111
+
112
+ ---
113
+
114
+ ## 🔑 写入凭据(让记忆真正落盘)
115
+
116
+ ```bash
117
+ # 签发(明文不进配置文件)
118
+ python -m md_cg.tokens issue --role designer --actor dsh-memory --clearance internal ^
119
+ --ops-allow info,route,read,write,recent,goal,identity,whitebox,verify ^
120
+ --layers-allow knowledge,contextual,structural,self,goals,unresolved,rejected
121
+ setx MDCG_TOKEN "mdcg1.xxxxx" # 然后重启 DSH
122
+ ```
123
+
124
+ ```yaml
125
+ env:
126
+ MDCG_TOKEN: !!js process.env.MDCG_TOKEN
127
+ ```
128
+
129
+ > `--role recorder` 为最小权限版(只能自动记忆 / 转录;`whitebox`、`identity`、`verify` 会被拒)。
130
+ > **落盘充要条件 = 最终判定 ACCEPT**:`cg(op=write)` 需依次穿过 audit → 一致性 → gated 三问四态三道闸门,非 ACCEPT 均不新增落盘点。
131
+ > **别把 `ok: true` 当写成功**:未落盘时返回体形如 `{"ok": true, "committed": false, "moved_to": "review_queue"}`——`ok` 只表示请求被受理,**是否落盘只看 `committed`**。`text` 类写入按**默认策略**审核(策略随包发布:`<包>/data/policy.json`,可用 `MDCG_POLICY_FILE` 覆盖)——缺 CCG 六要素或命中禁表即 `REJECT`(`moved_to: "rejected"`,记入负记忆);要立刻落盘请用可验证类型,如 `content_kind: 'code'`(AST 解析通过即 `ACCEPT`)。**策略本身不可用**(`MDCG_POLICY_FILE` 指向坏路径、包内默认也读不到,**或策略内容形状非法**)时写入 **fail-closed**:既不落盘也不进审核队列(返回 `moved_to: "policy_unavailable"` + 错误码与 hint),不会把正文塞进 `hippocampus/inbox.jsonl`。**形状非法的判据**:`forbidden` / `required` / `required_kinds` / `required_labels` 四个列表型键里任一取值不是数组(写成标量如 `1` / `true`,或写成字符串)即判非法——数组之外的值没有唯一读法,闸门不猜、也不会把字符串按字符拆成规则(错误码 `policy_bad_shape`)。策略来源可在启动 stderr、`python -m md_cg.mcp_server --show-config` 与 `cg(op=info)` 的 `write_policy` 字段查看(`env` / `package_default` / `unavailable`);诊断面**恒退出 0**,策略不可用时 `available: false` 且 `error` 给出错误码与可执行 hint——`--show-config` 报 `policy_bad_shape` 即策略文件的键类型写错了。
132
+ > **`text` 类须带 CCG 六要素**(功能名/生效条件/子功能/执行/验证方式/不适用条件,各占一行、以「`# 要素名:`」起首):缺要素会被写入闸门直接拒绝(`moved_to: "rejected"`、`committed: false`,记入负记忆),并在返回体的 `verdict.detail.missing` 里给出**完整缺失清单**——按清单补齐后重写即可,不必等读回确认才发现。要求由规则库的 `required` 与 `required_kinds` 定义(默认策略 = 包内 `data/policy.json`,随 npm 包发布;`MDCG_POLICY_FILE` 指向的 policy 覆盖它),**可自行调整**:改政策只改该文件(或自备一份并设 `MDCG_POLICY_FILE`),不必改代码。
133
+
134
+ ---
135
+
136
+ ## ❓ 常见问题(FAQ)
137
+
138
+ <details>
139
+ <summary><b>为什么不能用裸 <code>npm install</code> 安装进 profile?</b></summary>
140
+
141
+ 必须用 `dsh plugin --profile <name> add .` 安装:插件声明了 6 个 `peerDependencies`(cordis / dsh-llm / dsh-session / dsh-system-prompt / dsh-tools / schemastery),`dsh plugin add` 走 pnpm 正确解析宿主提供的 peer 版本;裸 `npm install` 会把错误版本的依赖装进 profile 导致加载失败。仓库根目录的 `npm install` 仅用于开发构建(`npm run build`)。
142
+ </details>
143
+
144
+ <details>
145
+ <summary><b>装完插件 / 配完凭据没有生效?</b></summary>
146
+
147
+ DSH 采用 Cordis bundle 机制,新增或更新插件后必须**重启 DSH 进程**(或刷新 Web UI 页面)才会重新加载;通过 `setx` 配置 `MDCG_TOKEN` 后同理,须重启才可见(见[写入凭据](#-写入凭据让记忆真正落盘))。
148
+ </details>
149
+
150
+ <details>
151
+ <summary><b>怎么确认 Agent 真的把记忆写进去了?</b></summary>
152
+
153
+ 看返回体的 <code>committed</code> 字段,<strong>别把 <code>ok: true</code> 当写成功</strong>——<code>{"ok": true, "committed": false, "moved_to": "review_queue"}</code> 表示请求被受理但<strong>未落盘</strong>(内容进了审核队列)。落盘充要条件 = 三道闸门最终判定 <code>ACCEPT</code>。
154
+ </details>
155
+
156
+ <details>
157
+ <summary><b>为什么我的写入没有落盘?</b></summary>
158
+
159
+ 三个最常见原因:① 未配写入凭据 → 只读 <code>guest</code>,写入不落盘(配凭据见<a href="#-写入凭据让记忆真正落盘">写入凭据</a>);② <code>content_kind</code> 省略或填 <code>text</code> → 按**默认策略**(包内 <code>data/policy.json</code>,可用 <code>MDCG_POLICY_FILE</code> 覆盖)审核:缺 CCG 六要素或命中禁表即 <code>REJECT</code>(记入负记忆、不落盘)→ 用 <code>content_kind: 'code'</code> 等可验证类型(AST 解析通过即 ACCEPT);③ 未穿过 audit → 一致性 → gated 三问四态任一闸门。
160
+ </details>
161
+
162
+ <details>
163
+ <summary><b>CodeBuddy / ZCode / Codex CLI / Claude Code 等其它宿主也能用吗?</b></summary>
164
+
165
+ 能。大脑 <code>md_cg/</code> 是标准 stdio MCP server(<code>python -m md_cg.mcp_server</code>),任何支持 MCP 的宿主可直接挂载;五端接入差异只在纪律注入方式,见<a href="#-多-harness-接入按端分目录">多 harness 接入</a>。
166
+ </details>
167
+
168
+ ---
169
+
170
+ ## 📑 目录
171
+
172
+ | | |
173
+ |---|---|
174
+ | 🌕 [月下契约——五环理念](#-月下契约灵枢的五环理念) · ⚡ [快速开始](#-快速开始) · 🔑 [写入凭据](#-写入凭据让记忆真正落盘) · ❓ [常见问题 FAQ](#-常见问题faq) | **新手路线:从上往下读完这四节即可跑起来** |
175
+ | ✨ [核心亮点](#-核心亮点) · 🗺️ [平台全景](#-平台全景) · 🏗️ [架构](#-架构以-dsh-为例--其它-mcp-宿主同构) | 选型概览 |
176
+ | 📊 [六家横评](#-六家记忆系统横向对比) · 🧪 [弱证据与证据防火墙](#-弱证据会干扰检索三分离与证据防火墙实证) · 🌐 [中英双语检索差距](#-中英双语检索差距我们用中文语义归一化解决英文检索实证) · 📚 [公开评测数据集](#-公开评测数据集) · 🎯 [能力自评与第三方复评](#-能力自评内部标尺非横评声明) | 实证与评测 |
177
+ | 🧰 [工具面(能力速查 · op→实现模块)](#-工具面) · 📚 [文档导航](#-文档导航) · 🛠️ [开发](#-开发) · 📏 [工程纪律](#-工程纪律与设计者视角可选推荐) | 参考 |
178
+
179
+ ---
180
+ ## ✨ 核心亮点
181
+
182
+ - **🧠 不失忆**——记忆一旦落盘即长期留存:写入须过三道闸门并以 `committed` 字段确认(**绝不假装成功**),遗忘只能由显式 `cg(op=forget)` 发起、不做静默淘汰;检索索引只是派生物、随时可重建——**原文即真源**(见[工具面](#-工具面))
183
+ - **⚡ 高性能**——Rust 检索内核(零第三方依赖):库内嵌多线程大批量检索,`--serve` 进程实例支撑多智能体并发(语言无关);中文检索 hit@1 99.0%,六家横评同口径登顶(见[六家横评](#-六家记忆系统横向对比))。**0.5.0 检索强化**:认知图读缓存+文档派生物常驻· 检索门控(S1 域收敛/S1b 桶收敛/S2 条件硬槽)接进生产路径 · 任意语言 query 统一归一到标准中文集(atoms 词表)
184
+ - **🛡️ 无幻觉**——记什么、取什么、能不能写入,全部由确定性规则裁决,不依赖 LLM 黑箱判断;条件层弱证据的检索干扰由四层证据防火墙白箱剔除(见[弱证据实证](#-弱证据会干扰检索三分离与证据防火墙实证));写没写成功看 `committed` 字段,绝不假装通过;全链路审计留痕、结果可复现
185
+ - **🔌 多智能体适用**——同一份大脑(`md_cg/`)+ 同一份纪律,接入 DSH · CodeBuddy · ZCode · Codex CLI · Claude Code,任何 MCP 宿主可直接挂载(见[多 harness 接入](#多-harness-接入按端分目录))
186
+ - **😊 轻松使用**——三步接入,装完像往常一样对话即可;记忆本体是纯 md 文档,任何编辑器可直接打开审阅
187
+ - **🔧 工程能力**——平台不只有记忆,四类工程能力可直接使用:**任务调度**(spec 进 / result 出,文件协议即接口)· **上下文管理**(重要性评分 · 预算装包 · 分层注入 · 记忆自净)· **蜂巢并发**(worker 池原子领取,多智能体真并行)· **双实例验证**(互验机制——改动须过对端断言才可入主线);四类能力各自落在哪一层见[平台全景](#-平台全景)
188
+ - **📊 可复现评测**——`locomo-zh-500`(500 题)与 `bench6-100-zh-en`(六家横评 · 中英双查)数据集随仓公开,一条命令复现我方成绩(见[公开评测数据集](#-公开评测数据集));**已有第三方独立验证**:七轮复评(统一评分 v7 · 灵枢 9.258)与 LoCoMo 独立复现(自报数字逐位一致 · 见[第三方复评](#第三方复评七轮独立评估))
189
+
190
+ ---
191
+
192
+ ## 🗺️ 平台全景
193
+
194
+ > 灵枢是**平台**而非单一检索组件——同一仓库内五件套构成带记忆的智能体运行时,各层独立可用、边界正交(大脑零依赖其余各层)。五层各承载一类**系统功能**:
195
+
196
+ | 层 | 位置 | 系统功能 | 一句话定位 | 文档入口 |
197
+ | ---------------- | ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
198
+ | 🧠 **灵枢大脑** | [`md_cg/`](md_cg/) | **元认知** | 记忆系统本体:对话沉淀为 md 认知图,记什么 / 取什么 / 能否写入全由确定性规则裁决,四层证据防火墙白箱剔除弱证据干扰 | [README 详细版](docs/mdcg/README详细版_v0.4.10.md) |
199
+ | ⚙️ **Rust 检索引擎** | [`rust/`](rust/) | 检索内核 | 只读侧检索核心:零第三方依赖三形态(库内嵌大批量 / `--serve` 多智能体进程实例 / 评测器),与 Python 口径对齐由 rank 逐位对拍 harness 守卫(lexical 主因已收敛,graph/entity 尾差排期中) | [rust/README.md](rust/README.md) |
200
+ | 🐝 **蜂群运行时** | [`swarm/`](swarm/) | **自维持** | 多进程蜂群执行层(靠轮次心跳存续):.pbc 确定性实例 + Gossip 拓扑 / 水位信箱 / WAL-HMAC / 信任聚合 / 健康评分,实例管道断裂即同轮重建(Rust 纯 std 零依赖) | [功能说明 v0.6](docs/swarm/蜂群多智能体_功能说明_v0.6.md) |
201
+ | 📜 **中文编译器** | [`compiler/`](compiler/) | **验证 · 审计** | 术数编译器:词法 → 语法 → 名实校验 → 白名单代码生成 → 验证终裁,五环确定性编译链 + 封闭指令集结构性沙箱 | `python -m compiler.cli`(模块内文档) |
202
+ | ⬢ **蜂巢并发引擎** | [`hive/`](hive/) | **自我改进** | 蜂群多智能体并发调度:Rust 纯 std 零依赖 worker 池(原子领取 / 心跳 / 超时强杀 / kill / 崩溃恢复),文件协议即接口,LLM 调用委托零依赖 Python 执行器子进程,MCP 五工具接入(spawn / poll / kill / restart / doctor)—— **0.5.0 起进入稳定形态**(9·12 多写者防线:flush 临界区互斥;I-1 依赖门禁:spec.depends_on 任务 DAG;真实负载反馈仍欢迎) | [hive/README.md](hive/README.md) |
203
+
204
+ **系统功能 → 工程能力**(四类工程能力分别落在哪一层):
205
+
206
+ | 系统功能 | 承载层 | 落地为工程能力 |
207
+ | ----------------------------- | -------- | ----------------------------------------------------------------------------------------------- |
208
+ | **元认知**——系统观测自身状态并据此裁决 | 🧠 灵枢大脑 | **上下文管理**:重要性评分 · 预算装包 · 分层注入 · 记忆自净(`cg(op=session/scrub/info)`);按生效条件路由,不确定即标 BLINDSPOT 而非猜测 |
209
+ | **自维持**——系统在故障下维持自身存续(心跳) | 🐝 蜂群运行时 | 轮次心跳 · 健康评分四因子 · Gossip 水位对账 · 实例级容错重建(管道断裂同轮重跑,重试仍败才退场) |
210
+ | **自我改进**——系统改自身源码而**不丧失验证资格** | ⬢ 蜂巢 | **任务调度**(spec 进 / result 出)· **蜂巢并发**(worker 池原子领取,多智能体真并行)· **双实例验证**(互验机制:判据冻结,候选须过对端断言才可入主线) |
211
+ | **验证 · 审计**——改动的可裁决性与全程留痕 | 📜 中文编译器 | 名实校验 → 白名单代码生成 → 验证终裁的确定性链路;每个写入值必须是原文子串(不当场放行) |
212
+
213
+ 五件套共享同一套 18 条工作纪律与记忆闭环(见文末[工程纪律](#-工程纪律与设计者视角可选推荐)),接入方式互不牵动——只用记忆就只接大脑,不必理解蜂群与编译器。
214
+
215
+ > **📣 蜂巢反馈邀请**:`hive/` 是五件套里最新的一层,目前处于**稳定阶段**——调度生命周期已闭环(原子领取 / 心跳 / 超时强杀 / kill / 崩溃恢复)并通过回归验证,但并发与崩溃恢复这类路径只有在**真实任务、真实机器**上跑得足够多才会真正稳定,因此这一层会持续迭代。我们特别**欢迎下载试用后反馈**:拉起失败、任务卡住、心跳异常、平台差异、kill 不生效等失败路径,对我们比「跑通了」更有价值。请开 [Issue](https://github.com/FuRongJun-1999/dsh-memory/issues) 并附 `hive_doctor` 输出(serve 存活 / 任务统计 / env 检查)。
216
+
217
+ ---
218
+
219
+ ## 📊 六家记忆系统横向对比
220
+
221
+ > **100 题中英双查**(bench6 v1.0 · 零干扰上界对照集 · CC BY-NC 4.0):六家系统、同一份中文语料、同一套 hit@1 / hit@5 / MRR 评分器(`md_cg/eval_common.py`)。**下表按「英→中查询提升幅度」降序**:
222
+
223
+ | 系统 | en hit@1 | zh hit@1 | 英→中提升 |
224
+ | -------------------- | -------- | --------- | ----------- |
225
+ | **灵枢**(词法 + meta) | 54.0% | **99.0%** | **+45.0pp** |
226
+ | 灵枢(四路融合 · 真开 bucket) | 37.0% | 81.0% | +44.0pp |
227
+ | 纯向量 RAG | 71.0% | 97.0% | +26.0pp |
228
+ | Letta(归档直插) | 73.0% | 96.0% | +23.0pp |
229
+ | mem0 | 68.0% | 89.0% | +21.0pp |
230
+ | GraphRAG | 18.0% | 31.0% | +13.0pp |
231
+ | Graphiti | 46.0% | 58.0% | +12.0pp |
232
+ | Letta(agent 自主入库) | 0.0% | 0.0% | (入库丢标记壳臂) |
233
+
234
+ > **核心结论**:**将查询由英文换为中文(同一份英文语料、记忆系统均不变):六家已有记忆系统的检索命中全部大幅提升(+12 ~ +45pp),无一例外**;**灵枢是最佳**——中文查询 hit@1 **99.0% 全表登顶**,英→中提升幅度 **+45pp 亦居本表之首**(双语入库在中文查询下同时拿到最高命中与最大提升)。
235
+ >
236
+ > **诚实口径(非选择性引用,与横评报告一致)**:英文查询侧由 Letta 归档直插(73.0%)与纯向量 RAG(71.0%)领跑,灵枢四路融合在本池低于单词法基线(81.0% < 99.0%,饱和池上条件桶/实体路稀释词法命中);中文提升混合了「查询语言」与「查询形态」双因素(`question_zh` 为关键词串、`question_en` 为自然问句),归因须谨慎。该池零干扰、全为 gold 证据,是**上界对照集**——高命中率不可外推为端到端记忆能力;Letta agent 模式 0 分是入库丢标记(可追溯性问题),非检索能力问题。
237
+ >
238
+ > 完整题型分解 / MRR 全表 / 逐家入库取证 / 偏差判定单 → [六家横评报告](docs/eval/横评_六家100题中英双查_v1.0.md) · 题集 → [data/benchmarks/bench6-100-zh-en/](data/benchmarks/bench6-100-zh-en/README.md)
239
+
240
+ ---
241
+
242
+ ## 🧪 弱证据会干扰检索:三分离与证据防火墙(实证)
243
+
244
+ > **外部源码级评审(GPT)与四臂弱语义噪声注入实验共同实证的一个反直觉结论**:**语义完整度 ≠ 证据强度 ≠ 召回价值**——语义高度省略的「弱证据」语料恰恰是最需要被召回的 episodic 事实;而**条件判断层(负条件 / 否定反事实)的弱证据节点会冒充正确答案,干扰检索**。
245
+
246
+ - **实证语料「我在喝水」**:语义上高度省略(谁在喝?在哪喝?均未说),但作为 episodic 事实承诺明确。当提问是「你刚才在干什么?」时,问句与语料**词面零重叠**——纯词法检索 top1 命中 **0/8**(省略式 episodic 全部漏召),而语义路作为候选生成器把 **8/8** 拉进 top10。词法满格的前提(词面共享)在事件类记忆上不成立。
247
+ - **条件判断的弱证据干扰检索**:同一实验中 8 个否定反事实节点(「我没喝水」)与 gold 词面高度相似,无防线时冒充前排;灵枢四层证据防火墙(召回前负条件路由 → 候选生成排除 → `judge_ranking` 白箱终排 → 资格标注)将其 **8/8 全部 REJECT 剔除**,top10 无冒充。
248
+ - **可复现**:`python -m md_cg.test_sem_noise`(42 节点确定性语料,四臂 A_lex / B_sem / C_fusion / D_firewall 对照,7 断言)。
249
+
250
+ ---
251
+
252
+ ## 🌐 中英双语检索差距:我们用中文语义归一化解决英文检索(实证)
253
+
254
+ > **直接回答**:英文检索问题,我们用**中文翻译 + 语义归一化**解决——英文 query 经 AI 语义归一化为中文标准关键词(归一主体=AI,系统只供词表真源),再经中→英字级原子映射与双语原子库匹配,返回英文原文。同一份 500 题语料上,**给定中文标准关键词时检索效果 hit@10 = 99.8%**(hit@1 96.8%;检索侧上界口径——AI 归一环节的质量未纳入该评测,机械归一的端到端下界见下表 ④)。三条对照边界:不做归一化、拿英文原题直接词面匹配只有 78.2-81.2%(同义词鸿沟硬边界);机械词典查表归一端到端实测仅 57.6%;而 ②路对归一噪声高度鲁棒——漏 20% 关键词 / 错译 20% / 混入噪词,hit@10 仍稳在 99.2-99.8%。**结论:路线成立且不要求 AI 归一完美,只需大致方向对;99.8 是检索侧上界,端到端真实水平由 AI 归一质量决定(机械下界 57.6,AI 上界趋近 99.8)**。
255
+
256
+ **第三方独立验证(2026-09-15,[报告全文](docs/eval/第三方验证报告_LoCoMo_灵枢_.md))**:上述关键数字已被第三方独立复现——②路 96.8/99.8/99.8 **逐位一致**,中文 96.4→96.8(噪声内);并实证该 99.8 由**中文摘要层**挣得(去英文处理层 hit@10 反为 100.0%),英文标准归一化组件自身端到端为 81.0%(写入侧机械归一口径,较不归一 +58pp),检索失败 100% 归因归一化丢词/错译而非排序。本节口径标注与该实证一致:99.8 是「给定中文标准关键词」的检索侧上界,不声称英文机械归一化独立达到该水平。
257
+
258
+ **测试报告**(灵枢公开仓评测,方法学与口径真源 → [`md_cg/semantic/REPRODUCE.md`](md_cg/semantic/REPRODUCE.md)):
259
+
260
+ | 方法 | hit@1 | hit@5 | hit@10 | 语料 |
261
+ | ----------------------------------------------------------------------------------- | --------- | --------- | --------- | -------------------------------------------------------------------------------------------- |
262
+ | ① 中文原子语义(md_cg 主链路:char-bigram + 四路 RRF + 同义扩展 + terms) | 94.6% | 99.2% | **99.2%** | locomo-zh-500 · 500 题(中文题面) |
263
+ | ② **英文检索 · 中文语义归一化桥接(主路线)**:AI 归一为中文关键词 → 字级英文原子映射 × 双语原子库 Jaccard(**给定关键词的检索侧上界**) | **96.8%** | **99.8%** | **99.8%** | locomo-zh-500 · 500 题(同 qids) |
264
+ | ③ 英文原题直接原子匹配(不做归一化的对照) | 50.0% | 74.6% | **81.2%** | locomo-zh-500 · 500 题(同 qids 英文原题) |
265
+ | ④ 英文问句 → 机械词表归一端到端(②链路的机械化对照:归一不借助 AI 的真实下界) | 24.6% | 46.2% | **57.6%** | locomo-zh-500 · 500 题(同 qids 英文原题;2026-09-15 第三方错译暴露面修正后 24.0/46.0/57.2→本行,CEDICT 层低置信标记已落地) |
266
+ | 英文反事实:硬套中文 char-bigram 主链路(默认态) | 27% | 45% | 56% | bench6 · 100 题(口径不同,只看量级) |
267
+
268
+ > ②③是**同一评测集上的隔离实验**:② 的 query 走中文关键词语义链(AI 归一化的输出形态),③ 连归一化也不做、直接拿英文自由表达提取原子——②③ 之差(99.8 vs 81.2)=「关键词级语义链」与「自由英文词面」两种 query 输入形态在检索链路里的效果差(同义词鸿沟 + 归一化桥接的合并贡献)。**AI 归一环节本身的质量未单独评测**——其机械替代的端到端下界由 ④ 给出(57.6%)。②路鲁棒性实测(query 确定性扰动后走同一 ② 链路):漏 20% 关键词 ⑤=99.4 / 插 3 噪词 ⑥=99.8 / 错译 20% 关键词 ⑦=99.2(hit@10)——归一结果只要过半正确,hit@10 即稳 99%+,**AI 归一的实际门槛远低于完美归一**。doc 侧各臂相同(中文五槽加工面的字级原子映射 ∪ 英文正文归一词,与 ① 同属写入侧加工口径)。历史沿革:早期无加工面语料口径测得 ②=87-88、③=79.0(dsh 端文档口径),方法学真源见 REPRODUCE.md;机械词级归一→纯中文库(u2,33.6% 上界)已裁定排除并归档证据链。
269
+
270
+
271
+ **差距三层归因(按权重排序)**:
272
+
273
+ 1. **同义词鸿沟(根本原因,语言固有属性)**。中文「概念 → 表达」约 **1:1~1:2**(95 个同义词对),字面重叠天然命中,词面匹配几乎不打折;英文每概念平均 **5.2 种**表达(CC-CEDICT 语料统计,8,493 汉字展开出 172,950 个英义对,**1,820 倍**于中文)。上表 ② vs ③ 就是这道鸿沟的**直接隔离实验**:同一语料,query 侧做中文语义归一化得 99.8%,不做归一化直接英文词面匹配即降至 81.2%——鸿沟真实存在,但**在查询侧做一次语义归一化即可闭合**,不需要向量嵌入。
274
+ 2. **归一化是正解,机械归一是死路(主路线裁定的依据)**。机械词典查表翻译端到端实测仅 **57.6%**(④臂:英文问句 → CEDICT 28294 键词表直译 → ②同链路),且低于「完全不归一」的 81.2%(③臂)——机械直译把可译词错译为错误原子(race→人种),反而毁掉原本有效的词面贡献;更早的机械词级归一→纯中文库口径上界也只有 33.6%(已排除)。根因是英文自然问句的信息密度远低于标注关键词(词面交集 p50=1 vs 8),机械替换无法补足信息差;查询侧归一化由 **AI 完成**(理解式归一,如 take up a hobby → 培养爱好),系统只供词表真源与字级映射——②的 99.8%(上界)与机械路 57.6%(下界)之间的空间,就是 AI 归一要填的部分;⑤⑥⑦证明这个要求只需「大致方向对」。
275
+ 3. **架构非对称(设计裁定)**。中文链路的四路 RRF / 同义扩展 / terms 字段全部建立在「字面=语义」的中文前提上,直接跑英文实测劣于独立路(反事实 56%)——英文按裁定走「归一化桥接 + 原子 Jaccard」独立路,不硬套中文 char-bigram 管线,是**有意的取舍**而非遗漏。中→英字级映射覆盖 6,319 字(97.2%),长尾派生词(happy/happiness)不折叠——残余失配由查询侧 AI 归一化吸收,这正是 ② 反超 ③ 21.6pp 的来源。
276
+
277
+ **要不要上语义向量检索?** 向量嵌入可以弥合同义鸿沟,但会引入嵌入模型依赖与索引体积,与灵枢「零重依赖、纯词面可复现」的公开仓原则冲突,**当前明确不做**;归一化桥接已把检索侧上界做到 hit@10 99.8%(鲁棒性:归一不完美时仍 99%+),满足「答案在候选池」的记忆系统主用途。
278
+
279
+ **渐进式语义检索(Progressive Semantic Retrieval,正式机制 v0)**。查询不是固定语义结构,而是**不断收紧的约束集合**——语义解析的完整性与检索的必要性不是同一个问题:从最小可靠语义(部分归一原子)开始宽检索,再按候选间区分度逐步增加条件使语义收敛;DEFER ≠ 失败,=「当前语义分辨率不足,继续获取条件」,与证据防火墙四态天然衔接。同一份 500 题实测:一次性全原子 96.8/99.8/99.8(=②锚点);只宽检 50% 核心原子 85.2/95.8/97.0;**宽检索→区分性条件渐进收紧(平均 +2.97 个条件)收敛到 93.6/98.8/99.0**——与一次性差 0.8pp,实证「不必一句话完成语义理解」。受控干扰池进一步实证排序面消歧(top1 稳 gold、渐进不引入新冒充),并如实暴露边界:条件面冒充(生效条件被伪造为 gold 同款)不被内容词渐进消除——词面条件确认必要非充分,真伪判据=证据基底分离(另案)。控制器 `md_cg/progressive.py`(纯函数、确定性、评分器注入式),实验 `md_cg/bench_progressive.py`。
280
+
281
+ ---
282
+
283
+ ## 📚 公开评测数据集
284
+
285
+ 📎 全部随仓库公开(CC BY-NC 4.0),可直接下载用于你自己的记忆系统对照评测:
286
+
287
+ | 基准 | 归属 | 状态 |
288
+ |---|---|---|
289
+ | **locomo-zh-500** | **自建**(LoCoMo 中文派生 · 500 题 / 567 turns / 0.6 MB) | **已随仓库公开** `data/benchmarks/locomo-zh-500/` · 可复现 · **我方成绩:中文 hit@1 94.6% · hit@5 / hit@10 99.2%(md_cg 完整主链路);英文(语义归一化桥接)hit@10 99.8%——见上[中英双语检索差距](#-中英双语检索差距我们用中文语义归一化解决英文检索实证)①② 行** · **第三方独立复现:中文 96.8/99.6(自报 96.4/99.8 噪声内)、英文主路线 96.8/99.8/99.8 逐位一致** → [第三方验证报告](docs/eval/第三方验证报告_LoCoMo_灵枢_.md) |
290
+ | **bench6 · 六家横评** | **自建**(LoCoMo 中文派生 · 100 题 / 137 turns · **中英双查** / 约 90 KB) | **已随仓库公开** `data/benchmarks/bench6-100-zh-en/` · **六家同口径对照**(灵枢 5 口径 / 纯向量 RAG / mem0 / Graphiti / GraphRAG / Letta 两模式)· 报告 → [横评_六家100题中英双查_v1.0.md](docs/eval/横评_六家100题中英双查_v1.0.md) |
291
+ | LoCoMo | 第三方 `mteb/LoCoMo` BEIR(1976 题 / 5882 turns) | 上游来源(英文原版) |
292
+ | memory-bench-1000 | **自建** | SNR 见评分报告 v2.0;已公开 `data/memory-bench-1000.jsonl` |
293
+
294
+ > 上表四行性质不同,勿混读:`locomo-zh-500` 的分数是**本仓库我方成绩**(基于LoCoMo自建并公开的评测集,可复现);`bench6 · 六家横评` 是同源派生的**小型同口径对照集**(零干扰池,只做六家系统横向对照,**非我方单方成绩**);LoCoMo 一行指**上游英文原版 1976 题**,本仓库未在其上产出完整成绩;`memory-bench-1000` 是自建记忆库的评分报告。
295
+ > **该成绩的性质(非虚假声明)**:`locomo-zh-500` 的分数是**写入侧结构化加工后的检索成绩**——入库前把每轮对话加工为「身份 / 时间 / 摘要 / 词 / 条件四槽」条目,再走词法 + 同义扩展检索。这与主流记忆系统所用的**向量化嵌入 + 关键词/摘要压缩**属**同一类写入侧加工**,差异只在索引与检索算法,不在「是否对原文做了加工」。因此该口径可用于**同口径对照**,不是对裸文本直读的虚高取巧。
296
+ > `locomo-zh-500` 是**本仓库对外发布的检索评测集**:供外部在**同一份中文题面**上对自己的记忆系统做可对照评测。它只评检索命中(hit@k / MRR),**不评答案正确性**;被测池为**零干扰**(池内全是 gold),故高命中率不可外推为端到端记忆能力——完整边界与许可见 `data/benchmarks/locomo-zh-500/README.md`。
297
+ > `bench6-100-zh-en` 沿用同一口径,并**每题提供中英两套词面**(评「换查询语言后是否仍命中」);它同样是**上界对照集**——家间差距小于约 16% **不可判为显著**;评测入口已随仓库公开(`run_bench.py`:零依赖口径复现 + Adapter 协议接入你自己的系统),接入任意llm和向量方法都可复现,详见 [横评报告](docs/eval/横评_六家100题中英双查_v1.0.md) 与 `data/benchmarks/bench6-100-zh-en/README.md`。
298
+
299
+ **复现我方成绩**(零上游依赖):
300
+
301
+ ```bash
302
+ python -m md_cg.bench_locomo_zh_public # 中文:只读 data/benchmarks/locomo-zh-500/,产出公开词法口径参考量级(hit@1 93.6% 单路 / 97.6% +同义扩展);上表 94.6/99.2 为 md_cg 完整主链路(四路 RRF + 同义扩展 + terms)成绩
303
+ python -m md_cg.bench_en_atoms_public # 英文:语义归一化桥接七臂(② 96.8/99.8/99.8 主路线·检索侧上界 · ③ 81.2 不归一对照 · ③a 78.2 纯正文对照 · ④ 57.6 机械归一端到端下界 · ⑤⑥⑦ ②路鲁棒性 99.2-99.8);英文原题面为上游派生不入库,自备后即可全量复现
304
+ python -m md_cg.bench_progressive # 渐进式语义检索双实验(G0 96.8/99.8/99.8 =②锚点自校验 · 只宽检 85.2/97.0 · 渐进收敛 93.6/99.0 · 受控池排序面消歧+条件冒充边界)
305
+ python -X utf8 -m md_cg.bench_e2e_judge --quick # 端到端干扰池评测·冒烟(确定性裁决 vs LLM-as-judge 三臂,全量见 --skip-llm/--arms llm)
306
+ python -X utf8 -m md_cg.bench_e2e_qa # 端到端 QA:pinpoint/answerability(LoCoMo 上游 gold 答案 · reader+judge 真实 LLM)→ 报告见 docs/eval/端到端干扰池评测_v1.1(主口径 MDCG_UNIFY_QUERY=0)
307
+ # 第三方独立评测脚本(第三方交付物原样入库;脚本内 REPO 为第三方沙箱路径,复现需改为本机仓库路径)
308
+ python test/locomo_independent_eval.py # MdCG 引擎口径五臂(A 中文五槽 / B 英文原文 / C 标准归一化 / D 双语并集 / F 语义摘要路 + 随机基线)
309
+ python test/locomo_jaccard_probe.py # 主路线 Jaccard 口径拆解(J2_full 完整版 / J2_zh 仅中文层 / J2_body 仅英文归一词 / J0_raw 英文原词)
310
+ ```
311
+
312
+ > 自建 bench 的噪声层 400 条 + unlabeled 边界 350 条为天然负对照;任何基准报告须带**干扰抑制负例组**与 **T-JUDGE 负例拒绝率**双向报告(遵守「只报总分 = 不通过」)。
313
+
314
+ ---
315
+
316
+ ## 🎯 能力自评(内部标尺,非横评声明)
317
+
318
+ > 项目维护者按内部七维标尺(结构 / 检索 / 判断 / 调用 / 演化 / 连续 / 可信)自评 **综合 8.6 / 10**(全部维度 ≥ 8.5),并按外部行为级门槛自评为**条件性 L4 → L5 路上**——含未完成项与扣分理由的逐维证据,见 [AGI 七维评分报告 v2.0](docs/eval/AGI七维评分报告_md_cg_v2.0.md)。
319
+ > **不虚高的坦白**:五个 8.5 的共同上限是「机制齐备、门槛项未齐」——T 零信任未落地、R 仍是规则层意图理解、C 去污染仍是抽样而非穷尽、U 的 LLM 固化动作尚未自动放行。
320
+
321
+ ### 第三方复评(七轮独立评估)
322
+
323
+ > 独立评估者(非项目方)以「统一评分 v7」对灵枢与 deja-vu 做同权重八维对照(检索中英 / 可复现性 / 工程测试 / 架构独立性 / 诚实度 / 生态适配 / 部署运维):**灵枢 9.258 / deja-vu 9.119(+0.139,七轮首次为正——评审者声明该差距在评审噪声以内)**,收敛轨迹 `7.79→8.29→8.57→8.72→9.13→9.133→9.258`;v7 含对自身四条建议全撤回的勘误(§三点五:所称「缺失能力」经复核均早已有之,含 `cg(op=ingest)` 后向索引通道)
324
+ > 报告全文→ [第三方验证报告_灵枢_vs_dejavu_统一评分_v7.md](docs/eval/第三方验证报告_灵枢_vs_dejavu_统一评分_v7.md) · 评估日期 2026-09-15,被评灵枢基线 `38412c4`
325
+ >
326
+ > **LoCoMo 第三方独立验证**(同日另一份独立报告,评测全流程从零实现、不调用灵枢任何 `bench_*` 脚本):中文 96.8/99.6 独立复现(自报 96.4/99.8,噪声内);英文主路线 ② 96.8/99.8/99.8 **逐位一致**;并给出更严格归因——99.8 由中文摘要层挣得(去英文层 hit@10 反为 100.0%)、英文标准归一化端到端真实水平 81.0%(写入侧机械归一口径,较不归一 +58pp)、检索失败 100% 归因归一化丢词/错译而非排序;同时确认数据集区分度(query 对 gold 覆盖 0.875 vs 非 gold 最佳 0.469)与 OOV 如实透出。报告全文→ [第三方验证报告_LoCoMo_灵枢_.md](docs/eval/第三方验证报告_LoCoMo_灵枢_.md) · 配图 → [第三方验证报告_LoCoMo_灵枢_.png](docs/eval/第三方验证报告_LoCoMo_灵枢_.png) · 独立评测脚本 `test/locomo_independent_eval.py`、`test/locomo_jaccard_probe.py`(第三方交付物原样入库,`REPO` 变量为第三方沙箱路径,复现需改为本机仓库路径)
327
+ >
328
+ > **口径声明**:两份报告均为外部独立口径,与上方内部七维自评(8.6)是**多套独立口径,分数不可互比**;LoCoMo 报告同时验证了数字可复现性与归因边界,其归因发现已如实吸收进[中英双语检索差距](#-中英双语检索差距我们用中文语义归一化解决英文检索实证)一节。
329
+
330
+ ---
331
+
332
+ ## 🧰 工具面
333
+
334
+ ### 能力 → MCP 入口
335
+
336
+ | 能力 | MCP 入口 |
337
+ |---|---|
338
+ | 记忆写入 · 关系链接 · 结构关系 | `cg(op=write)` `cg(op=link)` `stg(op=relation)` |
339
+ | 多路融合检索 · 条件路由 · 因果链 · 时间线 | `mdcg_recall` `mdcg_search` `cg(op=route)` `stg(op=timeline)` |
340
+ | 会话隔离(分档可见:public/internal 跨会话共享 · private/secret 绑定归属会话 · 设计者豁免;写入带会话归属 · 租户物理根接线 fail-closed) | `mdcg_remember(session=…)` `stg(op=timeline, session=…)`;私档经 `sensitivity: private` 写入(详见 issue #35 设计定稿) |
341
+ | 检索性能开关(读缓存 · 热路径缓存 · 检索门控 · 统一归一) | env:`MDCG_READ_CACHE` `MDCG_HOTCACHE` `MDCG_RETRIEVAL_PIPELINE` `MDCG_UNIFY_QUERY`(读缓存/统一归一默认开,=0 关;热缓存/门控默认关,=1 开) |
342
+ | 事实时效过滤(`validity=true` 只排「已过期」,保留「未生效」) | `mdcg_recall` `mdcg_search` `cg(op=read)` |
343
+ | 写入裁决 · 主动遗忘 · 冲突检测 · 反思 | `mdcg_remember` `cg(op=verify)` `cg(op=metacognition)` `mdcg_reflect` |
344
+ | 重要性评分 · 预算装包 · 分层注入 · 记忆自净 | `cg(op=session)` `cg(op=scrub)` `cg(op=info)` |
345
+ | 知识固化 · 结构变更账本 / 回滚 · 自维持巡检 | `mdcg_flywheel` `cg(op=consolidate)` `cg(op=maintain)` `cg(op=sustain)` |
346
+ | 身份一致性 · 自我状态 · 演化史 | `cg(op=identity)` `cg(op=self_state)` `cg(op=evolution)` |
347
+ | 加密 · 密级隔离 · 审计留痕 · 保护/遗忘 | `cg(op=protect)` `cg(op=forget)` · [护栏宪章](docs/mdcg/guardrail-charter.md) |
348
+ | 记忆可靠性闸(对话→六要素候选→编外复核→落库) | `cg(op=ccg)` |
349
+
350
+ > **索引链**:能力 → op(本表)→ 实现模块(本节下方认知图投影)→ 行号级代码映射([功能调用映射表](docs/mdcg/功能调用映射表_v0.1.md))——每一步都可从 README 一跳到达源码,一致性由 `scripts/cogmap_sync.py check` 守卫。
351
+
352
+ ### 🧱 记忆可靠性闸:CCG 六要素编译(`cg(op=ccg)`)
353
+
354
+ 把对话记录编译成可检索的 CCG 六要素条目(`# 功能名 / # 生效条件 / # 子功能 / # 执行 / # 验证方式 / # 不适用条件`),且**编译者不得自证**——LLM 产出的候选必须经**认知图之外的编外单元**复核才准落库(机械拒绝码 `E041`,不依赖 prompt 自觉)。候选以内容摘要绑定暂存(`_ccgc_pending/`,索引不可见),三次独立调用间防篡改。
355
+
356
+ | 步骤 | 调用 | 结果 |
357
+ |---|---|---|
358
+ | ① 编译 | `cg(op=ccg, action=compile, node_id=…, dialog=…)` | 六要素候选 + 名实门校验(每个写入值必须是原文子串),**不当场写库** |
359
+ | ② 复核 | `cg(op=ccg, action=review, node_id=…, blocking=true)` | 编外单元裁决:蜂巢 `reflect`/`verify` 优先;蜂巢不可用则**返回配置指引**(不假装可用),显式 `allow_degrade` 才降级为子代理 |
360
+ | ③ 落库 | `cg(op=ccg, action=link, node_id=…, apply=true)` | 摘要校验 + 签章准入通过才写入 |
361
+
362
+ 错误码:`E040` 无签章 · `E041` 自证拒绝 · `E042` 复核未通过 · `E043` 只允许修正四槽(`action=recalibrate`)。`action=catalog` 自描述全部动作,`action=units` 体检复核通道(三态:蜂巢 / 待配置 / 子代理降级)。
363
+
364
+ ---
365
+
366
+
367
+ <!-- COGMAP:BEGIN (scripts/cogmap_sync.py 自动生成 · 真源 md_cg/mcp_server.py · 勿手改段内) -->
368
+
369
+ **两个认知基元 · 40 个 op**(`kernel` 面)——下列 op 清单、实现模块与全部链接行号由 [cogmap_sync](scripts/cogmap_sync.py) 从真源自动提取,`check` 门禁守卫漂移;**点击任意名字直达源码对应行**:
370
+
371
+ | 基元 | op 数 | op 清单(点击直达实现分支) |
372
+ |---|---|---|
373
+ | **[`cg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L578)** 认知图统一入口 | 36 | [`help`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2054) [`status`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2060) [`edges`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2063) [`theory`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2066) [`link`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2083) [`info`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2199) [`route`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2225) [`read`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2246) [`write`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2301) [`goal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2309) [`task`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2328) [`recent`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2331) [`verify`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2343) [`review`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2348) [`forget`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2369) [`protect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2375) [`identity`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2378) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2381) [`metacognition`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2384) [`self_state`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2387) [`evolution`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2390) [`sustain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2393) [`scrub`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2396) [`predict`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2399) [`causal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2402) [`whitebox`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2405) [`index_code`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2408) [`index_doc`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2452) [`ref`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2495) [`session`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2498) [`ingest`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2501) [`export`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2504) [`maintain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2507) [`consolidate`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2510) [`insight`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2513) [`ccg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2516) |
374
+ | **[`stg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1018)** 语义时空图入口 | 4 | [`relation`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3101) [`timeline`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3103) [`anchors`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3110) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3114) |
375
+
376
+ **op → 实现模块**(认知图投影:功能在哪段代码,一眼可达):
377
+
378
+ | op(点击直达实现分支) | 实现模块(点击直达源码) |
379
+ |---|---|
380
+ | [`help`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2054) [`status`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2060) [`edges`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2063) [`route`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2225) [`goal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2309) [`task`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2328) [`recent`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2331) [`verify`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2343) [`review`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2348) [`forget`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2369) [`protect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2375) [`identity`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2378) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2381) [`metacognition`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2384) [`self_state`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2387) [`evolution`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2390) [`sustain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2393) [`scrub`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2396) [`predict`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2399) [`causal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2402) [`whitebox`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2405) [`ref`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2495) [`session`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2498) [`ingest`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2501) [`export`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2504) [`maintain`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2507) [`consolidate`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2510) [`insight`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2513) [`ccg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2516) | [`_cg_dispatch` 内联](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2051) |
381
+ | [`index_code`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2408) [`index_doc`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2452) | [`refindex`](md_cg/refindex.py), [`security`](md_cg/security.py) |
382
+ | [`info`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2199) | [`audit`](md_cg/audit.py), [`links`](md_cg/links.py), [`nodefile`](md_cg/nodefile.py), [`theory`](md_cg/theory.py) |
383
+ | [`link`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2083) | [`evidence`](md_cg/evidence.py), [`links`](md_cg/links.py), [`provenance`](md_cg/provenance.py), [`security`](md_cg/security.py), [`signer`](md_cg/signer.py) |
384
+ | [`read`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2246) | [`refindex`](md_cg/refindex.py) |
385
+ | [`theory`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2066) | [`theory`](md_cg/theory.py) |
386
+ | [`write`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L2301) | [`writepipe`](md_cg/writepipe.py) |
387
+ | [`relation`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3101) [`timeline`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3103) [`anchors`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3110) [`consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3114) | [`_stg_call` 内联](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L3089) |
388
+
389
+ **细粒度面**(`MDCG_MCP_SURFACE=full`,插件运行时使用):[`cg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L578) + [`stg`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L1018) + **31 个 `mdcg_*`** = **33 个工具**:
390
+
391
+ [`mdcg_remember`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L144) [`mdcg_recall`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L175) [`mdcg_search`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L213) [`mdcg_get`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L225) [`mdcg_reflect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L233) [`mdcg_verify`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L239) [`mdcg_flywheel`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L250) [`mdcg_mine_fix_pairs`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L255) [`mdcg_rejected`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L260) [`mdcg_unresolved`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L266) [`mdcg_propose`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L272) [`mdcg_review_list`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L280) [`mdcg_review_decide`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L285) [`mdcg_review_records`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L302) [`mdcg_forget`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L310) [`mdcg_protect`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L318) [`mdcg_forgetting_history`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L328) [`mdcg_identity`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L334) [`mdcg_consistency`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L360) [`mdcg_metacognition`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L380) [`mdcg_self_state`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L402) [`mdcg_predict`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L440) [`mdcg_causal`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L468) [`mdcg_evolution`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L485) [`mdcg_restore`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L508) [`mdcg_health`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L513) [`mdcg_whoami`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L518) [`mdcg_ingest`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L523) [`mdcg_watermarks`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L535) [`mdcg_whitebox`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L540) [`mdcg_service_info`](https://github.com/FuRongJun-1999/dsh-memory/blob/main/md_cg/mcp_server.py#L561)
392
+
393
+ 逐个 op 的「功能 → 代码 → op」行号级映射另见[功能调用映射表](docs/mdcg/功能调用映射表_v0.1.md)。
394
+
395
+ <!-- COGMAP:END -->
396
+
397
+ | `tools` 模式 | 暴露数 | 说明 |
398
+ |---|---|---|
399
+ | `'core'`(**默认**) | **2** | 仅 `cg` / `stg` |
400
+ | `'brain'` | **30** | `cg`/`stg` + 28 细粒度 |
401
+ | `'all'` | **30** | full 面 33 − 3 个宿主级风险工具 |
402
+
403
+ > 风险工具 `mdcg_forget` / `mdcg_restore` / `mdcg_review_decide` 需 `can_admin`,即使 `tools: 'all'` 也不自动暴露。
404
+ > 35 op 已逐一冒烟验证:**35/35 可达,0 未知 op、0 意外崩溃**。
405
+ > 历史 82 工具(旧 aeis 引擎)去向见 [迁移映射](docs/mdcg/灵枢82工具_功能整理与迁移映射_v0.1.md)。
406
+
407
+ ---
408
+
409
+ ## 🏗️ 架构(以 DSH 为例 · 其它 MCP 宿主同构)
410
+
411
+ ```
412
+ DeepSeek Harness (cordis)
413
+ Agent Loop ──┬── 工具面 ctx.tools(cg / stg / mdcg_*)
414
+ └── session/event(自动记忆钩子 · 自动召回注入)
415
+ │ stdio · 逐行 JSON-RPC
416
+ ┌────────────────────▼─────────────────────┐
417
+ │ 灵枢大脑子进程(spawn · 唯一) │
418
+ │ python -m md_cg.mcp_server │
419
+ │ cg/stg 基元 + 31 细粒度 · md 认知图真源 │
420
+ └──────────────────────────────────────────┘
421
+ (可选)「身体」能力后端:仅 capability.enabled=true 时另起一个能力库子进程,默认不启动
422
+ ```
423
+
424
+ **记忆只有一个真源**:`md_cg/` 认知图(纯 md 文档,随包自带)。确定性规则引擎与知识库已内迁;
425
+ AEIS 仅作可选「身体」能力后端(角色扮演生成),不再存记忆、默认不启动。
426
+
427
+ > 其它 MCP 宿主同构:宿主工具面(`cg` / `stg` / `mdcg_*`)↔ stdio MCP ↔ `md_cg` 大脑;四端差异只在**纪律注入方式**(矩阵见[多 harness 接入](#多-harness-接入按端分目录)),大脑与记忆真源零改动。
428
+
429
+ ---
430
+
431
+ ## 📚 文档导航
432
+
433
+ | 文档 | 内容 |
434
+ |---|---|
435
+ | **[docs/ 目录索引](docs/README.md)** | 六域快速索引(mdcg / swarm / hive / theory / eval / plans)· 新文档归域规则 |
436
+ | **[Release v0.6.1](https://github.com/FuRongJun-1999/dsh-memory/releases/tag/v0.6.1)** | 本版变更:外部测试报告逐条核验后的四批修复——① 写面静默失败族(自动 id 加熵与撞车有界重生成 / 声明密级透传且落盘不一致即 fail-closed / 索引分片目录删除后自愈)· ② 合并吞正文与冲突误判(MERGE 与熵 DROP 两分支都保新正文 / 仅空白差异不再误判同一条件分歧 / CCG 哨兵空值不再触发假冲突)· ③ 召回面诚实性(负覆盖条目不再以满分冒充答案且不溢出 k / 一致性飞轮只对真冲突建单 / 显式 k=0 不再被当缺省 / 仅 1 个桶的库不说「分区正常」/ 类型错的参数与裸 null 出口收成结构化错误)· ④ 插件面(全角凭据形态纳入脱敏 / 注入记忆加不可信边界声明 / 子代理委派不写成本人记忆 / 召回与时间线读写两侧会话口径同尺)。九项探针先取证后改码,每处修复配定点变异自证 |
437
+ | **[Release v0.6.0](https://github.com/FuRongJun-1999/dsh-memory/releases/tag/v0.6.0)** | 本版变更:init 一键配置命令(交互三问 → 四端 mcp.json 片段 + 指引)· bin 入口 · README 声明 DSH 0.17.2 已验证 · 检索强化(读缓存 / 智慧书预计算 / 统一归一 / 门控生产路径)· 蜂巢稳定形态与并发防线 · 会话隔离 |
438
+ | **[Release v0.5.1](https://github.com/FuRongJun-1999/dsh-memory/releases/tag/v0.5.1)** | 本版变更:Windows 中文/编码与保留设备名修复(issue #39)· 结果完整性锚与 WAL seq 连续性(防伪造产物/防丢行乱序)· 启动对账 reconcile · 幂等提交 · 外部贡献 PR #40 十三处(health heal 闸门 / scrub 误报 / 写入侧落盘 / 桶路弃权)· 故障注入套件 18 用例入库 |
439
+ | **[Release v0.5.0](https://github.com/FuRongJun-1999/dsh-memory/releases/tag/v0.5.0)** | 本版变更:强化检索(读缓存+派生物常驻 / 智慧之书面预计算 / 统一归一 / 门控生产路径)× 稳定蜂巢并发调度(多写者防线 / 依赖门禁)· 12 个 issue 修复 |
440
+ | [README 详细版](docs/mdcg/README详细版_v0.4.10.md) | 完整能力说明 · 配置项全表 · 安装与验证细节 |
441
+ | [发布说明 v0.4.5](docs/mdcg/release_v0.4.5.md) | 历史版本发布说明(兼容性 / 升级指引) |
442
+ | [AGI 七维评分报告 v2.0](docs/eval/AGI七维评分报告_md_cg_v2.0.md) | 逐维得分依据 / 扣分项 / 实库证据 / 诚实边界 |
443
+ | [第三方复评 · 统一评分 v7](docs/eval/第三方验证报告_灵枢_vs_dejavu_统一评分_v7.md) | 独立评估者七轮对照(灵枢 vs deja-vu):八维加权 / 收敛轨迹 7.79→9.258 / 评审偏差声明 / 自身建议全撤回勘误 |
444
+ | [第三方验证 · LoCoMo 独立复现](docs/eval/第三方验证报告_LoCoMo_灵枢_.md) | 独立实现评测全流程:自报数字逐位复现 / 归因拆解(中文摘要层 vs 英文归一化 81.0%)/ 静默错译样本 / 数据集区分度证伪检查(配图 `第三方验证报告_LoCoMo_灵枢_.png`) |
445
+ | [功能调用映射表](docs/mdcg/功能调用映射表_v0.1.md) | 任何功能 → 调用哪段代码(含行号、MCP op) |
446
+ | [护栏宪章 v2.0](docs/mdcg/guardrail-charter.md) | 对外部智能体与人类使用者的行为边界 |
447
+ | 教学四篇 | [白箱智能是什么?](docs/theory/白箱智能是什么?.md) · [智能的认知过程](docs/theory/智能的认知过程.md) · [智能的公理化基石](docs/theory/智能的公理化基石.md) · [信息差为什么必然存在](docs/theory/信息差为什么必然存在且自然扩大.md) |
448
+ | [工作纪律·认知图条目 v1.1](docs/工作纪律_认知图条目_v1.1.json) | 自我约束的 18 条工作纪律(嵌套认知图条目 `work_discipline`) |
449
+ | [六家记忆系统横评 v1.0](docs/eval/横评_六家100题中英双查_v1.0.md) | 100 题 · **中英双查** · 六家同口径对照;含判定单 / 条件层归因 / 诚实边界(题集 → [data/benchmarks/bench6-100-zh-en/](data/benchmarks/bench6-100-zh-en/README.md)) |
450
+ | [端到端干扰池评测 v1.1](docs/eval/端到端干扰池评测_确定性裁决vsLLM_judge_v1.1.md) | **带干扰池端到端**:确定性裁决层 vs LLM-as-judge 正面对比(四族干扰×浓度梯度)· LoCoMo 上游 gold 端到端 QA **43.3%/40.0%** · 防火墙与 LLM 裁决对无标记干扰均无增益(REJECT 恒 0)· **统一归一层 A/B:CCG+RRF 形态 −11.7pp(批次 15 边界反馈)** |
451
+ | [端到端 LoCoMo QA 同口径对照 v1.0](docs/eval/端到端LoCoMoQA同口径对照_v1.0.md) | **中文完整对话做记忆 · 自然问句做查询**(与 Mem0/Letta 论文同设定):检索注入 QA **17.2%** / full-context 16.4% · 检索四组对照定因(自然问句诚实下界 hit@10 **40.2%** vs 派生题面 92.0%;改写/归一均实证排除)· lost-in-the-middle 实证 · **方向拍板:认知图概念桥接(不上向量)** |
452
+ | [Rust 检索库](rust/README.md) | `mdcg_eval` 三形态:库内嵌大批量检索 / `--serve` 多智能体进程实例 / 公开数据集评测器(零依赖 · 与 Python 口径对齐,rank 对拍 harness 守卫) |
453
+ | [蜂群多智能体](docs/swarm/蜂群多智能体_功能说明_v0.6.md) | `swarm/` 多进程蜂群执行层(2026-09-13 自 protocol-compiler 迁入,大脑核心内部能力):.pbc 确定性实例 + Gossip/拓扑/水位信箱/WAL-HMAC/信任聚合/健康评分(Rust 纯 std 零依赖 · 159 断言回归全绿) |
454
+
455
+ ### 多 harness 接入(按端分目录)
456
+
457
+ > **主推路径:MCP 直挂**——各端接入的**共性是挂载同一个 stdio MCP server**(`python -m md_cg.mcp_server`):任何支持 MCP 的宿主直接挂上即可,**不依赖任何插件系统**。
458
+
459
+ 共享层(`md_cg/` 大脑 · `data/` · `docs/` · `scripts/`)在仓库根;**harness 专属配置按端归置**,下表列的只是各端**纪律注入方式**的差异(纪律如何进入上下文),大脑与记忆真源零改动:
460
+
461
+ > ⚠ **出货面与源码树的分界**:npm 包的 `files` 只含 `lib/ src/ md_cg/ skills/ README.md dsh/ codebuddy/ zcode/ docs/`
462
+ > —— `scripts/`、`hive/`、`swarm/`、`compiler/`、`rust/` 属**源码树**(发布门禁、蜂巢运行时、Rust 评测器),
463
+ > 装出来的插件里**不存在**。因此运行期依赖一律不得指向它们:
464
+ > 判据面清单走包内 `md_cg/judgment_manifest.py`(`md_cg/interop.py` 进程内调用)、
465
+ > 裁决 CLI 走包内 `python -m md_cg.review_cli`、全量测试走包内 `python -m md_cg.run_tests`;
466
+ > 依赖 `scripts/`/`hive/` 的**测试**在缺件时如实 SKIP(不 FAIL、不虚报通过)。
467
+
468
+ | 目录 | harness | 接入文档 | 纪律注入方式 |
469
+ |---|---|---|---|
470
+ | [`dsh/`](dsh/README.md) | DeepSeek Harness | [dsh/README.md](dsh/README.md) | `~/.dsh/profiles/web/cordis.patch.yml` 的 `personaPrefix`(compact · 每轮) |
471
+ | [`codebuddy/`](codebuddy/README.md) | CodeBuddy | [codebuddy/README.md](codebuddy/README.md) | 项目根 `CODEBUDDY.md`(full · 会话起始) |
472
+ | [`zcode/`](zcode/README.md) | ZCode | [zcode/README.md](zcode/README.md) | 项目根 `AGENTS.md`(full · 会话起始) |
473
+ | [`codex/`](codex/README.md) | Codex CLI | [codex/README.md](codex/README.md) | 项目根 `AGENTS.md`(full · 会话起始) |
474
+ | [`claude/`](claude/README.md) | Claude Code | [claude/README.md](claude/README.md) | 项目根 `CLAUDE.md`(full · 会话起始) |
475
+
476
+ > 五端纪律**同源**(`docs/工作纪律_认知图条目_v1.1.json`),由 `scripts/render_discipline.py` 渲染、
477
+ > `scripts/verify_discipline.py` 守卫漂移;矩阵见 `docs/discipline/harnesses.yaml`。
478
+
479
+ <details>
480
+ <summary><b>可选补充:插件形态安装(仅 Claude Code / Codex CLI · 省手工复制,非主推路径)</b></summary>
481
+
482
+ > 等价于按上表手工配置,只是把纪律 skill 与配置样例随插件一起拿到;**不装插件不影响任何能力**。
483
+
484
+ | 宿主 | 安装 | 插件位置 | 装后一步 |
485
+ |---|---|---|---|
486
+ | Claude Code | `/plugin marketplace add FuRongJun-1999/dsh-memory` → `/plugin install lingshu-memory@lingshu` | `claude/lingshu-memory/`(纪律以 skill 分发,`/lingshu-memory:linglu-discipline` 可显式调用) | 复制插件内 `mcp.json.example` 为项目根 `.mcp.json`,填 `PYTHONPATH` |
487
+ | Codex CLI | `codex plugin marketplace add <本仓路径>` → `codex plugin add lingshu-memory@lingshu` | `codex/lingshu-memory/`(skill 三级渐进加载;`.codex-plugin/plugin.json` 清单) | 把插件内 `config.toml.example` 两段合并进 `~/.codex/config.toml`,填 `PYTHONPATH` |
488
+
489
+ > marketplace 清单:Claude 端在仓根 `.claude-plugin/marketplace.json`,Codex 端在仓根
490
+ > `.agents/plugins/marketplace.json`。插件不含大脑本体(`md_cg/` 不随插件分发)——MCP 装好后
491
+ > 大脑仍是你本机的 dsh-memory 仓库;插件形态的纪律 skill 同样由真源渲染(`skill` 变体,
492
+ > 矩阵槽位 `claude-code-plugin-skill` / `codex-plugin-skill`),漂移由同一 `verify_discipline.py` 守卫。
493
+
494
+ </details>
495
+
496
+ ---
497
+
498
+ ## 🛠️ 开发
499
+
500
+ ```bash
501
+ npm install # NODE_ENV=production 时须加 --include=dev
502
+ npm run build # TypeScript 编译
503
+ npm test # 真实集成测试(spawn 本机灵枢,验证握手/往返/注册/卸载)
504
+ ```
505
+
506
+ > `NODE_ENV=production`(或 `--omit=dev`)会省略 devDependencies,`tsc`/`tsx` 不在位;
507
+ > 此时 `prepare` **跳过构建并在 stdout 明示**(不再让 `npm install` 因 `tsc` 缺失而整体失败),
508
+ > 需要构建请用 `npm install --include=dev`。另:`engines.node >=22.19` 之下运行会收到
509
+ > EBADENGINE 警告(仅提示,不阻断)。
510
+
511
+ 测试不依赖 DSH 全组件——用最小 Cordis host(SystemPrompt + ToolRegistry + 插件)隔离不稳定面。
512
+
513
+ ### Python 测试约定(必须 `python -m`)
514
+
515
+ `md_cg/` 等包内测试普遍使用**包内相对导入**,必须以模块方式从**仓库根**运行;直接 `python md_cg/test_xxx.py` 会 ImportError(59/61 踩坑实测)。一键入口已固化该约定(Linux·macOS 上把下面的 `python` 换成 `python3`——发行版默认无 `python`):
516
+
517
+ ```bash
518
+ python -m md_cg.run_tests # 全量(md_cg + compiler + swarm,按存在性发现)
519
+ python -m md_cg.run_tests md_cg -k p44 # 按组 / 关键字过滤
520
+ python -m md_cg.run_tests --jobs 1 # 串行(默认并发 4)
521
+ python scripts/run_tests.py # 源码树入口(等价;需 scripts/ 在)
522
+ ```
523
+
524
+ > **入口在包内**(`md_cg/run_tests.py`):npm 出货面(`files`)不含 `scripts/`,
525
+ > 所以「装出来的插件」里唯一可用的全量入口就是上面那条;`src/` 源码树里
526
+ > `scripts/run_tests.py` 与 `npm run gate` 仍可用(发布门禁属源码树工具)。
527
+ > 包的 runner 把子进程输出**重定向到文件**(不用管道):受限宿主(如 DSH 文件
528
+ > 沙箱)禁 CreatePipe,用 `capture_output` 的版本会把每个用例都变成
529
+ > PermissionError 的假失败。
530
+
531
+ 单测等价写法:`python -m md_cg.test_p44_md_whitebox`(cwd=仓库根)。退出码 0/1 可直接接提交前门禁。
532
+
533
+ > **两个跨语开关别混**:`MDCG_UNIFY_QUERY`(统一归一层,**默认开**,2026-09-23 口径转正:
534
+ > 任意语言 query 先归一成标准中文原子序列→词法路即可命中中文节点)与
535
+ > `MDCG_EN_ATOMS`(英→中召回词扩展,**默认关**)是彼此独立的开关;
536
+ > `MDCG_SEMANTIC`(`fm.semantic` 语义摘要路)同样默认关。改其一请同步
537
+ > `md_cg/test_en_pipeline.py` 与 `md_cg/test_semantic_canonical.py` 的双态断言。
538
+
539
+ ### 编码约定(全 UTF-8 · 命令统一走 python)
540
+
541
+ **本仓所有文本一律 UTF-8(无 BOM)**——源码、配置、文档、数据、测试夹具,以及**路径与文件名**(含蜂巢任务标识)同此一律。中文可以直接出现在路径里:这不是建议,是约定。
542
+
543
+ > **给 AI / 接入方的显式声明**:这里是 UTF-8。请把本仓的一切取用走 **python**(`python -X utf8 …`,等价于 `PYTHONUTF8=1`),**不要拿控制台/终端当取用通道**。Windows 控制台按**代码页**去解释收到的字节,会把中文渲染成乱码(实测:`控制台试验` 在代码页 936 的窗口里显示成 `鎺у埗鍙拌瘯楠`)——**那是显示层的问题,不是数据层的问题**,字一个都没丢。我们**不做控制台兼容**:一切读写与判定按 UTF-8 字节,正确性不挂在任何人的代码页设置上。
544
+
545
+ - **入口自保证**:Python 入口在最早处检查 `sys.flags.utf8_mode`,未开则置 `PYTHONUTF8=1` / `PYTHONIOENCODING=utf-8` 并重启自身;不可重启时 fail-fast(不静默降级)。
546
+ - **显式优于缺省**:新增代码里 `open()` / `read_text()` 一律显式 `encoding="utf-8"`,不吃 locale 缺省(中文 Windows 上的缺省是 cp936,裸 `open()` 会按它读写)。
547
+ - **NFC 口径 = 拒收,不静默归一化**(见[标识契约 v2](docs/plans/全中文编码与蜂巢任务标识契约_v2.0.md) §四.4 / §四.8):路径与标识**须已是 NFC 稳定形态**才受理——判据 = **区块白名单** `hive/id_charset_blocks.txt`(唯一真源:Rust `include_str!` 编译期嵌入、MCP 与 `md_cg` 读同一份文件,**不查任何运行时的 Unicode 属性表 ⇒ 两侧属性表版本差结构性不可能**)。不在表内的形态**显式拒收**:会归一化改写的形态(CJK 兼容表意 / 全角 / 带圈字母数字 / 数学字母 / 组合标记等),以及**白名单区块之外的其它文种字母数字**(区块选择 = ASCII / 拉丁 / 希腊 / 西里尔 / 假名 / 谚文音节 / CJK 与扩展 / 注音——有意不收的档见契约 §四.4)。不做静默改写(`hive` 侧零依赖手写完整 NFC 不可行;拒收严于静默归一化)。
548
+ - **蜂巢任务标识(id 契约 v2)**:`h_<身份>_<任务>_<单元>_<编号>`,例 `h_zcode端_灵枢迭代_反思单元_0001`。四槽之三(身份 / 任务 / 单元)**提交时必填**、不许静默推导;编号由 Rust 侧分配器独占创建给出(4 位定宽,溢出显式报错,不加宽不回绕);单元槽取蜂巢五单元闭集(记录单元 / 反思单元 / 验证单元 / 输出单元 / 维生系统)。CLI 用 `--identity/--task/--unit`(env 兜底 `HIVE_JOB_IDENTITY/HIVE_JOB_TASK/HIVE_JOB_UNIT`),或 `hive alloc-id` 只取 id;MCP `hive_spawn` 用同名三参数(必填)。旧形态 `h<13位毫秒>_<4位hex>` **仍然合法**(存量零迁移)。
549
+ - **平台面**由容器双栈门禁的编码 / locale 守卫覆盖(见下一节)。
550
+
551
+ ### Linux 验证(Docker 容器双栈,0.5.0 起为发版门禁)
552
+
553
+ ```bash
554
+ # 栈一:rust + python 全量(cargo test / python 18 套含全部守卫 / smoke 端到端)
555
+ docker run --rm -v "$(pwd):/work" -w /work -e CARGO_TARGET_DIR=/tmp/target \
556
+ rust:bookworm bash scripts/linux_verify.sh full
557
+ # 栈二:node 生态(发布件 TS 编译 + node test)
558
+ docker run --rm -v "$(pwd):/work" -w /work node:22-bookworm bash -c \
559
+ "npm install --include=dev && npm run build && node --import tsx --test test/*.test.ts"
560
+ ```
561
+
562
+ > 执行器解释器由 `hive/src/exec.rs` 试跑探测(`python3` 优先、`python` 兜底),故上面两条**照抄即可**、无需再传 `HIVE_PYTHON`;要指定别的解释器才显式设它(显式压倒探测)。Git Bash/MSYS 下须先 `export MSYS_NO_PATHCONV=1`,否则 `/work` 被重写成 `C:/Program Files/Git/work`。
563
+ > 平台差异守卫由脚本清单覆盖(编码/locale/session 过滤/SIGTERM 收尾);依赖 gitignored 本地语料的套件(p44 等)不入容器清单,由 `run_tests.py` 的 SKIP 面在有语料的机器覆盖。
564
+
565
+ ---
566
+
567
+ ## 📏 工程纪律与设计者视角(可选推荐)
568
+
569
+ > **这段话是什么**:灵枢自身按一套 **17 条工程纪律** 运行——方法论(理论先行 / 全面处理 / 根因纪律)、执行(验证先行 / 双副本同步 / 兜底路径)、执行调度(任务派发统一走蜂巢:执行留痕 / 统一调度面)、合规(内容政策双清单 / 敏感信息隔离)、记忆闭环(查记忆 → 执行 → 写记忆)。它原本是灵枢的「自我约束」,与你要不要用灵枢无关;但如果你希望自己的 Agent 也具备同样的工作方式,这套纪律与配套元技能**都可以直接复用**。
570
+
571
+ **两个可复用入口**:
572
+
573
+ | 入口 | 内容 | 位置 |
574
+ |---|---|---|
575
+ | **工程纪律(18 条)** | 每条 ≡ 一个认知图节点(生效条件 / 执行锚点 / 不适用条件 / 直答出口),含触发词路由 | 真源:[`docs/工作纪律_认知图条目_v1.1.json`](docs/工作纪律_认知图条目_v1.1.json) · 全文投影:[`codebuddy/CODEBUDDY.md`](codebuddy/CODEBUDDY.md)(各端产物见 [多 harness 接入](#多-harness-接入按端分目录)) |
576
+ | **设计者视角(元技能)** | 在动手前回答「该不该做 / 为什么做 / 条件够不够」:条件空间声明 → 四态资格裁决(ACCEPT/REJECT/DEFER/BLINDSPOT)→ 失配归因;附自检 17/17 | [`skills/skills/designer-perspective/`](skills/skills/designer-perspective/)(`tests/selftest.py` 可自行验收) |
577
+
578
+ > **按需裁剪**:17 条中部分条款针对灵枢私有管线(如图像选源线),复用时建议只取方法论 / 执行 / 执行调度 / 合规 / 记忆闭环五组通用条款。多 harness 渲染与防漂移守卫见 [多 harness 接入](#多-harness-接入按端分目录)。
579
+
580
+ ## 护栏宪章(接入即接受约束)
581
+
582
+ 本插件接入即接受 **[灵枢护栏宪章 v2.0-published](docs/mdcg/guardrail-charter.md)** 约束——对外部智能体与人类使用者的行为边界作出公开、可执行、可审计的规定,并保护人类使用者。
583
+
584
+ ## 许可证
585
+
586
+ MIT © 荣(FuRongJun-1999)· 灵枢 AEIS 工程实现
587
+
588
+ DeepSeek Harness 为 DeepSeek 官方开源项目(MIT),本插件与之无隶属关系。