@furongjun1999/dsh-memory 0.4.7 → 0.4.8

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 (172) hide show
  1. package/README.md +92 -37
  2. package/codebuddy/CODEBUDDY.md +195 -185
  3. package/docs/Pi/345/217/257/345/255/246/344/271/240/344/274/230/347/202/271_/347/201/265/346/236/242/345/244/247/350/204/221/346/224/271/350/277/233/344/272/244/346/216/245_20260915.md +144 -0
  4. package/docs/README.md +111 -0
  5. package/docs/discipline/harnesses.yaml +215 -152
  6. package/docs/discipline/templates/full.md.tmpl +60 -58
  7. package/docs/eval//347/254/254/344/270/211/346/226/271/351/252/214/350/257/201/346/212/245/345/221/212_LoCoMo_/347/201/265/346/236/242_.md +127 -0
  8. package/docs/eval//347/254/254/344/270/211/346/226/271/351/252/214/350/257/201/346/212/245/345/221/212_LoCoMo_/347/201/265/346/236/242_.png +0 -0
  9. package/docs/eval//347/254/254/344/270/211/346/226/271/351/252/214/350/257/201/346/212/245/345/221/212_/347/201/265/346/236/242_vs_dejavu_/347/273/237/344/270/200/350/257/204/345/210/206_v7.md +202 -0
  10. package/docs/experiments/m4-role-probe/census.py +86 -0
  11. package/docs/experiments/m4-role-probe/probe.py +89 -0
  12. package/docs/experiments/mapped_confidence/bench_mapped_conf.py +216 -0
  13. package/docs/experiments/mapped_confidence/post_check.py +75 -0
  14. package/docs/experiments/mapped_confidence/repro_thirdparty_tol.py +83 -0
  15. package/docs/experiments/mapped_confidence/result_mapped_conf.json +215 -0
  16. package/docs/{ → hive/}/350/234/202/345/267/242/345/267/245/344/275/234/350/256/260/345/277/206_/351/241/271/347/233/256/350/256/241/345/210/222.md +14 -2
  17. package/docs/{README → mdcg/README}/350/257/246/347/273/206/347/211/210_v0.4.5.md +9 -9
  18. package/docs/{ → mdcg/}/344/270/273/344/273/243/347/220/206/345/255/220/344/273/243/347/220/206/350/256/260/345/277/206/346/236/266/346/236/204/350/256/276/350/256/241.md +1 -1
  19. 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 +261 -0
  20. package/docs/{ → mdcg/}/345/215/225/345/205/203/350/207/252/346/210/221/351/224/232/347/202/271_/347/263/273/347/273/237/346/217/220/347/244/272/350/257/215/346/240/207/345/207/206_v0.3.md +1 -1
  21. package/docs/mdcg//345/255/220/344/273/243/347/220/206/351/205/215/347/275/256/346/240/207/345/207/206_v0.4.md +148 -0
  22. package/docs/{ → mdcg/}/346/272/220/347/240/201/347/272/247/346/236/266/346/236/204/345/256/241/350/256/241_GPT/346/211/271/350/257/204/345/257/271/347/205/247_v1.0.md +2 -2
  23. package/docs/{ → mdcg/}/347/201/265/346/236/242/344/270/211/345/261/202/346/213/206/345/210/206/350/247/204/345/210/222_v0.1.md +181 -181
  24. package/docs/{ → mdcg/}/347/274/272/345/217/243/345/215/225_P0/346/224/266/345/217/243_v0.1.md +2 -2
  25. package/docs/{ → mdcg/}/350/256/244/347/237/245/345/233/276_G4-G8/347/274/272/345/217/243/350/243/201/345/256/232/345/215/225_v0.1.md +1 -1
  26. 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 +4 -4
  27. package/docs/{ → mdcg/}/350/256/260/345/277/206/346/223/215/344/275/234/347/263/273/347/273/237_MdCGOS/344/270/216MCP/346/216/245/345/205/245_v0.1.md +2 -2
  28. package/docs/plans/GridWorld/346/234/200/345/260/217/351/227/255/347/216/257/350/247/204/346/240/274_v0.1.md +176 -0
  29. package/docs/{ → swarm/}/350/234/202/347/276/244/344/272/222/350/201/224_v0.1.md +3 -3
  30. package/docs/swarm//350/234/202/347/276/244/345/220/214/351/224/231/346/243/200/346/265/213/345/256/236/351/252/214/345/215/217/350/256/256_v0.1.md +242 -0
  31. package/docs/theory//345/215/225/347/272/277/347/250/213/344/270/216/346/263/250/346/204/217/345/212/233/351/233/206/344/270/255_/346/227/240/344/272/211/350/256/256/347/220/206/350/256/272/346/226/207/346/241/243_v1.0.md +129 -0
  32. package/docs/theory//345/271/266/345/217/221/345/277/205/347/204/266/346/200/247/347/220/206/350/256/272_v0.2.md +134 -0
  33. package/docs/theory//346/246/202/345/277/265/345/210/206/345/261/202/345/257/271/351/275/220/350/241/250_v0.1.md +145 -0
  34. package/docs/{ → theory/}/347/220/206/350/256/272_/346/234/272/345/210/266_/344/273/243/347/240/201_/345/256/236/351/252/214_/347/274/272/345/217/243/347/237/251/351/230/265_v0.1.md +3 -3
  35. package/docs/{ → theory/}/347/220/206/350/256/272/344/273/223/346/213/206/345/210/206/344/270/216/347/231/275/347/256/261/347/237/245/350/257/206/345/272/223/345/206/205/350/277/201_v0.1.md +1 -1
  36. package/docs/theory//350/256/244/347/237/245/344/273/243/347/220/206/344/270/216/346/224/266/346/225/233/347/273/223/346/236/204_/346/235/241/344/273/266/350/256/272/351/207/215/346/236/204_v0.1.md +221 -0
  37. package/docs/world_model//344/270/226/347/225/214/346/250/241/345/236/213_/347/245/236/347/273/217/347/275/221/347/273/234/345/272/225/345/261/202/346/236/266/346/236/204_v1.0.md +237 -0
  38. package/docs//345/255/230/347/256/227/344/270/200/344/275/223/346/236/266/346/236/204/345/255/246/344/271/240_/345/244/226/351/203/250/347/220/206/350/256/272/345/257/271/347/205/247/344/270/216/350/267/257/347/272/277/344/272/244/346/216/245_20260916.md +98 -0
  39. package/docs//345/255/230/347/256/227/344/270/200/344/275/223/347/245/236/347/273/217/347/275/221/347/273/234/346/236/266/346/236/204_/346/200/273/347/272/262/344/270/216/344/272/244/346/216/245_20260916.md +109 -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 +34 -6
  41. package/docs//347/231/275/347/256/261/345/214/226/347/272/262/351/242/206_/344/270/211/351/241/271/347/233/256/345/255/246/344/271/240/346/200/273/346/236/266/346/236/204/344/270/216Ghidra/344/272/244/346/216/245_20260916.md +104 -0
  42. package/docs//350/256/260/345/277/206/350/257/204/345/256/241/347/263/273/347/273/237_/347/253/213/351/241/271/350/256/276/350/256/241/344/270/216/346/226/275/345/267/245/344/272/244/346/216/245_20260915.md +183 -0
  43. package/dsh/README.md +1 -1
  44. package/lib/hooks.d.ts +5 -0
  45. package/lib/hooks.js +10 -1
  46. package/lib/lib/prompt_safety.d.ts +48 -0
  47. package/lib/lib/prompt_safety.js +62 -0
  48. package/md_cg/audit.py +76 -2
  49. package/md_cg/bench_membench.py +10 -5
  50. package/md_cg/bench_progressive.py +48 -9
  51. package/md_cg/branches.py +275 -0
  52. package/md_cg/ccgc.py +884 -0
  53. package/md_cg/conformance.py +662 -0
  54. package/md_cg/consistency.py +1 -1
  55. package/md_cg/corpus.py +1 -1
  56. package/md_cg/eval_common.py +6 -5
  57. package/md_cg/forgetting.py +11 -3
  58. package/md_cg/fsutil.py +63 -1
  59. package/md_cg/identity.py +2 -2
  60. package/md_cg/insight.py +2 -2
  61. package/md_cg/lifecycle.py +262 -0
  62. package/md_cg/mcp_server.py +547 -140
  63. package/md_cg/mdcg.py +206 -18
  64. package/md_cg/mdcos.py +512 -50
  65. package/md_cg/metacognition.py +2 -2
  66. package/md_cg/mreview/__init__.py +25 -0
  67. package/md_cg/mreview/__main__.py +107 -0
  68. package/md_cg/mreview/bundle.py +170 -0
  69. package/md_cg/mreview/candidates.py +253 -0
  70. package/md_cg/mreview/govern.py +674 -0
  71. package/md_cg/mreview/locate.py +905 -0
  72. package/md_cg/mreview/pipeline.py +701 -0
  73. package/md_cg/mreview/rules/duplication.json +21 -0
  74. package/md_cg/mreview/rules/field_coverage.json +54 -0
  75. package/md_cg/mreview/rules/source_license.json +21 -0
  76. package/md_cg/mreview/rules/template_flow.json +21 -0
  77. package/md_cg/mreview/ruleset.py +238 -0
  78. package/md_cg/nodefile.py +38 -0
  79. package/md_cg/predict.py +24 -6
  80. package/md_cg/protect.py +4 -4
  81. package/md_cg/refindex.py +41 -2
  82. package/md_cg/scrub.py +5 -1
  83. package/md_cg/self_state.py +1 -1
  84. package/md_cg/semantic/en_normalizer.py +85 -25
  85. package/md_cg/sustain.py +18 -0
  86. package/md_cg/tasks.py +447 -0
  87. package/md_cg/test_action_derive.py +203 -0
  88. package/md_cg/test_audit_rotate.py +270 -0
  89. package/md_cg/test_branches.py +249 -0
  90. package/md_cg/test_ccg_perturb.py +1 -1
  91. package/md_cg/test_ccgc.py +423 -0
  92. package/md_cg/test_conformance.py +343 -0
  93. package/md_cg/test_en_pipeline.py +24 -0
  94. package/md_cg/test_health_scale.py +173 -0
  95. package/md_cg/test_identity_attribution.py +6 -0
  96. package/md_cg/test_index_durability.py +224 -0
  97. package/md_cg/test_lifecycle.py +309 -0
  98. package/md_cg/test_mr_m1.py +679 -0
  99. package/md_cg/test_mr_m2.py +587 -0
  100. package/md_cg/test_mr_m3.py +703 -0
  101. package/md_cg/test_mr_m4.py +485 -0
  102. package/md_cg/test_p1.py +1 -1
  103. package/md_cg/test_p11_consistency.py +1 -1
  104. package/md_cg/test_p12_metacognition.py +2 -2
  105. package/md_cg/test_p16_self_state.py +1 -1
  106. package/md_cg/test_p26_refindex.py +1 -1
  107. package/md_cg/test_p27_docindex.py +22 -2
  108. package/md_cg/test_p28_refcheck.py +1 -1
  109. package/md_cg/test_p29_session_ingest_export.py +1 -1
  110. package/md_cg/test_p2_mcp.py +7 -1
  111. package/md_cg/test_p38_contextualize.py +1 -1
  112. package/md_cg/test_p39_vision_evidence.py +1 -1
  113. package/md_cg/test_p40_refine_worklist.py +1 -1
  114. package/md_cg/test_p41_evolve_patrol.py +1 -1
  115. package/md_cg/test_p42_provenance.py +1 -1
  116. package/md_cg/test_p43_pooling.py +41 -13
  117. package/md_cg/test_read_clip.py +137 -0
  118. package/md_cg/test_review_conformance.py +310 -0
  119. package/md_cg/test_tasks.py +409 -0
  120. package/md_cg/test_tool_face.py +189 -0
  121. package/md_cg/test_twophase.py +286 -0
  122. package/md_cg/test_writepipe.py +210 -0
  123. package/md_cg/theory.py +1 -1
  124. package/md_cg/tokens.py +95 -5
  125. package/md_cg/tool_face.py +250 -0
  126. package/md_cg/twophase.py +221 -0
  127. package/md_cg/units.py +546 -0
  128. package/md_cg/vision_evidence.py +1 -1
  129. package/md_cg/weights.py +1 -1
  130. package/md_cg/whitebox.py +1 -1
  131. package/md_cg/whitebox_kb/data/verify_cache.json +28 -0
  132. package/md_cg/whitebox_kb/data/verify_savings.jsonl +46 -0
  133. package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +10 -10
  134. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db-shm +0 -0
  135. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db-wal +0 -0
  136. package/md_cg/writelimit.py +19 -3
  137. package/md_cg/writepipe.py +372 -0
  138. package/package.json +1 -1
  139. package/src/hooks.ts +10 -1
  140. package/src/lib/prompt_safety.ts +62 -0
  141. package/zcode/AGENTS.md +195 -185
  142. package/docs//345/212/237/350/203/275/350/260/203/347/224/250/346/230/240/345/260/204/350/241/250_v0.1.md +0 -221
  143. /package/docs/{AGI → eval/AGI}/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v1.0.md" +0 -0
  144. /package/docs/{AGI → eval/AGI}/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v2.0.md" +0 -0
  145. /package/docs/{ → eval/}/345/256/236/351/252/214/346/226/271/346/241/210_/345/255/246/344/271/240/351/227/255/347/216/257AB/344/270/216/346/250/252/350/257/204_v1.0.md" +0 -0
  146. /package/docs/{ → eval/}/346/250/252/350/257/204_/345/205/255/345/256/266100/351/242/230/344/270/255/350/213/261/345/217/214/346/237/245_v1.0.md" +0 -0
  147. /package/docs/{guardrail-charter.md → mdcg/guardrail-charter.md} +0 -0
  148. /package/docs/{lingshu_tutorial.html → mdcg/lingshu_tutorial.html} +0 -0
  149. /package/docs/{memory-assessment.html → mdcg/memory-assessment.html} +0 -0
  150. /package/docs/{memory_score.html → mdcg/memory_score.html} +0 -0
  151. /package/docs/{memory_score.png → mdcg/memory_score.png} +0 -0
  152. /package/docs/{release_v0.3.0.md → mdcg/release_v0.3.0.md} +0 -0
  153. /package/docs/{release_v0.4.5.md → mdcg/release_v0.4.5.md} +0 -0
  154. /package/docs/{tool_table_v0.3.0.md → mdcg/tool_table_v0.3.0.md} +0 -0
  155. /package/docs/{ → mdcg/}/344/273/244/347/211/214/344/270/216/350/247/222/350/211/262/346/235/203/350/201/214/345/210/206/347/246/273_v0.1.md" +0 -0
  156. /package/docs/{ → mdcg/}/347/201/265/346/236/24282/345/267/245/345/205/267_/345/212/237/350/203/275/346/225/264/347/220/206/344/270/216/350/277/201/347/247/273/346/230/240/345/260/204_v0.1.md" +0 -0
  157. /package/docs/{ → mdcg/}/347/201/265/346/236/242MCP/345/267/245/345/205/267/346/200/273/350/241/250_v3.4.md" +0 -0
  158. /package/docs/{ → mdcg/}/347/201/265/346/236/242_/350/207/252/346/210/221/345/261/202/345/256/232/344/271/211.md" +0 -0
  159. /package/docs/{ → mdcg/}/350/256/244/347/237/245/345/233/276_MD/347/233/256/345/275/225/346/226/271/346/241/210_v0.1.md" +0 -0
  160. /package/docs/{ → mdcg/}/350/256/244/347/237/245/345/233/276_/346/235/241/344/273/266/347/251/272/351/227/264/345/220/210/346/210/220/344/270/216/347/224/237/346/225/210/346/235/241/344/273/266/345/217/243/345/276/204_v0.1.md" +0 -0
  161. /package/docs/{ → mdcg/}/350/256/244/347/237/245/345/233/276/344/275/234/344/270/272/350/256/260/345/277/206/346/223/215/344/275/234/347/263/273/347/273/237_/350/257/204/344/274/260/344/270/216/350/267/257/347/272/277_v0.1.md" +0 -0
  162. /package/docs/{ → plans/}/345/221/275/345/220/215/346/262/273/347/220/206_/351/241/271/347/233/256/350/256/241/345/210/222.md" +0 -0
  163. /package/docs/{ → plans/}/347/237/245/350/257/206/345/233/276/350/260/261/351/241/271/347/233/256_/344/272/244/346/216/245/346/226/207/346/241/243_20260914.md" +0 -0
  164. /package/docs/{ → swarm/}/350/234/202/347/276/244/345/244/232/346/231/272/350/203/275/344/275/223_/344/275/277/347/224/250/346/212/245/345/221/212_20260913.md" +0 -0
  165. /package/docs/{ → swarm/}/350/234/202/347/276/244/345/244/232/346/231/272/350/203/275/344/275/223_/345/212/237/350/203/275/350/257/264/346/230/216_v0.6.md" +0 -0
  166. /package/docs/{ → swarm/}/350/234/202/347/276/244/347/233/262/345/214/272/346/240/207/350/256/260_v1.0.md" +0 -0
  167. /package/docs/{ → theory/}/344/277/241/346/201/257/345/267/256/344/270/272/344/273/200/344/271/210/345/277/205/347/204/266/345/255/230/345/234/250/344/270/224/350/207/252/347/204/266/346/211/251/345/244/247.md" +0 -0
  168. /package/docs/{ → theory/}/346/231/272/350/203/275/347/232/204/345/205/254/347/220/206/345/214/226/345/237/272/347/237/263.md" +0 -0
  169. /package/docs/{ → theory/}/346/231/272/350/203/275/347/232/204/350/256/244/347/237/245/350/277/207/347/250/213.md" +0 -0
  170. /package/docs/{ → theory/}/346/231/272/350/203/275/350/256/2723.4.md" +0 -0
  171. /package/docs/{ → theory/}/347/231/275/347/256/261/346/231/272/350/203/275/346/230/257/344/273/200/344/271/210/357/274/237.md" +0 -0
  172. /package/docs/{ → theory/}/347/231/275/347/256/261/346/231/272/350/203/275/347/263/273/345/210/227/302/267/347/254/254/344/272/224/347/257/207/357/274/232/350/256/251AI/347/234/237/346/255/243/350/243/205/344/270/212/350/256/260/345/277/206.md" +0 -0
