@furongjun1999/dsh-memory 0.4.8 → 0.4.10

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 (232) hide show
  1. package/README.md +54 -26
  2. package/codebuddy/CODEBUDDY.md +196 -195
  3. package/codebuddy/README.md +13 -1
  4. package/codebuddy/mcp.json +9 -0
  5. package/docs/GBrain/345/217/257/345/200/237/351/211/264/347/202/271_/347/201/265/346/236/242/350/220/275/347/202/271/344/272/244/346/216/245_20260919.md +169 -0
  6. package/docs/README.md +1 -1
  7. package/docs/discipline/harnesses.yaml +18 -7
  8. package/docs/discipline/templates/full.md.tmpl +4 -3
  9. package/docs/experiments/linkref_backfill/candidates_20260917.json +726 -0
  10. package/docs/experiments/linkref_backfill/candidates_internal_20260917.json +602 -0
  11. package/docs/experiments/linkref_backfill/candidates_internal_v2.json +603 -0
  12. package/docs/experiments/linkref_backfill/candidates_secret_20260917.json +884 -0
  13. package/docs/experiments/linkref_backfill/candidates_secret_v2.json +789 -0
  14. package/docs/hive//345/244/232/347/253/257harness/351/200/232/344/277/241/345/245/221/347/272/246_v0.1.md +42 -0
  15. package/docs/hive//346/243/200/347/264/242/346/224/266/346/225/233/345/256/236/346/265/213/344/270/216S1b/350/256/276/350/256/241_v0.1.md +43 -0
  16. 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 +102 -0
  17. package/docs/hive//347/234/237/345/256/236/345/272/223/347/253/257/345/210/260/347/253/257/345/256/236/346/265/213_S1b/344/270/216/345/217/254/345/233/236/346/235/203/350/241/241_v0.1.md +57 -0
  18. package/docs/hive//347/234/237/345/256/236/345/272/223/347/253/257/345/210/260/347/253/257/345/256/236/346/265/213_S7/345/200/222/346/216/222/345/200/231/351/200/211/345/261/202_v0.1.md +126 -0
  19. package/docs/hive//350/234/202/345/267/242/345/217/214/345/256/236/344/276/213/344/272/222/351/252/214_/350/256/276/350/256/241/345/256/232/347/250/277.md +503 -0
  20. package/docs/mdcg/D_meta_/345/267/245/347/250/213/345/214/226/346/226/271/346/241/210_v0.2.md +216 -0
  21. package/docs/mdcg/README/350/257/246/347/273/206/347/211/210_v0.4.5.md +631 -625
  22. package/docs/mdcg//344/273/243/347/240/201/350/257/204/345/256/241/344/270/216/346/235/241/344/273/266/345/214/226/346/263/250/351/207/212_/345/245/221/347/272/246_v0.1.md +82 -0
  23. package/docs/mdcg//345/205/250/345/272/223/344/273/243/347/240/201/350/257/204/345/256/241/344/270/216/346/235/241/344/273/266/345/214/226/346/263/250/351/207/212_/350/256/241/345/210/222_v0.1.md +600 -0
  24. 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 +47 -45
  25. 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 → 206_v0.5.md} +92 -4
  26. 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 +172 -0
  27. package/docs/mdcg//347/216/257/344/272/214_/347/231/275/347/256/261/345/241/253/345/205/205/346/265/201/346/260/264/347/272/277_v0.1.md +31 -0
  28. package/docs/mdcg//350/267/250/347/253/257/351/252/214/350/257/201/344/270/216/345/220/214/346/255/245/345/215/217/350/256/256_v0.1.md +93 -0
  29. 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 +2 -2
  30. 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
  31. 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 +2 -2
  32. 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 +434 -433
  33. package/docs//347/201/265/346/236/242/350/207/252/346/210/221/346/224/271/350/277/233/345/267/245/344/275/234/350/256/241/345/210/222_/345/244/226/351/203/250/347/240/224/347/251/266/347/263/273/345/210/227/345/220/270/346/224/266_v1_20260919.md +286 -0
  34. package/dsh/README.md +33 -0
  35. package/dsh/cordis.yml.example +13 -7
  36. package/dsh/hive-mcp-probe.mjs +94 -0
  37. package/dsh/hive-mcp.example.yml +62 -0
  38. package/dsh/update-lingshu.bat +11 -0
  39. package/dsh/update-lingshu.ps1 +337 -0
  40. package/lib/hooks.d.ts +3 -0
  41. package/lib/hooks.js +17 -23
  42. package/lib/index.d.ts +4 -2
  43. package/lib/index.js +29 -6
  44. package/lib/lib/datapath.d.ts +76 -1
  45. package/lib/lib/datapath.js +199 -13
  46. package/lib/lib/mdcg_client.d.ts +40 -3
  47. package/lib/lib/mdcg_client.js +46 -22
  48. package/lib/lib/mutual.js +4 -4
  49. package/lib/lib/token_store.js +4 -5
  50. package/md_cg/audit.py +17 -2
  51. package/md_cg/autonomy.py +86 -15
  52. package/md_cg/backfill.py +36 -1
  53. package/md_cg/backfill_bigdomain.py +34 -0
  54. package/md_cg/bench6_arms.py +28 -1
  55. package/md_cg/bench6_common.py +10 -1
  56. package/md_cg/bench6_competitors.py +6 -1
  57. package/md_cg/bench_axis_domain.py +9 -1
  58. package/md_cg/bench_blind_comp.py +7 -1
  59. package/md_cg/bench_en_atoms_public.py +9 -0
  60. package/md_cg/bench_governance.py +348 -0
  61. package/md_cg/bench_lme_zh.py +16 -1
  62. package/md_cg/bench_locomo.py +2 -1
  63. package/md_cg/bench_locomo_zh.py +16 -1
  64. package/md_cg/bench_locomo_zh_public.py +4 -1
  65. package/md_cg/bench_longmem.py +2 -1
  66. package/md_cg/bench_membench.py +27 -1
  67. package/md_cg/bench_p0.py +4 -1
  68. package/md_cg/bench_progressive.py +13 -1
  69. package/md_cg/bench_role_views.py +238 -0
  70. package/md_cg/bench_task_ab.py +8 -1
  71. package/md_cg/bench_task_ab_llm.py +13 -1
  72. package/md_cg/bench_unified_en.py +6 -1
  73. package/md_cg/bench_zh_mad.py +20 -1
  74. package/md_cg/blindspot_tickets.py +123 -0
  75. package/md_cg/branches.py +12 -1
  76. package/md_cg/build_postings.py +73 -0
  77. package/md_cg/ccgc.py +67 -2
  78. package/md_cg/census.py +5 -1
  79. package/md_cg/chain.py +24 -3
  80. package/md_cg/codeindex.py +134 -17
  81. package/md_cg/coldverify.py +265 -0
  82. package/md_cg/comment_gate.py +338 -0
  83. package/md_cg/cond_compose.py +190 -0
  84. package/md_cg/cond_facts.py +155 -0
  85. package/md_cg/cond_template.json +107 -0
  86. package/md_cg/condition_anchor.py +143 -0
  87. package/md_cg/conformance.py +69 -4
  88. package/md_cg/consistency.py +24 -1
  89. package/md_cg/consolidate.py +53 -2
  90. package/md_cg/corpus.py +4 -0
  91. package/md_cg/crosscheck.py +42 -2
  92. package/md_cg/crypto.py +35 -1
  93. package/md_cg/d_meta.py +310 -0
  94. package/md_cg/datapath.py +201 -26
  95. package/md_cg/docindex.py +122 -1
  96. package/md_cg/eval_common.py +29 -1
  97. package/md_cg/evidence.py +27 -1
  98. package/md_cg/evolution.py +21 -1
  99. package/md_cg/export.py +11 -1
  100. package/md_cg/forgetting.py +23 -1
  101. package/md_cg/fsutil.py +18 -1
  102. package/md_cg/hotcache.py +214 -0
  103. package/md_cg/hyperedge.py +251 -0
  104. package/md_cg/identity.py +18 -1
  105. package/md_cg/insight.py +17 -1
  106. package/md_cg/lexicon/build_cedict_en_zh.py +9 -0
  107. package/md_cg/lexicon/build_standard_en.py +171 -168
  108. package/md_cg/lexicon/expand_en_zh.py +6 -0
  109. package/md_cg/lifecycle.py +12 -1
  110. package/md_cg/linkref.py +281 -0
  111. package/md_cg/links.py +29 -1
  112. package/md_cg/mcp_server.py +362 -43
  113. package/md_cg/md_whitebox.py +53 -1
  114. package/md_cg/mdcg.py +1003 -27
  115. package/md_cg/mdcos.py +558 -36
  116. package/md_cg/metacognition.py +37 -2
  117. package/md_cg/migrate.py +4 -0
  118. package/md_cg/migrate_aeis.py +221 -213
  119. package/md_cg/migrate_roleplay.py +8 -0
  120. package/md_cg/migrate_wisdom_graph.py +14 -1
  121. package/md_cg/mreview/__main__.py +3 -0
  122. package/md_cg/mreview/bundle.py +8 -0
  123. package/md_cg/mreview/candidates.py +9 -0
  124. package/md_cg/mreview/govern.py +21 -1
  125. package/md_cg/mreview/locate.py +34 -0
  126. package/md_cg/mreview/pipeline.py +29 -1
  127. package/md_cg/mreview/ruleset.py +16 -1
  128. package/md_cg/nodefile.py +233 -3
  129. package/md_cg/pooling.py +23 -1
  130. package/md_cg/postings.py +298 -0
  131. package/md_cg/predict.py +89 -9
  132. package/md_cg/progressive.py +3 -0
  133. package/md_cg/protect.py +14 -1
  134. package/md_cg/protocol.py +372 -0
  135. package/md_cg/provenance.py +262 -0
  136. package/md_cg/reach.py +453 -0
  137. package/md_cg/refindex.py +47 -2
  138. package/md_cg/refine.py +20 -1
  139. package/md_cg/roleviews.py +89 -0
  140. package/md_cg/routing.py +76 -0
  141. package/md_cg/scrub.py +63 -2
  142. package/md_cg/security.py +26 -1
  143. package/md_cg/self_state.py +64 -1
  144. package/md_cg/selfreport.py +151 -0
  145. package/md_cg/semantic/canonical.py +5 -0
  146. package/md_cg/semantic/en_normalizer.py +364 -355
  147. package/md_cg/semantic/zh_en_atoms.py +139 -136
  148. package/md_cg/signer.py +41 -1
  149. package/md_cg/sources.py +583 -547
  150. package/md_cg/statushdr.py +179 -0
  151. package/md_cg/stg.py +59 -18
  152. package/md_cg/subgraph.py +23 -0
  153. package/md_cg/sustain.py +56 -1
  154. package/md_cg/tasks.py +26 -2
  155. package/md_cg/test_autonomy.py +26 -0
  156. package/md_cg/test_bench_governance.py +102 -0
  157. package/md_cg/test_blindspot_tickets.py +166 -0
  158. package/md_cg/test_ccgc.py +10 -0
  159. package/md_cg/test_codeindex.py +338 -0
  160. package/md_cg/test_comment_gate.py +187 -0
  161. package/md_cg/test_cond_compose_anchors.py +76 -0
  162. package/md_cg/test_condition_anchor.py +82 -0
  163. package/md_cg/test_d_meta.py +412 -0
  164. package/md_cg/test_datapath_root.py +188 -0
  165. package/md_cg/test_gain_gate.py +47 -1
  166. package/md_cg/test_hot_cold.py +187 -0
  167. package/md_cg/test_hyperedge.py +245 -0
  168. package/md_cg/test_linkref.py +306 -0
  169. package/md_cg/test_md_access_parity.py +15 -3
  170. package/md_cg/test_mr_m1.py +108 -18
  171. package/md_cg/test_mr_m3.py +8 -1
  172. package/md_cg/test_p26_refindex.py +49 -20
  173. package/md_cg/test_p27_docindex.py +236 -2
  174. package/md_cg/test_p2_mcp.py +1 -1
  175. package/md_cg/test_p31_insight.py +24 -0
  176. package/md_cg/test_p44_md_whitebox.py +14 -1
  177. package/md_cg/test_protocol.py +243 -0
  178. package/md_cg/test_reach.py +378 -0
  179. package/md_cg/test_reach_keys.py +201 -0
  180. package/md_cg/test_reach_meta_exits.py +145 -0
  181. package/md_cg/test_read_clip.py +8 -4
  182. package/md_cg/test_retr_s1.py +340 -0
  183. package/md_cg/test_retr_s1b.py +209 -0
  184. package/md_cg/test_retr_s3.py +194 -0
  185. package/md_cg/test_retr_s4.py +163 -0
  186. package/md_cg/test_retr_s5.py +200 -0
  187. package/md_cg/test_retr_s6.py +157 -0
  188. package/md_cg/test_retr_s7.py +385 -0
  189. package/md_cg/test_retr_s8_time.py +316 -0
  190. package/md_cg/test_retr_s9_edges.py +286 -0
  191. package/md_cg/test_retr_s9_entity_ctx.py +175 -0
  192. package/md_cg/test_review_conformance.py +59 -2
  193. package/md_cg/test_role_views.py +354 -0
  194. package/md_cg/test_subproc_encoding.py +188 -0
  195. package/md_cg/test_trust.py +361 -0
  196. package/md_cg/test_units_poll.py +71 -0
  197. package/md_cg/test_v14_fixes.py +397 -0
  198. package/md_cg/test_validity_filter.py +280 -0
  199. package/md_cg/test_wisdom_md_store.py +7 -3
  200. package/md_cg/test_writepipe.py +5 -1
  201. package/md_cg/theory.py +16 -1
  202. package/md_cg/tokens.py +40 -8
  203. package/md_cg/tool_face.py +13 -2
  204. package/md_cg/trust.py +943 -0
  205. package/md_cg/twophase.py +12 -1
  206. package/md_cg/units.py +132 -10
  207. package/md_cg/vision_evidence.py +24 -1
  208. package/md_cg/weights.py +24 -1
  209. package/md_cg/whitebox.py +32 -1
  210. package/md_cg/whitebox_kb/data/verify_cache.json +21210 -365
  211. package/md_cg/whitebox_kb/data/verify_savings.jsonl +5078 -0
  212. package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +10 -10
  213. package/md_cg/whitebox_kb/wisdom/code_compose.py +113 -6
  214. package/md_cg/whitebox_kb/wisdom/code_solidified.json +1 -1
  215. package/md_cg/whitebox_kb/wisdom/verifier.py +340 -55
  216. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db +0 -0
  217. package/md_cg/writelimit.py +18 -4
  218. package/md_cg/writepipe.py +178 -7
  219. package/package.json +2 -2
  220. package/skills/skills/designer-perspective/scripts/__pycache__/designer.cpython-310.pyc +0 -0
  221. package/skills/skills/designer-perspective/scripts/designer.py +17 -1
  222. package/skills/skills/designer-perspective/tests/selftest.py +3 -1
  223. package/src/hooks.ts +17 -21
  224. package/src/index.ts +33 -6
  225. package/src/lib/datapath.ts +211 -13
  226. package/src/lib/mdcg_client.ts +64 -25
  227. package/src/lib/mutual.ts +411 -411
  228. package/src/lib/token_store.ts +4 -5
  229. package/zcode/AGENTS.md +196 -195
  230. package/zcode/README.md +4 -0
  231. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db-shm +0 -0
  232. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db-wal +0 -0
@@ -61,6 +61,7 @@ BINS = ((0.0, 0.4), (0.4, 0.6), (0.6, 0.8), (0.8, 1.01))
61
61
  # 基础工具
62
62
  # --------------------------------------------------------------------------
63
63
 
64
+ # 生效条件:形参 d2 与模块常量 D2_EMOTION 比较——d2 > D2_EMOTION 返回 "avoiding",d2 < -D2_EMOTION 返回 "approaching",其余(含 |d2| 不超过阈值)返回 "stable";
64
65
  def _emotion(d2: float) -> str:
65
66
  """情绪:d²D/dt² 的符号(智能论 §十一)。"""
66
67
  if d2 > D2_EMOTION:
@@ -70,12 +71,14 @@ def _emotion(d2: float) -> str:
70
71
  return "stable"
71
72
 
72
73
 
74
+ # 生效条件:形参 q 经 str(q or "") 小写并仅保留字母数字字符得到 s 后,s[:n](n 默认 16,n 为 0 等使前缀为空的取值时前缀为空串)非空则返回该前缀,否则(q 为假值、无字母数字字符或 n 为 0)返回 "(empty)";
73
75
  def _key(q, n: int = 16) -> str:
74
76
  """查询归一化键(用于盲区聚合 / 相似匹配)。"""