@@ -1,221 +0,0 @@
1
- # 功能调用映射表 v0.1(功能 → 显式代码)
2
-
3
- > 目标:**任何一个功能,都能从这份文档查到它调用的是哪段代码**。
4
- > 所有调用都是显式的——没有隐式 provider、没有隐式记忆后端。
5
- >
6
- > 版本:v0.1 · 2026-09-10 · 对应改造:md_cg 唯一真源 / AEIS 降能力库 / 白箱下线 / roleplay+mutual 归 LIB。
7
-
8
- ---
9
-
10
- ## 0. 三条总原则
11
-
12
- | 原则 | 含义 | 落点 |
13
- | --- | --- | --- |
14
- | **唯一真源** | 记忆的写 / 读 / 裁决 / 留痕只有一处:md_cg 认知图 | `md_cg/` |
15
- | **能力库** | AEIS 不再存记忆,只提供能力(白箱引擎、角色生成) | 由 md_cg 显式调用 |
16
- | **显式调用** | 每个功能 = 一条写明参数的调用,可 grep 可追踪 | 本表 |
17
-
18
- ```
19
- DSH 插件 (src/)
20
- │ src/lib/mdcg_client.ts ← 插件侧唯一显式入口
21
- ▼
22
- MCP stdio:md_cg/mcp_server.py
23
- │ cg(op=...) / stg(op=...) ← 两个认知基元(kernel 面)
24
- │ mdcg_remember ← 写入工具(跳过 audit 的写入口,见 §1 注)
25
- ├──────────────► md_cg/*.py (认知图内部实现)
26
- └─ cg(op=whitebox) ─► md_cg/whitebox.py ─► AEIS 能力库(python -m aeis.mcp.server)
27
- ```
28
-
29
- ---
30
-
31
- ## 1. 认知基元 `cg`(`md_cg/mcp_server.py:_cg_call`,入口 L1058)
32
-
33
- | 功能 | 显式调用 | 代码位置 |
34
- | --- | --- | --- |
35
- | 服务信息 / 健康 | `cg(op=info)` | `mcp_server.py:1062` → `audit.kinds` |
36
- | 路由:意图→知识+建议能力 | `cg(op=route)` | `mcp_server.py:1070` → `MdCG.search` |
37
- | 读取(按 id / 召回 / 预算) | `cg(op=read)` | `mcp_server.py:1090` → `MdCG.get` / `MdCG.recall` / `MdCG.search` |
38
- | 写入(含冲突检测/闸门/**审核**) | `cg(op=write)` | `mcp_server.py:1344` → `audit.audit` + `MdCG.add` / `remember_gated` / `propose` |
39
- | **插件写入入口(跳过审核)** | `mdcg_remember` | `mcp_server.py:1691` → `MdCG.remember_gated`(gated=true)/ `MdCG.add`(gated=false) |
40
- | 目标 | `cg(op=goal)` | `mcp_server.py:1190` → `MdCG.add_goal` / `set_goal_status` / `list_goals` |
41
- | 最近记忆 | `cg(op=recent)` | `mcp_server.py:1209` → `MdCG.remember_event` / `recent_events` |
42
- | 外部裁决回填 | `cg(op=verify)` | `mcp_server.py:1221` → `MdCG.verify` |
43
- | 审核队列 | `cg(op=review)` | `mcp_server.py:1225` → `MdCG.review_*` |
44
- | 主动遗忘 / 恢复 | `cg(op=forget)` | `mcp_server.py:1241` → `MdCG.forget` / `restore` |
45
- | 保护(不可遗忘) | `cg(op=protect)` | `mcp_server.py:1247` → `_protect_call` → `md_cg/protect.py` |
46
- | 身份维度 | `cg(op=identity)` | `mcp_server.py:1250` → `_identity_call` → `md_cg/identity.py` |
47
- | 一致性检测 | `cg(op=consistency)` | `mcp_server.py:1253` → `_consistency_call` → `md_cg/consistency.py` |
48
- | 元认知 | `cg(op=metacognition)` | `mcp_server.py:1256` → `_metacognition_call` → `md_cg/metacognition.py` |
49
- | 自我状态 | `cg(op=self_state)` | `mcp_server.py:1259` → `_self_state_call` → `md_cg/self_state.py` |
50
- | 飞轮 / 自愈 | `cg(op=sustain)` | `mcp_server.py:1262` → `_sustain_call` → `md_cg/sustain.py` |
51
- | 洗脑 / 去污染 | `cg(op=scrub)` | `mcp_server.py:1265` → `_scrub_call` → `md_cg/scrub.py` |
52
- | 预测 / 因果门 | `cg(op=predict)` | `mcp_server.py:1268` → `_predict_call` → `md_cg/predict.py` |
53
- | 因果链 | `cg(op=causal)` | `mcp_server.py:1271` → `_causal_call` → `md_cg/chain.py` |
54
- | **白箱能力库** | `cg(op=whitebox)` | `mcp_server.py:1274` → `_whitebox_call` → `md_cg/whitebox.py`(见 §3) |
55
- | 代码索引 | `cg(op=index_code)` | `mcp_server.py:1277` → `md_cg/codeindex.py` |
56
-
57
- > ⚠️ **插件写入必须走 `mdcg_remember`,不能走 `cg(op=write)`**:
58
- > `cg(op=write)` 先过 `audit.audit(content_kind)`,未声明 `content_kind` 且未配置
59
- > `MDCG_POLICY_FILE` 时恒判 BLINDSPOT/DEFER —— 只进审核队列、**永不落盘**。
60
- > 实测:自动记忆走 `cg(op=write)` 时 0 篇 md 文档;改用 `mdcg_remember(gated=true)`
61
- > 后 verdict=ACCEPT、md 文档数=1、timeline/read 均命中。
62
- > `cg(op=write)` 仍保留给「需要审核留痕的显式写入」场景。
63
-
64
- ## 2. 语义时空基元 `stg`(`mcp_server.py:_stg_call`,入口 L1316)
65
-
66
- | 功能 | 显式调用 | 代码位置 |
67
- | --- | --- | --- |
68
- | 两节点关系 | `stg(op=relation)` | `mcp_server.py:1320` → `stg.relation` |
69
- | 时间线 | `stg(op=timeline)` | `mcp_server.py:1322` → `stg.timeline` |
70
- | 锚点检索 | `stg(op=anchors)` | `mcp_server.py:1326` → `stg.anchors` |
71
- | 时空一致性 | `stg(op=consistency)` | `mcp_server.py:1329` → `stg.consistency` |
72
-
73
- ## 3. 白箱能力库(`md_cg/whitebox.py`,AEIS 降为能力库后的唯一入口)
74
-
75
- 白箱 LLM provider **已下线**(不再注册 `lingshu-whitebox`);能力改由 md_cg 显式调用并留痕。
76
-
77
- | 功能 | 显式调用 | 代码位置 |
78
- | --- | --- | --- |
79
- | 统一分发 | `cg(op=whitebox, action=...)` | `mcp_server.py:1274` → `_whitebox_call`(L1306)→ `whitebox.dispatch`(`whitebox.py:387`) |
80
- | 白箱问答 | `action=ask` | `whitebox.py:322 ask` → `WhiteboxClient.ask`(`whitebox.py:185`)→ 能力库 `wisdom_chat` |
81
- | 白箱编码 | `action=remember` | `whitebox.py:334 remember` → `WhiteboxClient.remember`(`whitebox.py:194`)→ 能力库 `remember` |
82
- | **验证编码能力** | `action=verify_encoding` | `whitebox.py:234 verify_encoding`:写入口令→追问命中 |
83
- | **验证已有知识回答能力** | `action=verify_existing` | `whitebox.py:266 verify_existing`:探针问题 route=self 且非空 |
84
- | 连通性探测 | `action=ping` | `whitebox.py:300 ping` |
85
- | 验证报告 | `action=report` | `whitebox.py:366 report`(self 层留痕汇总) |
86
- | 留痕 | — | `whitebox.py:350 _record` → `cg.add(layer=self, tags=['whitebox:verify'], verification_basis='test')` |
87
-
88
- > 细粒度工具别名:`mdcg_whitebox`(`mcp_server.py:1345`)与 `cg(op=whitebox)` 等价。
89
- > 启动命令可由 `MDCG_WHITEBOX_CMD` / `MDCG_WHITEBOX_ARGS` / `MDCG_WHITEBOX_TIMEOUT` 覆盖(`whitebox.py:61`)。
90
-
91
- ## 4. 插件侧 LIB 本地库(`src/lib/`)
92
-
93
- ### 4.1 `mdcg_client.ts` —— 插件调用认知图的唯一显式入口
94
-
95
- | 插件方法 | 映射到 | 说明 |
96
- | --- | --- | --- |
97
- | `cg(args)` / `stg(args)` | MCP `cg` / `stg` | 逃生口,显式传参 |
98
- | `route(intent)` | `cg(op=route)` | 意图 → 知识 + 建议能力 |
99
- | `read(query)` / `get(nodeId)` | `cg(op=read)` | 语义召回 / 按 id 取 |
100
- | `write(content, extra)` | MCP `mdcg_remember`(gated=false) | 直写 `MdCG.add`;角色 / 转录 / 导入复用 |
101
- | `remember(content, extra)` | MCP `mdcg_remember`(gated=true, layer=contextual) | 记忆沉淀 + 主动遗忘闸门 |
102
- | `recall(query, k)` | `cg(op=read, query, k)` | 语义召回;读取记 access log(复用观测) |
103
- | `verify(nodeId, evidence, verdict)` | `cg(op=verify)` | 外部裁决回填 |
104
- | `recent(limit)` | `cg(op=recent)` | 近期事件窗口 |
105
- | `timeline(limit)` | `stg(op=timeline)` | 最近记忆时间线(自动召回注入用) |
106
- | `identity(subjectId)` | `cg(op=identity)` | 身份维度读取 |
107
- | `whitebox(action, extra)` | `cg(op=whitebox)` | 白箱能力验证 |
108
- | `serviceInfo()` | `cg(op=info)` | 服务信息 |
109
- | `verifyClaim(claim)` | `cg(op=read)` + 依据强度判定 | 互维 memory 通道 |
110
- | `writeRole(roleId, content)` | `mdcg_remember(layer=knowledge)` | 角色定义落图 |
111
- | `writeTranscript(roleId, sid, who, text)` | `mdcg_remember(layer=contextual)` | 对话转录落图 |
112
-
113
- 身份注入:`MDCG_ROOT / MDCG_TENANT / MDCG_CLEARANCE / MDCG_ACTOR / MDCG_IDENTITY`
114
- (`mdcg_client.ts` 构造器)。**写入还需凭据**:`MDCG_TOKEN`(推荐)或
115
- `MDCG_LEGACY_ENV_AUTH=1`(兼容旧部署)——**两者都不设即默认状态**:只读 guest
116
- (读 / 召回 / 时间线可用,写入全失败、不落盘)。
117
-
118
- ### 4.2 `roleplay_web.ts` —— 角色扮演网页(LIB 本地库)
119
-
120
- | 功能 | 显式调用 | 代码位置 |
121
- | --- | --- | --- |
122
- | 对话生成 | 能力库 `roleplay_chat` | `roleplay_web.ts:765` |
123
- | 用户发言落图 | `MdcgClient.writeTranscript(role, cid, 'user', msg)` | `roleplay_web.ts:765` → `mdcg_remember` |
124
- | 角色回复落图 | `MdcgClient.writeTranscript(role, cid, 'assistant', reply)` | `roleplay_web.ts:784` → `mdcg_remember` |
125
- | 新建角色 | 能力库 `role_create` + `MdcgClient.writeRole` | `roleplay_web.ts:848` / `851` |
126
- | 导入记忆/锚点/价值观 | 能力库 `role_import` + `MdcgClient.write`(三导入→knowledge/self/structural) | `roleplay_web.ts:681` / `692` |
127
- | 落图开关 | `toGraph(label, fn)`(未就绪静默跳过,失败仅告警) | `roleplay_web.ts:451` |
128
-
129
- ### 4.3 `mutual.ts` —— 互维维护(LIB 本地库)
130
-
131
- | 功能 | 显式调用 | 代码位置 |
132
- | --- | --- | --- |
133
- | memory 通道核验 | `MdcgClient.verifyClaim`(注入),未就绪回退能力库 `wisdom_verify` | `index.ts:274` |
134
- | 复核通道 | 能力库 `think`(DeepSeek 独立复核) | `index.ts:296` |
135
- | 双通道合并裁决 | `combineVerdict` | `mutual.ts:236` |
136
- | 任务处理 | `processTask` → `whiteboxVerify` + `llmReview` | `mutual.ts:267` |
137
- | 心跳 / 任务扫描 | `writeHeartbeat` / `scanTasks` | `mutual.ts`(默认导出 L406) |
138
-
139
- ### 4.4 `whitebox_llm.ts` —— 白箱 LLM 适配器(**已下线,保留为本地库**)
140
-
141
- - 不再被 `src/index.ts` 安装 → DSH 设置页无 `lingshu-whitebox` provider。
142
- - 保留原因:未来成熟后恢复;或作为库复用 `isCardFormat()` 等纯函数。
143
- - 白箱能力验证改走 §3 的 `cg(op=whitebox)`。
144
-
145
- ## 5. 数据迁移
146
-
147
- | 功能 | 显式命令 | 代码位置 |
148
- | --- | --- | --- |
149
- | AEIS(sqlite)→ 认知图 | `python -m md_cg.migrate_aeis --db <sqlite> --root <md_root>` | `md_cg/migrate_aeis.py:migrate` |
150
- | 角色扮演 + 互维 → 认知图 | `python -m md_cg.migrate_roleplay --data-dir <roleplay_data> --root <md_root> [--mutual-dir <~/.lingxu_net>]` | `md_cg/migrate_roleplay.py:migrate` |
151
-
152
- `migrate_roleplay` 的映射:
153
-
154
- | 源 | 目标层 | node_id |
155
- | --- | --- | --- |
156
- | `roleplay/_roles.json` 角色 | knowledge | `roleplay_role_<id>` |
157
- | `*_items`(memory / anchors / values) | knowledge / self / structural | `roleplay_<role>_<kind>_<i>` |
158
- | `transcripts/<role>__<cid>.jsonl` 每轮 | contextual | `roleplay_turn_<role>_<cid>_<idx>` |
159
- | 互维 `result-<id>.json` / `task-<id>.json` | contextual | `mutual_task_<id>` |
160
-
161
- 验证:P18 `python -m md_cg.test_p18_whitebox`;P19 `python -m md_cg.test_p19_migrate_roleplay`。
162
-
163
- ## 6. 配置项 → 生效位置
164
-
165
- | 配置 | 默认 | 生效位置 |
166
- | --- | --- | --- |
167
- | `mdcg.enabled` | true | `index.ts:189` 是否启动认知图子进程 |
168
- | `mdcg.root` | `data/mdcg` | `MDCG_ROOT` → `mdcg_client.ts:81` |
169
- | `mdcg.actor` | `dsh-memory` | `MDCG_ACTOR`;**须与迁移 `--actor` 一致** |
170
- | `mdcg.tenant` | `default` | `MDCG_TENANT`;**须与迁移 `--tenant` 一致** |
171
- | `mdcg.clearance` | `private` | `MDCG_CLEARANCE`;决定能读写的密级上限 |
172
- | `env.MDCG_TOKEN` | **无(写权限默认关闭)** | 认知图写入凭据。签发:`python -m md_cg.tokens issue --role designer --actor dsh-memory --clearance internal --ops-allow … --layers-allow …`(`--ops-allow` / `--layers-allow` 只能收窄,`--role recorder` 为最小权限版) |
173
- | `env.MDCG_LEGACY_ENV_AUTH` | 无 | 兼容旧部署的 env 直连身份(`recorder`);与 `MDCG_TOKEN` 都不设 → 只读 `guest` |
174
- | `env.MDCG_CAN_ADMIN` | 无 | 配合 legacy auth:`'1'` → `designer`(可写 `self` 层,角色 anchors 导入需要) |
175
-
176
- **写权限默认关闭**:不配凭据时插件以只读 `guest` 运行——读 / 召回 / 时间线
177
- 照常,写入不落盘(`index.ts` 启动告警)。是否打开由用户决定。三种身份的
178
- 实际覆盖(用 `_probe_token.py` 对真实 MCP 进程实测):
179
-
180
- | 调用点 | `guest`(默认) | `record`(最小权限) | `designer`(收窄版) |
181
- | --- | --- | --- | --- |
182
- | `route` / `read` / `recall` / `recent` / `stg(op=timeline)` | ✓ | ✓ | ✓ |
183
- | `cg(op=whitebox)` | ✓ | ✗ | ✓ |
184
- | `cg(op=goal)` | ✗ | ✓ | ✓ |
185
- | `cg(op=identity)` / `cg(op=verify)` | ✗ | ✗ | ✓ |
186
- | `mdcg_remember` → contextual / knowledge / structural | ✗ | ✓ | ✓ |
187
- | `mdcg_remember` → self(角色 anchors 导入) | ✗ | ✗ | ✓ |
188
- | 管理类(`forget` / `restore` / `review_decide`) | ✗ | ✗ | ✗(收窄后不留) |
189
- | `mutual.enabled` | false | `index.ts:256` 是否启动互维维护 |
190
- | `MDCG_MCP_SURFACE` | `kernel` | `mcp_server.py`:kernel 仅 `cg`/`stg`,full 另含 29 个细粒度工具 |
191
-
192
- ## 7. 关键约定
193
-
194
- 1. **身份绑定加密**:私有内容按 `(tenant, actor)` 派生 DEK;换身份读同一节点 = 「不可读即不存在」。
195
- 故迁移脚本 `--tenant/--actor` 必须与插件 `config.mdcg.tenant/actor` 一致。
196
- 2. **依据强度**:`verification_basis` 取值限 `compiler | test | measurement | formal_proof | data | other`;
197
- 互维判定视前五者为「强依据」(`mdcg_client.ts:56`)。
198
- 3. **失败降级**:认知图未就绪时,互维回退能力库 `wisdom_verify`(`index.ts:274`);
199
- 角色扮演落图失败仅告警,不阻断对话(`roleplay_web.ts:446`)。
200
- 4. **写权限 fail-closed 且默认关闭**:md_cg 无 `MDCG_TOKEN` / `MDCG_LEGACY_ENV_AUTH=1`
201
- 时降级为只读 `guest`——`route`/`read`/`recall`/`timeline` 正常(自动召回不受影响),
202
- 但 `mdcg_remember` 全部 `AccessDenied`、不落盘。**默认即此状态**,打开写权限由用户
203
- 自行决定;插件不代为注入凭据,只在启动时告警(`index.ts`),避免「看起来在记忆、
204
- 其实没落盘」。写 `self` 层(角色 anchors 导入)须 `designer`
205
- (`MDCG_CAN_ADMIN=1` 或收窄版 designer 令牌)。
206
- 5. **写入通道唯一**:所有插件写入经 `mdcg_remember`;`cg(op=write)` 会走 audit
207
- (未声明 `content_kind` 时永不落盘),仅供需要审核留痕的显式调用。
208
- 6. **stdio 一律 UTF-8**:`MdcgClient` 构造子进程时强制 `PYTHONIOENCODING=utf-8`。
209
- Windows 下 piped Python 默认 `gbk` + `surrogateescape`,Node 写的 UTF-8 中文会被
210
- 解成孤立代理字符(`\udcXX`)→ md_cg 落盘/回写 `UnicodeEncodeError`,**中文记忆
211
- 全部失败**。md_cg 自带测试(`test_p2_mcp.py`)与 `test/bridge.test.ts` 均以该
212
- 环境变量启动,客户端此前漏设。
213
-
214
- ## 8. 变更记录
215
-
216
- | 日期 | 变更 |
217
- | --- | --- |
218
- | 2026-09-10 | md_cg 定为唯一真源;AEIS 降能力库;白箱 provider 下线(保留本地库)+ 新增 `cg(op=whitebox)` 验证通道;roleplay/mutual 迁入 `src/lib` 并改用认知图;新增 `migrate_roleplay.py` 与 P18/P19 测试。 |
219
- | 2026-09-10 | **写入通道修正**:插件写入由 `cg(op=write)` 改为 MCP `mdcg_remember`(`cg(op=write)` 过 audit,未声明 content_kind 时永不落盘);自动记忆改用 `mdcg_remember(gated=true)`,实测 ACCEPT + md 落盘 + timeline/read 命中。补写入凭据(`MDCG_TOKEN` / `MDCG_LEGACY_ENV_AUTH`)与启动期告警。 |
220
- | 2026-09-10 | **stdio 编码修正**:`MdcgClient` 子进程强制 `PYTHONIOENCODING=utf-8`。此前 Windows 下 gbk/surrogateescape 解码导致中文内容 `UnicodeEncodeError`,中文记忆无法落盘(实测真实桥 E2E 复现并修复)。 |
221
- | 2026-09-10 | **写权限改为「默认关闭 + 令牌化」**:`MDCG_TOKEN` 取代 `MDCG_LEGACY_ENV_AUTH` 成为推荐路径,示例配置一律注释掉(由用户决定是否打开);`md_cg/tokens.py` 的 `issue` 子命令补齐 `--ops-allow` / `--layers-allow`(对齐 Python API 已有的收窄能力)。三种身份的实际覆盖矩阵见 §6。 |