75
77
  s = "".join(ch for ch in str(q or "").lower() if ch.isalnum())
76
78
  return s[:n] or "(empty)"
77
79
 
78
80
 
81
+ # 生效条件:形参 s 经 str(s or "") 并剔除 strip() 为空的字符后长度为 0 时返回 set(),长度为 1 时返回 {s},长度 ≥2 时返回 {s[i:i+2] for i in range(len(s)-1)};
79
82
  def _bigrams(s) -> set:
80
83
  s = "".join(ch for ch in str(s or "") if ch.strip())
81
84
  if len(s) < 2:
@@ -83,6 +86,7 @@ def _bigrams(s) -> set:
83
86
  return {s[i:i + 2] for i in range(len(s) - 1)}
84
87
 
85
88
 
89
+ # 生效条件:形参 a、b 经 _bigrams 处理后任一结果为空集(如 a 或 b 为空、仅含空白字符)时返回 0.0,否则返回两集合交集大小除以并集大小;
86
90
  def _jaccard(a, b) -> float:
87
91
  A, B = _bigrams(a), _bigrams(b)
88
92
  if not A or not B:
@@ -90,6 +94,7 @@ def _jaccard(a, b) -> float:
90
94
  return len(A & B) / len(A | B)
91
95
 
92
96
 
97
+ # 生效条件:形参 rec 被复制并 setdefault("t", time.time()) 后,向 os.path.join(cg.root, LOG_FILE) 追加写入抛 OSError 时静默跳过,两类情形均返回补过 t 的 rec 副本;
93
98
  def _log(cg, rec: dict) -> dict:
94
99
  """独立留痕(append-only)。失败不阻塞主流程。"""
95
100
  rec = dict(rec)
@@ -101,16 +106,19 @@ def _log(cg, rec: dict) -> dict:
101
106
  return rec
102
107
 
103
108
 
109
+ # 生效条件:形参 cg 的 reflection_log 属性缺失或为假值时回落到 os.path.join(cg.root, "_reflection.jsonl"),返回该路径 read_jsonl 结果的 list;
104
110
  def _reflections(cg) -> list:
105
111
  path = getattr(cg, "reflection_log", "") or os.path.join(
106
112
  cg.root, "_reflection.jsonl")
107
113
  return list(read_jsonl(path))
108
114
 
109
115
 
116
+ # 生效条件:形参 cg 的 index 属性缺失或为假值、或其 "nodes" 键缺失、或该键值为假值(如空 dict)时返回 {},否则返回该 "nodes" 值;
110
117
  def _nodes(cg) -> dict:
111
118
  return (getattr(cg, "index", None) or {}).get("nodes") or {}
112
119
 
113
120
 
121
+ # 生效条件:形参 cg 的 get(nid) 为假值、或其结果缺 "frontmatter" 键、或该键值为假值时返回 {},否则返回该 node 的 frontmatter;
114
122
  def _fm(cg, nid) -> dict:
115
123
  node = cg.get(nid) or {}
116
124
  return node.get("frontmatter") or {}
@@ -120,6 +128,7 @@ def _fm(cg, nid) -> dict:
120
128
  # 观测面 1:信息差轨迹(D / dD / d²D)
121
129
  # --------------------------------------------------------------------------
122
130
 
131
+ # 生效条件:形参 cg 的反思留痕中不存在 d_curr 为 int/float 的记录时返回 ok=False/insufficient_data/n=0;否则按 window(默认 50,window 为假值 0 时取全部记录)截取尾部计算,返回 ok=True 及 d_current、d1、由 d1 与 ±0.01 判定的 trend(converging/diverging/flat)等字段;
123
132
  def trace(cg, window: int = 50) -> dict:
124
133
  """信息差轨迹:D(t) → dD/dt(方向)→ d²D/dt²(情绪)。
125
134
 
@@ -164,6 +173,7 @@ def trace(cg, window: int = 50) -> dict:
164
173
  # 观测面 2:自信校准(期望正确率 vs 实际验证通过率)
165
174
  # --------------------------------------------------------------------------
166
175
 
176
+ # 生效条件:形参 cg 的 index.nodes 中满足 evidence_count>0 且 frontmatter 的正例+负例>0 的节点计数 used,在 used >= int(max_scan)(默认 2000,max_scan 为 0 时立即 break 使 used=0)时截断——used 为 0 返回 ok=False/insufficient_data,否则按 used 与常量 MIN_SAMPLES、期望减实际的 gap 与 GAP_OVERCONFIDENT/GAP_UNDERCONFIDENT 判定 verdict(insufficient_data/overconfident/underconfident/calibrated);
167
177
  def calibration(cg, max_scan: int = 2000) -> dict:
168
178
  """自信校准:我说的可信吗?
169
179
 
@@ -245,6 +255,7 @@ def calibration(cg, max_scan: int = 2000) -> dict:
245
255
  # 观测面 3:盲区地图(我知道我不知道什么)
246
256
  # --------------------------------------------------------------------------
247
257
 
258
+ # 生效条件:形参 cg 的反思留痕按 window(默认 200,window 为 0 时切片 [0:] 取全部)截尾,聚合其中 BLINDSPOT/DEFER 计数非零且 query 非空的记录(计数转换失败则跳过该条);返回 ok=True,items 与 unresolved 各取前 int(limit)(limit 默认 20,limit 为 0 时两项均为空列表),unresolved_count 为未截断的完整计数;
248
259
  def blindspots(cg, limit: int = 20, window: int = 200) -> dict:
249
260
  """盲区地图:反复 BLINDSPOT / DEFER 的查询邻域 + 未解问题清单。
250
261
 
@@ -292,12 +303,14 @@ def blindspots(cg, limit: int = 20, window: int = 200) -> dict:
292
303
  # 观测面 4:信任(P_gap / P_trust / 情感)
293
304
  # --------------------------------------------------------------------------
294
305
 
306
+ # 生效条件:形参 events 为假值(空容器)时返回 0.0,否则返回其中等于 "confirmed" 的元素个数除以 events 长度;
295
307
  def _rate(events) -> float:
296
308
  if not events:
297
309
  return 0.0
298
310
  return sum(1 for v in events if v == "confirmed") / len(events)
299
311
 
300
312
 
313
+ # 生效条件:形参 cg 的反思留痕中 d_curr 为数值的序列按 window(默认 100,window 为 0 时切片 [0:] 取全部)截尾得 p_gap(截尾结果为空则为 None);取自 evidence_count>0 的节点的验证事件(扫描数受 int(max_scan) 上限、默认 2000,按 window 同样规则截尾)为空时返回 p_trust=None/emotion=None 分支,否则按三段 confirmed 通过率差返回 d1、d2、emotion 与 verdicts;
301
314
  def trust(cg, window: int = 100, max_scan: int = 2000) -> dict:
302
315
  """P_gap(信息差置信)+ P_trust(验证稳定置信)+ d²T/dt²(情感)。
303
316
 
@@ -354,6 +367,7 @@ def trust(cg, window: int = 100, max_scan: int = 2000) -> dict:
354
367
  # 自报告:汇总 + 确定性建议
355
368
  # --------------------------------------------------------------------------
356
369
 
370
+ # 生效条件:形参 tr.get("ok") 为假时产出 no_trace;否则按 tr["d2"] > D2_EMOTION 产出 diverging、state_rates["BLINDSPOT"] >= BLINDSPOT_DENSE 产出 blindspot_dense;再按 cal 的 verdict 为 overconfident/underconfident 与 bs.get("unresolved_count", 0) > 0 各自追加;全部未触发时返回单条 stable(形参 tt 在函数体内未被使用);
357
371
  def _advise(tr, cal, bs, tt) -> list:
358
372
  """确定性建议(非 LLM):每条都带触发它的证据,可复核。"""
359
373
  out = []
@@ -393,6 +407,7 @@ def _advise(tr, cal, bs, tt) -> list:
393
407
  return out
394
408
 
395
409
 
410
+ # 生效条件:给定 cg 与透传给 trace 的 window(默认 50)时恒定返回 ok=True 且含 trace/calibration/blindspots/trust/advice 的 rec,并以 op="report" 写一条留痕后返回该 rec;
396
411
  def report(cg, window: int = 50) -> dict:
397
412
  """完整元认知报告(四观测面 + 确定性建议),并独立留痕。"""
398
413
  tr = trace(cg, window=window)
@@ -424,6 +439,7 @@ def report(cg, window: int = 50) -> dict:
424
439
  return rec
425
440
 
426
441
 
442
+ # 生效条件:形参 query 经 str(query or "").strip() 为空(含 None、空串、纯空白)时返回 {'ok': False, 'reason': 'empty_query'};相似历史(_jaccard 得分 >= min_sim,默认 0.25,排序后取前 int(k),k 默认 5、k 为 0 时为空)为空时返回 ok=True/warning="no_prior";否则按 BLINDSPOT/DEFER/ACCEPT 计数与 max(1, n//2) 及 prior_d<0.5 判定,返回带 warning/recommendation 的 out;
427
443
  def self_check(cg, query: str, k: int = 5, min_sim: float = 0.25) -> dict:
428
444
  """元认知闸门:回答之前先自问「我对这件事的认知状态如何」。
429
445
 
@@ -505,6 +521,7 @@ def self_check(cg, query: str, k: int = 5, min_sim: float = 0.25) -> dict:
505
521
  # 留痕查询 / 自描述
506
522
  # --------------------------------------------------------------------------
507
523
 
524
+ # 生效条件:形参 limit(默认 100)为真时取 read_jsonl(os.path.join(cg.root, LOG_FILE)) 的尾部 int(limit) 条,limit 为 0 等假值时保留全部记录,返回 ok=True 与倒序的 records;
508
525
  def history(cg, limit: int = 100) -> dict:
509
526
  """元认知留痕(倒序,最新在前)。"""
510
527
  recs = list(read_jsonl(os.path.join(cg.root, LOG_FILE)))
@@ -513,6 +530,7 @@ def history(cg, limit: int = 100) -> dict:
513
530
  return {"ok": True, "n": len(recs), "records": recs[::-1]}
514
531
 
515
532
 
533
+ # 生效条件:给定 cg 时恒定返回含 n_reflections(tr.get("n", 0))、d_current、emotion、calibration、p_trust、p_gap 的 dict,字段分别取自对 trace(window=20)、calibration、trust(window=50) 的调用结果,缺键按其 .get 回落;
516
534
  def summary(cg) -> dict:
517
535
  """一句话元认知状态(供 health / OS 面板使用)。"""
518
536
  tr = trace(cg, window=20)
@@ -528,6 +546,23 @@ def summary(cg) -> dict:
528
546
  }
529
547
 
530
548
 
549
+ # 生效条件:cg 必需、window 缺省 200;恒转调 d_meta.compute(cg, window=window) 并原样返回其 dict(三代理 + enabled/window/note),d_meta 导入或计算抛异常时返回 {"ok": False, "error": "类型名: 消息"}(不返回编造数值、不写任何状态);
550
+ def d_meta_face(cg, window: int = 200) -> dict:
551
+ """D_meta 观测面(边界压力向量):三代理各自 [0,1],**不合成单值**。
552
+
553
+ 智能论3.4 §2.7.0 DEV-002/002a:`D_meta` ≠ `D_task`(不参与 `_compute_d`);
554
+ 三代理分别观测「进入系统但未被消化」的事件,不是「世界真实未发生的事件」。
555
+ 独立性:只读留痕与索引,不写 confidence / 资格 / 召回打分;`MDCG_D_META=0`
556
+ 时三值恒 0.0 且 note 声明已回退(显式回退留痕,不是缺键)。
557
+ """
558
+ try:
559
+ from . import d_meta
560
+ return d_meta.compute(cg, window=window)
561
+ except Exception as exc: # noqa: BLE001
562
+ return {"ok": False, "error": "%s: %s" % (type(exc).__name__, exc)}
563
+
564
+
565
+ # 生效条件:无入参且无分支,恒定返回含 module/role/theory/faces/constraints 及由模块常量 GAP_OVERCONFIDENT、GAP_UNDERCONFIDENT、BLINDSPOT_DENSE、D_LOW、MIN_SAMPLES 构成的 thresholds 的静态 dict;
531
566
  def catalog() -> dict:
532
567
  """自描述:元认知的观测面与独立性约束。"""
533
568
  return {
@@ -541,7 +576,7 @@ def catalog() -> dict:
541
576
  "trust": "P_trust / P_gap(§十)",
542
577
  },
543
578
  "faces": ["trace", "calibration", "blindspots", "trust", "report",
544
- "self_check"],
579
+ "self_check", "d_meta"],
545
580
  "constraints": [
546
581
  "只读留痕与索引,不写 confidence / 资格 / 召回打分",
547
582
  "独立留痕 _metacognition.jsonl(append-only)",
@@ -554,4 +589,4 @@ def catalog() -> dict:
554
589
  "d_low": D_LOW,
555
590
  "min_samples": MIN_SAMPLES,
556
591
  },
557
- }
592
+ }
package/md_cg/migrate.py CHANGED
@@ -17,6 +17,7 @@ from .mdcg import MdCG
17
17
  from . import routing, subgraph
18
18
 
19
19
 
20
+ # 生效条件:v 为假值(None、空串等)时直接返回 default,否则 v 被 json.loads 成功解析时返回解析结果,抛出 ValueError 或 TypeError 时仍返回 default。
20
21
  def _j(v, default):
21
22
  if not v:
22
23
  return default
@@ -26,6 +27,7 @@ def _j(v, default):
26
27
  return default
27
28
 
28
29
 
30
+ # 生效条件:db 为 sqlite3.connect 可打开的库且 limit 为假值(None、0、空串)时返回 nodes 全表行的 dict 列表;limit 为真值时先 int(limit) 并追加 " limit N" 子句后返回其结果。
29
31
  def load_nodes(db, limit=None):
30
32
  c = sqlite3.connect(db)
31
33
  c.row_factory = sqlite3.Row
@@ -35,6 +37,7 @@ def load_nodes(db, limit=None):
35
37
  return [dict(r) for r in c.execute(sql)]
36
38
 
37
39
 
40
+ # 生效条件:db 可连接且能查询其 edges 表时,返回以 source_id 分组的 defaultdict(list),每个 source_id 对应 target_id、relation_type、confidence、verified 经 subgraph.normalize_edge 规范化后的边列表。
38
41
  def load_edges(db):
39
42
  """读源库边,规范化为 md_cg 本地边(键名 `relation_type`、方向按 SRC_REL_MAP)。
40
43
 
@@ -49,6 +52,7 @@ def load_edges(db):
49
52
  return out
50
53
 
51
54
 
55
+ # 生效条件:db、root 给定后按 load_nodes(db, limit) 的 rows 逐行 add 到 MdCG(root) 并 flush,再对每行按 cg.get 取不到→"missing"、content 去尾换行不等→"content"、tags 不等→"tags"、importance 差>1e-9→"importance"、edges 长度不等→"edges" 的 elif 顺序累计 report.field_mismatches,verbose 为真值时额外打印 report JSON,最终返回 (cg, report)。
52
56
  def migrate(db, root, limit=None, verbose=True):
53
57
  rows = load_nodes(db, limit)
54
58
  edges = load_edges(db)