@furongjun1999/dsh-memory 0.4.3 → 0.4.5

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 (1471) hide show
  1. package/README.md +104 -483
  2. package/cordis.patch.yml +1 -1
  3. package/cordis.yml.example +78 -9
  4. package/docs/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v1.0.md +170 -0
  5. package/docs/AGI/344/270/203/347/273/264/350/257/204/345/210/206/346/212/245/345/221/212_md_cg_v2.0.md +239 -0
  6. package/docs/README/350/257/246/347/273/206/347/211/210_v0.4.5.md +625 -0
  7. package/docs/cordis-patch-profile-web.example.yml +50 -6
  8. package/docs/release_v0.3.0.md +36 -0
  9. package/docs/release_v0.4.5.md +55 -0
  10. package/docs/tool_table_v0.3.0.md +117 -0
  11. package/docs//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 +160 -0
  12. 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 +221 -0
  13. 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 +192 -2
  14. package/docs//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 +278 -0
  15. package/docs//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 -0
  16. package/docs//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 +198 -0
  17. package/docs//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 +49 -1
  18. package/docs//347/274/272/345/217/243/345/215/225_P0/346/224/266/345/217/243_v0.1.md +270 -0
  19. package/docs//350/234/202/347/276/244/344/272/222/350/201/224_v0.1.md +704 -0
  20. package/docs//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 +491 -0
  21. package/docs//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 +368 -34
  22. package/docs//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 +340 -0
  23. package/docs//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 +496 -0
  24. package/docs//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 +94 -0
  25. package/docs//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 +281 -0
  26. package/lib/bridge.d.ts +4 -4
  27. package/lib/bridge.js +4 -4
  28. package/lib/hooks.d.ts +23 -8
  29. package/lib/hooks.js +75 -26
  30. package/lib/index.d.ts +53 -8
  31. package/lib/index.js +216 -63
  32. package/lib/lib/datapath.d.ts +16 -0
  33. package/lib/lib/datapath.js +114 -0
  34. package/lib/lib/mdcg_client.d.ts +152 -0
  35. package/lib/lib/mdcg_client.js +266 -0
  36. package/lib/lib/mutual.d.ts +121 -0
  37. package/lib/lib/mutual.js +348 -0
  38. package/lib/lib/roleplay_web.d.ts +6 -0
  39. package/{src/roleplay_web.ts → lib/lib/roleplay_web.js} +503 -450
  40. package/lib/lib/whitebox_llm.d.ts +129 -0
  41. package/lib/lib/whitebox_llm.js +249 -0
  42. package/lib/tools.d.ts +13 -6
  43. package/lib/tools.js +41 -55
  44. package/md_cg/__init__.py +7 -0
  45. package/md_cg/__pycache__/__init__.cpython-310.pyc +0 -0
  46. package/md_cg/__pycache__/_dbg_p30.cpython-310.pyc +0 -0
  47. package/md_cg/__pycache__/_diag_p19.cpython-310.pyc +0 -0
  48. package/md_cg/__pycache__/_tmp_dbg.cpython-310.pyc +0 -0
  49. package/md_cg/__pycache__/audit.cpython-310.pyc +0 -0
  50. package/md_cg/__pycache__/backfill.cpython-310.pyc +0 -0
  51. package/md_cg/__pycache__/bench_membench.cpython-310.pyc +0 -0
  52. package/md_cg/__pycache__/bench_p0.cpython-310.pyc +0 -0
  53. package/md_cg/__pycache__/census.cpython-310.pyc +0 -0
  54. package/md_cg/__pycache__/chain.cpython-310.pyc +0 -0
  55. package/md_cg/__pycache__/codeindex.cpython-310.pyc +0 -0
  56. package/md_cg/__pycache__/consistency.cpython-310.pyc +0 -0
  57. package/md_cg/__pycache__/consolidate.cpython-310.pyc +0 -0
  58. package/md_cg/__pycache__/corpus.cpython-310.pyc +0 -0
  59. package/md_cg/__pycache__/crosscheck.cpython-310.pyc +0 -0
  60. package/md_cg/__pycache__/crypto.cpython-310.pyc +0 -0
  61. package/md_cg/__pycache__/datapath.cpython-310.pyc +0 -0
  62. package/md_cg/__pycache__/docindex.cpython-310.pyc +0 -0
  63. package/md_cg/__pycache__/evidence.cpython-310.pyc +0 -0
  64. package/md_cg/__pycache__/evolution.cpython-310.pyc +0 -0
  65. package/md_cg/__pycache__/export.cpython-310.pyc +0 -0
  66. package/md_cg/__pycache__/forgetting.cpython-310.pyc +0 -0
  67. package/md_cg/__pycache__/fsutil.cpython-310.pyc +0 -0
  68. package/md_cg/__pycache__/identity.cpython-310.pyc +0 -0
  69. package/md_cg/__pycache__/insight.cpython-310.pyc +0 -0
  70. package/md_cg/__pycache__/links.cpython-310.pyc +0 -0
  71. package/md_cg/__pycache__/mcp_server.cpython-310.pyc +0 -0
  72. package/md_cg/__pycache__/md_whitebox.cpython-310.pyc +0 -0
  73. package/md_cg/__pycache__/mdcg.cpython-310.pyc +0 -0
  74. package/md_cg/__pycache__/mdcos.cpython-310.pyc +0 -0
  75. package/md_cg/__pycache__/metacognition.cpython-310.pyc +0 -0
  76. package/md_cg/__pycache__/migrate.cpython-310.pyc +0 -0
  77. package/md_cg/__pycache__/migrate_aeis.cpython-310.pyc +0 -0
  78. package/md_cg/__pycache__/migrate_roleplay.cpython-310.pyc +0 -0
  79. package/md_cg/__pycache__/migrate_wisdom_graph.cpython-310.pyc +0 -0
  80. package/md_cg/__pycache__/nodefile.cpython-310.pyc +0 -0
  81. package/md_cg/__pycache__/pooling.cpython-310.pyc +0 -0
  82. package/md_cg/__pycache__/predict.cpython-310.pyc +0 -0
  83. package/md_cg/__pycache__/protect.cpython-310.pyc +0 -0
  84. package/md_cg/__pycache__/provenance.cpython-310.pyc +0 -0
  85. package/md_cg/__pycache__/refindex.cpython-310.pyc +0 -0
  86. package/md_cg/__pycache__/refine.cpython-310.pyc +0 -0
  87. package/md_cg/__pycache__/routing.cpython-310.pyc +0 -0
  88. package/md_cg/__pycache__/scrub.cpython-310.pyc +0 -0
  89. package/md_cg/__pycache__/security.cpython-310.pyc +0 -0
  90. package/md_cg/__pycache__/self_state.cpython-310.pyc +0 -0
  91. package/md_cg/__pycache__/signer.cpython-310.pyc +0 -0
  92. package/md_cg/__pycache__/sources.cpython-310.pyc +0 -0
  93. package/md_cg/__pycache__/stg.cpython-310.pyc +0 -0
  94. package/md_cg/__pycache__/subgraph.cpython-310.pyc +0 -0
  95. package/md_cg/__pycache__/sustain.cpython-310.pyc +0 -0
  96. package/md_cg/__pycache__/test_lock.cpython-310-pytest-9.1.1.pyc +0 -0
  97. package/md_cg/__pycache__/test_lock.cpython-310.pyc +0 -0
  98. package/md_cg/__pycache__/test_p0.cpython-310-pytest-9.1.1.pyc +0 -0
  99. package/md_cg/__pycache__/test_p0.cpython-310.pyc +0 -0
  100. package/md_cg/__pycache__/test_p1.cpython-310-pytest-9.1.1.pyc +0 -0
  101. package/md_cg/__pycache__/test_p1.cpython-310.pyc +0 -0
  102. package/md_cg/__pycache__/test_p10_identity.cpython-310-pytest-9.1.1.pyc +0 -0
  103. package/md_cg/__pycache__/test_p10_identity.cpython-310.pyc +0 -0
  104. package/md_cg/__pycache__/test_p11_consistency.cpython-310-pytest-9.1.1.pyc +0 -0
  105. package/md_cg/__pycache__/test_p11_consistency.cpython-310.pyc +0 -0
  106. package/md_cg/__pycache__/test_p12_metacognition.cpython-310-pytest-9.1.1.pyc +0 -0
  107. package/md_cg/__pycache__/test_p12_metacognition.cpython-310.pyc +0 -0
  108. package/md_cg/__pycache__/test_p13_encryption.cpython-310-pytest-9.1.1.pyc +0 -0
  109. package/md_cg/__pycache__/test_p13_encryption.cpython-310.pyc +0 -0
  110. package/md_cg/__pycache__/test_p14_sustain.cpython-310-pytest-9.1.1.pyc +0 -0
  111. package/md_cg/__pycache__/test_p14_sustain.cpython-310.pyc +0 -0
  112. package/md_cg/__pycache__/test_p15_scrub.cpython-310-pytest-9.1.1.pyc +0 -0
  113. package/md_cg/__pycache__/test_p15_scrub.cpython-310.pyc +0 -0
  114. package/md_cg/__pycache__/test_p16_self_state.cpython-310.pyc +0 -0
  115. package/md_cg/__pycache__/test_p17_predict.cpython-310.pyc +0 -0
  116. package/md_cg/__pycache__/test_p18_whitebox.cpython-310.pyc +0 -0
  117. package/md_cg/__pycache__/test_p19_migrate_roleplay.cpython-310.pyc +0 -0
  118. package/md_cg/__pycache__/test_p2.cpython-310-pytest-9.1.1.pyc +0 -0
  119. package/md_cg/__pycache__/test_p2.cpython-310.pyc +0 -0
  120. package/md_cg/__pycache__/test_p20_evolution.cpython-310.pyc +0 -0
  121. package/md_cg/__pycache__/test_p21_tokens.cpython-310.pyc +0 -0
  122. package/md_cg/__pycache__/test_p22_theory.cpython-310.pyc +0 -0
  123. package/md_cg/__pycache__/test_p23_links.cpython-310.pyc +0 -0
  124. package/md_cg/__pycache__/test_p24_evidence.cpython-310.pyc +0 -0
  125. package/md_cg/__pycache__/test_p25_weights.cpython-310.pyc +0 -0
  126. package/md_cg/__pycache__/test_p26_refindex.cpython-310.pyc +0 -0
  127. package/md_cg/__pycache__/test_p27_docindex.cpython-310.pyc +0 -0
  128. package/md_cg/__pycache__/test_p28_refcheck.cpython-310.pyc +0 -0
  129. package/md_cg/__pycache__/test_p29_session_ingest_export.cpython-310.pyc +0 -0
  130. package/md_cg/__pycache__/test_p2_mcp.cpython-310-pytest-9.1.1.pyc +0 -0
  131. package/md_cg/__pycache__/test_p2_mcp.cpython-310.pyc +0 -0
  132. package/md_cg/__pycache__/test_p3.cpython-310-pytest-9.1.1.pyc +0 -0
  133. package/md_cg/__pycache__/test_p3.cpython-310.pyc +0 -0
  134. package/md_cg/__pycache__/test_p30_maintain.cpython-310.pyc +0 -0
  135. package/md_cg/__pycache__/test_p31_insight.cpython-310.pyc +0 -0
  136. package/md_cg/__pycache__/test_p32_backfill.cpython-310.pyc +0 -0
  137. package/md_cg/__pycache__/test_p33_ccg_wiring.cpython-310.pyc +0 -0
  138. package/md_cg/__pycache__/test_p34_crosscheck.cpython-310.pyc +0 -0
  139. package/md_cg/__pycache__/test_p35_conditioned_claim.cpython-310.pyc +0 -0
  140. package/md_cg/__pycache__/test_p36_kp_align.cpython-310.pyc +0 -0
  141. package/md_cg/__pycache__/test_p37_condition_space.cpython-310.pyc +0 -0
  142. package/md_cg/__pycache__/test_p38_contextualize.cpython-310.pyc +0 -0
  143. package/md_cg/__pycache__/test_p39_vision_evidence.cpython-310.pyc +0 -0
  144. package/md_cg/__pycache__/test_p40_refine_worklist.cpython-310.pyc +0 -0
  145. package/md_cg/__pycache__/test_p41_evolve_patrol.cpython-310.pyc +0 -0
  146. package/md_cg/__pycache__/test_p42_provenance.cpython-310.pyc +0 -0
  147. package/md_cg/__pycache__/test_p43_pooling.cpython-310.pyc +0 -0
  148. package/md_cg/__pycache__/test_p44_md_whitebox.cpython-310.pyc +0 -0
  149. package/md_cg/__pycache__/test_p4_fuzzy.cpython-310-pytest-9.1.1.pyc +0 -0
  150. package/md_cg/__pycache__/test_p4_fuzzy.cpython-310.pyc +0 -0
  151. package/md_cg/__pycache__/test_p5_semantic.cpython-310-pytest-9.1.1.pyc +0 -0
  152. package/md_cg/__pycache__/test_p5_semantic.cpython-310.pyc +0 -0
  153. package/md_cg/__pycache__/test_p6_consolidate.cpython-310-pytest-9.1.1.pyc +0 -0
  154. package/md_cg/__pycache__/test_p6_consolidate.cpython-310.pyc +0 -0
  155. package/md_cg/__pycache__/test_p7_goals_recent.cpython-310-pytest-9.1.1.pyc +0 -0
  156. package/md_cg/__pycache__/test_p7_goals_recent.cpython-310.pyc +0 -0
  157. package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310-pytest-9.1.1.pyc +0 -0
  158. package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310.pyc +0 -0
  159. package/md_cg/__pycache__/test_p9_forget_protect.cpython-310-pytest-9.1.1.pyc +0 -0
  160. package/md_cg/__pycache__/test_p9_forget_protect.cpython-310.pyc +0 -0
  161. package/md_cg/__pycache__/theory.cpython-310.pyc +0 -0
  162. package/md_cg/__pycache__/tokens.cpython-310.pyc +0 -0
  163. package/md_cg/__pycache__/vision_evidence.cpython-310.pyc +0 -0
  164. package/md_cg/__pycache__/weights.cpython-310.pyc +0 -0
  165. package/md_cg/__pycache__/whitebox.cpython-310.pyc +0 -0
  166. package/md_cg/audit.py +223 -0
  167. package/md_cg/backfill.py +1272 -0
  168. package/md_cg/bench_membench.py +602 -0
  169. package/md_cg/bench_p0.py +147 -0
  170. package/md_cg/bench_task_ab.py +237 -0
  171. package/md_cg/bench_task_ab_llm.py +397 -0
  172. package/md_cg/census.py +117 -0
  173. package/md_cg/chain.py +280 -0
  174. package/md_cg/codeindex.py +359 -0
  175. package/md_cg/consistency.py +593 -0
  176. package/md_cg/consolidate.py +1389 -0
  177. package/md_cg/corpus.py +106 -0
  178. package/md_cg/crosscheck.py +1058 -0
  179. package/md_cg/crypto.py +404 -0
  180. package/md_cg/datapath.py +160 -0
  181. package/md_cg/docindex.py +333 -0
  182. package/md_cg/evidence.py +555 -0
  183. package/md_cg/evolution.py +458 -0
  184. package/md_cg/export.py +210 -0
  185. package/md_cg/forgetting.py +552 -0
  186. package/md_cg/fsutil.py +251 -0
  187. package/md_cg/identity.py +374 -0
  188. package/md_cg/insight.py +485 -0
  189. package/md_cg/links.py +595 -0
  190. package/md_cg/mcp_server.py +2445 -0
  191. package/md_cg/md_whitebox.py +271 -0
  192. package/md_cg/mdcg.py +1210 -0
  193. package/md_cg/mdcos.py +2505 -0
  194. package/md_cg/metacognition.py +557 -0
  195. package/md_cg/migrate.py +115 -0
  196. package/md_cg/migrate_aeis.py +213 -0
  197. package/md_cg/migrate_roleplay.py +285 -0
  198. package/md_cg/migrate_wisdom_graph.py +348 -0
  199. package/md_cg/nodefile.py +308 -0
  200. package/md_cg/pooling.py +451 -0
  201. package/md_cg/predict.py +918 -0
  202. package/md_cg/protect.py +260 -0
  203. package/md_cg/provenance.py +321 -0
  204. package/md_cg/refindex.py +585 -0
  205. package/md_cg/refine.py +586 -0
  206. package/md_cg/routing.py +290 -0
  207. package/md_cg/scrub.py +788 -0
  208. package/md_cg/security.py +235 -0
  209. package/md_cg/self_state.py +843 -0
  210. package/md_cg/signer.py +523 -0
  211. package/md_cg/sources.py +547 -0
  212. package/md_cg/stg.py +250 -0
  213. package/md_cg/subgraph.py +706 -0
  214. package/md_cg/sustain.py +874 -0
  215. package/md_cg/test_lock.py +43 -0
  216. package/md_cg/test_p0.py +250 -0
  217. package/md_cg/test_p1.py +317 -0
  218. package/md_cg/test_p10_identity.py +173 -0
  219. package/md_cg/test_p11_consistency.py +233 -0
  220. package/md_cg/test_p12_metacognition.py +212 -0
  221. package/md_cg/test_p13_encryption.py +241 -0
  222. package/md_cg/test_p14_sustain.py +249 -0
  223. package/md_cg/test_p15_scrub.py +280 -0
  224. package/md_cg/test_p16_self_state.py +275 -0
  225. package/md_cg/test_p17_predict.py +341 -0
  226. package/md_cg/test_p18_whitebox.py +171 -0
  227. package/md_cg/test_p19_migrate_roleplay.py +149 -0
  228. package/md_cg/test_p2.py +205 -0
  229. package/md_cg/test_p20_evolution.py +315 -0
  230. package/md_cg/test_p21_tokens.py +270 -0
  231. package/md_cg/test_p22_theory.py +175 -0
  232. package/md_cg/test_p23_links.py +311 -0
  233. package/md_cg/test_p24_evidence.py +227 -0
  234. package/md_cg/test_p25_weights.py +156 -0
  235. package/md_cg/test_p26_refindex.py +387 -0
  236. package/md_cg/test_p27_docindex.py +377 -0
  237. package/md_cg/test_p28_refcheck.py +305 -0
  238. package/md_cg/test_p29_session_ingest_export.py +333 -0
  239. package/md_cg/test_p2_mcp.py +425 -0
  240. package/md_cg/test_p3.py +252 -0
  241. package/md_cg/test_p30_maintain.py +330 -0
  242. package/md_cg/test_p31_insight.py +510 -0
  243. package/md_cg/test_p32_backfill.py +298 -0
  244. package/md_cg/test_p33_ccg_wiring.py +293 -0
  245. package/md_cg/test_p34_crosscheck.py +331 -0
  246. package/md_cg/test_p35_conditioned_claim.py +252 -0
  247. package/md_cg/test_p36_kp_align.py +225 -0
  248. package/md_cg/test_p37_condition_space.py +248 -0
  249. package/md_cg/test_p38_contextualize.py +273 -0
  250. package/md_cg/test_p39_vision_evidence.py +369 -0
  251. package/md_cg/test_p40_refine_worklist.py +241 -0
  252. package/md_cg/test_p41_evolve_patrol.py +224 -0
  253. package/md_cg/test_p42_provenance.py +269 -0
  254. package/md_cg/test_p43_pooling.py +360 -0
  255. package/md_cg/test_p44_md_whitebox.py +218 -0
  256. package/md_cg/test_p4_fuzzy.py +223 -0
  257. package/md_cg/test_p5_semantic.py +226 -0
  258. package/md_cg/test_p6_consolidate.py +387 -0
  259. package/md_cg/test_p7_goals_recent.py +202 -0
  260. package/md_cg/test_p8_subgraph_chain.py +200 -0
  261. package/md_cg/test_p9_forget_protect.py +231 -0
  262. package/md_cg/theory.py +259 -0
  263. package/md_cg/tokens.py +506 -0
  264. package/md_cg/vision_evidence.py +644 -0
  265. package/md_cg/weights.py +602 -0
  266. package/md_cg/whitebox.py +497 -0
  267. package/md_cg/whitebox_kb/__init__.py +37 -0
  268. package/md_cg/whitebox_kb/__pycache__/__init__.cpython-310.pyc +0 -0
  269. package/md_cg/whitebox_kb/__pycache__/engine.cpython-310.pyc +0 -0
  270. package/md_cg/whitebox_kb/aeis_core/__init__.py +42 -0
  271. package/md_cg/whitebox_kb/aeis_core/__pycache__/__init__.cpython-310.pyc +0 -0
  272. package/md_cg/whitebox_kb/aeis_core/__pycache__/core.cpython-310.pyc +0 -0
  273. package/md_cg/whitebox_kb/aeis_core/__pycache__/semantic.cpython-310.pyc +0 -0
  274. package/md_cg/whitebox_kb/aeis_core/__pycache__/time_core.cpython-310.pyc +0 -0
  275. package/md_cg/whitebox_kb/aeis_core/api.py +1042 -0
  276. package/md_cg/whitebox_kb/aeis_core/core.py +5014 -0
  277. package/md_cg/whitebox_kb/aeis_core/semantic.py +280 -0
  278. package/md_cg/whitebox_kb/aeis_core/textutil.py +13 -0
  279. package/md_cg/whitebox_kb/aeis_core/time_core.py +43 -0
  280. package/md_cg/whitebox_kb/data/verify_cache.json +1873 -0
  281. package/md_cg/whitebox_kb/data/verify_savings.jsonl +1330 -0
  282. package/md_cg/whitebox_kb/engine.py +310 -0
  283. package/md_cg/whitebox_kb/knowledge/_ccg_dump.json +1 -0
  284. package/md_cg/whitebox_kb/knowledge/_index.json +15300 -0
  285. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/345/234/260/346/240/207.md +22 -0
  286. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/346/226/207/345/214/226.md +15 -0
  287. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/350/207/252/347/204/266/345/245/207/350/247/202.md +29 -0
  288. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/351/201/227/344/272/247.md +15 -0
  289. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/217/244/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  290. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/220/215/350/203/234.md +15 -0
  291. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/257/223/350/250/200.md +15 -0
  292. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/347/216/260/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  293. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/347/245/236/350/257/235.md +22 -0
  294. package/md_cg/whitebox_kb/knowledge//344/271/246/346/263/225/346/226/207/345/214/226.md +22 -0
  295. package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/345/256/211/345/205/250.md +15 -0
  296. package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/351/200/232/350/257/206.md +15 -0
  297. package/md_cg/whitebox_kb/knowledge//344/272/272/344/275/223/347/224/237/347/220/206.md +22 -0
  298. package/md_cg/whitebox_kb/knowledge//344/272/272/345/267/245/346/231/272/350/203/275/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +307 -0
  299. package/md_cg/whitebox_kb/knowledge//344/272/272/346/226/207/351/200/232/350/257/206.md +1296 -0
  300. package/md_cg/whitebox_kb/knowledge//344/272/272/347/211/251/345/216/206/345/217/262.md +15 -0
  301. package/md_cg/whitebox_kb/knowledge//344/272/272/347/261/273/350/247/202/345/257/237/350/200/205/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +265 -0
  302. package/md_cg/whitebox_kb/knowledge//344/272/272/351/231/205/346/262/237/351/200/232.md +22 -0
  303. package/md_cg/whitebox_kb/knowledge//344/274/232/350/256/241/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +131 -0
  304. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/344/271/220/345/231/250.md +15 -0
  305. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/205/273/347/224/237.md +15 -0
  306. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/216/206/346/263/225.md +15 -0
  307. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/267/245/350/211/272.md +148 -0
  308. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/273/272/347/255/221.md +29 -0
  309. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/226/207/345/214/226.md +92 -0
  310. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/243/213/347/261/273.md +15 -0
  311. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/255/246/346/234/257.md +15 -0
  312. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/345/276/267.md +29 -0
  313. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/351/243/237.md +36 -0
  314. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/211/272/346/234/257.md +71 -0
  315. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/212/202/346/227/245.md +22 -0
  316. package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262.md +15 -0
  317. package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262/350/277/220/345/212/250.md +15 -0
  318. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/345/256/211/345/205/250.md +15 -0
  319. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/346/212/200/346/234/257.md +22 -0
  320. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +90 -0
  321. package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/344/271/240/346/203/257.md +15 -0
  322. package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/345/270/270/350/257/206.md +50 -0
  323. package/md_cg/whitebox_kb/knowledge//345/205/211/345/255/246/351/200/232/350/257/206.md +15 -0
  324. package/md_cg/whitebox_kb/knowledge//345/205/273/347/224/237/346/226/271/346/263/225.md +15 -0
  325. package/md_cg/whitebox_kb/knowledge//345/206/233/344/272/213/345/217/262.md +15 -0
  326. package/md_cg/whitebox_kb/knowledge//345/206/234/344/270/232/345/270/270/350/257/206.md +15 -0
  327. package/md_cg/whitebox_kb/knowledge//345/210/206/345/255/220/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  328. package/md_cg/whitebox_kb/knowledge//345/210/206/346/236/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  329. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +391 -0
  330. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +279 -0
  331. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  332. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +391 -0
  333. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +545 -0
  334. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +426 -0
  335. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  336. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  337. package/md_cg/whitebox_kb/knowledge//345/210/235/344/270/255/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  338. package/md_cg/whitebox_kb/knowledge//345/210/266/345/272/246/345/217/262.md +64 -0
  339. package/md_cg/whitebox_kb/knowledge//345/211/215/346/262/277/347/247/221/346/212/200.md +36 -0
  340. package/md_cg/whitebox_kb/knowledge//345/212/250/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  341. package/md_cg/whitebox_kb/knowledge//345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +2081 -0
  342. package/md_cg/whitebox_kb/knowledge//345/214/226/345/267/245/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  343. package/md_cg/whitebox_kb/knowledge//345/214/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  344. package/md_cg/whitebox_kb/knowledge//345/216/206/345/217/262/345/234/260/347/220/206.md +29 -0
  345. package/md_cg/whitebox_kb/knowledge//345/216/206/345/217/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +464 -0
  346. package/md_cg/whitebox_kb/knowledge//345/216/237/345/255/220/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  347. package/md_cg/whitebox_kb/knowledge//345/217/244/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  348. package/md_cg/whitebox_kb/knowledge//345/217/244/347/224/237/347/211/251.md +22 -0
  349. package/md_cg/whitebox_kb/knowledge//345/223/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +118 -0
  350. package/md_cg/whitebox_kb/knowledge//345/225/206/344/270/232/345/217/262.md +15 -0
  351. package/md_cg/whitebox_kb/knowledge//345/231/250/347/211/251/345/267/245/350/211/272.md +15 -0
  352. package/md_cg/whitebox_kb/knowledge//345/233/255/346/236/227/345/273/272/347/255/221.md +15 -0
  353. package/md_cg/whitebox_kb/knowledge//345/233/272/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +202 -0
  354. package/md_cg/whitebox_kb/knowledge//345/233/276/345/203/217/347/224/237/346/210/220.md +99 -0
  355. package/md_cg/whitebox_kb/knowledge//345/234/237/346/234/250/345/267/245/347/250/213/345/237/272/347/241/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  356. package/md_cg/whitebox_kb/knowledge//345/234/260/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +303 -0
  357. package/md_cg/whitebox_kb/knowledge//345/244/215/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  358. package/md_cg/whitebox_kb/knowledge//345/244/226/345/233/275/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +118 -0
  359. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +265 -0
  360. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/346/200/235/346/224/277/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  361. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +321 -0
  362. package/md_cg/whitebox_kb/knowledge//345/244/247/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  363. package/md_cg/whitebox_kb/knowledge//345/244/251/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  364. package/md_cg/whitebox_kb/knowledge//345/244/251/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +173 -0
  365. package/md_cg/whitebox_kb/knowledge//345/255/230/345/234/250/350/256/272.md +43 -0
  366. package/md_cg/whitebox_kb/knowledge//345/255/246/344/271/240/346/226/271/346/263/225.md +57 -0
  367. package/md_cg/whitebox_kb/knowledge//345/256/211/345/205/250/345/270/270/350/257/206.md +22 -0
  368. package/md_cg/whitebox_kb/knowledge//345/256/217/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  369. package/md_cg/whitebox_kb/knowledge//345/256/236/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  370. package/md_cg/whitebox_kb/knowledge//345/256/240/347/211/251.md +29 -0
  371. package/md_cg/whitebox_kb/knowledge//345/256/266/345/272/255/345/205/263/347/263/273.md +29 -0
  372. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +566 -0
  373. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1274 -0
  374. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  375. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  376. package/md_cg/whitebox_kb/knowledge//345/260/217/345/255/246/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  377. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/345/210/266/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +118 -0
  378. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +611 -0
  379. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/347/247/221/345/255/246.md +22 -0
  380. package/md_cg/whitebox_kb/knowledge//345/267/245/350/211/272/351/200/232/350/257/206.md +15 -0
  381. package/md_cg/whitebox_kb/knowledge//345/270/202/345/234/272/350/220/245/351/224/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  382. package/md_cg/whitebox_kb/knowledge//345/270/270/345/276/256/345/210/206/346/226/271/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +237 -0
  383. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/344/272/272/346/226/207.md +15 -0
  384. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/345/216/206/345/217/262.md +43 -0
  385. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/350/211/272/346/234/257.md +15 -0
  386. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/351/200/232/350/257/206.md +15 -0
  387. package/md_cg/whitebox_kb/knowledge//345/275/261/350/247/206/345/270/270/350/257/206.md +29 -0
  388. package/md_cg/whitebox_kb/knowledge//345/276/256/345/210/206/345/207/240/344/275/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  389. package/md_cg/whitebox_kb/knowledge//345/276/256/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  390. package/md_cg/whitebox_kb/knowledge//345/276/256/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  391. package/md_cg/whitebox_kb/knowledge//345/277/203/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  392. package/md_cg/whitebox_kb/knowledge//346/200/235/347/273/264/345/256/232/345/276/213.md +29 -0
  393. package/md_cg/whitebox_kb/knowledge//346/203/205/346/204/237/346/203/205/347/273/252/344/273/277/347/234/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +186 -0
  394. package/md_cg/whitebox_kb/knowledge//346/210/217/346/233/262/350/211/272/346/234/257.md +22 -0
  395. package/md_cg/whitebox_kb/knowledge//346/210/220/350/257/255/345/205/270/346/225/205.md +15 -0
  396. package/md_cg/whitebox_kb/knowledge//346/211/213/345/267/245/345/270/270/350/257/206.md +15 -0
  397. package/md_cg/whitebox_kb/knowledge//346/212/275/350/261/241/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  398. package/md_cg/whitebox_kb/knowledge//346/213/223/346/211/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  399. package/md_cg/whitebox_kb/knowledge//346/223/215/344/275/234/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  400. package/md_cg/whitebox_kb/knowledge//346/224/266/350/227/217/351/233/206/350/227/217.md +92 -0
  401. package/md_cg/whitebox_kb/knowledge//346/224/277/346/262/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +387 -0
  402. package/md_cg/whitebox_kb/knowledge//346/225/210/347/216/207/346/226/271/346/263/225.md +15 -0
  403. package/md_cg/whitebox_kb/knowledge//346/225/260/345/200/274/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +202 -0
  404. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/227/347/224/265/350/267/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  405. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/227/347/264/240/345/205/273.md +22 -0
  406. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +2074 -0
  407. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/246/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +349 -0
  408. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/246/347/211/251/347/220/206/346/226/271/346/263/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  409. package/md_cg/whitebox_kb/knowledge//346/225/260/346/215/256/345/272/223/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  410. package/md_cg/whitebox_kb/knowledge//346/225/260/346/215/256/347/273/223/346/236/204/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  411. package/md_cg/whitebox_kb/knowledge//346/226/207/345/205/267/345/270/270/350/257/206.md +15 -0
  412. package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226.md +36 -0
  413. package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226/351/200/232/350/257/206.md +15 -0
  414. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/345/255/246.md +15 -0
  415. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/350/265/267/346/272/220.md +15 -0
  416. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/246/347/220/206/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +328 -0
  417. package/md_cg/whitebox_kb/knowledge//346/226/207/346/225/231/345/216/206/345/217/262.md +15 -0
  418. package/md_cg/whitebox_kb/knowledge//346/226/207/347/211/251/351/200/232/350/257/206.md +22 -0
  419. package/md_cg/whitebox_kb/knowledge//346/226/207/347/214/256/345/255/246.md +22 -0
  420. package/md_cg/whitebox_kb/knowledge//346/227/240/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +216 -0
  421. package/md_cg/whitebox_kb/knowledge//346/227/266/347/251/272/350/256/260/345/277/206/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +214 -0
  422. package/md_cg/whitebox_kb/knowledge//346/230/206/350/231/253/345/270/270/350/257/206.md +29 -0
  423. package/md_cg/whitebox_kb/knowledge//346/231/272/350/203/275/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +441 -0
  424. package/md_cg/whitebox_kb/knowledge//346/233/262/350/211/272/345/270/270/350/257/206.md +15 -0
  425. package/md_cg/whitebox_kb/knowledge//346/234/211/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  426. package/md_cg/whitebox_kb/knowledge//346/234/215/351/245/260/346/226/207/345/214/226.md +22 -0
  427. package/md_cg/whitebox_kb/knowledge//346/234/252/345/210/206/347/261/273.md +52 -0
  428. package/md_cg/whitebox_kb/knowledge//346/234/272/346/242/260/351/200/232/350/257/206.md +15 -0
  429. package/md_cg/whitebox_kb/knowledge//346/235/220/346/226/231/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  430. package/md_cg/whitebox_kb/knowledge//346/235/241/344/273/266/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +350 -0
  431. package/md_cg/whitebox_kb/knowledge//346/243/213/347/211/214/350/247/204/345/210/231.md +15 -0
  432. package/md_cg/whitebox_kb/knowledge//346/243/213/347/261/273/350/247/204/345/210/231.md +36 -0
  433. package/md_cg/whitebox_kb/knowledge//346/244/215/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  434. package/md_cg/whitebox_kb/knowledge//346/246/202/347/216/207/350/256/272/344/270/216/346/225/260/347/220/206/347/273/237/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +230 -0
  435. package/md_cg/whitebox_kb/knowledge//346/250/241/346/213/237/347/224/265/345/255/220/346/212/200/346/234/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  436. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227.md +64 -0
  437. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/344/277/241/344/273/260.md +36 -0
  438. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/205/273/347/224/237.md +15 -0
  439. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/216/206/346/263/225.md +15 -0
  440. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/231/250/347/211/251.md +15 -0
  441. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/346/226/207/345/214/226.md +22 -0
  442. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/350/257/255/350/250/200.md +15 -0
  443. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/351/233/205/347/216/251.md +50 -0
  444. package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/345/270/270/350/257/206.md +15 -0
  445. package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/351/200/232/350/257/206.md +15 -0
  446. package/md_cg/whitebox_kb/knowledge//346/261/202/350/201/214/346/212/200/350/203/275.md +29 -0
  447. package/md_cg/whitebox_kb/knowledge//346/262/237/351/200/232.md +29 -0
  448. package/md_cg/whitebox_kb/knowledge//346/263/225/345/276/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +14 -0
  449. package/md_cg/whitebox_kb/knowledge//346/263/233/345/207/275/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +188 -0
  450. package/md_cg/whitebox_kb/knowledge//346/265/267/346/264/213/347/224/237/347/211/251.md +15 -0
  451. package/md_cg/whitebox_kb/knowledge//347/203/255/345/212/233/345/255/246/344/270/216/347/273/237/350/256/241/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +188 -0
  452. package/md_cg/whitebox_kb/knowledge//347/203/271/351/245/252/346/212/200/346/263/225.md +15 -0
  453. package/md_cg/whitebox_kb/knowledge//347/211/251/347/220/206/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +195 -0
  454. package/md_cg/whitebox_kb/knowledge//347/211/251/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +2256 -0
  455. package/md_cg/whitebox_kb/knowledge//347/216/260/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  456. package/md_cg/whitebox_kb/knowledge//347/220/206/350/256/272/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +209 -0
  457. package/md_cg/whitebox_kb/knowledge//347/224/237/346/200/201/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  458. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/215/253/347/224/237.md +15 -0
  459. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/270/270/350/257/206.md +1296 -0
  460. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/346/212/200/350/203/275.md +43 -0
  461. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/347/247/221/346/212/200.md +22 -0
  462. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/351/200/232/350/257/206.md +15 -0
  463. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/344/277/235/346/212/244.md +36 -0
  464. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +209 -0
  465. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1759 -0
  466. package/md_cg/whitebox_kb/knowledge//347/224/237/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +132 -0
  467. package/md_cg/whitebox_kb/knowledge//347/224/265/345/212/250/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +188 -0
  468. package/md_cg/whitebox_kb/knowledge//347/224/265/350/267/257/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  469. package/md_cg/whitebox_kb/knowledge//347/231/275/347/256/261/345/215/217/350/256/256.md +22 -0
  470. package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/346/270/270/346/210/217.md +15 -0
  471. package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/351/200/232/350/257/206.md +15 -0
  472. package/md_cg/whitebox_kb/knowledge//347/244/276/344/272/244/346/212/200/345/267/247.md +15 -0
  473. package/md_cg/whitebox_kb/knowledge//347/244/276/344/274/232/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  474. package/md_cg/whitebox_kb/knowledge//347/244/276/344/274/232/347/247/221/345/255/246.md +43 -0
  475. package/md_cg/whitebox_kb/knowledge//347/245/236/350/257/235/344/274/240/350/257/264.md +15 -0
  476. package/md_cg/whitebox_kb/knowledge//347/247/221/345/255/246/345/217/262.md +22 -0
  477. package/md_cg/whitebox_kb/knowledge//347/247/221/346/212/200/351/200/232/350/257/206.md +78 -0
  478. package/md_cg/whitebox_kb/knowledge//347/250/213/345/272/217/350/256/276/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  479. package/md_cg/whitebox_kb/knowledge//347/256/227/346/263/225/350/256/276/350/256/241/344/270/216/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  480. package/md_cg/whitebox_kb/knowledge//347/256/241/347/220/206/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  481. package/md_cg/whitebox_kb/knowledge//347/272/277/346/200/247/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +202 -0
  482. package/md_cg/whitebox_kb/knowledge//347/273/206/350/203/236/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +181 -0
  483. package/md_cg/whitebox_kb/knowledge//347/273/217/346/265/216/345/217/262.md +43 -0
  484. package/md_cg/whitebox_kb/knowledge//347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +204 -0
  485. package/md_cg/whitebox_kb/knowledge//347/273/223/346/236/204/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  486. package/md_cg/whitebox_kb/knowledge//347/273/274/345/220/210/302/267/347/273/264/345/237/272/347/273/274/350/277/260.md +184 -0
  487. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-Git.md +15 -0
  488. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-JS.md +15 -0
  489. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/346/246/202/345/277/265.md +15 -0
  490. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/350/257/255/350/250/200.md +120 -0
  491. package/md_cg/whitebox_kb/knowledge//347/274/226/350/257/221/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  492. package/md_cg/whitebox_kb/knowledge//347/275/221/347/273/234/345/256/211/345/205/250.md +34 -0
  493. package/md_cg/whitebox_kb/knowledge//350/200/203/345/217/244/345/270/270/350/257/206.md +64 -0
  494. package/md_cg/whitebox_kb/knowledge//350/207/252/346/210/221/346/204/217/350/257/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +270 -0
  495. package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/345/220/215/345/256/266.md +15 -0
  496. package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/346/265/201/346/264/276.md +15 -0
  497. package/md_cg/whitebox_kb/knowledge//350/214/266/346/226/207/345/214/226.md +15 -0
  498. package/md_cg/whitebox_kb/knowledge//350/256/241/347/256/227/346/234/272/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +4265 -0
  499. package/md_cg/whitebox_kb/knowledge//350/256/241/347/256/227/346/234/272/347/273/204/346/210/220/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  500. package/md_cg/whitebox_kb/knowledge//350/256/241/347/256/227/346/234/272/347/275/221/347/273/234/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  501. package/md_cg/whitebox_kb/knowledge//350/257/255/350/250/200/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +373 -0
  502. package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/217/262.md +15 -0
  503. package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/270/270/350/257/206.md +15 -0
  504. package/md_cg/whitebox_kb/knowledge//350/275/257/344/273/266/345/267/245/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +160 -0
  505. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/201/245/345/272/267.md +15 -0
  506. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/270/270/350/257/206.md +15 -0
  507. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/347/247/221/345/255/246.md +22 -0
  508. package/md_cg/whitebox_kb/knowledge//350/277/221/344/270/226/346/234/215/351/245/260.md +15 -0
  509. package/md_cg/whitebox_kb/knowledge//351/200/273/350/276/221/345/255/246.md +14 -0
  510. package/md_cg/whitebox_kb/knowledge//351/201/227/344/274/240/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  511. package/md_cg/whitebox_kb/knowledge//351/207/217/345/255/220/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +209 -0
  512. package/md_cg/whitebox_kb/knowledge//351/207/221/350/236/215/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  513. package/md_cg/whitebox_kb/knowledge//351/235/236/351/201/227/350/211/272/346/234/257.md +43 -0
  514. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220.md +15 -0
  515. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/220/215/345/256/266.md +22 -0
  516. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/270/270/350/257/206.md +29 -0
  517. package/md_cg/whitebox_kb/knowledge//351/243/237/345/223/201/347/247/221/345/255/246.md +57 -0
  518. package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/345/270/270/350/257/206.md +29 -0
  519. package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/346/226/207/345/214/226.md +29 -0
  520. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +566 -0
  521. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  522. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +139 -0
  523. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/346/200/235/346/203/263/346/224/277/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +174 -0
  524. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +566 -0
  525. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +692 -0
  526. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +440 -0
  527. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +167 -0
  528. package/md_cg/whitebox_kb/knowledge//351/253/230/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  529. package/md_cg/whitebox_kb/knowledge//351/253/230/345/210/206/345/255/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +146 -0
  530. package/md_cg/whitebox_kb/knowledge//351/253/230/347/255/211/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +244 -0
  531. package/md_cg/whitebox_kb/knowledge//351/253/230/347/255/211/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +384 -0
  532. package/md_cg/whitebox_kb/seed_knowledge/__init__.py +2 -0
  533. package/md_cg/whitebox_kb/seed_knowledge/guardrail-charter.md +164 -0
  534. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/270/255/345/233/275/345/217/244/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  535. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/270/255/345/233/275/347/216/260/344/273/243/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  536. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/272/272/345/267/245/346/231/272/350/203/275/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +121 -0
  537. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/272/272/347/261/273/350/247/202/345/257/237/350/200/205/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +161 -0
  538. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/274/232/350/256/241/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  539. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//344/277/241/346/201/257/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +90 -0
  540. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/206/345/255/220/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  541. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/206/346/236/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  542. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +241 -0
  543. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  544. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  545. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +241 -0
  546. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +317 -0
  547. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +261 -0
  548. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  549. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  550. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/210/235/344/270/255/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  551. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/212/250/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  552. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1194 -0
  553. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/214/226/345/267/245/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  554. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/214/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  555. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/216/206/345/217/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +278 -0
  556. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/216/237/345/255/220/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  557. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/217/244/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  558. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/223/262/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  559. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/233/272/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  560. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/234/237/346/234/250/345/267/245/347/250/213/345/237/272/347/241/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  561. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/234/260/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +154 -0
  562. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/215/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  563. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/226/345/233/275/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +85 -0
  564. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +169 -0
  565. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/346/200/235/346/224/277/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  566. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +201 -0
  567. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/247/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +93 -0
  568. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/251/344/275/223/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  569. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/244/251/346/226/207/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +131 -0
  570. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/256/217/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  571. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/256/236/345/217/230/345/207/275/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  572. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +333 -0
  573. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1124 -0
  574. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  575. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  576. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/260/217/345/255/246/351/201/223/345/276/267/344/270/216/346/263/225/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  577. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/267/245/347/250/213/345/210/266/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +85 -0
  578. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/267/245/347/250/213/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +362 -0
  579. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/270/202/345/234/272/350/220/245/351/224/200/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +81 -0
  580. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/270/270/345/276/256/345/210/206/346/226/271/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +153 -0
  581. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/276/256/345/210/206/345/207/240/344/275/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  582. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/276/256/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  583. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/276/256/350/247/202/347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  584. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//345/277/203/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +119 -0
  585. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/203/205/346/204/237/346/203/205/347/273/252/344/273/277/347/234/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +186 -0
  586. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/212/275/350/261/241/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  587. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/213/223/346/211/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  588. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/223/215/344/275/234/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  589. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/224/277/346/262/273/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +234 -0
  590. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/200/274/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  591. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/227/347/224/265/350/267/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  592. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1166 -0
  593. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/246/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +217 -0
  594. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/345/255/246/347/211/251/347/220/206/346/226/271/346/263/225/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  595. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/346/215/256/345/272/223/347/263/273/347/273/237/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  596. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/225/260/346/215/256/347/273/223/346/236/204/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  597. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/226/207/345/255/246/347/220/206/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  598. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/227/240/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +141 -0
  599. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/227/266/347/251/272/350/256/260/345/277/206/345/233/276/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +214 -0
  600. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/231/272/350/203/275/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +350 -0
  601. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/234/211/346/234/272/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  602. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/235/220/346/226/231/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  603. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/235/241/344/273/266/350/256/272/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +350 -0
  604. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/244/215/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  605. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/246/202/347/216/207/350/256/272/344/270/216/346/225/260/347/220/206/347/273/237/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +149 -0
  606. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/250/241/346/213/237/347/224/265/345/255/220/346/212/200/346/234/257/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  607. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//346/263/233/345/207/275/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  608. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/203/255/345/212/233/345/255/246/344/270/216/347/273/237/350/256/241/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  609. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/211/251/347/220/206/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +129 -0
  610. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/211/251/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1302 -0
  611. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/216/260/344/273/243/346/261/211/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  612. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/220/206/350/256/272/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +137 -0
  613. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/346/200/201/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +93 -0
  614. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/347/211/251/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +137 -0
  615. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +1018 -0
  616. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/237/347/220/206/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +93 -0
  617. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/265/345/212/250/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +125 -0
  618. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/224/265/350/267/257/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  619. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/244/276/344/274/232/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +111 -0
  620. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/250/213/345/272/217/350/256/276/350/256/241/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  621. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/256/227/346/263/225/350/256/276/350/256/241/344/270/216/345/210/206/346/236/220/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  622. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/256/241/347/220/206/345/255/246/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  623. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/272/277/346/200/247/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +133 -0
  624. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/206/350/203/236/347/224/237/347/211/251/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +121 -0
  625. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/217/346/265/216/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +169 -0
  626. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/223/346/236/204/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  627. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/273/274/345/220/210/302/267/347/273/264/345/237/272/347/273/274/350/277/260.md +184 -0
  628. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//347/274/226/350/257/221/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  629. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/207/252/346/210/221/346/204/217/350/257/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +270 -0
  630. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/256/241/347/256/227/346/234/272/347/247/221/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +698 -0
  631. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/256/241/347/256/227/346/234/272/347/273/204/346/210/220/345/216/237/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  632. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/256/241/347/256/227/346/234/272/347/275/221/347/273/234/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +109 -0
  633. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/257/255/350/250/200/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +226 -0
  634. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//350/275/257/344/273/266/345/267/245/347/250/213/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  635. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/201/227/344/274/240/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  636. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/207/217/345/255/220/345/212/233/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +137 -0
  637. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/207/221/350/236/215/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +89 -0
  638. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +341 -0
  639. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/345/216/206/345/217/262/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  640. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/345/234/260/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +97 -0
  641. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/346/200/235/346/203/263/346/224/277/346/262/273/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +117 -0
  642. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +341 -0
  643. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/347/211/251/347/220/206/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +365 -0
  644. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/347/224/237/347/211/251/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +269 -0
  645. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/350/213/261/350/257/255/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +113 -0
  646. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/344/270/255/350/257/255/346/226/207/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +105 -0
  647. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/345/210/206/345/255/220/345/214/226/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +101 -0
  648. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/347/255/211/344/273/243/346/225/260/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +157 -0
  649. package/md_cg/whitebox_kb/seed_knowledge/wisdom_cards//351/253/230/347/255/211/346/225/260/345/255/246/302/267/347/237/245/350/257/206/347/273/274/350/277/260.md +237 -0
  650. package/md_cg/whitebox_kb/seed_knowledge//346/231/272/350/203/275/350/256/2723.3.md +4620 -0
  651. package/md_cg/whitebox_kb/wisdom/__init__.py +6 -0
  652. package/md_cg/whitebox_kb/wisdom/__pycache__/browser_units.cpython-310.pyc +0 -0
  653. package/md_cg/whitebox_kb/wisdom/__pycache__/chat_engine.cpython-310.pyc +0 -0
  654. package/md_cg/whitebox_kb/wisdom/__pycache__/code_compose.cpython-310.pyc +0 -0
  655. package/md_cg/whitebox_kb/wisdom/__pycache__/compiler_code_units.cpython-310.pyc +0 -0
  656. package/md_cg/whitebox_kb/wisdom/__pycache__/condition_frame.cpython-310.pyc +0 -0
  657. package/md_cg/whitebox_kb/wisdom/__pycache__/condition_kb.cpython-310.pyc +0 -0
  658. package/md_cg/whitebox_kb/wisdom/__pycache__/danmaku_audit.cpython-310.pyc +0 -0
  659. package/md_cg/whitebox_kb/wisdom/__pycache__/graph_db_units.cpython-310.pyc +0 -0
  660. package/md_cg/whitebox_kb/wisdom/__pycache__/net_units.cpython-310.pyc +0 -0
  661. package/md_cg/whitebox_kb/wisdom/__pycache__/neural_retrieve.cpython-310.pyc +0 -0
  662. package/md_cg/whitebox_kb/wisdom/__pycache__/os_units.cpython-310.pyc +0 -0
  663. package/md_cg/whitebox_kb/wisdom/__pycache__/python_code_units.cpython-310.pyc +0 -0
  664. package/md_cg/whitebox_kb/wisdom/__pycache__/route_memory.cpython-310.pyc +0 -0
  665. package/md_cg/whitebox_kb/wisdom/__pycache__/semantic_translate.cpython-310.pyc +0 -0
  666. package/md_cg/whitebox_kb/wisdom/__pycache__/verifier.cpython-310.pyc +0 -0
  667. package/md_cg/whitebox_kb/wisdom/__pycache__/verify_answer.cpython-310.pyc +0 -0
  668. package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_book.cpython-310.pyc +0 -0
  669. package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_cloud.cpython-310.pyc +0 -0
  670. package/md_cg/whitebox_kb/wisdom/answer_spec_anchor.py +87 -0
  671. package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +26 -0
  672. package/md_cg/whitebox_kb/wisdom/browser_units.py +2631 -0
  673. package/md_cg/whitebox_kb/wisdom/card_validator.py +223 -0
  674. package/md_cg/whitebox_kb/wisdom/causal_discover.py +313 -0
  675. package/md_cg/whitebox_kb/wisdom/chat.html +185 -0
  676. package/md_cg/whitebox_kb/wisdom/chat_engine.py +1506 -0
  677. package/md_cg/whitebox_kb/wisdom/code_compose.py +730 -0
  678. package/md_cg/whitebox_kb/wisdom/code_qa.py +119 -0
  679. package/md_cg/whitebox_kb/wisdom/code_route_bridge.py +90 -0
  680. package/md_cg/whitebox_kb/wisdom/code_solidified.json +6196 -0
  681. package/md_cg/whitebox_kb/wisdom/code_test_runner.py +217 -0
  682. package/md_cg/whitebox_kb/wisdom/codegraph_white.py +312 -0
  683. package/md_cg/whitebox_kb/wisdom/compiler_code_units.py +3033 -0
  684. package/md_cg/whitebox_kb/wisdom/compiler_compose.py +160 -0
  685. package/md_cg/whitebox_kb/wisdom/compose_engine.py +1633 -0
  686. package/md_cg/whitebox_kb/wisdom/condition_algebra.py +112 -0
  687. package/md_cg/whitebox_kb/wisdom/condition_frame.py +315 -0
  688. package/md_cg/whitebox_kb/wisdom/condition_kb.py +108 -0
  689. package/md_cg/whitebox_kb/wisdom/condition_vm.py +264 -0
  690. package/md_cg/whitebox_kb/wisdom/conflict_map.json +4446 -0
  691. package/md_cg/whitebox_kb/wisdom/core/compiler.py +301 -0
  692. package/md_cg/whitebox_kb/wisdom/core/condition_vm.py +298 -0
  693. package/md_cg/whitebox_kb/wisdom/core/lexer.py +512 -0
  694. package/md_cg/whitebox_kb/wisdom/core/name_checker.py +1023 -0
  695. package/md_cg/whitebox_kb/wisdom/core/parser.py +1065 -0
  696. package/md_cg/whitebox_kb/wisdom/cspmn.py +258 -0
  697. package/md_cg/whitebox_kb/wisdom/csre.py +256 -0
  698. package/md_cg/whitebox_kb/wisdom/csre_lexicon_index.npz +0 -0
  699. package/md_cg/whitebox_kb/wisdom/danmaku_audit.py +252 -0
  700. package/md_cg/whitebox_kb/wisdom/danmaku_bridge.py +141 -0
  701. package/md_cg/whitebox_kb/wisdom/distilled_condition_units.json +6418 -0
  702. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902b.json +1951 -0
  703. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902c.json +1297 -0
  704. package/md_cg/whitebox_kb/wisdom/docs/codegraph_ref_rating.md +52 -0
  705. package/md_cg/whitebox_kb/wisdom/docs/daoti_absorb_analysis.md +54 -0
  706. package/md_cg/whitebox_kb/wisdom/docs/dsh_memory_v030_stable.md +34 -0
  707. package/md_cg/whitebox_kb/wisdom/docs/github_absorb_analysis.md +71 -0
  708. package/md_cg/whitebox_kb/wisdom/docs/gliding_horse_absorb_analysis.md +47 -0
  709. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph.md +61 -0
  710. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph_demo.json +60 -0
  711. package/md_cg/whitebox_kb/wisdom/docs/whitebox_code_rating_202609.md +43 -0
  712. package/md_cg/whitebox_kb/wisdom/docs//344/273/243/347/240/201/346/235/241/344/273/266/350/267/257/347/224/261/345/233/276_CCG/350/256/276/350/256/241.md +150 -0
  713. package/md_cg/whitebox_kb/wisdom/docs//344/273/243/347/240/201/350/257/255/344/271/211/346/235/241/344/273/266/345/215/217/350/256/256.md +650 -0
  714. package/md_cg/whitebox_kb/wisdom/docs//345/261/200/351/203/250/346/234/200/344/274/230/344/270/216/346/203/205/347/273/252/345/201/217/345/245/275_/347/220/206/350/256/272/345/267/245/347/250/213.md +97 -0
  715. package/md_cg/whitebox_kb/wisdom/docs//346/226/271/345/220/221/346/200/247/346/212/211/346/213/251_/350/207/252/344/270/276vs/350/207/252/350/277/255/344/273/243.md +81 -0
  716. package/md_cg/whitebox_kb/wisdom/docs//347/201/265/346/236/242AGI/346/236/266/346/236/204/346/216/242/347/264/242_/346/226/207/346/241/243/350/247/204/345/210/222.md +51 -0
  717. package/md_cg/whitebox_kb/wisdom/docs//347/201/265/346/236/242/346/217/222/344/273/266/345/210/206/347/261/273/345/210/206/346/236/220.md +67 -0
  718. package/md_cg/whitebox_kb/wisdom/docs//347/231/275/347/256/261/346/234/254/345/234/260/346/240/241/351/252/214/345/231/250_ZeroLLM_Verifier.md +276 -0
  719. package/md_cg/whitebox_kb/wisdom/docs//347/231/275/347/256/261/350/207/252/344/270/276/347/254/254/345/205/255/351/230/266/346/256/265_/346/224/266/345/256/230/346/200/273/347/273/223.md +1207 -0
  720. package/md_cg/whitebox_kb/wisdom/ds_compose.py +177 -0
  721. package/md_cg/whitebox_kb/wisdom/graph_db_units.py +3089 -0
  722. package/md_cg/whitebox_kb/wisdom/graph_qa.py +123 -0
  723. package/md_cg/whitebox_kb/wisdom/human_observer_knowledge.json +43 -0
  724. package/md_cg/whitebox_kb/wisdom/knowledge_points.py +234 -0
  725. package/md_cg/whitebox_kb/wisdom/merge_subgraph.py +178 -0
  726. package/md_cg/whitebox_kb/wisdom/migrate_wisdom.py +475 -0
  727. package/md_cg/whitebox_kb/wisdom/mini_python.py +958 -0
  728. package/md_cg/whitebox_kb/wisdom/multilang_ir.py +124 -0
  729. package/md_cg/whitebox_kb/wisdom/navigate.py +248 -0
  730. package/md_cg/whitebox_kb/wisdom/net_units.py +2895 -0
  731. package/md_cg/whitebox_kb/wisdom/neural_index.json +3032 -0
  732. package/md_cg/whitebox_kb/wisdom/neural_index.npz +0 -0
  733. package/md_cg/whitebox_kb/wisdom/neural_retrieve.py +224 -0
  734. package/md_cg/whitebox_kb/wisdom/os_units.py +2735 -0
  735. package/md_cg/whitebox_kb/wisdom/pattern_separation.py +223 -0
  736. package/md_cg/whitebox_kb/wisdom/prereq_map.json +365 -0
  737. package/md_cg/whitebox_kb/wisdom/python_code_units.py +2766 -0
  738. package/md_cg/whitebox_kb/wisdom/role_compose.py +268 -0
  739. package/md_cg/whitebox_kb/wisdom/role_solidified.json +8 -0
  740. package/md_cg/whitebox_kb/wisdom/route_memory.py +244 -0
  741. package/md_cg/whitebox_kb/wisdom/scene_reconstruction.py +148 -0
  742. package/md_cg/whitebox_kb/wisdom/se_compose.py +137 -0
  743. package/md_cg/whitebox_kb/wisdom/semantic_translate.py +4050 -0
  744. package/md_cg/whitebox_kb/wisdom/snr_dashboard.py +219 -0
  745. package/md_cg/whitebox_kb/wisdom/snr_report.json +41 -0
  746. package/md_cg/whitebox_kb/wisdom/spatial_closure.py +96 -0
  747. package/md_cg/whitebox_kb/wisdom/spatial_qa.py +182 -0
  748. package/md_cg/whitebox_kb/wisdom/status_terms.json +21 -0
  749. package/md_cg/whitebox_kb/wisdom/task_discipline.json +43 -0
  750. package/md_cg/whitebox_kb/wisdom/test_code_compose_domains.py +7541 -0
  751. package/md_cg/whitebox_kb/wisdom/test_compiler_self_bootstrap.py +354 -0
  752. package/md_cg/whitebox_kb/wisdom/test_ecosystem_assembly.py +158 -0
  753. package/md_cg/whitebox_kb/wisdom/test_ecosystem_demos.py +193 -0
  754. package/md_cg/whitebox_kb/wisdom/test_graph_db.py +292 -0
  755. package/md_cg/whitebox_kb/wisdom/test_navigate_self_bootstrap.py +69 -0
  756. package/md_cg/whitebox_kb/wisdom/test_python_self_bootstrap.py +160 -0
  757. package/md_cg/whitebox_kb/wisdom/trigger_words_index.json +4367 -0
  758. package/md_cg/whitebox_kb/wisdom/verifier.py +1012 -0
  759. package/md_cg/whitebox_kb/wisdom/verify_answer.py +116 -0
  760. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db +0 -0
  761. package/md_cg/whitebox_kb/wisdom/wisdom_book.py +2582 -0
  762. package/md_cg/whitebox_kb/wisdom/wisdom_cloud.py +479 -0
  763. package/md_cg/whitebox_kb/wisdom/wisdom_ui.html +863 -0
  764. package/package.json +28 -10
  765. package/skills/README.md +108 -0
  766. package/skills/plugin.json +52 -0
  767. package/skills/skills/analyze-type-infer/SKILL.md +45 -0
  768. package/skills/skills/browser-02898b15/SKILL.md +45 -0
  769. package/skills/skills/browser-03b04f98/SKILL.md +45 -0
  770. package/skills/skills/browser-0754386d/SKILL.md +45 -0
  771. package/skills/skills/browser-093c03ab/SKILL.md +45 -0
  772. package/skills/skills/browser-09e60b35/SKILL.md +45 -0
  773. package/skills/skills/browser-0ab4f2db/SKILL.md +45 -0
  774. package/skills/skills/browser-0c7f88d6/SKILL.md +45 -0
  775. package/skills/skills/browser-0f598430/SKILL.md +45 -0
  776. package/skills/skills/browser-0fd64fa5/SKILL.md +45 -0
  777. package/skills/skills/browser-17906c62/SKILL.md +45 -0
  778. package/skills/skills/browser-18f823e2/SKILL.md +45 -0
  779. package/skills/skills/browser-1bafe81c/SKILL.md +45 -0
  780. package/skills/skills/browser-1f9ab1f0/SKILL.md +45 -0
  781. package/skills/skills/browser-1fdb5852/SKILL.md +45 -0
  782. package/skills/skills/browser-21b0359c/SKILL.md +45 -0
  783. package/skills/skills/browser-22e8de36/SKILL.md +45 -0
  784. package/skills/skills/browser-24163519/SKILL.md +45 -0
  785. package/skills/skills/browser-2471a991/SKILL.md +45 -0
  786. package/skills/skills/browser-25afee4d/SKILL.md +45 -0
  787. package/skills/skills/browser-283a91bd/SKILL.md +45 -0
  788. package/skills/skills/browser-2895ff52/SKILL.md +45 -0
  789. package/skills/skills/browser-2cc1da58/SKILL.md +45 -0
  790. package/skills/skills/browser-3189fe6f/SKILL.md +45 -0
  791. package/skills/skills/browser-31f2b08f/SKILL.md +45 -0
  792. package/skills/skills/browser-37b8339e/SKILL.md +45 -0
  793. package/skills/skills/browser-396ec3a6/SKILL.md +45 -0
  794. package/skills/skills/browser-3df2f904/SKILL.md +45 -0
  795. package/skills/skills/browser-43154cec/SKILL.md +45 -0
  796. package/skills/skills/browser-434b74b8/SKILL.md +45 -0
  797. package/skills/skills/browser-440d4398/SKILL.md +45 -0
  798. package/skills/skills/browser-44d7f183/SKILL.md +45 -0
  799. package/skills/skills/browser-4d6c0788/SKILL.md +45 -0
  800. package/skills/skills/browser-50fecd89/SKILL.md +45 -0
  801. package/skills/skills/browser-555c0626/SKILL.md +45 -0
  802. package/skills/skills/browser-57312d24/SKILL.md +45 -0
  803. package/skills/skills/browser-59a0ada4/SKILL.md +45 -0
  804. package/skills/skills/browser-5a455aeb/SKILL.md +45 -0
  805. package/skills/skills/browser-5ae7623a/SKILL.md +45 -0
  806. package/skills/skills/browser-5dac60b6/SKILL.md +45 -0
  807. package/skills/skills/browser-5e5f1396/SKILL.md +45 -0
  808. package/skills/skills/browser-5ebb01dd/SKILL.md +45 -0
  809. package/skills/skills/browser-5f5453f9/SKILL.md +45 -0
  810. package/skills/skills/browser-5f90f58c/SKILL.md +45 -0
  811. package/skills/skills/browser-609362ee/SKILL.md +45 -0
  812. package/skills/skills/browser-60aefeeb/SKILL.md +45 -0
  813. package/skills/skills/browser-6636d49c/SKILL.md +45 -0
  814. package/skills/skills/browser-6cfcb6db/SKILL.md +45 -0
  815. package/skills/skills/browser-6e1c1158/SKILL.md +45 -0
  816. package/skills/skills/browser-7008e942/SKILL.md +45 -0
  817. package/skills/skills/browser-716cd26c/SKILL.md +45 -0
  818. package/skills/skills/browser-720ce1a1/SKILL.md +45 -0
  819. package/skills/skills/browser-77a97b43/SKILL.md +45 -0
  820. package/skills/skills/browser-7bb4871d/SKILL.md +45 -0
  821. package/skills/skills/browser-7be57bbe/SKILL.md +45 -0
  822. package/skills/skills/browser-7da433f3/SKILL.md +45 -0
  823. package/skills/skills/browser-7e96fe1d/SKILL.md +45 -0
  824. package/skills/skills/browser-7f9cefec/SKILL.md +45 -0
  825. package/skills/skills/browser-80224e71/SKILL.md +45 -0
  826. package/skills/skills/browser-81345ecd/SKILL.md +45 -0
  827. package/skills/skills/browser-822cfa44/SKILL.md +45 -0
  828. package/skills/skills/browser-853690c0/SKILL.md +45 -0
  829. package/skills/skills/browser-85553126/SKILL.md +45 -0
  830. package/skills/skills/browser-87b0ce80/SKILL.md +45 -0
  831. package/skills/skills/browser-900c4484/SKILL.md +45 -0
  832. package/skills/skills/browser-910405c4/SKILL.md +45 -0
  833. package/skills/skills/browser-95fd3c86/SKILL.md +45 -0
  834. package/skills/skills/browser-97a14ca3/SKILL.md +45 -0
  835. package/skills/skills/browser-9de10895/SKILL.md +45 -0
  836. package/skills/skills/browser-9e4914a7/SKILL.md +45 -0
  837. package/skills/skills/browser-a280ec64/SKILL.md +45 -0
  838. package/skills/skills/browser-a2d9b0b0/SKILL.md +45 -0
  839. package/skills/skills/browser-a372edeb/SKILL.md +45 -0
  840. package/skills/skills/browser-a4c793a4/SKILL.md +45 -0
  841. package/skills/skills/browser-a681d0c2/SKILL.md +45 -0
  842. package/skills/skills/browser-a7a2b0c1/SKILL.md +45 -0
  843. package/skills/skills/browser-a990e68e/SKILL.md +45 -0
  844. package/skills/skills/browser-aaac4eec/SKILL.md +45 -0
  845. package/skills/skills/browser-ae6586bb/SKILL.md +45 -0
  846. package/skills/skills/browser-afa4091f/SKILL.md +45 -0
  847. package/skills/skills/browser-b4c8cf65/SKILL.md +45 -0
  848. package/skills/skills/browser-b501767c/SKILL.md +45 -0
  849. package/skills/skills/browser-bcd4288d/SKILL.md +45 -0
  850. package/skills/skills/browser-bfad66a5/SKILL.md +45 -0
  851. package/skills/skills/browser-c45cbfe9/SKILL.md +45 -0
  852. package/skills/skills/browser-c4dd6078/SKILL.md +45 -0
  853. package/skills/skills/browser-c879eb0b/SKILL.md +45 -0
  854. package/skills/skills/browser-c92ac01b/SKILL.md +45 -0
  855. package/skills/skills/browser-cb179242/SKILL.md +45 -0
  856. package/skills/skills/browser-cc7d3d6d/SKILL.md +45 -0
  857. package/skills/skills/browser-cf3c47f0/SKILL.md +45 -0
  858. package/skills/skills/browser-cf9f812e/SKILL.md +45 -0
  859. package/skills/skills/browser-d462581c/SKILL.md +45 -0
  860. package/skills/skills/browser-d5fa0b7f/SKILL.md +45 -0
  861. package/skills/skills/browser-d72e225b/SKILL.md +45 -0
  862. package/skills/skills/browser-df1a919e/SKILL.md +45 -0
  863. package/skills/skills/browser-e84565c1/SKILL.md +45 -0
  864. package/skills/skills/browser-e947a564/SKILL.md +45 -0
  865. package/skills/skills/browser-ea9b2b8e/SKILL.md +45 -0
  866. package/skills/skills/browser-f5ffc6d9/SKILL.md +45 -0
  867. package/skills/skills/browser-f75a4418/SKILL.md +45 -0
  868. package/skills/skills/browser-f8f2966e/SKILL.md +45 -0
  869. package/skills/skills/browser-fa65fa2d/SKILL.md +45 -0
  870. package/skills/skills/browser-faac8812/SKILL.md +45 -0
  871. package/skills/skills/browser-ff94a671/SKILL.md +45 -0
  872. package/skills/skills/check-name-real/SKILL.md +45 -0
  873. package/skills/skills/compile-assign/SKILL.md +45 -0
  874. package/skills/skills/compile-expr-tree/SKILL.md +45 -0
  875. package/skills/skills/compile-full-pipeline/SKILL.md +45 -0
  876. package/skills/skills/compile-func-def/SKILL.md +45 -0
  877. package/skills/skills/compile-if-then/SKILL.md +45 -0
  878. package/skills/skills/compile-logic-expr/SKILL.md +45 -0
  879. package/skills/skills/compile-recursive/SKILL.md +45 -0
  880. package/skills/skills/compile-scope/SKILL.md +45 -0
  881. package/skills/skills/compile-type-check/SKILL.md +45 -0
  882. package/skills/skills/compile-while/SKILL.md +45 -0
  883. package/skills/skills/compiler-0010c4bf/SKILL.md +45 -0
  884. package/skills/skills/compiler-0355bffb/SKILL.md +45 -0
  885. package/skills/skills/compiler-0361708a/SKILL.md +45 -0
  886. package/skills/skills/compiler-054a0414/SKILL.md +45 -0
  887. package/skills/skills/compiler-05a1691a/SKILL.md +45 -0
  888. package/skills/skills/compiler-05eeed1e/SKILL.md +45 -0
  889. package/skills/skills/compiler-0622a1f6/SKILL.md +45 -0
  890. package/skills/skills/compiler-08b54217/SKILL.md +45 -0
  891. package/skills/skills/compiler-0a62b70c/SKILL.md +45 -0
  892. package/skills/skills/compiler-0ab24d00/SKILL.md +45 -0
  893. package/skills/skills/compiler-0e093688/SKILL.md +45 -0
  894. package/skills/skills/compiler-0e82b966/SKILL.md +45 -0
  895. package/skills/skills/compiler-0ee9b9b9/SKILL.md +45 -0
  896. package/skills/skills/compiler-0f3787e6/SKILL.md +45 -0
  897. package/skills/skills/compiler-1028685f/SKILL.md +45 -0
  898. package/skills/skills/compiler-11897630/SKILL.md +45 -0
  899. package/skills/skills/compiler-16661b9b/SKILL.md +45 -0
  900. package/skills/skills/compiler-1f722303/SKILL.md +45 -0
  901. package/skills/skills/compiler-25be1262/SKILL.md +45 -0
  902. package/skills/skills/compiler-2a76ba07/SKILL.md +45 -0
  903. package/skills/skills/compiler-2dbea54a/SKILL.md +45 -0
  904. package/skills/skills/compiler-2df52f16/SKILL.md +45 -0
  905. package/skills/skills/compiler-2ec2c9d2/SKILL.md +45 -0
  906. package/skills/skills/compiler-2f8c8f39/SKILL.md +45 -0
  907. package/skills/skills/compiler-38378ac7/SKILL.md +45 -0
  908. package/skills/skills/compiler-39457d2e/SKILL.md +45 -0
  909. package/skills/skills/compiler-39fb5926/SKILL.md +45 -0
  910. package/skills/skills/compiler-47f4fbfa/SKILL.md +45 -0
  911. package/skills/skills/compiler-4a8cd1f1/SKILL.md +45 -0
  912. package/skills/skills/compiler-4b230b6b/SKILL.md +45 -0
  913. package/skills/skills/compiler-4cbbda95/SKILL.md +45 -0
  914. package/skills/skills/compiler-4d5a68ff/SKILL.md +45 -0
  915. package/skills/skills/compiler-56dc9bdd/SKILL.md +45 -0
  916. package/skills/skills/compiler-57e76ebe/SKILL.md +45 -0
  917. package/skills/skills/compiler-61ff016b/SKILL.md +45 -0
  918. package/skills/skills/compiler-63eae588/SKILL.md +45 -0
  919. package/skills/skills/compiler-64c4224b/SKILL.md +45 -0
  920. package/skills/skills/compiler-66377955/SKILL.md +45 -0
  921. package/skills/skills/compiler-674ab4f6/SKILL.md +45 -0
  922. package/skills/skills/compiler-6af76fd6/SKILL.md +45 -0
  923. package/skills/skills/compiler-6d979db2/SKILL.md +45 -0
  924. package/skills/skills/compiler-6de326c0/SKILL.md +45 -0
  925. package/skills/skills/compiler-6f1c0eea/SKILL.md +45 -0
  926. package/skills/skills/compiler-724d6c9b/SKILL.md +45 -0
  927. package/skills/skills/compiler-7690177f/SKILL.md +45 -0
  928. package/skills/skills/compiler-7b229a7d/SKILL.md +45 -0
  929. package/skills/skills/compiler-7f471b3a/SKILL.md +45 -0
  930. package/skills/skills/compiler-815cad08/SKILL.md +45 -0
  931. package/skills/skills/compiler-83c61634/SKILL.md +45 -0
  932. package/skills/skills/compiler-8c798c81/SKILL.md +45 -0
  933. package/skills/skills/compiler-8dd747ac/SKILL.md +45 -0
  934. package/skills/skills/compiler-90324d0a/SKILL.md +45 -0
  935. package/skills/skills/compiler-94b8d72d/SKILL.md +45 -0
  936. package/skills/skills/compiler-94f12231/SKILL.md +45 -0
  937. package/skills/skills/compiler-95937c16/SKILL.md +45 -0
  938. package/skills/skills/compiler-98a5625b/SKILL.md +45 -0
  939. package/skills/skills/compiler-98b4c42f/SKILL.md +45 -0
  940. package/skills/skills/compiler-98e3894a/SKILL.md +45 -0
  941. package/skills/skills/compiler-9bdfe4b8/SKILL.md +45 -0
  942. package/skills/skills/compiler-9d9b4e83/SKILL.md +45 -0
  943. package/skills/skills/compiler-9f7be5ad/SKILL.md +45 -0
  944. package/skills/skills/compiler-a6daf076/SKILL.md +45 -0
  945. package/skills/skills/compiler-a7995a0c/SKILL.md +45 -0
  946. package/skills/skills/compiler-a8399248/SKILL.md +45 -0
  947. package/skills/skills/compiler-aabbd099/SKILL.md +45 -0
  948. package/skills/skills/compiler-afe169d8/SKILL.md +45 -0
  949. package/skills/skills/compiler-b0678bda/SKILL.md +45 -0
  950. package/skills/skills/compiler-b09bd196/SKILL.md +45 -0
  951. package/skills/skills/compiler-b1396e23/SKILL.md +45 -0
  952. package/skills/skills/compiler-b9b31ce0/SKILL.md +45 -0
  953. package/skills/skills/compiler-c10264a7/SKILL.md +45 -0
  954. package/skills/skills/compiler-cb1e8e4b/SKILL.md +45 -0
  955. package/skills/skills/compiler-ccafd438/SKILL.md +45 -0
  956. package/skills/skills/compiler-cda9c262/SKILL.md +45 -0
  957. package/skills/skills/compiler-ce648068/SKILL.md +45 -0
  958. package/skills/skills/compiler-cf5776a4/SKILL.md +45 -0
  959. package/skills/skills/compiler-d974e5d3/SKILL.md +45 -0
  960. package/skills/skills/compiler-e3979fd3/SKILL.md +45 -0
  961. package/skills/skills/compiler-eb1cf2b5/SKILL.md +45 -0
  962. package/skills/skills/compiler-ecb30d5b/SKILL.md +45 -0
  963. package/skills/skills/compiler-f8c8b24b/SKILL.md +45 -0
  964. package/skills/skills/compiler-f99fedbe/SKILL.md +45 -0
  965. package/skills/skills/compiler-fa8ff5f7/SKILL.md +45 -0
  966. package/skills/skills/compiler-fe1b058d/SKILL.md +45 -0
  967. package/skills/skills/designer-perspective/SKILL.md +157 -0
  968. package/skills/skills/designer-perspective/references/01-observation-position.md +66 -0
  969. package/skills/skills/designer-perspective/references/02-structure-recognition.md +62 -0
  970. package/skills/skills/designer-perspective/references/03-direction-judgment.md +55 -0
  971. package/skills/skills/designer-perspective/references/04-qualification-verdict.md +72 -0
  972. package/skills/skills/designer-perspective/references/05-condition-attribution.md +74 -0
  973. package/skills/skills/designer-perspective/scripts/__pycache__/designer.cpython-310.pyc +0 -0
  974. package/skills/skills/designer-perspective/scripts/designer.py +527 -0
  975. package/skills/skills/designer-perspective/tests/cases.jsonl +17 -0
  976. package/skills/skills/designer-perspective/tests/selftest.py +60 -0
  977. package/skills/skills/graph-04cd431b/SKILL.md +45 -0
  978. package/skills/skills/graph-06e2b1f2/SKILL.md +45 -0
  979. package/skills/skills/graph-0de12477/SKILL.md +45 -0
  980. package/skills/skills/graph-0e564e68/SKILL.md +45 -0
  981. package/skills/skills/graph-10d58a7b/SKILL.md +45 -0
  982. package/skills/skills/graph-12cd830a/SKILL.md +45 -0
  983. package/skills/skills/graph-185f2cd2/SKILL.md +45 -0
  984. package/skills/skills/graph-19a6a301/SKILL.md +45 -0
  985. package/skills/skills/graph-1b266557/SKILL.md +45 -0
  986. package/skills/skills/graph-1b707621/SKILL.md +45 -0
  987. package/skills/skills/graph-1d73b597/SKILL.md +45 -0
  988. package/skills/skills/graph-2041fa98/SKILL.md +45 -0
  989. package/skills/skills/graph-2461bc41/SKILL.md +45 -0
  990. package/skills/skills/graph-2465dff8/SKILL.md +45 -0
  991. package/skills/skills/graph-2508389f/SKILL.md +45 -0
  992. package/skills/skills/graph-276d554d/SKILL.md +45 -0
  993. package/skills/skills/graph-299f4a32/SKILL.md +45 -0
  994. package/skills/skills/graph-2d455cd8/SKILL.md +45 -0
  995. package/skills/skills/graph-2fddf701/SKILL.md +45 -0
  996. package/skills/skills/graph-33385442/SKILL.md +45 -0
  997. package/skills/skills/graph-34a1dba7/SKILL.md +45 -0
  998. package/skills/skills/graph-3721be1c/SKILL.md +45 -0
  999. package/skills/skills/graph-3755dbc9/SKILL.md +45 -0
  1000. package/skills/skills/graph-37a45d4b/SKILL.md +45 -0
  1001. package/skills/skills/graph-3a4a984c/SKILL.md +45 -0
  1002. package/skills/skills/graph-3aa4c941/SKILL.md +45 -0
  1003. package/skills/skills/graph-3b69a528/SKILL.md +45 -0
  1004. package/skills/skills/graph-3bc2eb69/SKILL.md +45 -0
  1005. package/skills/skills/graph-3d255ed4/SKILL.md +45 -0
  1006. package/skills/skills/graph-3d34961d/SKILL.md +45 -0
  1007. package/skills/skills/graph-3e18a380/SKILL.md +45 -0
  1008. package/skills/skills/graph-3f920bf3/SKILL.md +45 -0
  1009. package/skills/skills/graph-40b7bf61/SKILL.md +45 -0
  1010. package/skills/skills/graph-42187d5d/SKILL.md +45 -0
  1011. package/skills/skills/graph-4361c60e/SKILL.md +45 -0
  1012. package/skills/skills/graph-44e56113/SKILL.md +45 -0
  1013. package/skills/skills/graph-4b363727/SKILL.md +45 -0
  1014. package/skills/skills/graph-52e6e216/SKILL.md +45 -0
  1015. package/skills/skills/graph-53fbfef5/SKILL.md +45 -0
  1016. package/skills/skills/graph-54ac2988/SKILL.md +45 -0
  1017. package/skills/skills/graph-580dadcd/SKILL.md +45 -0
  1018. package/skills/skills/graph-5ca34baa/SKILL.md +45 -0
  1019. package/skills/skills/graph-5cb7fbdf/SKILL.md +45 -0
  1020. package/skills/skills/graph-5f894c05/SKILL.md +45 -0
  1021. package/skills/skills/graph-656e7bd4/SKILL.md +45 -0
  1022. package/skills/skills/graph-6dc48231/SKILL.md +45 -0
  1023. package/skills/skills/graph-7186924a/SKILL.md +45 -0
  1024. package/skills/skills/graph-72ce5342/SKILL.md +45 -0
  1025. package/skills/skills/graph-7376a24e/SKILL.md +45 -0
  1026. package/skills/skills/graph-7412a7cb/SKILL.md +45 -0
  1027. package/skills/skills/graph-7becedf0/SKILL.md +45 -0
  1028. package/skills/skills/graph-7c38fbf3/SKILL.md +45 -0
  1029. package/skills/skills/graph-7dc36de7/SKILL.md +45 -0
  1030. package/skills/skills/graph-7fe49de7/SKILL.md +45 -0
  1031. package/skills/skills/graph-80d82194/SKILL.md +45 -0
  1032. package/skills/skills/graph-85bf101e/SKILL.md +45 -0
  1033. package/skills/skills/graph-8650548b/SKILL.md +45 -0
  1034. package/skills/skills/graph-86583b09/SKILL.md +45 -0
  1035. package/skills/skills/graph-8727827c/SKILL.md +45 -0
  1036. package/skills/skills/graph-873fb505/SKILL.md +45 -0
  1037. package/skills/skills/graph-89b11de0/SKILL.md +45 -0
  1038. package/skills/skills/graph-8d7b569b/SKILL.md +45 -0
  1039. package/skills/skills/graph-8e920d5d/SKILL.md +45 -0
  1040. package/skills/skills/graph-8eb38e3d/SKILL.md +45 -0
  1041. package/skills/skills/graph-94582f69/SKILL.md +45 -0
  1042. package/skills/skills/graph-947355f7/SKILL.md +45 -0
  1043. package/skills/skills/graph-9507aff7/SKILL.md +45 -0
  1044. package/skills/skills/graph-95b86a8b/SKILL.md +45 -0
  1045. package/skills/skills/graph-96b85e1f/SKILL.md +45 -0
  1046. package/skills/skills/graph-97b22f09/SKILL.md +45 -0
  1047. package/skills/skills/graph-9833cfda/SKILL.md +45 -0
  1048. package/skills/skills/graph-9aa8a3f4/SKILL.md +45 -0
  1049. package/skills/skills/graph-9f6665c0/SKILL.md +45 -0
  1050. package/skills/skills/graph-a125d282/SKILL.md +45 -0
  1051. package/skills/skills/graph-a49ef4f0/SKILL.md +45 -0
  1052. package/skills/skills/graph-a5cd04ae/SKILL.md +45 -0
  1053. package/skills/skills/graph-add9a63b/SKILL.md +45 -0
  1054. package/skills/skills/graph-b00e3dc7/SKILL.md +45 -0
  1055. package/skills/skills/graph-b33a7662/SKILL.md +45 -0
  1056. package/skills/skills/graph-b76d15ee/SKILL.md +45 -0
  1057. package/skills/skills/graph-b77fa05a/SKILL.md +45 -0
  1058. package/skills/skills/graph-b912fc3b/SKILL.md +45 -0
  1059. package/skills/skills/graph-baf61b7c/SKILL.md +45 -0
  1060. package/skills/skills/graph-c1d5687b/SKILL.md +45 -0
  1061. package/skills/skills/graph-c407bbed/SKILL.md +45 -0
  1062. package/skills/skills/graph-c4676460/SKILL.md +45 -0
  1063. package/skills/skills/graph-c4a59d80/SKILL.md +45 -0
  1064. package/skills/skills/graph-c5815621/SKILL.md +45 -0
  1065. package/skills/skills/graph-ccad55f1/SKILL.md +45 -0
  1066. package/skills/skills/graph-d0677ce1/SKILL.md +45 -0
  1067. package/skills/skills/graph-d1289b39/SKILL.md +45 -0
  1068. package/skills/skills/graph-d15f39b1/SKILL.md +45 -0
  1069. package/skills/skills/graph-d40691ca/SKILL.md +45 -0
  1070. package/skills/skills/graph-d43b387a/SKILL.md +45 -0
  1071. package/skills/skills/graph-d4dd02f4/SKILL.md +45 -0
  1072. package/skills/skills/graph-d724ea18/SKILL.md +45 -0
  1073. package/skills/skills/graph-d74d36fd/SKILL.md +45 -0
  1074. package/skills/skills/graph-d9d3934c/SKILL.md +45 -0
  1075. package/skills/skills/graph-ddf563ff/SKILL.md +45 -0
  1076. package/skills/skills/graph-de00894f/SKILL.md +45 -0
  1077. package/skills/skills/graph-df1ebb63/SKILL.md +45 -0
  1078. package/skills/skills/graph-e2905c20/SKILL.md +45 -0
  1079. package/skills/skills/graph-e4f8cefd/SKILL.md +45 -0
  1080. package/skills/skills/graph-ea3150e7/SKILL.md +45 -0
  1081. package/skills/skills/graph-eb4ac7dd/SKILL.md +45 -0
  1082. package/skills/skills/graph-ee9f6dfa/SKILL.md +45 -0
  1083. package/skills/skills/graph-f055b2ea/SKILL.md +45 -0
  1084. package/skills/skills/graph-f1891287/SKILL.md +45 -0
  1085. package/skills/skills/graph-f1bb5aa1/SKILL.md +45 -0
  1086. package/skills/skills/graph-f56fa220/SKILL.md +45 -0
  1087. package/skills/skills/graph-f729034f/SKILL.md +45 -0
  1088. package/skills/skills/graph-f748a63f/SKILL.md +45 -0
  1089. package/skills/skills/graph-f8c4a59e/SKILL.md +45 -0
  1090. package/skills/skills/graph-fca3d129/SKILL.md +45 -0
  1091. package/skills/skills/graph-fd02d934/SKILL.md +45 -0
  1092. package/skills/skills/graph-fd51ece9/SKILL.md +45 -0
  1093. package/skills/skills/graph-fd6a81ab/SKILL.md +45 -0
  1094. package/skills/skills/lex-chinese-program/SKILL.md +45 -0
  1095. package/skills/skills/lex-dao-de-jing/SKILL.md +45 -0
  1096. package/skills/skills/lex-nine-chapters/SKILL.md +45 -0
  1097. package/skills/skills/net-02090d29/SKILL.md +45 -0
  1098. package/skills/skills/net-05937712/SKILL.md +45 -0
  1099. package/skills/skills/net-059d072f/SKILL.md +45 -0
  1100. package/skills/skills/net-080f6012/SKILL.md +45 -0
  1101. package/skills/skills/net-08a2fc88/SKILL.md +45 -0
  1102. package/skills/skills/net-0935edf1/SKILL.md +45 -0
  1103. package/skills/skills/net-0e7f91e4/SKILL.md +45 -0
  1104. package/skills/skills/net-0f2850e0/SKILL.md +45 -0
  1105. package/skills/skills/net-107ab486/SKILL.md +45 -0
  1106. package/skills/skills/net-111e79b0/SKILL.md +45 -0
  1107. package/skills/skills/net-126876c1/SKILL.md +45 -0
  1108. package/skills/skills/net-13eeb575/SKILL.md +45 -0
  1109. package/skills/skills/net-14102d54/SKILL.md +45 -0
  1110. package/skills/skills/net-14e9ad0d/SKILL.md +45 -0
  1111. package/skills/skills/net-184175d3/SKILL.md +45 -0
  1112. package/skills/skills/net-1da1c695/SKILL.md +45 -0
  1113. package/skills/skills/net-240a14ec/SKILL.md +45 -0
  1114. package/skills/skills/net-2784f98b/SKILL.md +45 -0
  1115. package/skills/skills/net-292ef917/SKILL.md +45 -0
  1116. package/skills/skills/net-3434e92f/SKILL.md +45 -0
  1117. package/skills/skills/net-35019e6b/SKILL.md +45 -0
  1118. package/skills/skills/net-3bbc6afb/SKILL.md +45 -0
  1119. package/skills/skills/net-3bdf9d9d/SKILL.md +45 -0
  1120. package/skills/skills/net-3dcb84d3/SKILL.md +45 -0
  1121. package/skills/skills/net-431cccf9/SKILL.md +45 -0
  1122. package/skills/skills/net-435a9f7f/SKILL.md +45 -0
  1123. package/skills/skills/net-4508101f/SKILL.md +45 -0
  1124. package/skills/skills/net-4585c9e7/SKILL.md +45 -0
  1125. package/skills/skills/net-479612a0/SKILL.md +45 -0
  1126. package/skills/skills/net-47a19838/SKILL.md +45 -0
  1127. package/skills/skills/net-4e36e1e3/SKILL.md +45 -0
  1128. package/skills/skills/net-509b8001/SKILL.md +45 -0
  1129. package/skills/skills/net-51930c5e/SKILL.md +45 -0
  1130. package/skills/skills/net-56dbd63f/SKILL.md +45 -0
  1131. package/skills/skills/net-57387462/SKILL.md +45 -0
  1132. package/skills/skills/net-5c115606/SKILL.md +45 -0
  1133. package/skills/skills/net-5d27f392/SKILL.md +45 -0
  1134. package/skills/skills/net-5f69c938/SKILL.md +45 -0
  1135. package/skills/skills/net-5fa6c13b/SKILL.md +45 -0
  1136. package/skills/skills/net-61580202/SKILL.md +45 -0
  1137. package/skills/skills/net-61926703/SKILL.md +45 -0
  1138. package/skills/skills/net-61f64fbc/SKILL.md +45 -0
  1139. package/skills/skills/net-6200f3b2/SKILL.md +45 -0
  1140. package/skills/skills/net-63c3eda3/SKILL.md +45 -0
  1141. package/skills/skills/net-66e6119b/SKILL.md +45 -0
  1142. package/skills/skills/net-68643014/SKILL.md +45 -0
  1143. package/skills/skills/net-686632aa/SKILL.md +45 -0
  1144. package/skills/skills/net-6967ff14/SKILL.md +45 -0
  1145. package/skills/skills/net-6996f499/SKILL.md +45 -0
  1146. package/skills/skills/net-6c3b02c2/SKILL.md +45 -0
  1147. package/skills/skills/net-6eb37f63/SKILL.md +45 -0
  1148. package/skills/skills/net-6f96c190/SKILL.md +45 -0
  1149. package/skills/skills/net-6fb27488/SKILL.md +45 -0
  1150. package/skills/skills/net-703559d0/SKILL.md +45 -0
  1151. package/skills/skills/net-706d2692/SKILL.md +45 -0
  1152. package/skills/skills/net-70a20e04/SKILL.md +45 -0
  1153. package/skills/skills/net-7376158c/SKILL.md +45 -0
  1154. package/skills/skills/net-74d647cb/SKILL.md +45 -0
  1155. package/skills/skills/net-74e8a576/SKILL.md +45 -0
  1156. package/skills/skills/net-7801c2c0/SKILL.md +45 -0
  1157. package/skills/skills/net-78cae54d/SKILL.md +45 -0
  1158. package/skills/skills/net-78ec0324/SKILL.md +45 -0
  1159. package/skills/skills/net-7998097c/SKILL.md +45 -0
  1160. package/skills/skills/net-7d81ae06/SKILL.md +45 -0
  1161. package/skills/skills/net-7eabbbc8/SKILL.md +45 -0
  1162. package/skills/skills/net-7ed4f2c5/SKILL.md +45 -0
  1163. package/skills/skills/net-80b56cd6/SKILL.md +45 -0
  1164. package/skills/skills/net-83447546/SKILL.md +45 -0
  1165. package/skills/skills/net-8361fe5b/SKILL.md +45 -0
  1166. package/skills/skills/net-85e3996c/SKILL.md +45 -0
  1167. package/skills/skills/net-8897d5cc/SKILL.md +45 -0
  1168. package/skills/skills/net-88ad93a6/SKILL.md +45 -0
  1169. package/skills/skills/net-8e6f359e/SKILL.md +45 -0
  1170. package/skills/skills/net-8edc4cdb/SKILL.md +45 -0
  1171. package/skills/skills/net-8f6169e9/SKILL.md +45 -0
  1172. package/skills/skills/net-91e00638/SKILL.md +45 -0
  1173. package/skills/skills/net-96c61a3c/SKILL.md +45 -0
  1174. package/skills/skills/net-99076a29/SKILL.md +45 -0
  1175. package/skills/skills/net-998f3641/SKILL.md +45 -0
  1176. package/skills/skills/net-a1d7228a/SKILL.md +45 -0
  1177. package/skills/skills/net-a74da501/SKILL.md +45 -0
  1178. package/skills/skills/net-ac57deb7/SKILL.md +45 -0
  1179. package/skills/skills/net-b22d2f2b/SKILL.md +45 -0
  1180. package/skills/skills/net-b2b29d8d/SKILL.md +45 -0
  1181. package/skills/skills/net-b2ddce5d/SKILL.md +45 -0
  1182. package/skills/skills/net-b4151e9a/SKILL.md +45 -0
  1183. package/skills/skills/net-b873d6f7/SKILL.md +45 -0
  1184. package/skills/skills/net-bd3d2d55/SKILL.md +45 -0
  1185. package/skills/skills/net-c2a3f019/SKILL.md +45 -0
  1186. package/skills/skills/net-c685b788/SKILL.md +45 -0
  1187. package/skills/skills/net-c6c1fd79/SKILL.md +45 -0
  1188. package/skills/skills/net-c74a1b5d/SKILL.md +45 -0
  1189. package/skills/skills/net-cdac702d/SKILL.md +45 -0
  1190. package/skills/skills/net-d12dff5c/SKILL.md +45 -0
  1191. package/skills/skills/net-d3747882/SKILL.md +45 -0
  1192. package/skills/skills/net-d5fefa59/SKILL.md +45 -0
  1193. package/skills/skills/net-d67ec725/SKILL.md +45 -0
  1194. package/skills/skills/net-d80c1c4c/SKILL.md +45 -0
  1195. package/skills/skills/net-d9cb43b0/SKILL.md +45 -0
  1196. package/skills/skills/net-da559517/SKILL.md +45 -0
  1197. package/skills/skills/net-db4f414e/SKILL.md +45 -0
  1198. package/skills/skills/net-dc09d67c/SKILL.md +45 -0
  1199. package/skills/skills/net-e2d185de/SKILL.md +45 -0
  1200. package/skills/skills/net-e2fc73f8/SKILL.md +45 -0
  1201. package/skills/skills/net-e33ef0c2/SKILL.md +45 -0
  1202. package/skills/skills/net-e346863c/SKILL.md +45 -0
  1203. package/skills/skills/net-e6b3389a/SKILL.md +45 -0
  1204. package/skills/skills/net-e9758fc0/SKILL.md +45 -0
  1205. package/skills/skills/net-e9a9747a/SKILL.md +45 -0
  1206. package/skills/skills/net-ea14aab8/SKILL.md +45 -0
  1207. package/skills/skills/net-eba92ac1/SKILL.md +45 -0
  1208. package/skills/skills/net-f29d91d2/SKILL.md +45 -0
  1209. package/skills/skills/net-f314dd0d/SKILL.md +45 -0
  1210. package/skills/skills/net-f332b629/SKILL.md +45 -0
  1211. package/skills/skills/net-f7df127c/SKILL.md +45 -0
  1212. package/skills/skills/net-fb9d8f5d/SKILL.md +45 -0
  1213. package/skills/skills/net-fdec2c86/SKILL.md +45 -0
  1214. package/skills/skills/os-0205cf9b/SKILL.md +45 -0
  1215. package/skills/skills/os-027dc9be/SKILL.md +45 -0
  1216. package/skills/skills/os-03c0d7d6/SKILL.md +45 -0
  1217. package/skills/skills/os-040b5505/SKILL.md +45 -0
  1218. package/skills/skills/os-06fa98ed/SKILL.md +45 -0
  1219. package/skills/skills/os-0854291c/SKILL.md +45 -0
  1220. package/skills/skills/os-0c7f14cb/SKILL.md +45 -0
  1221. package/skills/skills/os-0d855af2/SKILL.md +45 -0
  1222. package/skills/skills/os-0e87e997/SKILL.md +45 -0
  1223. package/skills/skills/os-0f8ed882/SKILL.md +45 -0
  1224. package/skills/skills/os-111ce1de/SKILL.md +45 -0
  1225. package/skills/skills/os-1234eb00/SKILL.md +45 -0
  1226. package/skills/skills/os-128f3820/SKILL.md +45 -0
  1227. package/skills/skills/os-15796db5/SKILL.md +45 -0
  1228. package/skills/skills/os-1898928a/SKILL.md +45 -0
  1229. package/skills/skills/os-192b8ca9/SKILL.md +45 -0
  1230. package/skills/skills/os-1d3bcf28/SKILL.md +45 -0
  1231. package/skills/skills/os-1f224514/SKILL.md +45 -0
  1232. package/skills/skills/os-26a4f86a/SKILL.md +45 -0
  1233. package/skills/skills/os-29c96147/SKILL.md +45 -0
  1234. package/skills/skills/os-2ea9a5ff/SKILL.md +45 -0
  1235. package/skills/skills/os-300ef22c/SKILL.md +45 -0
  1236. package/skills/skills/os-310dda5b/SKILL.md +45 -0
  1237. package/skills/skills/os-313ef4ed/SKILL.md +45 -0
  1238. package/skills/skills/os-329a2147/SKILL.md +45 -0
  1239. package/skills/skills/os-34ad4b62/SKILL.md +45 -0
  1240. package/skills/skills/os-350bc623/SKILL.md +45 -0
  1241. package/skills/skills/os-35ee1a30/SKILL.md +45 -0
  1242. package/skills/skills/os-3cd28220/SKILL.md +45 -0
  1243. package/skills/skills/os-3d84e0c9/SKILL.md +45 -0
  1244. package/skills/skills/os-3db42aac/SKILL.md +45 -0
  1245. package/skills/skills/os-3e0aff42/SKILL.md +45 -0
  1246. package/skills/skills/os-3e9405d2/SKILL.md +45 -0
  1247. package/skills/skills/os-41d14544/SKILL.md +45 -0
  1248. package/skills/skills/os-462f3ed4/SKILL.md +45 -0
  1249. package/skills/skills/os-485833fa/SKILL.md +45 -0
  1250. package/skills/skills/os-4a1cf781/SKILL.md +45 -0
  1251. package/skills/skills/os-4bf77933/SKILL.md +45 -0
  1252. package/skills/skills/os-4c14cec2/SKILL.md +45 -0
  1253. package/skills/skills/os-4f05d577/SKILL.md +45 -0
  1254. package/skills/skills/os-4f50ad0b/SKILL.md +45 -0
  1255. package/skills/skills/os-509a4596/SKILL.md +45 -0
  1256. package/skills/skills/os-512b1b6c/SKILL.md +45 -0
  1257. package/skills/skills/os-5192621b/SKILL.md +45 -0
  1258. package/skills/skills/os-55672763/SKILL.md +45 -0
  1259. package/skills/skills/os-5582bce6/SKILL.md +45 -0
  1260. package/skills/skills/os-5a096a1f/SKILL.md +45 -0
  1261. package/skills/skills/os-5ca15108/SKILL.md +45 -0
  1262. package/skills/skills/os-601663e1/SKILL.md +45 -0
  1263. package/skills/skills/os-607f1963/SKILL.md +45 -0
  1264. package/skills/skills/os-6158581b/SKILL.md +45 -0
  1265. package/skills/skills/os-62f9278b/SKILL.md +45 -0
  1266. package/skills/skills/os-63797b86/SKILL.md +45 -0
  1267. package/skills/skills/os-6a1fe224/SKILL.md +45 -0
  1268. package/skills/skills/os-6b0a68bf/SKILL.md +45 -0
  1269. package/skills/skills/os-6e5cee67/SKILL.md +45 -0
  1270. package/skills/skills/os-6fb1ff58/SKILL.md +45 -0
  1271. package/skills/skills/os-71389592/SKILL.md +45 -0
  1272. package/skills/skills/os-72e879a3/SKILL.md +45 -0
  1273. package/skills/skills/os-7598748a/SKILL.md +45 -0
  1274. package/skills/skills/os-80cc3283/SKILL.md +45 -0
  1275. package/skills/skills/os-819f3093/SKILL.md +45 -0
  1276. package/skills/skills/os-83670c2b/SKILL.md +45 -0
  1277. package/skills/skills/os-878c18b3/SKILL.md +45 -0
  1278. package/skills/skills/os-89ed7af1/SKILL.md +45 -0
  1279. package/skills/skills/os-8cb7279d/SKILL.md +45 -0
  1280. package/skills/skills/os-92276145/SKILL.md +45 -0
  1281. package/skills/skills/os-955c4d66/SKILL.md +45 -0
  1282. package/skills/skills/os-97aacf40/SKILL.md +45 -0
  1283. package/skills/skills/os-9b6ed02c/SKILL.md +45 -0
  1284. package/skills/skills/os-9c86a7a2/SKILL.md +45 -0
  1285. package/skills/skills/os-a13ce4aa/SKILL.md +45 -0
  1286. package/skills/skills/os-a568affe/SKILL.md +45 -0
  1287. package/skills/skills/os-abd48f17/SKILL.md +45 -0
  1288. package/skills/skills/os-b0416edc/SKILL.md +45 -0
  1289. package/skills/skills/os-b6509cac/SKILL.md +45 -0
  1290. package/skills/skills/os-b718657b/SKILL.md +45 -0
  1291. package/skills/skills/os-b776ade1/SKILL.md +45 -0
  1292. package/skills/skills/os-ba24fa08/SKILL.md +45 -0
  1293. package/skills/skills/os-bd1fc177/SKILL.md +45 -0
  1294. package/skills/skills/os-bda92711/SKILL.md +45 -0
  1295. package/skills/skills/os-c0fa71bd/SKILL.md +45 -0
  1296. package/skills/skills/os-c3d5cd44/SKILL.md +45 -0
  1297. package/skills/skills/os-c6b6a763/SKILL.md +45 -0
  1298. package/skills/skills/os-c7661eb1/SKILL.md +45 -0
  1299. package/skills/skills/os-c76b5a43/SKILL.md +45 -0
  1300. package/skills/skills/os-c7d35a30/SKILL.md +45 -0
  1301. package/skills/skills/os-c980a25d/SKILL.md +45 -0
  1302. package/skills/skills/os-c9f8df6e/SKILL.md +45 -0
  1303. package/skills/skills/os-cc49ef2f/SKILL.md +45 -0
  1304. package/skills/skills/os-cd9e686a/SKILL.md +45 -0
  1305. package/skills/skills/os-cfa66a1b/SKILL.md +45 -0
  1306. package/skills/skills/os-d237e500/SKILL.md +45 -0
  1307. package/skills/skills/os-d39ef086/SKILL.md +45 -0
  1308. package/skills/skills/os-d4f9e813/SKILL.md +45 -0
  1309. package/skills/skills/os-d97915c0/SKILL.md +45 -0
  1310. package/skills/skills/os-da0aadde/SKILL.md +45 -0
  1311. package/skills/skills/os-da482caf/SKILL.md +45 -0
  1312. package/skills/skills/os-dd4ff45e/SKILL.md +45 -0
  1313. package/skills/skills/os-de0556c5/SKILL.md +45 -0
  1314. package/skills/skills/os-e0ad3364/SKILL.md +45 -0
  1315. package/skills/skills/os-e7612c68/SKILL.md +45 -0
  1316. package/skills/skills/os-ea444e45/SKILL.md +45 -0
  1317. package/skills/skills/os-ea6e7e0b/SKILL.md +45 -0
  1318. package/skills/skills/os-ebc34d83/SKILL.md +45 -0
  1319. package/skills/skills/os-ecbebbe3/SKILL.md +45 -0
  1320. package/skills/skills/os-ecfceae7/SKILL.md +45 -0
  1321. package/skills/skills/os-ed8de3a3/SKILL.md +45 -0
  1322. package/skills/skills/os-f69c0b08/SKILL.md +45 -0
  1323. package/skills/skills/os-f6ae6205/SKILL.md +45 -0
  1324. package/skills/skills/os-f9bf8dd4/SKILL.md +45 -0
  1325. package/skills/skills/os-fcdd828d/SKILL.md +45 -0
  1326. package/skills/skills/pylang-01b23f80/SKILL.md +45 -0
  1327. package/skills/skills/pylang-074fd698/SKILL.md +45 -0
  1328. package/skills/skills/pylang-0b490bb2/SKILL.md +45 -0
  1329. package/skills/skills/pylang-0ca7f08b/SKILL.md +45 -0
  1330. package/skills/skills/pylang-10ce3e91/SKILL.md +45 -0
  1331. package/skills/skills/pylang-15f76c64/SKILL.md +45 -0
  1332. package/skills/skills/pylang-1703046f/SKILL.md +45 -0
  1333. package/skills/skills/pylang-1aa3e939/SKILL.md +45 -0
  1334. package/skills/skills/pylang-1bed54cf/SKILL.md +45 -0
  1335. package/skills/skills/pylang-1dd35612/SKILL.md +45 -0
  1336. package/skills/skills/pylang-24273d7b/SKILL.md +45 -0
  1337. package/skills/skills/pylang-2853f59f/SKILL.md +45 -0
  1338. package/skills/skills/pylang-2a6bc16e/SKILL.md +45 -0
  1339. package/skills/skills/pylang-2ae78997/SKILL.md +45 -0
  1340. package/skills/skills/pylang-2bc88f4c/SKILL.md +45 -0
  1341. package/skills/skills/pylang-31f5b8db/SKILL.md +45 -0
  1342. package/skills/skills/pylang-36d178bc/SKILL.md +45 -0
  1343. package/skills/skills/pylang-38600583/SKILL.md +45 -0
  1344. package/skills/skills/pylang-38e8f9ff/SKILL.md +45 -0
  1345. package/skills/skills/pylang-395085ca/SKILL.md +45 -0
  1346. package/skills/skills/pylang-399b317e/SKILL.md +45 -0
  1347. package/skills/skills/pylang-39c72c78/SKILL.md +45 -0
  1348. package/skills/skills/pylang-3a659480/SKILL.md +45 -0
  1349. package/skills/skills/pylang-482be62b/SKILL.md +45 -0
  1350. package/skills/skills/pylang-486a1e94/SKILL.md +45 -0
  1351. package/skills/skills/pylang-49026041/SKILL.md +45 -0
  1352. package/skills/skills/pylang-4963b28a/SKILL.md +45 -0
  1353. package/skills/skills/pylang-4af9140e/SKILL.md +45 -0
  1354. package/skills/skills/pylang-4ca283f2/SKILL.md +45 -0
  1355. package/skills/skills/pylang-4ddf31f3/SKILL.md +45 -0
  1356. package/skills/skills/pylang-50614726/SKILL.md +45 -0
  1357. package/skills/skills/pylang-5102c069/SKILL.md +45 -0
  1358. package/skills/skills/pylang-521b1bf8/SKILL.md +45 -0
  1359. package/skills/skills/pylang-5880b7a1/SKILL.md +45 -0
  1360. package/skills/skills/pylang-61a9102d/SKILL.md +45 -0
  1361. package/skills/skills/pylang-621123dd/SKILL.md +45 -0
  1362. package/skills/skills/pylang-642cd625/SKILL.md +45 -0
  1363. package/skills/skills/pylang-65ca79b7/SKILL.md +45 -0
  1364. package/skills/skills/pylang-672df225/SKILL.md +45 -0
  1365. package/skills/skills/pylang-67d3368e/SKILL.md +45 -0
  1366. package/skills/skills/pylang-6be54340/SKILL.md +45 -0
  1367. package/skills/skills/pylang-70b2006f/SKILL.md +45 -0
  1368. package/skills/skills/pylang-70b215f1/SKILL.md +45 -0
  1369. package/skills/skills/pylang-730c3fe4/SKILL.md +45 -0
  1370. package/skills/skills/pylang-733c1286/SKILL.md +45 -0
  1371. package/skills/skills/pylang-79845f4d/SKILL.md +45 -0
  1372. package/skills/skills/pylang-7c4cc6f8/SKILL.md +45 -0
  1373. package/skills/skills/pylang-7c7193ad/SKILL.md +45 -0
  1374. package/skills/skills/pylang-7d86ab5d/SKILL.md +45 -0
  1375. package/skills/skills/pylang-7df8ca78/SKILL.md +45 -0
  1376. package/skills/skills/pylang-8182681d/SKILL.md +45 -0
  1377. package/skills/skills/pylang-81ad40ee/SKILL.md +45 -0
  1378. package/skills/skills/pylang-8283d7c0/SKILL.md +45 -0
  1379. package/skills/skills/pylang-82b73f3d/SKILL.md +45 -0
  1380. package/skills/skills/pylang-8404bbde/SKILL.md +45 -0
  1381. package/skills/skills/pylang-8584040d/SKILL.md +45 -0
  1382. package/skills/skills/pylang-85d8617b/SKILL.md +45 -0
  1383. package/skills/skills/pylang-886935a3/SKILL.md +45 -0
  1384. package/skills/skills/pylang-88ab2f96/SKILL.md +45 -0
  1385. package/skills/skills/pylang-8b6f071e/SKILL.md +45 -0
  1386. package/skills/skills/pylang-8d6ec58a/SKILL.md +45 -0
  1387. package/skills/skills/pylang-8fe98252/SKILL.md +45 -0
  1388. package/skills/skills/pylang-9018c39a/SKILL.md +45 -0
  1389. package/skills/skills/pylang-91277748/SKILL.md +45 -0
  1390. package/skills/skills/pylang-943b9dcb/SKILL.md +45 -0
  1391. package/skills/skills/pylang-961e9e43/SKILL.md +45 -0
  1392. package/skills/skills/pylang-962954d9/SKILL.md +45 -0
  1393. package/skills/skills/pylang-9dbd8e2b/SKILL.md +45 -0
  1394. package/skills/skills/pylang-a02eac31/SKILL.md +45 -0
  1395. package/skills/skills/pylang-a4d3d7b1/SKILL.md +45 -0
  1396. package/skills/skills/pylang-a7c3d0e2/SKILL.md +45 -0
  1397. package/skills/skills/pylang-a88db70d/SKILL.md +45 -0
  1398. package/skills/skills/pylang-ab7dddc2/SKILL.md +45 -0
  1399. package/skills/skills/pylang-ac2a4b38/SKILL.md +45 -0
  1400. package/skills/skills/pylang-afaf67c0/SKILL.md +45 -0
  1401. package/skills/skills/pylang-b00660e6/SKILL.md +45 -0
  1402. package/skills/skills/pylang-b4d7616d/SKILL.md +45 -0
  1403. package/skills/skills/pylang-b67b1878/SKILL.md +45 -0
  1404. package/skills/skills/pylang-b8040e1c/SKILL.md +45 -0
  1405. package/skills/skills/pylang-b880c6c6/SKILL.md +45 -0
  1406. package/skills/skills/pylang-b8d45f76/SKILL.md +45 -0
  1407. package/skills/skills/pylang-ba956e52/SKILL.md +45 -0
  1408. package/skills/skills/pylang-bb18b1f9/SKILL.md +45 -0
  1409. package/skills/skills/pylang-bb46f3f2/SKILL.md +45 -0
  1410. package/skills/skills/pylang-be55a094/SKILL.md +45 -0
  1411. package/skills/skills/pylang-beb47b63/SKILL.md +45 -0
  1412. package/skills/skills/pylang-c017681a/SKILL.md +45 -0
  1413. package/skills/skills/pylang-c1317cd9/SKILL.md +45 -0
  1414. package/skills/skills/pylang-c36fabf7/SKILL.md +45 -0
  1415. package/skills/skills/pylang-c42465ec/SKILL.md +45 -0
  1416. package/skills/skills/pylang-c5c76a12/SKILL.md +45 -0
  1417. package/skills/skills/pylang-c910ad31/SKILL.md +45 -0
  1418. package/skills/skills/pylang-ca9332cf/SKILL.md +45 -0
  1419. package/skills/skills/pylang-cce90fa0/SKILL.md +45 -0
  1420. package/skills/skills/pylang-cd4234a5/SKILL.md +45 -0
  1421. package/skills/skills/pylang-cf0fca1c/SKILL.md +45 -0
  1422. package/skills/skills/pylang-d2001e1f/SKILL.md +45 -0
  1423. package/skills/skills/pylang-d616eb28/SKILL.md +45 -0
  1424. package/skills/skills/pylang-d8962e66/SKILL.md +45 -0
  1425. package/skills/skills/pylang-db6214cd/SKILL.md +45 -0
  1426. package/skills/skills/pylang-dcde3040/SKILL.md +45 -0
  1427. package/skills/skills/pylang-dfad3dba/SKILL.md +45 -0
  1428. package/skills/skills/pylang-dfd5aac2/SKILL.md +45 -0
  1429. package/skills/skills/pylang-e1aa3818/SKILL.md +45 -0
  1430. package/skills/skills/pylang-e476915b/SKILL.md +45 -0
  1431. package/skills/skills/pylang-e88e31fd/SKILL.md +45 -0
  1432. package/skills/skills/pylang-ecd569d2/SKILL.md +45 -0
  1433. package/skills/skills/pylang-ecf27e0c/SKILL.md +45 -0
  1434. package/skills/skills/pylang-f124f0e6/SKILL.md +45 -0
  1435. package/skills/skills/pylang-f127a8d1/SKILL.md +45 -0
  1436. package/skills/skills/pylang-f2d6ec27/SKILL.md +45 -0
  1437. package/skills/skills/pylang-f2f40090/SKILL.md +45 -0
  1438. package/skills/skills/pylang-f4aa9e65/SKILL.md +45 -0
  1439. package/skills/skills/pylang-f4f820d4/SKILL.md +45 -0
  1440. package/skills/skills/pylang-f5b34833/SKILL.md +45 -0
  1441. package/skills/skills/pylang-f6ebb66e/SKILL.md +45 -0
  1442. package/skills/skills/pylang-f78bdcd7/SKILL.md +45 -0
  1443. package/skills/skills/pylang-f92bc49b/SKILL.md +45 -0
  1444. package/skills/skills/pylang-fd7595f0/SKILL.md +45 -0
  1445. package/skills/skills/pylang-fda87aa1/SKILL.md +45 -0
  1446. package/skills/skills/vm-arithmetic/SKILL.md +45 -0
  1447. package/skills/skills/vm-array-ops/SKILL.md +45 -0
  1448. package/skills/skills/vm-closure-call/SKILL.md +45 -0
  1449. package/skills/skills/vm-closure-create/SKILL.md +45 -0
  1450. package/skills/skills/vm-compare/SKILL.md +45 -0
  1451. package/skills/skills/vm-cond-jump/SKILL.md +45 -0
  1452. package/skills/skills/vm-cond-space/SKILL.md +45 -0
  1453. package/skills/skills/vm-exception/SKILL.md +45 -0
  1454. package/skills/skills/vm-func-call/SKILL.md +45 -0
  1455. package/skills/skills/vm-loop-run/SKILL.md +45 -0
  1456. package/skills/skills/vm-profiling/SKILL.md +45 -0
  1457. package/skills/skills/vm-refcount/SKILL.md +45 -0
  1458. package/skills/skills/vm-run-loop/SKILL.md +45 -0
  1459. package/skills/skills/vm-short-circuit/SKILL.md +45 -0
  1460. package/skills/skills/vm-stack-guard/SKILL.md +45 -0
  1461. package/skills/skills/vm-stack-ops/SKILL.md +45 -0
  1462. package/skills/skills/vm-trust-accum/SKILL.md +45 -0
  1463. package/src/bridge.ts +7 -7
  1464. package/src/hooks.ts +78 -27
  1465. package/src/index.ts +246 -66
  1466. package/src/lib/datapath.ts +112 -0
  1467. package/src/lib/mdcg_client.ts +329 -0
  1468. package/src/lib/roleplay_web.ts +932 -0
  1469. package/src/{llm_adapter.ts → lib/whitebox_llm.ts} +13 -7
  1470. package/src/tools.ts +41 -55
  1471. /package/src/{mutual.ts → lib/mutual.ts} +0 -0
@@ -0,0 +1,2445 @@
1
+ # -*- coding: utf-8 -*-
2
+ """md_cg · MCP server(记忆操作系统对外接口)
3
+
4
+ 把 MdCGOS(认知图 + 记忆 OS 七项能力)暴露为标准 MCP 服务:
5
+ · 传输:stdio(逐行 JSON-RPC 2.0,UTF-8)
6
+ · 协议:2024-11-05
7
+ · 零第三方依赖(D-005)
8
+
9
+ 启动:
10
+ MDCG_ROOT=<认知图目录> MDCG_ACTOR=<调用方> python -m md_cg.mcp_server
11
+
12
+ DSH 侧配置(cordis.yml / MCP client):
13
+ command: python
14
+ args: ["-m", "md_cg.mcp_server"]
15
+ env: { MDCG_ROOT: "...", PYTHONPATH: ".../dsh-memory" }
16
+
17
+ 工具面(默认 kernel 只暴露 2 个基元 cg/stg;MDCG_MCP_SURFACE=full 时
18
+ 另有 31 个细粒度工具,供兼容/调试):
19
+ 写:mdcg_remember(gated=true 走主动遗忘闸门)/ mdcg_rejected /
20
+ mdcg_unresolved / mdcg_propose
21
+ 目标/近期:cg(op=goal) 目标槽 / cg(op=recent) 近期事件窗口
22
+ 读:mdcg_get / mdcg_search / mdcg_recall / mdcg_review_list /
23
+ mdcg_review_records
24
+ 认知:mdcg_reflect / mdcg_verify / mdcg_flywheel / mdcg_mine_fix_pairs /
25
+ mdcg_consistency(节点间冲突检测:check/history/stats/catalog)/
26
+ mdcg_metacognition(独立元认知:report/trace/calibration/blindspots/
27
+ trust/self_check/history/catalog)/
28
+ mdcg_self_state(自我状态层:snapshot/refresh/bootstrap/relate/
29
+ relations/index/dimensions/audit/history/summary/catalog)/
30
+ mdcg_predict(生成式预测:routes/feedback/stats/catalog)/
31
+ mdcg_causal(因果推理:path/gate/chain/explain/catalog)
32
+ 生命周期:mdcg_forget(override)/ mdcg_restore / mdcg_review_decide
33
+ 保护/遗忘:mdcg_protect(盘点/查询/标记/快照/历史)/
34
+ mdcg_forgetting_history(三问四态留痕)
35
+ 身份识别:mdcg_identity(observe/anchor/trait/profile/positions/catalog)
36
+ 运维:mdcg_health / mdcg_whoami / mdcg_ingest / mdcg_watermarks /
37
+ mdcg_service_info
38
+ """
39
+ from __future__ import annotations
40
+
41
+ import json
42
+ import json
43
+ import os
44
+ import sys
45
+
46
+ SERVER_NAME = "mdcg-mcp"
47
+ SERVER_VERSION = "0.1.0"
48
+ PROTOCOL_VERSION = "2024-11-05"
49
+
50
+
51
+ # --------------------------------------------------------------------------
52
+ # 工具定义
53
+ # --------------------------------------------------------------------------
54
+
55
+ def _s(_desc, **props):
56
+ return {"type": "object", "properties": props, "required":
57
+ [k for k, v in props.items() if v.get("_req")]}
58
+
59
+
60
+ def _p(t, desc, req=False):
61
+ d = {"type": t, "description": desc}
62
+ if req:
63
+ d["_req"] = True
64
+ return d
65
+
66
+
67
+ def _make_query_expand(exp):
68
+ """把调用方(LLM/多智能体)提供的扩展词包装成 query_expand 注入函数。
69
+
70
+ 黑箱只在**查询时刻**:调用方给出 {term,weight},索引侧仍是白箱词表匹配。
71
+ 返回的函数与 md_cg.mdcg.expand_query_terms_weighted 同构,并在 __source__ 标注 llm。
72
+ """
73
+ if not exp:
74
+ return None
75
+ from .mdcg import expand_query_terms_weighted
76
+
77
+ def _expand(q, _exp=exp):
78
+ out = expand_query_terms_weighted(q)
79
+ for it in _exp:
80
+ if isinstance(it, dict):
81
+ term = str(it.get("term") or "").strip()
82
+ try:
83
+ w = float(it.get("weight", 0.5))
84
+ except (TypeError, ValueError):
85
+ w = 0.5
86
+ else:
87
+ term, w = str(it).strip(), 0.5
88
+ if term:
89
+ out[term] = max(out.get(term, 0.0), max(0.0, min(1.0, w)))
90
+ out["__source__"] = "llm"
91
+ return out
92
+
93
+ return _expand
94
+
95
+
96
+ TOOLS = [
97
+ {
98
+ "name": "mdcg_remember",
99
+ "description": "写入一条记忆节点(md 认知图)。content 建议含 CCG 5 要素注释"
100
+ "(# 功能名/# 生效条件/# 子功能/# 执行/# 验证方式/# 不适用条件)。"
101
+ "gated=true 时先经主动遗忘闸门(三问→四态:ACCEPT/MERGE/DROP/DEFER),"
102
+ "适用于写入情景层记忆时的筛选(未指定 layer 时默认 contextual)。",
103
+ "inputSchema": _s("", node_id=_p("string", "节点 id(省略则自动生成)"),
104
+ content=_p("string", "节点内容", True),
105
+ layer=_p("string", "层:anchor|structural|knowledge|contextual|self"),
106
+ role=_p("string", "角色:knowledge|user|assistant|tool-output|command|edit"
107
+ "(兼作来源证据:user=外部惊奇,command/tool-output=内部确定性)"),
108
+ tags=_p("array", "标签"), importance=_p("number", "重要性 0-1"),
109
+ importance_hint=_p("number", "闸门的重要性提示(≥0.7 保护优先直接 ACCEPT)"),
110
+ gated=_p("boolean", "启用主动遗忘闸门(默认否;写情景层建议开)"),
111
+ override=_p("boolean", "覆盖受保护节点需显式 true"),
112
+ consistency=_p("boolean", "写入前节点间自动冲突检测(三级决策,默认 true)"),
113
+ on_conflict=_p("string", "冲突处置:reject(默认,抛错)|defer(不写)|record(记录放行)"),
114
+ condition_space=_p("object", "条件空间"),
115
+ verification_basis=_p("string", "验证基底"),
116
+ non_applicable_conditions=_p("array", "不适用条件")),
117
+ },
118
+ {
119
+ "name": "mdcg_recall",
120
+ "description": "按 token 预算召回记忆包(RRF 多路融合,超大条目跳过而非停下)。"
121
+ "会话开始或重要工作前调用。可选启用第 5 路模糊召回(分级隶属度)"
122
+ "与第 6 路条件语义路(条件结构驱动),并注入调用方 LLM 的查询"
123
+ "扩展词(索引侧始终白箱)。",
124
+ "inputSchema": _s("", query=_p("string", "描述当前任务的查询", True),
125
+ budget_tokens=_p("integer", "token 预算(默认 1200)"),
126
+ k=_p("integer", "候选上限"), context=_p("object", "当前情境条件空间"),
127
+ include_work=_p("boolean", "是否含工具输出/命令/编辑(默认否)"),
128
+ fuzzy=_p("boolean", "启用第 5 路模糊召回(分级隶属度,默认否)"),
129
+ semantic=_p("boolean", "启用第 6 路条件空间结构化匹配"
130
+ "(白箱语义路:CCG 生效条件 + condition_space "
131
+ "四槽,不适用条件命中即剔除;默认否)"),
132
+ expand=_p("array", "LLM 查询侧扩展词:[{term,weight}] 或 [\"词\"];"
133
+ "仅在查询时刻生效,索引侧仍白箱"),
134
+ goal=_p("string", "当前目标(第 5 篇第 3 章):启用 goal 路给召回定向;"
135
+ "省略则自动取活跃目标"),
136
+ goal_path=_p("boolean", "启用目标定向路(默认否;给 goal 即自动启用)"),
137
+ include_recent=_p("boolean", "是否附「近期事件」窗口(默认否)"),
138
+ recent_limit=_p("integer", "近期事件条数(默认 10)"),
139
+ fusion=_p("string", "融合模式:sum(经典 RRF,奖励多路共识)"
140
+ "| max(取各路最高贡献,不奖励共识)。"
141
+ "fuzzy=true 时缺省 max——实测 sum 会低估"
142
+ "「只有模糊路捞到」的目标,self@1 −10.1%")),
143
+ },
144
+ {
145
+ "name": "mdcg_search",
146
+ "description": "精确检索(T0–T3 阶梯 + 四态资格判定)。返回 score/state/tier。",
147
+ "inputSchema": _s("", query=_p("string", "查询", True), k=_p("integer", "条数"),
148
+ layer=_p("string", "限定层"), context=_p("object", "情境"),
149
+ roles=_p("array", "限定角色"), include_work=_p("boolean", "含工作角色")),
150
+ },
151
+ {
152
+ "name": "mdcg_get",
153
+ "description": "按 id 读取一个记忆节点(frontmatter + content)。",
154
+ "inputSchema": _s("", node_id=_p("string", "节点 id", True)),
155
+ },
156
+ {
157
+ "name": "mdcg_reflect",
158
+ "description": "反思单元:记录本次查询的信息差 D(t,C) 与二阶 d²D/dt²,写 _reflection.jsonl。",
159
+ "inputSchema": _s("", query=_p("string", "查询", True), k=_p("integer", "取前 k 条"),
160
+ feedback=_p("string", "用户反馈(可选)")),
161
+ },
162
+ {
163
+ "name": "mdcg_verify",
164
+ "description": "验证单元:对节点做外部裁决 confirmed/weakened/falsified"
165
+ "(falsified 会移入 rejected/ 负记忆)。",
166
+ "inputSchema": _s("", node_id=_p("string", "节点 id", True),
167
+ evidence=_p("string", "证据", True),
168
+ verdict=_p("string", "confirmed|weakened|falsified", True)),
169
+ },
170
+ {
171
+ "name": "mdcg_flywheel",
172
+ "description": "知识飞轮:把一次误差(预期状态 vs 实际状态)转为 unresolved 条目,驱动补条件。",
173
+ "inputSchema": _s("", error_report=_p("object", "错误报告 {query,expected_state,actual_state,missing}", True)),
174
+ },
175
+ {
176
+ "name": "mdcg_mine_fix_pairs",
177
+ "description": "从行为日志自动挖掘「错误→修复」对:产出可路由修复知识 + rejected 负记忆。",
178
+ "inputSchema": _s("", events=_p("array", "事件列表 [{role,text}] 或 [{error,fix}]", True)),
179
+ },
180
+ {
181
+ "name": "mdcg_rejected",
182
+ "description": "写入负记忆(被证伪的假设),防重复踩坑;同内容幂等。",
183
+ "inputSchema": _s("", hypothesis=_p("string", "假设", True), reason=_p("string", "否决原因", True),
184
+ verification_basis=_p("string", "验证基底"), tags=_p("array", "标签")),
185
+ },
186
+ {
187
+ "name": "mdcg_unresolved",
188
+ "description": "写入未解问题(驱动主动探索)。",
189
+ "inputSchema": _s("", question=_p("string", "问题", True), known_clues=_p("string", "已知线索"),
190
+ goal=_p("string", "目标")),
191
+ },
192
+ {
193
+ "name": "mdcg_propose",
194
+ "description": "把一个候选记忆放入审核队列(海马体 inbox),等待 review_decide。",
195
+ "inputSchema": _s("", node_id=_p("string", "节点 id", True), content=_p("string", "内容", True),
196
+ layer=_p("string", "层"), tags=_p("array", "标签"),
197
+ condition_space=_p("object", "条件空间"),
198
+ verify=_p("object", "验收判据(内联声明,裁决阶段只读)")),
199
+ },
200
+ {
201
+ "name": "mdcg_review_list",
202
+ "description": "列出待审核候选;被红队打回待再审批的条目带 status=needs_reapproval。",
203
+ "inputSchema": _s(""),
204
+ },
205
+ {
206
+ "name": "mdcg_review_decide",
207
+ "description": "审核裁决:accept / reject / edit / merge(merge 需 merge_into)。"
208
+ "redteam.verdict=reject 不落库,转 needs_reapproval,"
209
+ "修复后须带递增 round 的 pass 再审批;判据只读不可改。",
210
+ "inputSchema": _s("", pid=_p("string", "提案 id", True),
211
+ decision=_p("string", "accept|reject|edit|merge", True),
212
+ edits=_p("object", "edit 时的覆盖字段"), merge_into=_p("string", "merge 目标节点 id"),
213
+ reason=_p("string", "裁决理由"),
214
+ redteam=_p("object", "红队裁决 {verdict:pass|reject, issues:[], round:n}"),
215
+ issues=_p("array", "问题清单(打回理由)")),
216
+ },
217
+ {
218
+ "name": "mdcg_review_records",
219
+ "description": "裁决记录审计:列出 md 审计节点(self 层,供其他来源审计);"
220
+ "给 node_id 则复核该记录的 record_hash 与 "
221
+ "hippocampus/decisions.jsonl 是否一致。",
222
+ "inputSchema": _s("", pid=_p("string", "只看某提案的记录"),
223
+ node_id=_p("string", "复核该审计节点 id")),
224
+ },
225
+ {
226
+ "name": "mdcg_forget",
227
+ "description": "软删除(tombstone):节点移入 trash/ 并写入删除清单,可审计。"
228
+ "受保护节点(self/anchor 层、protected 标记、importance≥0.7)"
229
+ "不可遗忘,需显式 override=true(旧版本自动快照 + 留痕)。",
230
+ "inputSchema": _s("", node_id=_p("string", "节点 id", True), reason=_p("string", "原因"),
231
+ override=_p("boolean", "受保护节点需显式 true 才可删除")),
232
+ },
233
+ {
234
+ "name": "mdcg_protect",
235
+ "description": "写保护(不可遗忘/不可覆盖):action=stats 盘点 / check 查询某节点"
236
+ "保护状态 / mark 打保护标记(需 can_admin)/ snapshot 快照当前版本 / "
237
+ "history 列历史版本 / forgetting 读主动遗忘裁决留痕。",
238
+ "inputSchema": _s("", action=_p("string", "stats|check|mark|snapshot|history|forgetting"),
239
+ node_id=_p("string", "check/mark/snapshot/history 的节点 id"),
240
+ reason=_p("string", "mark 的保护原因"),
241
+ limit=_p("integer", "forgetting 的最近条数(默认 100)")),
242
+ },
243
+ {
244
+ "name": "mdcg_forgetting_history",
245
+ "description": "主动遗忘裁决留痕:ACCEPT/MERGE/DROP/DEFER 四态及三问判据"
246
+ "(重复度/重要度/自信息代理),可审计「为什么没被记住」。",
247
+ "inputSchema": _s("", limit=_p("integer", "最近条数(默认 100)")),
248
+ },
249
+ {
250
+ "name": "mdcg_identity",
251
+ "description": "身份特征识别(不止「用户画像」):识别每个主体(智能体自身 self / "
252
+ "协作者 user / 扮演角色 role / 其他智能体 agent)的身份锚点、位置效应"
253
+ "(智能论 v3.4 五大单元:记录=全/反思=新/验证=稳/输出=通/维生=存)"
254
+ "与条件特征。action=observe 记行为证据(memory 接口)/ anchor 写身份"
255
+ "锚点(不可遗忘,role 不得进 self 层)/ trait 写条件特征(values 接口)"
256
+ "/ profile 取画像 / positions 看主体位置分布 / catalog 读位置效应表。",
257
+ "inputSchema": _s("", action=_p("string", "observe|anchor|trait|profile|positions|"
258
+ "catalog|history"),
259
+ subject_id=_p("string", "主体:self:xx|user:xx|role:xx|agent:xx"),
260
+ subject_kind=_p("string", "主体类型:self|user|role|agent"),
261
+ content=_p("string", "observe/anchor 的文本"),
262
+ trait=_p("string", "trait 的特征文本"),
263
+ role=_p("string", "observe 的行为角色(兼作来源证据)"),
264
+ position=_p("string", "位置效应:record|reflect|verify|output|sustain"),
265
+ layer=_p("string", "observe 落层(默认 knowledge)"),
266
+ tags=_p("array", "标签"),
267
+ condition_space=_p("object", "条件空间(=触发时机)"),
268
+ importance=_p("number", "重要度 0-1"),
269
+ verification_basis=_p("string", "验证基底"),
270
+ evidence=_p("string", "证据来源标记"),
271
+ requested_layer=_p("string", "anchor 目标层(role≠self 时禁止 self)"),
272
+ override=_p("boolean", "覆盖受保护锚点需显式 true"),
273
+ limit=_p("integer", "positions/history 返回条数")),
274
+ },
275
+ {
276
+ "name": "mdcg_consistency",
277
+ "description": "节点间自动冲突检测(写入前校验,三级决策):"
278
+ "L0 情绪=信息差二阶变化(approaching/stable/avoiding,独立通道"
279
+ "不参与信任计算)→ L1 反思=条件论「反题」冲突检测"
280
+ "(自否定/违反纪律/条件互斥)→ L2 递归反思(受深度/节点数/"
281
+ "循环/信息增益门槛约束)。action=check 预检待写内容(不落盘)/ "
282
+ "history 判定留痕 / stats 汇总 / catalog 自描述。"
283
+ "冲突自动触发飞轮(误差→补条件→结构更新)。",
284
+ "inputSchema": _s("", action=_p("string", "check|history|stats|catalog"),
285
+ content=_p("string", "check 的待写内容"),
286
+ layer=_p("string", "check:只与该层节点比对"),
287
+ condition_space=_p("object", "check:待写节点的条件空间"),
288
+ non_applicable_conditions=_p("array", "check:不适用条件"),
289
+ tags=_p("array", "check:标签"),
290
+ exclude=_p("string", "check:排除自身节点 id"),
291
+ depth=_p("integer", "check:递归反思深度上限"),
292
+ auto_flywheel=_p("boolean", "check:冲突时自动投递飞轮"),
293
+ limit=_p("integer", "check 扫描上限 / history 条数")),
294
+ },
295
+ {
296
+ "name": "mdcg_metacognition",
297
+ "description": "独立元认知(观察自身认知的二阶单元,不参与裁决):"
298
+ "情绪=信息差二阶变化 d²D/dt²(§十一)→ 轨迹面;"
299
+ "自信校准(期望正确率 vs 实际验证通过率,过度自信/过度保守)→ 校准面;"
300
+ "盲区地图(反复 BLINDSPOT 的查询邻域 + 未解问题,推论三)→ 盲区面;"
301
+ "P_gap/P_trust + 情感 d²T/dt²(§十)→ 信任面。"
302
+ "action=report 完整报告(含确定性建议)/ trace / calibration / "
303
+ "blindspots / trust / self_check(回答前自检:该直接答还是先补条件)"
304
+ " / history / catalog。只读留痕,不改事实层。",
305
+ "inputSchema": _s("", action=_p("string", "report|trace|calibration|"
306
+ "blindspots|trust|self_check|"
307
+ "history|catalog"),
308
+ query=_p("string", "self_check 的待答查询"),
309
+ k=_p("integer", "self_check:相似历史条数"),
310
+ window=_p("integer", "轨迹/信任的滚动窗口"),
311
+ limit=_p("integer", "calibration 扫描上限 / "
312
+ "blindspots、history 条数")),
313
+ },
314
+ {
315
+ "name": "mdcg_self_state",
316
+ "description": "自我状态层(薄自我 + 富索引):self 层只放一张自我状态卡"
317
+ "(单例)+ 有向关系节点,登记八项自我信息的当前值与指针"
318
+ "(信息差 D/d1/d2、信任 P_gap/P_trust、情绪=d²D/dt²、"
319
+ "情感=d²T/dt²、短期记忆窗口摘要、重要性、身份锚点、关系度);"
320
+ "具体任务/人物/会话/时间/信任的细节仍留在原层,按五维索引"
321
+ "(task/person/session/time/trust)连接过来,不搬运内容。"
322
+ "action=snapshot 读卡 / refresh 刷新(幂等 + 版本链) / "
323
+ "bootstrap 会话启动加载 / relate 写关系 / relations 列关系 / "
324
+ "index 按维度反查详情 / dimensions 看索引 / audit 一致性审计 / "
325
+ "history 留痕 / summary 一句话 / catalog 自描述。",
326
+ "inputSchema": _s("", action=_p("string", "snapshot|refresh|bootstrap|relate|"
327
+ "relations|index|dimensions|audit|"
328
+ "history|summary|catalog"),
329
+ subject=_p("string", "主体(默认 self:lingshu)"),
330
+ window=_p("integer", "聚合窗口(反思/验证/近期条数)"),
331
+ importance=_p("number", "refresh:自我重要性权重"),
332
+ important_refs=_p("array", "refresh:显式重要节点 id"),
333
+ dimensions=_p("object", "refresh:五维索引标签,"
334
+ "{task,person,session,time,trust}"),
335
+ links=_p("array", "refresh:指向详情节点的边"),
336
+ force=_p("boolean", "refresh:强制写入(跳过幂等)"),
337
+ strict=_p("boolean", "refresh:版本链断裂时拒绝写入"),
338
+ frm=_p("string", "relate:源主体"),
339
+ to=_p("string", "relate:目标主体"),
340
+ relation_type=_p("string", "relate:collaborator|user|peer|"
341
+ "mentor|student|adversary|tool|other"),
342
+ strength=_p("number", "relate:强度 0-1"),
343
+ condition=_p("string", "relate:生效条件"),
344
+ note=_p("string", "relate:备注"),
345
+ reciprocal=_p("boolean", "relate:同时写反向关系"),
346
+ direction=_p("string", "relations:out|in|both"),
347
+ dim=_p("string", "index:task|person|session|time|trust"),
348
+ value=_p("string", "index:维度取值"),
349
+ with_content=_p("boolean", "index:是否附正文摘要"),
350
+ limit=_p("integer", "index/history 条数")),
351
+ },
352
+ {
353
+ "name": "mdcg_predict",
354
+ "description": "生成式预测(候选未来,非必然未来):沿因果/时序边 + 语义邻近"
355
+ "(经 D-002 伪因果过滤门)生成局部路线,输出 uncertainty_bound / "
356
+ "extrapolation_validity(smooth|jump|unknown)/ T_pred 四维评分"
357
+ "(trend .40 / boundary .20 / verification .25 / balance .15)。"
358
+ "支持盲区驱动(blindspot_id 指向 unresolved 节点/盲区邻域;"
359
+ "声明「不可预测」则拒绝生成)与命中反馈(D-006 动态校准:"
360
+ "命中 → 边置信度 +0.05,未命中 → 登记 rejected)。"
361
+ "action=routes|feedback|stats|catalog。",
362
+ "inputSchema": _s("", action=_p("string", "routes|feedback|stats|catalog"),
363
+ start_id=_p("string", "routes:起点节点 id"),
364
+ blindspot_id=_p("string", "routes:盲区驱动(unresolved 节点 id "
365
+ "或盲区邻域键)"),
366
+ horizon=_p("integer", "routes:最大前推步数(默认 3,上限 16)"),
367
+ max_branches=_p("integer", "routes:每步最大分支"
368
+ "(默认 5,上限 32)"),
369
+ sort=_p("string", "routes:composite|trend|verification|"
370
+ "boundary|balance"),
371
+ limit=_p("integer", "routes:返回条数;stats:最近留痕条数"),
372
+ semantic=_p("boolean", "routes:是否并入语义邻近候选"
373
+ "(默认是,须过伪因果过滤门)"),
374
+ predicted_node_id=_p("string", "feedback:被预测命中的节点 id"),
375
+ actual_node_id=_p("string", "feedback:实际走向节点 id"),
376
+ hit=_p("boolean", "feedback:是否命中"
377
+ "(缺省按 predicted==actual)"),
378
+ note=_p("string", "feedback:备注")),
379
+ },
380
+ {
381
+ "name": "mdcg_causal",
382
+ "description": "因果推理:`causal` 边 = 条件依赖因果(A 是 B 成立的条件),"
383
+ "链 = 条件序列。action=path 判断 A 能否沿因果/时序边到达 B"
384
+ "(可达性,伪因果防护的完整语义)/ gate 跑 D-002 伪因果过滤门"
385
+ "(语义邻近须能说清关系才准入)/ chain 沿因果链展开(每跳带"
386
+ "条件与权重)/ explain 人类可读链式解释 / catalog 自描述。",
387
+ "inputSchema": _s("", action=_p("string", "path|gate|chain|explain|catalog"),
388
+ a=_p("string", "path/gate:源节点 id"),
389
+ b=_p("string", "path/gate:目标节点 id"),
390
+ node_id=_p("string", "chain/explain:起点节点 id"),
391
+ max_depth=_p("integer", "path/chain:最大跳数"),
392
+ relation_types=_p("array", "chain:限定边类型,"
393
+ "默认 ['causal']"),
394
+ direction=_p("string", "chain:out|in"),
395
+ sort=_p("string", "chain:strength|length")),
396
+ },
397
+ {
398
+ "name": "mdcg_evolution",
399
+ "description": "演化账本(md 载体 `_evolution/ledger.md`):每一次修改 = 对一条"
400
+ "缺失条件的补充;账本正文是人类可读的**认知规律 + 状态**"
401
+ "(confidence/layer/importance/负条件/验证基底),不记实现细节"
402
+ "(实现属于 git)。action=record 追加 / entries 列表 / show 单条 / "
403
+ "history 某节点演化史 / patterns 按缺失条件维度聚类出规律 / "
404
+ "summary 一句话 / rollback 撤回某条演化的状态(dry_run 可预演;"
405
+ "撤销本身也记一条条目,不可静默)/ catalog 自描述。",
406
+ "inputSchema": _s("", action=_p("string", "record|entries|show|history|"
407
+ "patterns|summary|rollback|catalog"),
408
+ node_id=_p("string", "绑定节点 id"),
409
+ rule=_p("string", "record:规律(必填,一句话认知规律)"),
410
+ missing=_p("string", "record:补的是哪一维缺失条件"),
411
+ change=_p("string", "record:这次具体改了什么"),
412
+ kind=_p("string", "record:condition_gap|layer_shift|general"),
413
+ evidence=_p("string", "record:触发本次演化的验证依据"),
414
+ source=_p("string", "record:consolidate|verify|manual"),
415
+ entry_id=_p("string", "show/rollback:条目 id"),
416
+ note=_p("string", "rollback:备注(覆盖默认规律)"),
417
+ dry_run=_p("boolean", "rollback:只预演不落盘"),
418
+ limit=_p("integer", "entries/history/patterns 条数")),
419
+ },
420
+ {
421
+ "name": "mdcg_restore",
422
+ "description": "恢复被 forget 的节点;若在删除清单中且未 force 则拒绝(恢复时删除检查)。",
423
+ "inputSchema": _s("", node_id=_p("string", "节点 id", True), force=_p("boolean", "强制恢复")),
424
+ },
425
+ {
426
+ "name": "mdcg_health",
427
+ "description": "健康度:分桶健康 + CCG 完整度 + 验证基底覆盖率 + OS 指标(审核/墓碑/审计)。",
428
+ "inputSchema": _s(""),
429
+ },
430
+ {
431
+ "name": "mdcg_whoami",
432
+ "description": "身份与权限:tenant / actor / clearance / 可见节点数 / 可读密级列表。",
433
+ "inputSchema": _s(""),
434
+ },
435
+ {
436
+ "name": "mdcg_ingest",
437
+ "description": "设备驱动:从会话文件增量摄取事件(自动 fix-pair 挖掘 + watermark 去重)。"
438
+ "source=auto 时自动发现本机 DSH 会话。",
439
+ "inputSchema": _s("", source=_p("string", "会话文件路径,或 'auto' 自动发现 DSH 会话"),
440
+ max_events=_p("integer", "单次最多摄取事件数"),
441
+ mine_fix_pairs=_p("boolean", "是否自动挖掘错误→修复对(默认是)"),
442
+ dry_run=_p("boolean", "只统计不写入")),
443
+ },
444
+ {
445
+ "name": "mdcg_watermarks",
446
+ "description": "各事件源的摄取水位(增量摄取状态,可审计)。",
447
+ "inputSchema": _s(""),
448
+ },
449
+ {
450
+ "name": "mdcg_whitebox",
451
+ "description": "显式调用白箱能力库(AEIS,已下线为本地库)并验证其能力。"
452
+ "action=ask 问白箱(wisdom_chat);action=remember 让白箱编码一条知识;"
453
+ "action=verify_encoding 验证「编码能力」(记住口令→追问命中);"
454
+ "action=verify_existing 验证「已有知识回答能力」(route=self 且非空);"
455
+ "action=ping 连通性探测;action=report 汇总验证留痕。"
456
+ "验证结论写回认知图 self 层(tags 含 whitebox:verify)。",
457
+ "inputSchema": _s("", action=_p("string", "ask|remember|verify_encoding|"
458
+ "verify_existing|ping|report", True),
459
+ question=_p("string", "ask/verify 的问题"),
460
+ message=_p("string", "ask:问题(question 的别名)"),
461
+ content=_p("string", "remember:待编码内容"),
462
+ importance=_p("number", "remember:重要性 0-1"),
463
+ tags=_p("array", "remember:标签"),
464
+ session_id=_p("string", "会话 id"),
465
+ marker=_p("string", "verify_encoding:唯一口令标记"),
466
+ fact=_p("string", "verify_encoding:待编码事实"),
467
+ questions=_p("array", "verify_existing:探针问题列表"),
468
+ limit=_p("integer", "report:返回条数")),
469
+ },
470
+ {
471
+ "name": "mdcg_service_info",
472
+ "description": "服务信息(信任透明度):身份/版本/根目录/节点统计/工具数/权限。",
473
+ "inputSchema": _s(""),
474
+ },
475
+ ]
476
+
477
+
478
+ # --------------------------------------------------------------------------
479
+ # 基元接口(kernel 暴露面)
480
+ #
481
+ # 架构决定(2026-09-09):对外只暴露 2 个认知基元,其余细粒度工具下沉为
482
+ # 本地函数(MDCG_MCP_SURFACE=full 时仍可见,供兼容与调试)。
483
+ # 认知图只给「知识与建议能力名」,不执行——执行权归调用方。
484
+ # --------------------------------------------------------------------------
485
+
486
+ KERNEL_TOOLS = [
487
+ {
488
+ "name": "cg",
489
+ "description": "认知图接口(唯一入口)。op=route:按情境条件路由,返回相关知识 + "
490
+ "建议能力名(不执行,由调用方决定);op=read:召回/检索/按 id 取;"
491
+ "op=write:写入前按 content_kind 审核(ACCEPT 落盘 / REJECT 进负记忆 / "
492
+ "DEFER 进审核队列)+ 节点间冲突检测(三级决策:情绪→反思→递归反思;"
493
+ "consistency=false 可关,on_conflict=reject|defer|record);"
494
+ "gated=true 时再经主动遗忘闸门三问→四态,"
495
+ "未指定 layer 时默认 contextual);"
496
+ "op=verify:外部裁决回填;op=review:审核队列;"
497
+ "op=protect:写保护盘点/查询/标记/快照/历史;"
498
+ "op=forget:软删除/恢复(受保护节点需 override);"
499
+ "op=goal:目标槽(第 5 篇七件套之「目标」,"
500
+ "action=add|list|status;目标不进召回,只给 read 定向);"
501
+ "op=recent:近期事件窗口(七件套之「近期事件」,"
502
+ "action=add|list|clear,滚动保留最近 N 条);"
503
+ "op=identity:身份特征识别(智能论 v3.4 位置效应 + 扮演论"
504
+ "三接口 memory/anchor/values,不止「用户画像」);"
505
+ "op=consistency:节点间自动冲突检测(三级决策:情绪→反思→"
506
+ "递归反思,冲突自动触发飞轮;不能与已有条件冲突/不能违反纪律);"
507
+ "op=metacognition:独立元认知(观察自身认知的二阶单元,不参与裁决;"
508
+ "action=report|trace|calibration|blindspots|trust|self_check|"
509
+ "history|catalog);"
510
+ "op=self_state:自我状态层(薄自我+富索引:状态卡单例 + 关系节点,"
511
+ "八项自我信息只存当前值与指针,具体任务/人物/会话/时间/信任由认知图"
512
+ "按五维索引连接;action=snapshot|refresh|bootstrap|relate|relations|"
513
+ "index|dimensions|audit|history|summary|catalog);"
514
+ "op=info:身份+健康+审核体系自描述;"
515
+ "op=sustain:持续性自维持(常驻/心跳/自愈/会话续接;"
516
+ "action=status|beat|peers|diagnose|heal|evolve|start|stop|"
517
+ "resume|note|catalog;evolve=演化巡检只读盘点固化/重要性候选;"
518
+ "heal 默认不动演化,须 allow_evolve=true);"
519
+ "op=scrub:记忆自净(抽查/联想/去污染/校准偏差;"
520
+ "action=sample|associate|audit|decontaminate|calibrate|"
521
+ "sweep|history|summary|catalog);"
522
+ "op=predict:生成式预测(候选未来,非必然未来;沿因果/时序边 + "
523
+ "语义邻近经 D-002 伪因果过滤门生成局部路线,输出 uncertainty_bound / "
524
+ "extrapolation_validity / T_pred 四维评分;支持盲区驱动与命中反馈 "
525
+ "action=routes|feedback|stats|catalog);"
526
+ "op=causal:因果推理(causal 边 = 条件依赖因果;action=path 可达性 / "
527
+ "gate 伪因果过滤门 / chain 因果链 / explain 解释 / catalog);"
528
+ "op=evolution:演化账本(md 载体 `_evolution/ledger.md`,"
529
+ "每一次修改 = 对一条缺失条件的补充,记录认知规律与状态而非实现;"
530
+ "action=record|entries|show|history|patterns|summary|rollback|catalog,"
531
+ "rollback 撤回某条演化的状态且撤销本身也留痕);"
532
+ "op=index_code:按目录(大域)索引代码,只存注释/接口,"
533
+ "code_ref 指回源文件,不复制完整代码(后缀按提取器注册表:"
534
+ ".py 走精确 AST、.ts/.js 为弱提取器;返回 truncated 截断状态"
535
+ "与 skipped_suffixes 覆盖缺口,不再静默不完整);"
536
+ "op=index_doc:按目录索引 md 文档的**章节**(只切 level<=3,"
537
+ "只存标题+摘要、不存全文),doc_ref 指回原文行区间;layer 与"
538
+ "密级显式声明(默认 knowledge/internal,路径命中私有提示降为 "
539
+ "private);正文里的 --- 与围栏代码块内的 # 不会被误切;"
540
+ "op=ref:ref 协议入口(action=read 按 code_ref/doc_ref 回读源区间 / "
541
+ "check 漂移·悬空巡检 / stat 看 _refindex.json 水位)。read 需 "
542
+ "node_id 或 ref 对象,root 可覆盖;返回 text 与 hash_match,"
543
+ "hash_match=False 即源已漂移、索引位置不再可信;check 只读、不抛、"
544
+ "不改源文件,报 stale(源已改动)/dangling(源文件已删除);"
545
+ "op=whitebox:显式调用白箱能力库(AEIS 已下线为本地库)并验证其"
546
+ "编码/已有知识回答能力(action=ask|remember|verify_encoding|"
547
+ "verify_existing|ping|report;结论写回 self 层留痕);"
548
+ "op=theory:协议版本层(action=check|show|declare|catalog);"
549
+ "op=link:蜂群互联层(对端信任 P_trust + 跨节点证据存储;"
550
+ "action=ls|show|handshake|observe|promote|degrade|isolate|"
551
+ "withdraw|decay|policy|card|publish|peers|evidence|export|"
552
+ "import|catalog;"
553
+ "另有节点**派生溯源**(区别于对端信任):derive 列边、"
554
+ "derive_dangling 悬空巡检(只读、不删边)、derive_catalog 自描述、"
555
+ "derive_rebuild 按 frontmatter 重建台账(默认预演);权威声明只在"
556
+ "节点写入时产生(write/remember 的 derived_from),本层不新增写入口)。",
557
+ "inputSchema": _s("",
558
+ op=_p("string", "route|read|write|verify|review|protect|identity|"
559
+ "consistency|metacognition|self_state|evolution|sustain|"
560
+ "scrub|predict|causal|"
561
+ "forget|goal|recent|info|index_code|index_doc|ref|whitebox|"
562
+ "theory|link|session|ingest|export|maintain|consolidate|"
563
+ "insight", True),
564
+ intent=_p("string", "route 的查询意图"), query=_p("string", "read 的查询"),
565
+ goal=_p("string", "goal op 的目标文本;read 的定向目标(缺省用活跃目标)"),
566
+ goal_status=_p("string", "goal op:active|done|dropped"),
567
+ priority=_p("number", "goal op:优先级 0-1(兼作定向偏置依据)"),
568
+ deadline=_p("string", "goal op:截止时间(仅排序用,不做硬约束)"),
569
+ conditions=_p("string", "goal op:生效条件"),
570
+ action_hint=_p("string", "goal op:执行说明(写入 CCG 的「执行」栏)"),
571
+ text=_p("string", "recent op 的事件文本"),
572
+ role=_p("string", "recent op 的事件角色:user|assistant|tool-output|command;"
573
+ "write 时作为来源证据(user=外部惊奇)"),
574
+ meta=_p("object", "recent op:附加元数据"),
575
+ window=_p("integer", "recent op:滚动窗口大小(默认 200)"),
576
+ include_recent=_p("boolean", "read:是否附近期事件窗口(默认否)"),
577
+ limit=_p("integer", "goal/recent 的返回条数;read 的近期事件条数"),
578
+ node_id=_p("string", "节点 id"),
579
+ content=_p("string", "write 的内容(建议含 CCG 5 要素注释)"),
580
+ content_kind=_p("string", "write 的内容类型:code|image_desc|text|permission|work_done|work_wip"),
581
+ layer=_p("string", "层:anchor|structural|knowledge|contextual|self"),
582
+ tags=_p("array", "标签(cap:xxx 会作为 route 的建议能力名)"),
583
+ importance=_p("number", "重要性 0-1"),
584
+ importance_hint=_p("number", "write gated=true 时的重要性提示"
585
+ "(≥0.7 触发保护优先,直接 ACCEPT)"),
586
+ gated=_p("boolean", "write 时启用主动遗忘闸门(三问→四态;默认否)"),
587
+ consistency=_p("boolean", "write:写入前做节点间冲突检测"
588
+ "(三级决策:情绪→反思→递归反思;默认开)"),
589
+ on_conflict=_p("string", "write:冲突处置 reject|defer|record(默认 defer)"),
590
+ override=_p("boolean", "覆盖/删除受保护节点需显式 override=true"),
591
+ subject_id=_p("string", "identity 的主体:self:xx|user:xx|role:xx|agent:xx"),
592
+ subject_kind=_p("string", "identity 主体类型:self|user|role|agent"),
593
+ trait=_p("string", "identity action=trait 的特征文本"),
594
+ position=_p("string", "identity:位置效应 record|reflect|verify|output|sustain"),
595
+ requested_layer=_p("string", "identity anchor 目标层(role≠self 时禁止 self)"),
596
+ auto_flywheel=_p("boolean", "consistency:冲突时自动投递飞轮(默认否)"),
597
+ exclude=_p("string", "consistency:排除自身节点 id"),
598
+ depth=_p("integer", "consistency:递归反思深度上限"),
599
+ condition_space=_p("object", "条件空间"),
600
+ verification_basis=_p("string", "验证基底"),
601
+ non_applicable_conditions=_p("array", "不适用条件"),
602
+ context=_p("object", "当前情境"),
603
+ k=_p("integer", "返回条数(sustain pool_bench 亦用)"),
604
+ budget_tokens=_p("integer", "read 的 token 预算"),
605
+ evidence=_p("string", "verify 的证据"),
606
+ verdict=_p("string", "verify 裁决:confirmed|weakened|falsified;"
607
+ "insight verify:verified|falsified"),
608
+ question=_p("string", "whitebox:ask/verify 的问题"),
609
+ message=_p("string", "whitebox ask:问题(question 的别名)"),
610
+ session_id=_p("string", "whitebox:会话 id(默认 md_cg-whitebox-verify)"),
611
+ marker=_p("string", "whitebox verify_encoding:唯一口令标记(缺省自动生成)"),
612
+ fact=_p("string", "whitebox verify_encoding:待编码事实"),
613
+ questions=_p("array", "whitebox verify_existing:探针问题列表"),
614
+ action=_p("string", "review: list|decide|rounds;forget: forget|restore;"
615
+ "protect: stats|check|mark|snapshot|history|forgetting;"
616
+ "identity: observe|anchor|trait|profile|positions|catalog;"
617
+ "consistency: check|history|stats|catalog;"
618
+ "goal: add|list|status;recent: add|list|clear;"
619
+ "sustain: status|beat|peers|diagnose|heal|"
620
+ "evolve|provenance|pooling|pool_bench|"
621
+ "pool_compare|start|stop|resume|note|catalog;"
622
+ "scrub: sample|associate|audit|decontaminate|"
623
+ "calibrate|sweep|history|summary|catalog;"
624
+ "evolution: record|entries|show|history|patterns|"
625
+ "summary|rollback|catalog;"
626
+ "link: ls|show|handshake|observe|promote|degrade|"
627
+ "isolate|withdraw|decay|policy|card|publish|peers|"
628
+ "evidence|export|import|derive|derive_dangling|"
629
+ "derive_catalog|derive_rebuild|catalog;"
630
+ "ref: read|check|stat;"
631
+ "session: note|recall|compact;"
632
+ "ingest: file|dir|jsonl|stat;"
633
+ "export: graph|nodes|slice|stat;"
634
+ "maintain: stat|history|importance|longterm|prefeed|"
635
+ "separate|rollback|backfill|backfill_rollback|"
636
+ "backfill_history|cap|cap_rollback|cap_history|"
637
+ "exempt|exempt_rollback|exempt_history|"
638
+ "vision_evidence|vision_evidence_rollback|"
639
+ "vision_evidence_history|"
640
+ "refine|refine_gate|refine_history|"
641
+ "refine_calibrate;"
642
+ "consolidate: promote|promote_rollback|"
643
+ "promote_history|induce|contextualize|"
644
+ "contextualize_rollback|contextualize_history;"
645
+ "insight: window|record|verify|list|report|"
646
+ "reconstruct|learn|outlook|catalog"),
647
+ pid=_p("string", "review decide 的提案 id"),
648
+ decision=_p("string", "review 裁决:accept|reject|edit|merge"),
649
+ edits=_p("object", "review edit 的覆盖字段(不可含 verify)"),
650
+ merge_into=_p("string", "review merge 的目标节点 id"),
651
+ redteam=_p("object", "红队裁决 {verdict:pass|reject, issues:[], round:n}"),
652
+ issues=_p("array", "问题清单(红队打回理由)"),
653
+ reason=_p("string", "原因;consolidate contextualize 的归位理由(写台账)"),
654
+ force=_p("boolean", "restore 强制"),
655
+ path=_p("string", "index_code/index_doc 的目录(大域);link import 的证据包文件"),
656
+ patterns=_p("array", "index_code/index_doc 的文件后缀,默认取各自注册表"
657
+ "(代码 .py/.ts/.tsx/.js/.mjs/.cjs;文档 .md/.markdown)"),
658
+ max_files=_p("integer", "index_code/index_doc 最多扫描文件数(被截断时"
659
+ "返回里会显式给 truncated,不再静默不完整)"),
660
+ max_items=_p("integer", "index_code/index_doc 最多产出条目数(越限即截断并上报)"),
661
+ incremental=_p("boolean", "index_code/index_doc:按 _refindex.json 水位跳过"
662
+ "未变文件(默认否=全量重切,保证不漏召回);"
663
+ "传 sensitivity 覆盖时自动退回全量"),
664
+ max_nodes=_p("integer", "ref action=check:最多巡检节点数(默认 2000,"
665
+ "越限返回 truncated=true)"),
666
+ sensitivity=_p("string", "index_doc 的密级(默认 internal 并显式写入;"
667
+ "路径命中私有提示时保守降为 private)"),
668
+ ref=_p("object", "ref op:直接给 code_ref/doc_ref 对象(与 node_id 二选一)"),
669
+ root=_p("string", "ref op:覆盖 ref 里记录的 root(索引结果的跨机器搬迁)"),
670
+ name=_p("string", "sustain:心跳名(默认 md_cg)"),
671
+ session=_p("string", "sustain:会话 id(resume/note 用)"),
672
+ ts=_p("number", "sustain note:事件时间戳"),
673
+ seq=_p("integer", "sustain note:事件序号"),
674
+ task_running=_p("boolean", "sustain:任务执行中(心跳阈值放宽)"),
675
+ beat_interval=_p("number", "sustain start:心跳间隔秒(默认 600)"),
676
+ heal_interval=_p("number", "sustain start:巡检间隔秒(默认 300)"),
677
+ auto_heal=_p("boolean", "sustain start:巡检异常时自动修复(默认是)"),
678
+ scrub_interval=_p("number", "sustain start:自净间隔秒(默认 3600)"),
679
+ auto_scrub=_p("boolean", "sustain start:自净执行去污染(默认否,只巡检)"),
680
+ evolve_interval=_p("number", "sustain start:演化巡检间隔秒(默认 7200)"),
681
+ auto_evolve=_p("boolean", "sustain start:演化巡检自动落盘确定性动作"
682
+ "(仅重要性重算;固化需 LLM 仍交人工。默认否)"),
683
+ allow_evolve=_p("boolean", "sustain heal:放行演化类修复"
684
+ "(确定性动作才执行;默认否)"),
685
+ dry_run=_p("boolean", "sustain heal / scrub:只列动作不落盘"),
686
+ ids=_p("array", "scrub:节点 id 列表(缺省全库)"),
687
+ kinds=_p("string", "scrub:限定污染类型,逗号分隔"),
688
+ strategy=_p("string", "scrub sample:stratified|risk|random"),
689
+ seed=_p("integer", "scrub sample:抽样种子(同 seed 同样本)"),
690
+ min_severity=_p("string", "scrub:最低严重度 info|low|medium|high"),
691
+ apply=_p("boolean", "scrub calibrate:写回偏置(默认只给建议)"),
692
+ lexical=_p("boolean", "scrub associate:是否用词法近邻(默认是)"),
693
+ start_id=_p("string", "predict:起点节点 id(缺省取最高重要度节点)"),
694
+ blindspot_id=_p("string", "predict:盲区驱动(unresolved 节点 id / "
695
+ "盲区邻域键);声明不可预测则拒绝生成"),
696
+ horizon=_p("integer", "predict:最大前推步数(默认 3,上限 16)"),
697
+ max_branches=_p("integer", "predict:每步最大分支(默认 5,上限 32)"),
698
+ semantic=_p("boolean", "predict:是否并入语义邻近候选(默认是,"
699
+ "须过 D-002 伪因果过滤门)"),
700
+ a=_p("string", "causal path/gate:源节点 id"),
701
+ b=_p("string", "causal path/gate:目标节点 id"),
702
+ relation_types=_p("array", "causal chain:限定边类型,默认 ['causal']"),
703
+ direction=_p("string", "causal chain:out|in"),
704
+ sort=_p("string", "predict:composite|trend|verification|boundary|balance;"
705
+ "causal chain:strength|length"),
706
+ predicted_node_id=_p("string", "predict feedback:被预测节点 id"),
707
+ actual_node_id=_p("string", "predict feedback:实际走向节点 id"),
708
+ hit=_p("boolean", "predict feedback:是否命中(缺省按 predicted==actual)"),
709
+ rule=_p("string", "evolution record:规律(必填,一句话认知规律)"),
710
+ missing=_p("string", "evolution record:补的是哪一维缺失条件"),
711
+ change=_p("string", "evolution record:这次具体改了什么"),
712
+ kind=_p("string", "evolution:condition_gap|layer_shift|general"),
713
+ entry_id=_p("string", "evolution show/rollback:条目 id"),
714
+ source=_p("string", "evolution record:来源 consolidate|verify|manual;"
715
+ "link evidence:按来源节点过滤;insight record:来源"),
716
+ peer=_p("string", "link:对端节点 id(如 agent:node-x)"),
717
+ subsystem=_p("string", "link:子系统名(缺省 swarm)"),
718
+ position_map=_p("object", "link handshake:对端位置映射 {位置:权重}"),
719
+ peer_theory=_p("object", "link handshake:对端版本声明"),
720
+ peer_version=_p("string", "link handshake:对端版本(peer_theory 简写)"),
721
+ declared_charter=_p("boolean", "link handshake:对端是否声明宪章(默认是)"),
722
+ peer_signature=_p("string", "link handshake/observe:对端签名"),
723
+ negative=_p("boolean", "link observe:是否反例(默认否)"),
724
+ set=_p("object", "link policy:设置子系统签名策略"),
725
+ signers_file=_p("string", "link:签名策略文件(缺省 ~/.mdcg/_signers.json)"),
726
+ swarm=_p("string", "link:跨节点共享目录(缺省 ~/.mdcg/swarm)"),
727
+ subject=_p("string", "link evidence:按主体过滤(如 agent:node-x)"),
728
+ subjects=_p("array", "link export:限定导出的主体列表"),
729
+ out=_p("string", "link export:证据包输出路径;export/maintain 输出路径"),
730
+ pack=_p("object", "link import:内联证据包(与 path 二选一)"),
731
+ include_content=_p("boolean", "export:是否带正文(默认 true,"
732
+ "nodes/graph 用;slice 按 ids 裁剪)"),
733
+ since=_p("number", "export slice:起始时间戳(含)"),
734
+ until=_p("number", "export slice:结束时间戳(含)"),
735
+ tag=_p("string", "export slice:按标签过滤"),
736
+ max_rows=_p("integer", "maintain longterm:单次评估行数上限"),
737
+ keep=_p("integer", "maintain longterm:保留最近 N 个断面(默认 10)"),
738
+ mode=_p("string", "maintain longterm:list|show(读断面清单/统计)"),
739
+ snapshot_id=_p("string", "maintain longterm show:断面 id 前缀"),
740
+ prefixes=_p("array", "consolidate contextualize / maintain vision_evidence:"
741
+ "id 前缀白名单(如 ['note_','imgpart_'];不传即拒绝对"
742
+ "整层改写 / 用视觉节点默认前缀)"),
743
+ aeis_root=_p("string", "maintain vision_evidence:视觉证据归档根(只读逐部件"
744
+ "证据源;缺省本仓 data/vision;参数名为遗留名)"),
745
+ sample_n=_p("integer", "maintain refine:抽检条数(默认 20,裁定单条件 A)"),
746
+ prefix=_p("string", "maintain refine:抽检 id 前缀(默认 node_)"),
747
+ verdicts=_p("array", "maintain refine apply:人工核对裁决 "
748
+ "[{concept_id, faithful, added_info, note}];"
749
+ "缺省只落抽检留痕(不改节点)"),
750
+ batch=_p("string", "maintain/consolidate:批次号(回滚用)"),
751
+ derived_from=_p("string", "write/remember:派生来源节点 id(G8,可用逗号/空格"
752
+ "分隔多个);声明后写入 frontmatter 并建派生边"),
753
+ relation=_p("string", "write/remember/link derive:派生关系名,"
754
+ "默认 derived_from(split_from|extracted_from|"
755
+ "merged_from|refined_from|source)"),
756
+ child=_p("string", "link derive:按子节点 id 过滤派生边"),
757
+ parent=_p("string", "link derive:按父节点 id 过滤派生边"),
758
+ ledger_only=_p("boolean", "link derive_dangling:只看台账、忽略索引声明"),
759
+ pools=_p("object", "search/sustain pool_bench:召回分池表"
760
+ "{knowledge:{cap_ratio,weight},index:{…},"
761
+ "negative:{…}};各 cap_ratio 之和必须为 1.0;"
762
+ "缺省(null)=关闭分池、沿用原 GLOBAL_CAP 平截"),
763
+ queries=_p("array", "sustain pool_bench/pool_compare:复测查询集;"
764
+ "缺省则从索引确定性取样(proxy)"),
765
+ entry_ids=_p("array", "maintain rollback:按节点 id 定向回滚"),
766
+ min_jaccard=_p("number", "maintain separate / consolidate induce:"
767
+ "内容相似度下限(默认 0.55 / 0.30)"),
768
+ min_cluster=_p("integer", "consolidate induce:成团最少成员数(默认 3)"),
769
+ min_delta=_p("number", "maintain importance:变动阈值(默认 0.05)"),
770
+ min_merge=_p("integer", "consolidate promote:反复命中次数下限(默认 2)"),
771
+ min_importance=_p("number", "consolidate promote:重要性下限(默认 0.6)"),
772
+ require_conditions=_p("boolean", "consolidate promote:四要素不全者不提升"
773
+ "(默认 true)"),
774
+ source_layer=_p("string", "consolidate promote:来源层(默认 contextual)"),
775
+ target_layer=_p("string", "consolidate promote:目标层(默认 knowledge)"),
776
+ write=_p("boolean", "maintain prefeed:按裁决落库(默认 false=只预演)"),
777
+ include_partial=_p("boolean", "maintain backfill:连「补完仍不全」的节点"
778
+ "一起写(默认 false=只补可判定者)"),
779
+ min_conf=_p("number", "maintain cap:能力标签置信度下限(默认 0.5)"),
780
+ basis_text=_p("string", "maintain backfill:本批次声明的「验证方式」文本"
781
+ "(人/流程声明,非模型生成)"),
782
+ clues=_p("array", "insight reconstruct:线索(词面 / 节点 id)"),
783
+ statement=_p("string", "insight record:洞见正文(必填;本层不臆造)"),
784
+ category=_p("string", "insight record:洞见分类"),
785
+ v_types=_p("array", "insight verify:证据类型 v1|v2|v3"
786
+ "(v3 外部确证 / v2 实践重复 / v1 可检索)"),
787
+ state=_p("string", "insight list:按状态过滤 pending|verified|falsified"),
788
+ window_days=_p("number", "insight report/outlook:统计时间窗(天)"),
789
+ neighbors=_p("boolean", "insight reconstruct:是否并入一跳邻域(默认 true)"),
790
+ recent_days=_p("integer", "insight outlook:近期窗口天数(默认 7)"),
791
+ sample_limit=_p("integer", "insight outlook:抽样清单条数(默认 8)"),
792
+ max_events=_p("integer", "ingest:单次最多摄取事件数")),
793
+ },
794
+ {
795
+ "name": "stg",
796
+ "description": "语义时空图接口:精确得到信息的时间/空间关系。"
797
+ "op=relation:两节点时空关系(Allen 时间 6 态 + RCC 空间 7 态);"
798
+ "op=timeline:按时间排序;op=anchors:落在时间窗/空间范围的节点;"
799
+ "op=consistency:时空字段自洽性检查。",
800
+ "inputSchema": _s("",
801
+ op=_p("string", "relation|timeline|anchors|consistency", True),
802
+ a=_p("string", "relation 的节点 a"), b=_p("string", "relation 的节点 b"),
803
+ time_window=_p("array", "anchors 的时间窗 [t1,t2]"),
804
+ bbox=_p("array", "anchors 的包围盒 [x1,y1,x2,y2]"),
805
+ layer=_p("string", "限定层"), limit=_p("integer", "返回条数"),
806
+ desc=_p("boolean", "timeline 是否倒序(默认是)")),
807
+ },
808
+ ]
809
+
810
+ ALL_TOOLS = KERNEL_TOOLS + TOOLS
811
+ SURFACE = os.environ.get("MDCG_MCP_SURFACE", "kernel").strip().lower()
812
+
813
+
814
+ def tools_for_surface():
815
+ """kernel:只暴露 2 个基元;full:2 个基元 + 31 个细粒度工具(兼容/调试)。"""
816
+ return ALL_TOOLS if SURFACE == "full" else KERNEL_TOOLS
817
+
818
+
819
+ # --------------------------------------------------------------------------
820
+ # 序列化
821
+ # --------------------------------------------------------------------------
822
+
823
+ def _j(obj) -> str:
824
+ return json.dumps(obj, ensure_ascii=False, default=str)
825
+
826
+
827
+ def _pick_source(path):
828
+ """按内容嗅探源类型:DSH 会话格式 vs 通用 JSONL。"""
829
+ from .sources import DSHSessionSource, JsonlSource
830
+ if path.endswith(".zstd"):
831
+ return DSHSessionSource(path)
832
+ try:
833
+ with open(path, encoding="utf-8", errors="replace") as f:
834
+ for line in f:
835
+ line = line.strip()
836
+ if not line:
837
+ continue
838
+ o = json.loads(line)
839
+ if o.get("type") == "session" or ("type" in o and "seq" in o
840
+ and "data" in o):
841
+ return DSHSessionSource(path)
842
+ return JsonlSource(path)
843
+ except (ValueError, OSError):
844
+ pass
845
+ return JsonlSource(path)
846
+
847
+
848
+ def _node_view(node):
849
+ if not node:
850
+ return None
851
+ return {"id": node.get("id"), "path": node.get("path"),
852
+ "frontmatter": node.get("frontmatter"), "content": node.get("content")}
853
+
854
+
855
+ # --------------------------------------------------------------------------
856
+ # 基元实现
857
+ # --------------------------------------------------------------------------
858
+
859
+ def _protect_call(cg, a):
860
+ """写保护 / 遗忘留痕的统一入口(cg op=protect 与 mdcg_protect 共用)。"""
861
+ from . import protect
862
+ act = (a.get("action") or "stats").strip().lower()
863
+ nid = a.get("node_id") or ""
864
+ if act == "stats":
865
+ return cg.protect_stats()
866
+ if act in ("forgetting", "forgetting_history"):
867
+ return {"records": cg.forgetting_history(limit=int(a.get("limit") or 100))}
868
+ if act == "check":
869
+ prot, why = protect.is_protected(cg, nid)
870
+ imm, iwhy = protect.is_immutable(cg, nid)
871
+ return {"node_id": nid, "exists": nid in (cg.index.get("nodes") or {}),
872
+ "protected": prot, "reason": why,
873
+ "immutable": imm, "immutable_reason": iwhy}
874
+ if act == "history":
875
+ return {"node_id": nid, "versions": protect.history(cg, nid)}
876
+ if act == "snapshot":
877
+ return {"node_id": nid, "snapshot": protect.snapshot(cg, nid)}
878
+ if act in ("mark", "protect"):
879
+ principal = getattr(cg, "principal", None)
880
+ if principal is not None:
881
+ principal.require_admin("protect_mark")
882
+ return protect.mark(cg, nid, a.get("reason") or "显式保护标记")
883
+ raise ValueError(f"protect 未知 action:{act}")
884
+
885
+
886
+ def _identity_call(cg, a):
887
+ """身份特征识别统一入口(cg op=identity 与 mdcg_identity 共用)。
888
+
889
+ 理论:智能论 v3.4 位置效应(五大单元)+ 扮演论三接口。
890
+ """
891
+ from . import identity
892
+ act = (a.get("action") or "profile").strip().lower()
893
+ sid = a.get("subject_id") or ""
894
+ if act == "catalog":
895
+ return identity.catalog()
896
+ if act == "positions":
897
+ return {"positions": cg.identity_positions(limit=int(a.get("limit") or 0))}
898
+ if act == "profile":
899
+ if not sid:
900
+ return {"subjects": cg.identity_positions(limit=0),
901
+ "hint": "指定 subject_id 可获取完整画像(锚点+位置+特征)"}
902
+ return cg.identity_profile(sid)
903
+ if act == "observe":
904
+ return cg.identity_observe(
905
+ sid, a.get("content") or a.get("text") or "",
906
+ kind=a.get("subject_kind"), role=a.get("role"),
907
+ layer=a.get("layer"), tags=a.get("tags"),
908
+ condition_space=a.get("condition_space"),
909
+ importance=float(a.get("importance", 0.5)),
910
+ verification_basis=a.get("verification_basis"),
911
+ evidence=a.get("evidence"), override=bool(a.get("override")))
912
+ if act == "trait":
913
+ return cg.identity_trait(
914
+ sid, a.get("trait") or a.get("content") or "",
915
+ condition_space=a.get("condition_space"),
916
+ importance=float(a.get("importance", 0.6)),
917
+ position=a.get("position"), kind=a.get("subject_kind"),
918
+ verification_basis=a.get("verification_basis") or "data",
919
+ override=bool(a.get("override")))
920
+ if act == "anchor":
921
+ principal = getattr(cg, "principal", None)
922
+ if principal is not None:
923
+ principal.require_admin("identity_anchor")
924
+ return cg.identity_anchor(
925
+ sid, a.get("content") or a.get("text") or "",
926
+ kind=a.get("subject_kind"),
927
+ condition_space=a.get("condition_space"),
928
+ importance=float(a.get("importance", 0.9)),
929
+ override=bool(a.get("override")),
930
+ requested_layer=a.get("requested_layer"))
931
+ if act == "history":
932
+ return {"records": cg.identity_history(limit=int(a.get("limit") or 100))}
933
+ raise ValueError(f"identity 未知 action:{act}")
934
+
935
+
936
+ def _consistency_call(cg, a):
937
+ """节点间自动冲突检测统一入口(cg op=consistency 与 mdcg_consistency 共用)。
938
+
939
+ 理论:智能论 §十一(情绪=信息差二阶变化,独立不参与信任)、
940
+ 条件论「反题」、:273(递归受深度/节点/循环/增益门槛约束)、
941
+ 知识飞轮(误差→补条件→结构更新)。
942
+ """
943
+ from . import consistency
944
+ act = (a.get("action") or "check").strip().lower()
945
+ if act == "check":
946
+ depth = a.get("depth")
947
+ return cg.check_consistency(
948
+ a.get("content") or a.get("text") or "",
949
+ layer=a.get("layer"), condition_space=a.get("condition_space"),
950
+ non_applicable_conditions=a.get("non_applicable_conditions"),
951
+ tags=a.get("tags"), exclude=a.get("exclude"),
952
+ limit=int(a.get("limit") or consistency.MAX_SCAN),
953
+ depth=int(depth) if depth is not None else consistency.MAX_DEPTH,
954
+ auto_flywheel=bool(a.get("auto_flywheel")))
955
+ if act == "history":
956
+ return {"records": cg.consistency_history(limit=int(a.get("limit") or 100))}
957
+ if act == "stats":
958
+ return cg.consistency_stats()
959
+ if act == "catalog":
960
+ return consistency.catalog()
961
+ raise ValueError(f"consistency 未知 action:{act}")
962
+
963
+
964
+ def _metacognition_call(cg, a):
965
+ """独立元认知统一入口(cg op=metacognition 与 mdcg_metacognition 共用)。
966
+
967
+ 理论:智能论 §十一(情绪=d²D/dt²)、§十三(五大单元外部观察者)、
968
+ 推论三「局部不可知」(盲区即知识)、§十(P_trust / P_gap)。
969
+ 独立性:只读留痕,不写 confidence / 资格 / 召回打分。
970
+ """
971
+ act = (a.get("action") or "report").strip().lower()
972
+ window = int(a.get("window") or 50)
973
+ if act == "report":
974
+ return cg.metacognition_report(window=window)
975
+ if act == "trace":
976
+ return cg.metacognition_trace(window=window)
977
+ if act == "calibration":
978
+ return cg.metacognition_calibration(
979
+ max_scan=int(a.get("limit") or 2000))
980
+ if act == "blindspots":
981
+ return cg.metacognition_blindspots(
982
+ limit=int(a.get("limit") or 20), window=window)
983
+ if act == "trust":
984
+ return cg.metacognition_trust(window=window)
985
+ if act == "self_check":
986
+ return cg.self_check(a.get("query") or a.get("text") or "",
987
+ k=int(a.get("k") or 5))
988
+ if act == "history":
989
+ return cg.metacognition_history(limit=int(a.get("limit") or 100))
990
+ if act == "catalog":
991
+ from . import metacognition
992
+ return metacognition.catalog()
993
+ raise ValueError(f"metacognition 未知 action:{act}")
994
+
995
+
996
+ def _self_state_call(cg, a):
997
+ """自我状态层统一入口(cg op=self_state 与 mdcg_self_state 共用)。
998
+
999
+ 薄自我:self 层只放状态卡(单例)+ 关系节点,登记八项自我信息的当前值
1000
+ 与指针;具体任务/人物/会话/时间/信任的细节留在原层,由认知图按五维
1001
+ 索引连接。一致性由 audit 重算校验(不依赖人的判断)。
1002
+ """
1003
+ from . import self_state
1004
+ act = (a.get("action") or "snapshot").strip().lower()
1005
+ subject = a.get("subject") or self_state.DEFAULT_SUBJECT
1006
+ if act in ("snapshot", "read", "get"):
1007
+ return {"state": self_state.snapshot(cg, subject)}
1008
+ if act == "refresh":
1009
+ return self_state.refresh(
1010
+ cg, subject, window=int(a.get("window") or self_state.RECENT_WINDOW),
1011
+ importance=a.get("importance"),
1012
+ important_refs=a.get("important_refs"),
1013
+ dimensions=a.get("dimensions"), links=a.get("links"),
1014
+ actor=a.get("actor") or getattr(cg, "actor", "self_state"),
1015
+ force=bool(a.get("force")), strict=bool(a.get("strict")))
1016
+ if act == "bootstrap":
1017
+ return self_state.bootstrap(
1018
+ cg, subject, window=int(a.get("window") or self_state.RECENT_WINDOW),
1019
+ actor=a.get("actor") or "bootstrap")
1020
+ if act == "relate":
1021
+ return self_state.relate(
1022
+ cg, a.get("frm") or subject, a.get("to") or "",
1023
+ relation_type=a.get("relation_type") or "collaborator",
1024
+ strength=a.get("strength", 0.5), condition=a.get("condition") or "",
1025
+ note=a.get("note") or "", reciprocal=bool(a.get("reciprocal")),
1026
+ actor=a.get("actor") or getattr(cg, "actor", "self_state"))
1027
+ if act == "relations":
1028
+ return {"relations": self_state.relations(
1029
+ cg, subject=a.get("subject"), direction=(a.get("direction") or "both"))}
1030
+ if act == "index":
1031
+ return self_state.index(cg, a.get("dim"), a.get("value"),
1032
+ limit=int(a.get("limit") or 50),
1033
+ with_content=bool(a.get("with_content")))
1034
+ if act == "dimensions":
1035
+ return self_state.dimensions(cg, subject)
1036
+ if act == "audit":
1037
+ return self_state.audit(
1038
+ cg, subject, window=int(a.get("window") or self_state.RECENT_WINDOW))
1039
+ if act == "history":
1040
+ return {"records": self_state.history(
1041
+ cg, limit=int(a.get("limit") or 100), subject=a.get("subject"))}
1042
+ if act == "summary":
1043
+ return self_state.summary(cg, subject)
1044
+ if act == "catalog":
1045
+ return self_state.catalog()
1046
+ raise ValueError(f"self_state 未知 action:{act}")
1047
+
1048
+
1049
+ def _predict_call(cg, a):
1050
+ """生成式预测统一入口(cg op=predict 与 mdcg_predict 共用)。
1051
+
1052
+ 对齐 AEIS prediction.py 四通道预测引擎的通道 3(生成式·因果路线图)
1053
+ + 通道 4(语义式,经 D-002 伪因果过滤门)。输出**候选未来,非必然未来**:
1054
+ 每条路线都带 uncertainty_bound(不确定性边界)与 extrapolation_validity
1055
+ (局部线性近似外推是否仍然成立),并按 T_pred 四维评分排序。
1056
+ """
1057
+ from . import predict
1058
+ act = (a.get("action") or "routes").strip().lower()
1059
+ if act in ("routes", "route", "predict"):
1060
+ return cg.predict_routes(
1061
+ start_id=a.get("start_id") or a.get("node_id"),
1062
+ blindspot_id=a.get("blindspot_id"),
1063
+ horizon=int(a.get("horizon") or predict.HORIZON_DEFAULT),
1064
+ max_branches=int(a.get("max_branches") or predict.MAX_BRANCHES_DEFAULT),
1065
+ sort=a.get("sort") or "composite",
1066
+ limit=int(a.get("limit") or 0),
1067
+ semantic=bool(a.get("semantic", True)))
1068
+ if act in ("feedback", "rate"):
1069
+ return cg.predict_feedback(
1070
+ a.get("predicted_node_id") or a.get("node_id") or "",
1071
+ actual_node_id=a.get("actual_node_id"),
1072
+ hit=a.get("hit"), note=a.get("note") or "",
1073
+ actor=a.get("actor") or getattr(cg, "actor", "predict"))
1074
+ if act == "stats":
1075
+ return cg.predict_stats(limit=int(a.get("limit") or 20))
1076
+ if act == "catalog":
1077
+ return predict.catalog()
1078
+ raise ValueError(f"predict 未知 action:{act}")
1079
+
1080
+
1081
+ def _causal_call(cg, a):
1082
+ """因果推理统一入口(cg op=causal 与 mdcg_causal 共用)。
1083
+
1084
+ `causal` 边 = 条件依赖因果:A 是 B 成立的条件;链 = 条件序列。
1085
+ D-002 伪因果过滤门:语义邻近**必须能说清关系**(因果/时序边直通、
1086
+ 共同父节点的结构模式、偏好权重 > 0.5)才准入,否则视为伪因果拒绝。
1087
+ """
1088
+ from . import chain, predict
1089
+ act = (a.get("action") or "path").strip().lower()
1090
+ a_id = a.get("a") or a.get("a_id") or a.get("from") or ""
1091
+ b_id = a.get("b") or a.get("b_id") or a.get("to") or ""
1092
+ if act in ("path", "reach", "reachable"):
1093
+ return predict.causal_path(cg, a_id, b_id,
1094
+ max_depth=int(a.get("max_depth") or 5))
1095
+ if act in ("gate", "filter"):
1096
+ ok, why = predict.causal_gate(cg, a_id, b_id)
1097
+ return {"ok": True, "admitted": ok, "reason": why, "a": a_id, "b": b_id,
1098
+ "note": "语义邻近须能说清关系(因果链/共同父节点/偏好权重>0.5)"}
1099
+ if act == "chain":
1100
+ return cg.causal_chain(
1101
+ a.get("node_id") or a_id,
1102
+ relation_types=a.get("relation_types"),
1103
+ max_depth=int(a.get("max_depth") or chain.MAX_DEPTH_DEFAULT),
1104
+ direction=a.get("direction") or "out",
1105
+ sort=a.get("sort") or "strength")
1106
+ if act == "explain":
1107
+ return cg.explain_chain(a.get("node_id") or a_id)
1108
+ if act == "catalog":
1109
+ return {"module": "causal", "types": list(chain.CAUSAL_TYPES),
1110
+ "chain_types_default": list(chain.CHAIN_TYPES_DEFAULT),
1111
+ "edge_weights": chain.EDGE_WEIGHTS,
1112
+ "max_depth_default": chain.MAX_DEPTH_DEFAULT,
1113
+ "note": "causal = 条件依赖因果,链 = 条件序列",
1114
+ "gate": predict.catalog()["decisions"]["D-002"],
1115
+ "actions": ["path", "gate", "chain", "explain", "catalog"]}
1116
+ raise ValueError(f"causal 未知 action:{act}")
1117
+
1118
+
1119
+ def _evolution_call(cg, a):
1120
+ """演化账本统一入口(cg op=evolution 与 mdcg_evolution 共用)。
1121
+
1122
+ 载体是 md(`_evolution/ledger.md`):每一次修改 = 对一条缺失条件的补充,
1123
+ 记录的是**认知规律**(rule)与**状态**(before→after),不是实现细节。
1124
+ rollback 把某条演化的状态撤回 before,撤销本身也记一条条目。
1125
+ """
1126
+ from . import evolution
1127
+ act = (a.get("action") or "summary").strip().lower()
1128
+ if act in ("record", "add", "log"):
1129
+ return {"entry": cg.evolution_record(
1130
+ node_id=a.get("node_id"),
1131
+ pattern=a.get("rule") or a.get("pattern") or "",
1132
+ missing=a.get("missing") or "",
1133
+ action=a.get("change") or a.get("note") or "",
1134
+ evidence=a.get("evidence") or "", source=a.get("source") or "",
1135
+ kind=a.get("kind") or evolution.KIND_CONDITION_GAP)}
1136
+ if act in ("entries", "list"):
1137
+ return cg.evolution_entries(
1138
+ limit=int(a.get("limit") or 50), node_id=a.get("node_id"),
1139
+ kind=a.get("kind"))
1140
+ if act in ("show", "get"):
1141
+ return cg.evolution_show(a.get("entry_id") or "")
1142
+ if act == "history":
1143
+ return cg.evolution_history(a.get("node_id") or "",
1144
+ limit=int(a.get("limit") or 50))
1145
+ if act in ("patterns", "regularities"):
1146
+ return cg.evolution_patterns(limit=int(a.get("limit") or 10))
1147
+ if act == "summary":
1148
+ return cg.evolution_summary()
1149
+ if act in ("rollback", "revert", "undo"):
1150
+ principal = getattr(cg, "principal", None)
1151
+ if principal is not None:
1152
+ principal.require_admin("evolution_rollback")
1153
+ return cg.evolution_rollback(
1154
+ a.get("entry_id") or "", dry_run=bool(a.get("dry_run")),
1155
+ note=a.get("note") or "")
1156
+ if act == "catalog":
1157
+ return evolution.catalog()
1158
+ raise ValueError(f"evolution 未知 action:{act}")
1159
+
1160
+
1161
+ def _split_ids(value):
1162
+ """把 'a,b c' / ['a','b'] / 'a' 统一成去空白的 id 列表(None → [])。
1163
+
1164
+ G8 派生溯源用:MCP 参数可能来自命令行逗号串,也可能来自 JSON 数组,
1165
+ 入口先归一,避免 `"kp_a,kp_b"` 被当成单个 id 落进 frontmatter。
1166
+ """
1167
+ if value is None:
1168
+ return []
1169
+ if isinstance(value, (list, tuple, set)):
1170
+ items = list(value)
1171
+ else:
1172
+ items = str(value).replace(",", " ").split()
1173
+ out = []
1174
+ for x in items:
1175
+ s = str(x).strip()
1176
+ if s and s not in out:
1177
+ out.append(s)
1178
+ return out
1179
+
1180
+
1181
+ def _sustain_call(cg, a):
1182
+ """持续性自维持统一入口(常驻 / 心跳 / 自愈 / 会话续接)。
1183
+
1184
+ 路线图「常驻服务:会话/心跳/自愈」。原则:诊断只读;自愈只碰派生物
1185
+ (索引/临时文件/日志边界),永不删节点;缺密钥属于权限事实,只报告不修。
1186
+ """
1187
+ from . import sustain
1188
+ act = (a.get("action") or "status").strip().lower()
1189
+ name = a.get("name") or os.environ.get("MDCG_SUSTAIN_NAME") or "md_cg"
1190
+
1191
+ if act in ("status", "info"):
1192
+ sm = sustain.summary(cg, name)
1193
+ lp = sustain.get_loop(cg, name)
1194
+ return {"heartbeat": sm["heartbeat"], "loop": (lp.status() if lp
1195
+ else {"running": False}),
1196
+ "sessions": sm["sessions"], "watermarks": sustain.watermarks(cg),
1197
+ "peers": sustain.peers()}
1198
+ if act in ("beat", "heartbeat"):
1199
+ return {"beat": sustain.write_stamp(
1200
+ name, root=cg.root, task_running=bool(a.get("task_running")))}
1201
+ if act == "peers":
1202
+ return {"peers": sustain.peers()}
1203
+ if act in ("diagnose", "check"):
1204
+ return sustain.diagnose(cg, name=name)
1205
+ if act in ("heal", "repair"):
1206
+ return sustain.heal(cg, name=name, dry_run=bool(a.get("dry_run")),
1207
+ allow_evolve=bool(a.get("allow_evolve")))
1208
+ if act in ("evolve", "evolve_check"):
1209
+ # G7:演化候选盘点(只读、零读节点文件、不写盘)
1210
+ return sustain.evolution_candidates(
1211
+ cg, layer=a.get("layer"),
1212
+ top=int(a.get("limit") or 8))
1213
+ if act in ("provenance", "derive_check"):
1214
+ # G8:派生溯源悬空巡检(只读、零读节点文件、不删边)
1215
+ from . import provenance as _pv
1216
+ return _pv.check(cg, limit=int(a.get("limit") or 20))
1217
+ if act in ("pooling", "pool_catalog"):
1218
+ # §七:召回分池显式权重表自描述(只读)
1219
+ from . import pooling as _pl
1220
+ return _pl.catalog()
1221
+ if act in ("pool_bench", "pool_measure"):
1222
+ # §七:同口径复测(只读;queries 缺省则从索引确定性取样 → proxy)
1223
+ from . import pooling as _pl
1224
+ qs = a.get("queries")
1225
+ if isinstance(qs, str):
1226
+ qs = [x for x in qs.replace("\n", ",").split(",") if x.strip()]
1227
+ return _pl.measure(cg, qs, k=int(a.get("k") or 20),
1228
+ pools=(a.get("pools") if a.get("pools") is not None
1229
+ else True),
1230
+ n_queries=int(a.get("limit") or 50))
1231
+ if act in ("pool_compare", "pool_ab"):
1232
+ # §七:分池前后同口径对比 + 副作用归因(只读)
1233
+ from . import pooling as _pl
1234
+ qs = a.get("queries")
1235
+ if isinstance(qs, str):
1236
+ qs = [x for x in qs.replace("\n", ",").split(",") if x.strip()]
1237
+ return _pl.compare(cg, qs, k=int(a.get("k") or 20),
1238
+ pools=a.get("pools"),
1239
+ n_queries=int(a.get("limit") or 50))
1240
+ if act in ("start", "up"):
1241
+ lp = sustain.ensure_loop(
1242
+ cg, name,
1243
+ beat_interval=float(a.get("beat_interval")
1244
+ or sustain.DEFAULT_BEAT_INTERVAL),
1245
+ heal_interval=float(a.get("heal_interval")
1246
+ or sustain.DEFAULT_HEAL_INTERVAL),
1247
+ auto_heal=bool(a.get("auto_heal", True)),
1248
+ scrub_interval=float(a.get("scrub_interval")
1249
+ or sustain.DEFAULT_SCRUB_INTERVAL),
1250
+ auto_scrub=bool(a.get("auto_scrub", False)),
1251
+ evolve_interval=float(a.get("evolve_interval")
1252
+ or sustain.DEFAULT_EVOLVE_INTERVAL),
1253
+ auto_evolve=bool(a.get("auto_evolve", False)))
1254
+ return {"loop": lp.start().status()}
1255
+ if act in ("stop", "down"):
1256
+ lp = sustain.get_loop(cg, name)
1257
+ return {"loop": (lp.stop().status() if lp else {"running": False})}
1258
+ if act in ("resume", "resume_point"):
1259
+ return sustain.SessionLedger(cg.root).resume_point(
1260
+ a.get("session") or a.get("node_id") or "")
1261
+ if act in ("note", "record"):
1262
+ return {"session": sustain.SessionLedger(cg.root).note(
1263
+ a.get("session") or a.get("node_id") or "default",
1264
+ t=a.get("ts"), seq=a.get("seq"), n=int(a.get("limit") or 1),
1265
+ actor=a.get("actor"))}
1266
+ if act == "catalog":
1267
+ return {"actions": ["status", "beat", "peers", "diagnose", "heal",
1268
+ "evolve", "provenance", "pooling", "pool_bench",
1269
+ "pool_compare", "start", "stop", "resume",
1270
+ "note", "catalog"],
1271
+ "beat_interval": sustain.DEFAULT_BEAT_INTERVAL,
1272
+ "heal_interval": sustain.DEFAULT_HEAL_INTERVAL,
1273
+ "scrub_interval": sustain.DEFAULT_SCRUB_INTERVAL,
1274
+ "evolve_interval": sustain.DEFAULT_EVOLVE_INTERVAL,
1275
+ "evolve_fixes": dict(sustain.EVOLVE_FIXES),
1276
+ "provenance_fixes": {}, # 悬空派生边只检出、无自动修复
1277
+
1278
+ "thresholds": {"warn": sustain.DEFAULT_WARN_FACTOR,
1279
+ "dead": sustain.DEFAULT_DEAD_FACTOR,
1280
+ "working": sustain.DEFAULT_WORKING_FACTOR},
1281
+ "net_dir": sustain.net_dir()}
1282
+ raise ValueError(f"sustain 未知 action:{act}")
1283
+
1284
+
1285
+ def _scrub_call(cg, a):
1286
+ """记忆自净统一入口(抽查 / 联想 / 去污染 / 校准偏差)。
1287
+
1288
+ 路线图「记忆抽查去污染」。原则与 sustain 一致:体检只读;去污染只做
1289
+ 可逆动作(weaken / demote),**永不删节点**;保护节点跳过。
1290
+ """
1291
+ from . import scrub
1292
+ act = (a.get("action") or "sweep").strip().lower()
1293
+ ids = a.get("ids")
1294
+ if isinstance(ids, str):
1295
+ ids = [s for s in ids.replace(",", " ").split() if s]
1296
+ kinds = a.get("kinds")
1297
+ if isinstance(kinds, str):
1298
+ kinds = [s for s in kinds.replace(",", " ").split() if s]
1299
+ node_id = a.get("node_id") or a.get("node")
1300
+ target = ids or ([node_id] if node_id else None)
1301
+
1302
+ if act in ("sample", "spot_check"):
1303
+ return scrub.sample(
1304
+ cg, int(a.get("k") or a.get("n") or scrub.DEFAULT_SAMPLE),
1305
+ strategy=a.get("strategy") or "stratified", seed=a.get("seed"))
1306
+ if act in ("associate", "related"):
1307
+ if not node_id:
1308
+ raise ValueError("scrub associate 需要 node_id")
1309
+ return scrub.associate(cg, node_id,
1310
+ hops=int(a.get("hops") or scrub.DEFAULT_HOPS),
1311
+ limit=int(a.get("k") or 30),
1312
+ lexical=bool(a.get("lexical", True)))
1313
+ if act in ("audit", "check"):
1314
+ return scrub.audit(cg, target, hops=int(a.get("hops") or 1),
1315
+ min_severity=a.get("min_severity") or "info")
1316
+ if act in ("decontaminate", "repair"):
1317
+ return scrub.decontaminate(
1318
+ cg, target, kinds=kinds, dry_run=bool(a.get("dry_run", True)),
1319
+ min_severity=a.get("min_severity") or "medium",
1320
+ hops=int(a.get("hops") or 1), actor=a.get("actor"),
1321
+ override=bool(a.get("override")))
1322
+ if act in ("calibrate", "calibration"):
1323
+ return scrub.calibrate(cg, apply=bool(a.get("apply")),
1324
+ override=bool(a.get("override")),
1325
+ actor=a.get("actor"))
1326
+ if act in ("sweep", "run"):
1327
+ return scrub.sweep(
1328
+ cg, n=int(a.get("k") or a.get("n") or scrub.DEFAULT_SAMPLE),
1329
+ seed=a.get("seed"), dry_run=bool(a.get("dry_run", True)),
1330
+ hops=int(a.get("hops") or scrub.DEFAULT_HOPS),
1331
+ strategy=a.get("strategy") or "stratified",
1332
+ apply_calibration=bool(a.get("apply")), actor=a.get("actor"))
1333
+ if act in ("history", "log"):
1334
+ return scrub.history(cg, limit=int(a.get("k") or 100))
1335
+ if act == "summary":
1336
+ return scrub.summary(cg)
1337
+ if act == "catalog":
1338
+ return scrub.catalog()
1339
+ raise ValueError(f"scrub 未知 action:{act}")
1340
+
1341
+
1342
+ def _cg_call(cg, a):
1343
+ """认知图唯一入口。"""
1344
+ op = (a.get("op") or "read").strip().lower()
1345
+ _p = getattr(cg, "principal", None)
1346
+ if _p is not None and hasattr(_p, "require_op"):
1347
+ _p.require_op(op) # 角色作用域闸门:越权即 AccessDenied
1348
+
1349
+ if op == "theory":
1350
+ from . import theory as _th
1351
+ act = (a.get("action") or "check").strip().lower()
1352
+ if act == "check":
1353
+ return _th.check()
1354
+ if act == "show":
1355
+ return _th.show()
1356
+ if act == "catalog":
1357
+ return _th.catalog()
1358
+ if act == "declare":
1359
+ acc = a.get("accepted") or a.get("accepted_versions")
1360
+ if isinstance(acc, str):
1361
+ acc = [x for x in acc.split(",") if x.strip()]
1362
+ return _th.declare(a.get("version"), accepted=acc,
1363
+ actor=(_p.actor if _p is not None else "designer"))
1364
+ raise ValueError(f"theory 未知 action:{act}")
1365
+
1366
+ if op == "link":
1367
+ from . import links as _lk
1368
+ act = (a.get("action") or "ls").strip().lower()
1369
+ _actor = _p.actor if _p is not None else "system"
1370
+ if act == "catalog":
1371
+ return _lk.catalog()
1372
+ if act == "ls":
1373
+ return _lk.ls(status=a.get("status"), subsystem=a.get("subsystem"))
1374
+ if act == "show":
1375
+ return _lk.get(a.get("peer"))
1376
+ if act == "handshake":
1377
+ pm = a.get("position_map")
1378
+ if isinstance(pm, str):
1379
+ pm = dict(x.split("=", 1) for x in pm.split(",") if "=" in x)
1380
+ th = a.get("peer_theory")
1381
+ if not th and a.get("peer_version"):
1382
+ th = {"version": a.get("peer_version")}
1383
+ return _lk.handshake(
1384
+ a.get("peer"), peer_theory=th, position_map=pm,
1385
+ declared_charter=bool(a.get("declared_charter", True)),
1386
+ subsystem=a.get("subsystem"),
1387
+ peer_signature=a.get("peer_signature"), actor=_actor)
1388
+ if act == "observe":
1389
+ return _lk.observe(
1390
+ a.get("peer"), evidence=a.get("evidence") or "",
1391
+ positive=not bool(a.get("negative")),
1392
+ subsystem=a.get("subsystem"),
1393
+ peer_signature=a.get("peer_signature"), actor=_actor)
1394
+ if act in ("promote", "degrade", "isolate", "withdraw"):
1395
+ return getattr(_lk, act)(a.get("peer"), reason=a.get("reason"),
1396
+ actor=_actor)
1397
+ if act == "decay":
1398
+ return _lk.decay_all(actor=_actor)
1399
+ if act == "policy": # 子系统签名策略(D-4)
1400
+ from . import signer as _sg
1401
+ if a.get("set"):
1402
+ return _sg.set_policy(a.get("subsystem"), **{
1403
+ k: a[k] for k in ("signer", "sign_on",
1404
+ "require_peer_signature",
1405
+ "on_verify_fail") if k in a})
1406
+ return _sg.show()
1407
+ # ---- 跨节点证据存储(v0.3)------------------------------------
1408
+ if act in ("card", "node_card"):
1409
+ from . import evidence as _ev
1410
+ return _ev.card(cg.root, subsystem=a.get("subsystem"),
1411
+ signers_file=a.get("signers_file"))
1412
+ if act in ("publish", "publish_card"):
1413
+ from . import evidence as _ev
1414
+ return _ev.publish_card(cg.root, swarm=a.get("swarm"),
1415
+ subsystem=a.get("subsystem"),
1416
+ signers_file=a.get("signers_file"))
1417
+ if act in ("peers", "peer_list"):
1418
+ from . import evidence as _ev
1419
+ return _ev.peers(a.get("swarm"), root=cg.root)
1420
+ if act in ("evidence", "evidence_ls"):
1421
+ from . import evidence as _ev
1422
+ return _ev.evidence(
1423
+ cg, subject=a.get("subject"), source=a.get("source"),
1424
+ limit=int(a.get("limit") or a.get("k") or 100))
1425
+ if act in ("export", "evidence_export"):
1426
+ from . import evidence as _ev
1427
+ subs = a.get("subjects") or a.get("subject")
1428
+ if isinstance(subs, str):
1429
+ subs = [subs]
1430
+ res = _ev.export_pack(
1431
+ cg, subjects=subs, since=a.get("since"), swarm=a.get("swarm"),
1432
+ subsystem=a.get("subsystem") or _ev.SUBSYSTEM,
1433
+ signers_file=a.get("signers_file"))
1434
+ if a.get("out"):
1435
+ res["written"] = _ev.write_pack(
1436
+ res["pack"], path=a.get("out"), swarm=a.get("swarm"))
1437
+ return res
1438
+ if act in ("import", "evidence_import"):
1439
+ from . import evidence as _ev
1440
+ src = a.get("path") or a.get("pack")
1441
+ if isinstance(src, str) and src.lstrip().startswith("{"):
1442
+ src = json.loads(src)
1443
+ if src is None:
1444
+ raise ValueError("link/import 需要 path(包文件)或 pack(内联对象)")
1445
+ return _ev.import_pack(
1446
+ cg, src, subsystem=a.get("subsystem") or _ev.SUBSYSTEM,
1447
+ swarm=a.get("swarm"), signers_file=a.get("signers_file"))
1448
+ # ---- 派生溯源(G8):节点演进血缘(≠ 上面的对端信任 P_trust)----
1449
+ # 权威声明只在节点写入时产生(`derived_from` → frontmatter + _link.jsonl),
1450
+ # 本层**不新增写入口**;这里只读查询、悬空巡检与「按 frontmatter 重建台账」。
1451
+ if act in ("derive", "derive_ls", "provenance_ls"):
1452
+ from . import provenance as _pv
1453
+ return {"ok": True, "readonly": True,
1454
+ "ledger": _pv.ledger_file(cg.root),
1455
+ "edges": _pv.edges(
1456
+ cg.root, child=a.get("child") or a.get("node"),
1457
+ parent=a.get("parent"), relation=a.get("relation"),
1458
+ batch=a.get("batch"), limit=a.get("limit"))}
1459
+ if act in ("derive_dangling", "provenance_check"):
1460
+ from . import provenance as _pv
1461
+ return _pv.check(cg, limit=int(a.get("limit") or 20),
1462
+ include_index=not bool(a.get("ledger_only")))
1463
+ if act in ("derive_catalog", "provenance_catalog"):
1464
+ from . import provenance as _pv
1465
+ return _pv.catalog(cg.root)
1466
+ if act in ("derive_rebuild", "provenance_rebuild"):
1467
+ # 台账是派生物,可重建:只重放 frontmatter 已声明的边,不发明任何边。
1468
+ # 历史节点未声明派生关系 → 重建结果为空,正合「历史不回填」。
1469
+ if _p is not None:
1470
+ _p.require_admin("link_derive_rebuild")
1471
+ from . import provenance as _pv
1472
+ return _pv.rebuild_ledger(cg, apply=bool(a.get("apply")))
1473
+ raise ValueError(f"link 未知 action:{act}")
1474
+
1475
+ if op == "info":
1476
+ from . import audit
1477
+ from . import theory as _th
1478
+ from . import links as _lk
1479
+ h = cg.health_os()
1480
+ h.update({"surface": SURFACE,
1481
+ "tools": [t["name"] for t in tools_for_surface()],
1482
+ "audit_kinds": audit.kinds(), "whoami": cg.whoami()})
1483
+ h["theory"] = _th.check()
1484
+ h["links"] = _lk.ls()
1485
+ return h
1486
+
1487
+ if op == "route":
1488
+ intent = a.get("intent") or a.get("query") or ""
1489
+ res, meta = cg.search(intent, k=int(a.get("k") or 10),
1490
+ context=a.get("context"), record=False)
1491
+ knowledge, caps = [], []
1492
+ for n, s, q in res:
1493
+ fm = n.get("frontmatter") or {}
1494
+ knowledge.append({"id": n.get("id"), "score": s, "state": q.get("state"),
1495
+ "reason": q.get("reason"),
1496
+ "content": (n.get("content") or "")[:500],
1497
+ "verification_basis": fm.get("verification_basis")})
1498
+ if fm.get("capability"):
1499
+ caps.append(fm["capability"])
1500
+ for t in (fm.get("tags") or []):
1501
+ if isinstance(t, str) and t.startswith("cap:"):
1502
+ caps.append(t[4:])
1503
+ return {"knowledge": knowledge, "suggested_capabilities": sorted(set(caps)),
1504
+ "meta": meta,
1505
+ "note": "认知图只给知识与建议能力名,不执行;由调用方决定"}
1506
+
1507
+ if op == "read":
1508
+ if a.get("node_id"):
1509
+ return _node_view(cg.get(a["node_id"]))
1510
+ q = a.get("query") or a.get("intent") or ""
1511
+ if a.get("budget_tokens"):
1512
+ return cg.recall(q, budget_tokens=int(a["budget_tokens"]),
1513
+ k=int(a.get("k") or 20), context=a.get("context"),
1514
+ goal_text=a.get("goal"),
1515
+ include_recent=bool(a.get("include_recent")),
1516
+ recent_limit=int(a.get("limit") or 10))
1517
+ from . import refindex
1518
+ res, meta = cg.search(q, layer=a.get("layer"), k=int(a.get("k") or 20),
1519
+ context=a.get("context"))
1520
+ return {"meta": meta, "results": [
1521
+ {"node": _node_view(n), "score": s, "state": q2.get("state"),
1522
+ "reason": q2.get("reason"), **refindex.ref_fields(n)}
1523
+ for n, s, q2 in res]}
1524
+
1525
+ if op == "write":
1526
+ from . import audit
1527
+ verdict = audit.audit(
1528
+ (a.get("content_kind") or "").strip(),
1529
+ {"content": a.get("content", ""), "action": a.get("action"),
1530
+ "sensitivity": a.get("sensitivity"),
1531
+ "topic": a.get("query") or a.get("intent")},
1532
+ {"cg": cg, "principal": getattr(cg, "principal", None)})
1533
+ nid = a.get("node_id") or ("mem_" + str(int(__import__("time").time() * 1000)))
1534
+ st = verdict["state"]
1535
+ if st == audit.ACCEPT:
1536
+ # 节点间自动冲突检测(三级决策:情绪→反思→递归反思):
1537
+ # 写入前与既有条件/纪律校验;不通过则不落盘(可进审核队列)。
1538
+ # 与 mdcg_remember 同源、默认开启——「信息的修改必须先通过校验」。
1539
+ cvd = None
1540
+ if bool(a.get("consistency", True)):
1541
+ oc = (a.get("on_conflict") or "defer").strip().lower()
1542
+ cvd = cg.check_consistency(
1543
+ a.get("content", ""),
1544
+ layer=a.get("layer") or ("contextual" if a.get("gated")
1545
+ else "knowledge"),
1546
+ condition_space=a.get("condition_space"),
1547
+ non_applicable_conditions=a.get("non_applicable_conditions"),
1548
+ tags=a.get("tags"), exclude=nid, auto_flywheel=True)
1549
+ v = cvd.get("verdict")
1550
+ blocked = ((v == "REJECT" and oc == "reject")
1551
+ or (v in ("REJECT", "BLINDSPOT") and oc == "defer"))
1552
+ if blocked:
1553
+ if oc == "reject":
1554
+ return {"ok": False, "id": nid, "committed": False,
1555
+ "moved_to": "conflict_rejected",
1556
+ "consistency": cvd, "verdict": verdict}
1557
+ pid = cg.propose(nid, a.get("content", ""),
1558
+ layer=a.get("layer") or "knowledge",
1559
+ tags=a.get("tags"),
1560
+ condition_space=a.get("condition_space"))
1561
+ return {"ok": False, "id": nid, "pid": pid, "committed": False,
1562
+ "moved_to": "review_queue", "consistency": cvd,
1563
+ "verdict": verdict}
1564
+ if a.get("gated"):
1565
+ hint = a.get("importance_hint")
1566
+ if hint is None and a.get("importance") is not None:
1567
+ hint = float(a["importance"])
1568
+ res = cg.remember_gated(
1569
+ nid, a.get("content", ""), layer=a.get("layer") or "contextual",
1570
+ role=a.get("role"), tags=a.get("tags"),
1571
+ condition_space=a.get("condition_space"),
1572
+ verification_basis=(a.get("verification_basis")
1573
+ or verdict.get("basis")),
1574
+ non_applicable_conditions=a.get("non_applicable_conditions"),
1575
+ importance_hint=hint, override=bool(a.get("override")),
1576
+ consistency=False,
1577
+ derived_from=_split_ids(a.get("derived_from")),
1578
+ relation=a.get("relation"))
1579
+ v = res.get("verdict")
1580
+ committed = v == "ACCEPT"
1581
+ out = {"ok": committed, "id": nid, "committed": committed,
1582
+ "gate": res, "verdict": verdict}
1583
+ if cvd is not None:
1584
+ out["consistency"] = cvd
1585
+ if v == "MERGE":
1586
+ out["moved_to"] = "merged_into:" + str(res.get("merged_into"))
1587
+ elif v in ("DROP", "DEFER"):
1588
+ out["moved_to"] = v.lower()
1589
+ return out
1590
+ cg.add(nid, a.get("content", ""), layer=a.get("layer") or "knowledge",
1591
+ tags=a.get("tags"), condition_space=a.get("condition_space"),
1592
+ importance=float(a.get("importance", 0.5)),
1593
+ verification_basis=a.get("verification_basis") or verdict.get("basis"),
1594
+ non_applicable_conditions=a.get("non_applicable_conditions"),
1595
+ override=bool(a.get("override")), consistency=False,
1596
+ derived_from=_split_ids(a.get("derived_from")),
1597
+ relation=a.get("relation"))
1598
+ out = {"ok": True, "id": nid, "committed": True, "verdict": verdict}
1599
+ if cvd is not None:
1600
+ out["consistency"] = cvd
1601
+ return out
1602
+ if st == audit.REJECT:
1603
+ rid = cg.add_rejected((a.get("content") or "")[:200], verdict["evidence"],
1604
+ verification_basis=verdict.get("basis") or "test",
1605
+ tags=a.get("tags"))
1606
+ return {"ok": False, "id": rid, "committed": False,
1607
+ "moved_to": "rejected", "verdict": verdict}
1608
+ pid = cg.propose(nid, a.get("content", ""), layer=a.get("layer") or "knowledge",
1609
+ tags=a.get("tags"), condition_space=a.get("condition_space"))
1610
+ return {"ok": True, "id": nid, "pid": pid, "committed": False,
1611
+ "moved_to": "review_queue", "verdict": verdict}
1612
+
1613
+ if op == "goal":
1614
+ act = (a.get("action") or "list").strip().lower()
1615
+ if act == "add":
1616
+ gid = cg.add_goal(a.get("goal") or a.get("text") or "",
1617
+ priority=float(a.get("priority", 0.5)),
1618
+ deadline=a.get("deadline"),
1619
+ conditions=a.get("conditions") or "",
1620
+ action=a.get("action_hint") or "",
1621
+ tags=a.get("tags"),
1622
+ status=a.get("goal_status") or "active")
1623
+ return {"ok": True, "id": gid}
1624
+ if act in ("status", "set_status"):
1625
+ return {"ok": True,
1626
+ "goal": cg.set_goal_status(a.get("node_id", ""),
1627
+ a.get("goal_status") or "done")}
1628
+ return {"goals": cg.list_goals(status=a.get("goal_status"),
1629
+ limit=int(a.get("limit") or 20)),
1630
+ "active": cg.active_goals(limit=int(a.get("limit") or 5))}
1631
+
1632
+ if op == "recent":
1633
+ act = (a.get("action") or "list").strip().lower()
1634
+ if act in ("add", "append", "remember"):
1635
+ return cg.remember_event(a.get("role") or "user",
1636
+ a.get("text") or a.get("content") or "",
1637
+ tags=a.get("tags"), meta=a.get("meta"),
1638
+ window=int(a.get("window") or 200))
1639
+ if act == "clear":
1640
+ return {"cleared": cg.clear_recent()}
1641
+ return {"events": cg.recent_events(limit=int(a.get("limit") or 20),
1642
+ roles=a.get("roles"))}
1643
+
1644
+ if op == "verify":
1645
+ return cg.verify(a.get("node_id", ""), a.get("evidence", ""),
1646
+ a.get("verdict", ""))
1647
+
1648
+ if op == "review":
1649
+ act = (a.get("action") or "list").strip().lower()
1650
+ if act == "list":
1651
+ return {"pending": cg.review_list()}
1652
+ if act == "rounds":
1653
+ pid = a.get("pid", "")
1654
+ return {"pid": pid, "rounds": cg.review_rounds(pid)}
1655
+ if act == "records":
1656
+ return {"records": cg.review_records(pid=a.get("pid"))}
1657
+ if act in ("verify_record", "verify"):
1658
+ return cg.verify_review_record(a.get("node_id", ""))
1659
+ return cg.review_decide(a.get("pid", ""), a.get("decision", ""),
1660
+ edits=a.get("edits"), merge_into=a.get("merge_into"),
1661
+ reason=a.get("reason", ""),
1662
+ redteam=a.get("redteam"), issues=a.get("issues"))
1663
+
1664
+ if op == "forget":
1665
+ if (a.get("action") or "forget").strip().lower() == "restore":
1666
+ return cg.restore(a.get("node_id", ""), force=bool(a.get("force")))
1667
+ return cg.forget(a.get("node_id", ""), a.get("reason", ""),
1668
+ override=bool(a.get("override")))
1669
+
1670
+ if op == "protect":
1671
+ return _protect_call(cg, a)
1672
+
1673
+ if op == "identity":
1674
+ return _identity_call(cg, a)
1675
+
1676
+ if op == "consistency":
1677
+ return _consistency_call(cg, a)
1678
+
1679
+ if op == "metacognition":
1680
+ return _metacognition_call(cg, a)
1681
+
1682
+ if op == "self_state":
1683
+ return _self_state_call(cg, a)
1684
+
1685
+ if op == "evolution":
1686
+ return _evolution_call(cg, a)
1687
+
1688
+ if op == "sustain":
1689
+ return _sustain_call(cg, a)
1690
+
1691
+ if op == "scrub":
1692
+ return _scrub_call(cg, a)
1693
+
1694
+ if op == "predict":
1695
+ return _predict_call(cg, a)
1696
+
1697
+ if op == "causal":
1698
+ return _causal_call(cg, a)
1699
+
1700
+ if op == "whitebox":
1701
+ return _whitebox_call(cg, a)
1702
+
1703
+ if op == "index_code":
1704
+ from . import refindex
1705
+ root = a.get("path") or cg.root
1706
+ if not os.path.isdir(root):
1707
+ return {"ok": False, "error": f"目录不存在:{root}"}
1708
+ items, errors, stats = refindex.index_dir(
1709
+ root, kind="code_ref", patterns=a.get("patterns"),
1710
+ max_files=int(a.get("max_files") or 500),
1711
+ max_items=int(a.get("max_items") or 2000),
1712
+ incremental=bool(a.get("incremental")),
1713
+ ledger=refindex.Ledger(cg.root))
1714
+ ids, _sens = refindex.add_items(cg, items, kind="code_ref", root=root,
1715
+ layer=a.get("layer"))
1716
+ note = ("只索引注释/接口(AST 已校验),未存完整代码;"
1717
+ "正文用 frontmatter.code_ref + op=ref 指回源文件。"
1718
+ "skipped_suffixes 是扫到但**没有提取器**的后缀,用于审计覆盖缺口")
1719
+ out = {"ok": True, "indexed": len(ids), "error_count": len(errors),
1720
+ "errors": errors[:10], "ids": ids[:20],
1721
+ "files": stats["files"], "truncated": stats["truncated"],
1722
+ "skipped_unchanged": stats.get("skipped_unchanged", 0),
1723
+ "skipped_suffixes": stats["skipped_suffixes"], "note": note}
1724
+ if stats["truncated"]:
1725
+ # 截断必须显式说出来:以前静默 return,调用方以为索引是完整的。
1726
+ out["truncated_reason"] = stats["truncated_reason"]
1727
+ out["note"] = (f"⚠ 索引被截断,结果不完整({stats['truncated_reason']}),"
1728
+ f"调大 max_files/max_items 后重跑。" + note)
1729
+ return out
1730
+
1731
+ if op == "index_doc":
1732
+ from . import refindex
1733
+ root = a.get("path") or cg.root
1734
+ if not os.path.isdir(root):
1735
+ return {"ok": False, "error": f"目录不存在:{root}"}
1736
+ layer = a.get("layer") or "knowledge"
1737
+ # 显式改密级时必须全量重切(增量会跳过未变文件、覆盖不生效)。
1738
+ incremental = bool(a.get("incremental")) and not a.get("sensitivity")
1739
+ items, errors, stats = refindex.index_dir(
1740
+ root, kind="doc_ref", patterns=a.get("patterns"),
1741
+ max_files=int(a.get("max_files") or 500),
1742
+ max_items=int(a.get("max_items") or 2000),
1743
+ incremental=incremental, ledger=refindex.Ledger(cg.root))
1744
+ ids, sens_counts = refindex.add_items(
1745
+ cg, items, kind="doc_ref", root=root, layer=layer,
1746
+ sensitivity=a.get("sensitivity"))
1747
+ note = ("只索引章节(level<=3)的标题与摘要,未存全文;正文用 "
1748
+ "frontmatter.doc_ref + op=ref 回读。layer 与密级按计划 §1.3-3 "
1749
+ "显式声明(默认 knowledge / internal,路径命中私有提示降为 "
1750
+ "private),不依赖节点默认值")
1751
+ out = {"ok": True, "indexed": len(ids), "error_count": len(errors),
1752
+ "errors": errors[:10], "ids": ids[:20], "files": stats["files"],
1753
+ "truncated": stats["truncated"],
1754
+ "skipped_unchanged": stats.get("skipped_unchanged", 0),
1755
+ "skipped_suffixes": stats["skipped_suffixes"],
1756
+ "layer": layer, "sensitivity": sens_counts, "note": note}
1757
+ if stats["truncated"]:
1758
+ out["truncated_reason"] = stats["truncated_reason"]
1759
+ out["note"] = (f"⚠ 索引被截断,结果不完整({stats['truncated_reason']}),"
1760
+ f"调大 max_files/max_items 后重跑。" + note)
1761
+ return out
1762
+
1763
+ if op == "ref":
1764
+ return _ref_call(cg, a)
1765
+
1766
+ if op == "session":
1767
+ return _session_call(cg, a)
1768
+
1769
+ if op == "ingest":
1770
+ return _ingest_call(cg, a)
1771
+
1772
+ if op == "export":
1773
+ return _export_call(cg, a)
1774
+
1775
+ if op == "maintain":
1776
+ return _maintain_call(cg, a)
1777
+
1778
+ if op == "consolidate":
1779
+ return _consolidate_call(cg, a)
1780
+
1781
+ if op == "insight":
1782
+ return _insight_call(cg, a)
1783
+
1784
+ raise ValueError(f"cg 未知 op:{op}")
1785
+
1786
+
1787
+ def _session_call(cg, a):
1788
+ """会话三件套(P0):note 写要点 / recall 续接 / compact 压摘要。
1789
+
1790
+ 定位:hook 缺失时的**库侧替代**——载体负责「何时自动做」,库保证
1791
+ 「一次调用就够用」。权限:note 与 compact(note=True) 属写入 → can_write;
1792
+ recall 只读(output 角色可用)。
1793
+ """
1794
+ act = (a.get("action") or "recall").strip().lower()
1795
+ principal = getattr(cg, "principal", None)
1796
+ if act == "note":
1797
+ if principal is not None and not getattr(principal, "can_write", False):
1798
+ principal.require_admin("session_note") # 无写权 → 抛 AccessDenied
1799
+ imp = a.get("importance")
1800
+ return cg.session_note(
1801
+ a.get("summary") or a.get("text") or a.get("content") or "",
1802
+ session=a.get("session"), tags=a.get("tags"),
1803
+ layer=a.get("layer") or "contextual",
1804
+ importance=float(0.6 if imp is None else imp),
1805
+ sensitivity=a.get("sensitivity"), conditions=a.get("conditions"),
1806
+ basis=a.get("basis") or "data")
1807
+ if act == "recall":
1808
+ return cg.session_recall(
1809
+ session=a.get("session"), limit=int(a.get("limit") or 5),
1810
+ recent_limit=int(a.get("recent_limit") or 10),
1811
+ budget_tokens=int(a.get("budget_tokens") or 1200),
1812
+ include_state=bool(a.get("include_state", True)))
1813
+ if act == "compact":
1814
+ if a.get("note") and principal is not None \
1815
+ and not getattr(principal, "can_write", False):
1816
+ principal.require_admin("session_compact")
1817
+ imp = a.get("importance")
1818
+ return cg.session_compact(
1819
+ session=a.get("session"), limit=int(a.get("limit") or 40),
1820
+ max_points=int(a.get("max_points") or 8), note=bool(a.get("note")),
1821
+ importance=float(0.5 if imp is None else imp))
1822
+ raise ValueError(f"session 未知 action:{act}(允许 note/recall/compact)")
1823
+
1824
+
1825
+ def _ingest_call(cg, a):
1826
+ """文件摄取分派(P0):file / dir / jsonl / stat。
1827
+
1828
+ 权限:写链(file/dir/jsonl)需 can_write;stat 只读。
1829
+ 支持 dry_run 预演(对应计划「可预演」要求)。
1830
+ """
1831
+ from . import sources
1832
+ act = (a.get("action") or "stat").strip().lower()
1833
+ principal = getattr(cg, "principal", None)
1834
+ if act in ("file", "dir", "jsonl") and principal is not None \
1835
+ and not getattr(principal, "can_write", False):
1836
+ principal.require_admin(f"ingest_{act}") # 无写权 → 抛 AccessDenied
1837
+ return sources.run(
1838
+ cg, action=act, path=a.get("path"), layer=a.get("layer"),
1839
+ sensitivity=a.get("sensitivity"), patterns=a.get("patterns"),
1840
+ max_files=a.get("max_files"), max_items=a.get("max_items"),
1841
+ incremental=a.get("incremental"), dry_run=a.get("dry_run"),
1842
+ max_events=a.get("max_events"))
1843
+
1844
+
1845
+ def _export_call(cg, a):
1846
+ """全库导出(P0):graph / nodes / slice / stat。
1847
+
1848
+ 导出整库属**管理操作** → 一律 require_admin(designer 专属)。
1849
+ """
1850
+ from . import export as _ex
1851
+ act = (a.get("action") or "stat").strip().lower()
1852
+ principal = getattr(cg, "principal", None)
1853
+ if principal is not None:
1854
+ principal.require_admin(f"export_{act}")
1855
+ inc = a.get("include_content")
1856
+ return _ex.run(
1857
+ cg, action=act, out=a.get("out"), ids=a.get("ids"),
1858
+ layer=a.get("layer"), since=a.get("since"), until=a.get("until"),
1859
+ tag=a.get("tag"), limit=a.get("limit"),
1860
+ include_content=True if inc is None else bool(inc))
1861
+
1862
+
1863
+ def _maintain_call(cg, a):
1864
+ """记忆维护(P1):importance / longterm / prefeed / separate / rollback / stat。
1865
+
1866
+ 权限**按 action 分档**(比整 op 收窄更贴合语义):
1867
+ · 只读(stat / history / longterm mode=list|show)→ 不额外拦截;
1868
+ · 写入侧闸门(prefeed write=True)→ 需 can_write;
1869
+ · 批量改写(importance / separate / longterm 的 apply,以及 rollback 本身
1870
+ 即反向写入、无 dry-run 语义)→ require_admin。
1871
+ 注意:**dry-run 不等于写入**——importance / separate 的预演只出报表、不改盘,
1872
+ 因此对持有 maintain 授权的写层角色放行,使其能先看清影响面再请示管理层。
1873
+ """
1874
+ act = (a.get("action") or "stat").strip().lower()
1875
+ principal = getattr(cg, "principal", None)
1876
+ apply = bool(a.get("apply"))
1877
+ mode = str(a.get("mode") or "").strip().lower()
1878
+ actor = getattr(principal, "actor", None) if principal is not None else None
1879
+ if principal is not None and act == "rollback":
1880
+ principal.require_admin("maintain_rollback")
1881
+ if principal is not None and act in ("importance", "separate") and apply:
1882
+ principal.require_admin(f"maintain_{act}")
1883
+ if principal is not None and act == "longterm" and apply:
1884
+ principal.require_admin("maintain_longterm")
1885
+ if principal is not None and act == "prefeed" and a.get("write") \
1886
+ and not getattr(principal, "can_write", False):
1887
+ principal.require_admin("maintain_prefeed_write")
1888
+ # 真实库对齐(P32):backfill/cap 的 apply 与 rollback 都直接改写 md → 管理操作;
1889
+ # 预演(plan)与留痕查询只出报表/读日志,放行写层角色以便先看影响面。
1890
+ if principal is not None and act in ("backfill", "cap", "exempt") and apply:
1891
+ principal.require_admin(f"maintain_{act}")
1892
+ if principal is not None and act in ("backfill_rollback", "cap_rollback",
1893
+ "exempt_rollback"):
1894
+ principal.require_admin(f"maintain_{act}")
1895
+ # G5 视觉证据回填:apply 直接改写 md 证据面 → 管理操作;rollback 反向写入同样
1896
+ # 需管理层;预演(plan)与留痕查询只出报表/读日志,放行写层角色。
1897
+ if principal is not None and act == "vision_evidence" and apply:
1898
+ principal.require_admin("maintain_vision_evidence")
1899
+ if principal is not None and act == "vision_evidence_rollback":
1900
+ principal.require_admin("maintain_vision_evidence_rollback")
1901
+ # G6 提炼抽检:plan/gate/history 只读;apply 只追加抽检留痕(不改节点),
1902
+ # 但它决定后续是否放行**扩批**(真写节点由 consolidate.induce 另批承担),
1903
+ # 故按管理面处理——写层角色可先看工单/预演,改判需管理层。
1904
+ if principal is not None and act == "refine" and apply:
1905
+ principal.require_admin("maintain_refine")
1906
+ if act == "longterm" and mode in ("list", "ls", "show", "read"):
1907
+ return cg.maintain(action="longterm", mode=mode,
1908
+ limit=a.get("limit"), snapshot_id=a.get("snapshot_id"))
1909
+ return cg.maintain(
1910
+ action=act, layer=a.get("layer"), limit=a.get("limit"), apply=apply,
1911
+ min_delta=a.get("min_delta"), max_rows=a.get("max_rows"),
1912
+ force=bool(a.get("force")), keep=a.get("keep"), mode=a.get("mode"),
1913
+ snapshot_id=a.get("snapshot_id"), batch=a.get("batch"),
1914
+ entry_ids=a.get("entry_ids"),
1915
+ content=a.get("content") or a.get("text") or a.get("summary"),
1916
+ role=a.get("role"),
1917
+ verification_basis=a.get("basis") or a.get("verification_basis"),
1918
+ importance_hint=a.get("importance"), node_id=a.get("node_id"),
1919
+ write=bool(a.get("write")), min_jaccard=a.get("min_jaccard"),
1920
+ ids=a.get("ids"), actor=actor, include_partial=a.get("include_partial"),
1921
+ min_conf=a.get("min_conf"), basis_text=a.get("basis_text"),
1922
+ prefixes=a.get("prefixes"), aeis_root=a.get("aeis_root"),
1923
+ sample_n=a.get("sample_n"), prefix=a.get("prefix"),
1924
+ verdicts=a.get("verdicts"), reason=a.get("reason"))
1925
+
1926
+
1927
+ def _consolidate_call(cg, a):
1928
+ """离线固化(P1):promote / promote_rollback / promote_history。
1929
+
1930
+ 批量提升属**管理操作** → 一律 require_admin(designer 专属)。
1931
+ """
1932
+ act = (a.get("action") or "promote").strip().lower()
1933
+ principal = getattr(cg, "principal", None)
1934
+ if principal is not None:
1935
+ principal.require_admin(f"consolidate_{act}")
1936
+ imp = a.get("min_importance")
1937
+ if imp is None:
1938
+ imp = a.get("importance")
1939
+ return cg.consolidate_run(
1940
+ action=act, source_layer=a.get("source_layer"),
1941
+ target_layer=a.get("target_layer"), min_merge=a.get("min_merge"),
1942
+ min_importance=imp, require_conditions=a.get("require_conditions"),
1943
+ min_cluster=a.get("min_cluster"), min_jaccard=a.get("min_jaccard"),
1944
+ max_nodes=a.get("max_nodes"), prefixes=a.get("prefixes"),
1945
+ reason=a.get("reason"),
1946
+ limit=a.get("limit"), apply=bool(a.get("apply")),
1947
+ node_ids=a.get("node_ids") or a.get("ids"), batch=a.get("batch"),
1948
+ actor=getattr(principal, "actor", None) if principal is not None else None)
1949
+
1950
+
1951
+ def _insight_call(cg, a):
1952
+ """洞察(P2):window / record / verify / list / report / reconstruct / learn /
1953
+ outlook / catalog。
1954
+
1955
+ 权限**按 action 分档**(与 maintain 同构,比整 op 收窄更贴合语义):
1956
+ · 只读(window / list / report / reconstruct 预演 / outlook / catalog)
1957
+ → 不额外拦截;
1958
+ · 条件层记账(record / verify)→ 需 can_write;
1959
+ · 落库(reconstruct apply / learn apply)→ 批量改写,require_admin。
1960
+ 这样 output 角色能读洞察但不能记;reflect 能重构与学习预演;批量落库须请示。
1961
+ """
1962
+ act = (a.get("action") or "outlook").strip().lower()
1963
+ principal = getattr(cg, "principal", None)
1964
+ can_write = bool(getattr(principal, "can_write", False))
1965
+ apply = bool(a.get("apply"))
1966
+ actor = getattr(principal, "actor", None) if principal is not None else None
1967
+ if principal is not None and act in ("record", "verify") and not can_write:
1968
+ principal.require_admin(f"insight_{act}") # 无写权 → 抛 AccessDenied
1969
+ if principal is not None and act in ("reconstruct", "learn") and apply:
1970
+ principal.require_admin(f"insight_{act}")
1971
+ return cg.insight(
1972
+ action=act, layer=a.get("layer"), limit=a.get("limit"),
1973
+ conditions=a.get("conditions"), apply=apply, actor=actor,
1974
+ statement=a.get("statement"), category=a.get("category"),
1975
+ source=a.get("source"), tags=a.get("tags"),
1976
+ importance=a.get("importance"), node_id=a.get("node_id"),
1977
+ evidence=a.get("evidence"), v_types=a.get("v_types"),
1978
+ verdict=a.get("verdict"), state=a.get("state"),
1979
+ window_days=a.get("window_days"), clues=a.get("clues"),
1980
+ ids=a.get("ids"), neighbors=a.get("neighbors"),
1981
+ blindspot_id=a.get("blindspot_id"), horizon=a.get("horizon"),
1982
+ max_branches=a.get("max_branches"), recent_days=a.get("recent_days"),
1983
+ sample_limit=a.get("sample_limit"), max_nodes=a.get("max_nodes"))
1984
+
1985
+
1986
+ def _ref_call(cg, a):
1987
+ """按 ref 回读被索引的源位置(认知图只存注释/接口,正文在这里取回)。
1988
+
1989
+ 为什么需要它:索引节点存的是**注释与接口**,正文一律不复制(避免出现
1990
+ 第二份真相)。若没有回读入口,`code_ref` 就只是一串没人消费的坐标——
1991
+ 「能索引到实际代码」这句话就没有兑现。回读同时用 `codeindex.region_hash`
1992
+ 复算被引用行的哈希,因此它同时也是**漂移检测**:源文件改过之后,回读会
1993
+ 明确回 stale=True,而不是继续返回一个已经错位的区间。
1994
+
1995
+ ref 来源二选一:传 `node_id`(取该节点的 frontmatter.code_ref 或 doc_ref),
1996
+ 或直接传 `ref` 对象。代码索引节点与文档索引节点共用本入口——两者的区间
1997
+ 语义一致(相对 path + lineno..end + hash + root),只是 ref 字段名不同。
1998
+ `root` 可用参数覆盖(ref 里的 root 是索引时的机器本地绝对路径,跨机器搬迁
1999
+ 后需显式给 root)。
2000
+
2001
+ `action`(默认 read):
2002
+ · read —— 回读源区间(本函数主体);
2003
+ · check —— 全库漂移/悬空巡检(stale / dangling),只读、不抛、不改源文件;
2004
+ · stat —— 看 `_refindex.json` 水位(files/nodes/最近一次索引是否被截断)。
2005
+ 回读与巡检共用 `refindex.probe_ref` 的唯一判定实现,避免两套口径打架。
2006
+ """
2007
+ from . import refindex
2008
+ action = (a.get("action") or "read").strip().lower()
2009
+ if action == "stat":
2010
+ return {"ok": True, "action": "stat",
2011
+ "ledger": refindex.Ledger(cg.root).summary(),
2012
+ "note": "ref 索引水位(_refindex.json):files/nodes 是已登记量;"
2013
+ "last_index.truncated=true 表示最近一次索引被截断。"}
2014
+ if action == "check":
2015
+ res = refindex.check_refs(
2016
+ cg, ledger=refindex.Ledger(cg.root),
2017
+ max_nodes=int(a.get("max_nodes") or refindex.MAX_CHECK))
2018
+ res["action"] = "check"
2019
+ res["note"] = ("stale=源已改动(区间哈希不匹配)、dangling=源文件已删除。"
2020
+ "巡检只读、不改源文件;修复:op=index_code / op=index_doc 重建,"
2021
+ "或 op=sustain action=heal。")
2022
+ return res
2023
+ if action not in ("read", "get"):
2024
+ raise ValueError(f"ref 未知 action:{action}(支持 read|check|stat)")
2025
+ nid = (a.get("node_id") or "").strip()
2026
+ node = None
2027
+ if nid:
2028
+ node = cg.get(nid)
2029
+ if not node:
2030
+ return {"ok": False, "error": f"节点不存在:{nid}"}
2031
+ ref = a.get("ref") if isinstance(a.get("ref"), dict) else None
2032
+ ref_kind = "ref"
2033
+ if ref is None and node is not None:
2034
+ ref_kind, ref = refindex.ref_of(node)
2035
+ if not ref:
2036
+ return {"ok": False,
2037
+ "error": "该节点没有 code_ref/doc_ref(不是索引节点)"}
2038
+ out = refindex.read_ref(ref, root=a.get("root"), ref_kind=ref_kind)
2039
+ out["node_id"] = nid or None
2040
+ return out
2041
+
2042
+
2043
+ def _whitebox_call(cg, a):
2044
+ """显式调用白箱能力库(AEIS 降为本地库后的唯一入口)。
2045
+
2046
+ 显式调用映射:md_cg.whitebox.dispatch
2047
+ 见 docs/功能调用映射表_v0.1.md。
2048
+ """
2049
+ from . import whitebox
2050
+ return whitebox.dispatch(cg, a)
2051
+
2052
+
2053
+ def _stg_call(cg, a):
2054
+ """语义时空图唯一入口。"""
2055
+ from . import stg
2056
+ op = (a.get("op") or "").strip().lower()
2057
+ if op == "relation":
2058
+ return stg.relation(cg, a.get("a", ""), a.get("b", ""))
2059
+ if op == "timeline":
2060
+ return stg.timeline(cg, layer=a.get("layer"),
2061
+ limit=int(a.get("limit") or 50),
2062
+ desc=bool(a.get("desc", True)))
2063
+ if op == "anchors":
2064
+ return stg.anchors(cg, time_window=a.get("time_window"), bbox=a.get("bbox"),
2065
+ layer=a.get("layer"), limit=int(a.get("limit") or 50))
2066
+ if op == "consistency":
2067
+ return stg.consistency(cg, layer=a.get("layer"),
2068
+ limit=int(a.get("limit") or 50))
2069
+ raise ValueError(f"stg 未知 op:{op}")
2070
+
2071
+
2072
+ # --------------------------------------------------------------------------
2073
+ # 工具实现
2074
+ # --------------------------------------------------------------------------
2075
+
2076
+ def call_tool(cg, name, args):
2077
+ a = args or {}
2078
+ if name == "cg":
2079
+ return _cg_call(cg, a)
2080
+ if name == "stg":
2081
+ return _stg_call(cg, a)
2082
+ if name == "mdcg_whitebox":
2083
+ return _whitebox_call(cg, a)
2084
+
2085
+ if name == "mdcg_service_info":
2086
+ return {"server": SERVER_NAME, "version": SERVER_VERSION,
2087
+ "protocol": PROTOCOL_VERSION, "root": cg.root, "actor": cg.actor,
2088
+ "nodes": len(cg.index["nodes"]),
2089
+ "surface": SURFACE, "tools": len(tools_for_surface()),
2090
+ "tool_names": [t["name"] for t in tools_for_surface()],
2091
+ "principal": getattr(cg, "principal", None) and cg.principal.as_dict()}
2092
+
2093
+ if name == "mdcg_remember":
2094
+ nid = a.get("node_id") or ("mem_" + str(int(__import__("time").time() * 1000)))
2095
+ hint = a.get("importance_hint")
2096
+ if hint is None and a.get("importance") is not None:
2097
+ hint = float(a["importance"])
2098
+ if a.get("gated"):
2099
+ res = cg.remember_gated(
2100
+ nid, a.get("content", ""), layer=a.get("layer") or "contextual",
2101
+ role=a.get("role"), tags=a.get("tags"),
2102
+ condition_space=a.get("condition_space"),
2103
+ verification_basis=a.get("verification_basis"),
2104
+ non_applicable_conditions=a.get("non_applicable_conditions"),
2105
+ importance_hint=hint, override=bool(a.get("override")),
2106
+ consistency=bool(a.get("consistency", True)),
2107
+ on_conflict=a.get("on_conflict") or "defer",
2108
+ derived_from=_split_ids(a.get("derived_from")),
2109
+ relation=a.get("relation"))
2110
+ res.setdefault("ok", res.get("verdict") == "ACCEPT")
2111
+ return res
2112
+ written = cg.add(nid, a.get("content", ""), layer=a.get("layer") or "knowledge",
2113
+ role=a.get("role"), tags=a.get("tags"),
2114
+ condition_space=a.get("condition_space"),
2115
+ importance=float(a.get("importance", 0.5)),
2116
+ verification_basis=a.get("verification_basis"),
2117
+ non_applicable_conditions=a.get("non_applicable_conditions"),
2118
+ override=bool(a.get("override")),
2119
+ consistency=bool(a.get("consistency", True)),
2120
+ on_conflict=a.get("on_conflict") or "reject",
2121
+ derived_from=_split_ids(a.get("derived_from")),
2122
+ relation=a.get("relation"))
2123
+ if written is None:
2124
+ return {"ok": False, "id": nid, "verdict": "DEFER",
2125
+ "reason": "节点间冲突检测未通过(on_conflict=defer)"}
2126
+ return {"ok": True, "id": nid}
2127
+
2128
+ if name == "mdcg_recall":
2129
+ use_fuzzy = bool(a.get("fuzzy"))
2130
+ use_semantic = bool(a.get("semantic"))
2131
+ use_goal = bool(a.get("goal_path") or a.get("goal"))
2132
+ if use_fuzzy or use_semantic or use_goal:
2133
+ paths = ["lexical", "bucket", "entity", "graph"]
2134
+ if use_fuzzy:
2135
+ paths.append("fuzzy")
2136
+ if use_semantic:
2137
+ paths.append("semantic")
2138
+ if use_goal:
2139
+ paths.append("goal")
2140
+ paths = tuple(paths)
2141
+ else:
2142
+ paths = None
2143
+ # fuzzy 路缺省用 max 融合:实测(memory-bench-1000,870 查询)sum 会把
2144
+ # self@1 拉低 10.1%,因为求和奖励「多路共识」、低估「模糊路独有」的目标。
2145
+ # semantic 路同理:条件结构命中常是「独有召回」,故一并缺省 max。
2146
+ fusion = a.get("fusion") or ("max" if (use_fuzzy or use_semantic or use_goal) else None)
2147
+ return cg.recall(a.get("query", ""),
2148
+ budget_tokens=int(a.get("budget_tokens") or 1200),
2149
+ k=int(a.get("k") or 20), context=a.get("context"),
2150
+ include_work=bool(a.get("include_work")),
2151
+ paths=paths, fusion=fusion,
2152
+ goal_text=a.get("goal"),
2153
+ include_recent=bool(a.get("include_recent")),
2154
+ recent_limit=int(a.get("recent_limit") or 10),
2155
+ query_expand=_make_query_expand(a.get("expand")))
2156
+
2157
+ if name == "mdcg_search":
2158
+ from . import refindex
2159
+ res, meta = cg.search(a.get("query", ""), layer=a.get("layer"),
2160
+ k=int(a.get("k") or 20), context=a.get("context"),
2161
+ roles=tuple(a["roles"]) if a.get("roles") else None,
2162
+ include_work=bool(a.get("include_work")),
2163
+ pools=a.get("pools"))
2164
+ return {"meta": meta,
2165
+ "results": [{"node": _node_view(n), "score": s, "state": q.get("state"),
2166
+ "reason": q.get("reason"), **refindex.ref_fields(n)}
2167
+ for n, s, q in res]}
2168
+
2169
+ if name == "mdcg_get":
2170
+ return _node_view(cg.get(a.get("node_id", "")))
2171
+
2172
+ if name == "mdcg_reflect":
2173
+ res, _ = cg.search(a.get("query", ""), k=int(a.get("k") or 10), record=False)
2174
+ return cg.reflect(a.get("query", ""), res, a.get("feedback"))
2175
+
2176
+ if name == "mdcg_verify":
2177
+ return cg.verify(a.get("node_id", ""), a.get("evidence", ""), a.get("verdict", ""))
2178
+
2179
+ if name == "mdcg_flywheel":
2180
+ return cg.flywheel_step(a.get("error_report") or {})
2181
+
2182
+ if name == "mdcg_mine_fix_pairs":
2183
+ return cg.mine_fix_pairs(a.get("events") or [])
2184
+
2185
+ if name == "mdcg_rejected":
2186
+ return {"id": cg.add_rejected(a.get("hypothesis", ""), a.get("reason", ""),
2187
+ verification_basis=a.get("verification_basis") or "test",
2188
+ tags=a.get("tags"))}
2189
+
2190
+ if name == "mdcg_unresolved":
2191
+ return {"id": cg.add_unresolved(a.get("question", ""), a.get("known_clues", ""),
2192
+ a.get("goal", ""))}
2193
+
2194
+ if name == "mdcg_propose":
2195
+ return {"pid": cg.propose(a.get("node_id", ""), a.get("content", ""),
2196
+ layer=a.get("layer") or "knowledge",
2197
+ tags=a.get("tags"), condition_space=a.get("condition_space"),
2198
+ verify=a.get("verify"))}
2199
+
2200
+ if name == "mdcg_review_list":
2201
+ return {"pending": cg.review_list()}
2202
+
2203
+ if name == "mdcg_review_decide":
2204
+ return cg.review_decide(a.get("pid", ""), a.get("decision", ""),
2205
+ edits=a.get("edits"), merge_into=a.get("merge_into"),
2206
+ reason=a.get("reason", ""),
2207
+ redteam=a.get("redteam"), issues=a.get("issues"))
2208
+
2209
+ if name == "mdcg_review_records":
2210
+ nid = a.get("node_id")
2211
+ if nid:
2212
+ return cg.verify_review_record(nid)
2213
+ return {"records": cg.review_records(pid=a.get("pid"))}
2214
+
2215
+ if name == "mdcg_forget":
2216
+ return cg.forget(a.get("node_id", ""), a.get("reason", ""),
2217
+ override=bool(a.get("override")))
2218
+
2219
+ if name == "mdcg_restore":
2220
+ return cg.restore(a.get("node_id", ""), force=bool(a.get("force")))
2221
+
2222
+ if name == "mdcg_protect":
2223
+ return _protect_call(cg, a)
2224
+
2225
+ if name == "mdcg_forgetting_history":
2226
+ return {"records": cg.forgetting_history(limit=int(a.get("limit") or 100))}
2227
+
2228
+ if name == "mdcg_identity":
2229
+ return _identity_call(cg, a)
2230
+
2231
+ if name == "mdcg_consistency":
2232
+ return _consistency_call(cg, a)
2233
+
2234
+ if name == "mdcg_metacognition":
2235
+ return _metacognition_call(cg, a)
2236
+
2237
+ if name == "mdcg_self_state":
2238
+ return _self_state_call(cg, a)
2239
+
2240
+ if name == "mdcg_predict":
2241
+ return _predict_call(cg, a)
2242
+
2243
+ if name == "mdcg_causal":
2244
+ return _causal_call(cg, a)
2245
+
2246
+ if name == "mdcg_evolution":
2247
+ return _evolution_call(cg, a)
2248
+
2249
+ if name == "mdcg_health":
2250
+ return cg.health_os()
2251
+
2252
+ if name == "mdcg_whoami":
2253
+ return cg.whoami()
2254
+
2255
+ if name == "mdcg_ingest":
2256
+ from .sources import DSHSessionSource, JsonlSource, Ingestor
2257
+ src_arg = (a.get("source") or "auto").strip()
2258
+ ing = Ingestor(cg)
2259
+ if src_arg == "auto":
2260
+ files = DSHSessionSource.discover(limit=1)
2261
+ if not files:
2262
+ return {"error": "no_dsh_session_found"}
2263
+ src = DSHSessionSource(files[0])
2264
+ else:
2265
+ src = _pick_source(src_arg)
2266
+ return ing.ingest(src,
2267
+ mine_fix_pairs=bool(a.get("mine_fix_pairs", True)),
2268
+ max_events=a.get("max_events"),
2269
+ dry_run=bool(a.get("dry_run")))
2270
+
2271
+ if name == "mdcg_watermarks":
2272
+ from .sources import Ingestor
2273
+ return {"watermarks": Ingestor(cg).watermarks()}
2274
+
2275
+ raise ValueError(f"未知工具:{name}")
2276
+
2277
+
2278
+ # --------------------------------------------------------------------------
2279
+ # JSON-RPC / stdio 主循环
2280
+ # --------------------------------------------------------------------------
2281
+
2282
+ def _reply(rid, result=None, error=None):
2283
+ msg = {"jsonrpc": "2.0", "id": rid}
2284
+ if error is not None:
2285
+ msg["error"] = error
2286
+ else:
2287
+ msg["result"] = result
2288
+ sys.stdout.write(_j(msg) + "\n")
2289
+ sys.stdout.flush()
2290
+
2291
+
2292
+ def _start_sustain(cg):
2293
+ """启动常驻自维持循环(MDCG_SUSTAIN=0 关闭;间隔可用环境变量调)。"""
2294
+ if os.environ.get("MDCG_SUSTAIN", "1") in ("0", "false", "False"):
2295
+ return None
2296
+ from . import sustain
2297
+ name = os.environ.get("MDCG_SUSTAIN_NAME") or "md_cg"
2298
+ lp = sustain.ensure_loop(
2299
+ cg, name,
2300
+ beat_interval=float(os.environ.get("MDCG_SUSTAIN_BEAT")
2301
+ or sustain.DEFAULT_BEAT_INTERVAL),
2302
+ heal_interval=float(os.environ.get("MDCG_SUSTAIN_HEAL")
2303
+ or sustain.DEFAULT_HEAL_INTERVAL),
2304
+ auto_heal=os.environ.get("MDCG_SUSTAIN_AUTOHEAL", "1")
2305
+ not in ("0", "false", "False"),
2306
+ scrub_interval=float(os.environ.get("MDCG_SCRUB_INTERVAL")
2307
+ or sustain.DEFAULT_SCRUB_INTERVAL),
2308
+ auto_scrub=os.environ.get("MDCG_AUTO_SCRUB", "0")
2309
+ not in ("0", "false", "False"),
2310
+ evolve_interval=float(os.environ.get("MDCG_EVOLVE_INTERVAL")
2311
+ or sustain.DEFAULT_EVOLVE_INTERVAL),
2312
+ auto_evolve=os.environ.get("MDCG_AUTO_EVOLVE", "0")
2313
+ not in ("0", "false", "False"))
2314
+ lp.start()
2315
+ return lp
2316
+
2317
+
2318
+ def _build_principal():
2319
+ """构造 Principal(令牌优先,fail-closed)。返回 (principal, error)。
2320
+
2321
+ 优先级:
2322
+ ① MDCG_TOKEN —— 权威路径。校验失败即拒绝启动(不降级为可用)。
2323
+ ② MDCG_LEGACY_ENV_AUTH=1 —— 兼容旧部署的 env 直连身份(不推荐)。
2324
+ ③ 都没有 —— 降级为只读访客 guest(不写、不管理)。
2325
+
2326
+ 版本层(蜂群互联层0):构造完成后统一附加 theory 状态。声明不合法时
2327
+ theory_ok=False → 写/管理操作全拒(保留 theory 修复入口),**不拒绝启动**
2328
+ ——身份可信但公理状态未知,禁止改写事实层即可。
2329
+ """
2330
+ from .security import Principal
2331
+ from .tokens import TOKEN_ENV, TokenError, role_spec, verify_token
2332
+
2333
+ token = (os.environ.get(TOKEN_ENV) or "").strip()
2334
+ if token:
2335
+ try:
2336
+ p = verify_token(token, tenant=os.environ.get("MDCG_TENANT"))
2337
+ except TokenError as e:
2338
+ return None, f"令牌校验失败:{e}"
2339
+ return _attach_theory(p), None
2340
+
2341
+ if os.environ.get("MDCG_LEGACY_ENV_AUTH", "0") in ("1", "true", "True"):
2342
+ can_admin = os.environ.get("MDCG_CAN_ADMIN", "0") in ("1", "true", "True")
2343
+ can_write = os.environ.get("MDCG_CAN_WRITE", "1") not in ("0", "false", "False")
2344
+ role = "designer" if can_admin else ("recorder" if can_write else "output")
2345
+ spec = role_spec(role)
2346
+ p = Principal(
2347
+ tenant=os.environ.get("MDCG_TENANT", "default"),
2348
+ actor=os.environ.get("MDCG_ACTOR", "mcp-client"),
2349
+ clearance=os.environ.get("MDCG_CLEARANCE", "internal"),
2350
+ can_write=can_write, can_admin=can_admin, role=role,
2351
+ layers_allow=spec["layers_allow"], ops_allow=spec["ops_allow"],
2352
+ auth_mode="legacy_env")
2353
+ return _attach_theory(p), None
2354
+
2355
+ spec = role_spec("guest") # 无令牌:只读访客
2356
+ p = Principal(
2357
+ tenant=os.environ.get("MDCG_TENANT", "default"),
2358
+ actor=os.environ.get("MDCG_ACTOR", "mcp-client"),
2359
+ clearance="internal", can_write=False, can_admin=False, role="guest",
2360
+ layers_allow=spec["layers_allow"], ops_allow=spec["ops_allow"],
2361
+ auth_mode="anonymous")
2362
+ return _attach_theory(p), None
2363
+
2364
+
2365
+ def _attach_theory(p):
2366
+ """附加版本层状态(theory_ok / theory_version)。校验永不抛异常。
2367
+
2368
+ 用 `ensure()`:无声明则落盘默认声明(声明常态化),异常声明才降级只读。
2369
+ """
2370
+ from .theory import ensure as _theory_ensure
2371
+ st = _theory_ensure()
2372
+ p.theory_ok = bool(st.get("theory_ok"))
2373
+ p.theory_version = st.get("version")
2374
+ return p
2375
+
2376
+
2377
+ def main():
2378
+ root = os.environ.get("MDCG_ROOT")
2379
+ if not root:
2380
+ sys.stderr.write("[mdcg-mcp] 缺少 MDCG_ROOT 环境变量\n")
2381
+ return 2
2382
+ from .mdcos import MdCGSecure
2383
+ principal, err = _build_principal()
2384
+ if err:
2385
+ sys.stderr.write(
2386
+ f"[mdcg-mcp] {err}\n"
2387
+ "[mdcg-mcp] 拒绝启动(fail-closed)。签发令牌:\n"
2388
+ " python -m md_cg.tokens issue --role designer --actor <你>\n"
2389
+ "然后设置 MDCG_TOKEN=<返回的明文令牌>。\n")
2390
+ return 3
2391
+ cg = MdCGSecure(root, principal=principal)
2392
+ _start_sustain(cg)
2393
+
2394
+ for line in sys.stdin:
2395
+ line = line.strip()
2396
+ if not line:
2397
+ continue
2398
+ try:
2399
+ msg = json.loads(line)
2400
+ except ValueError:
2401
+ continue
2402
+ method = msg.get("method")
2403
+ rid = msg.get("id")
2404
+
2405
+ if method == "initialize":
2406
+ _reply(rid, {"protocolVersion": PROTOCOL_VERSION,
2407
+ "capabilities": {"tools": {}},
2408
+ "serverInfo": {"name": SERVER_NAME,
2409
+ "version": SERVER_VERSION}})
2410
+ elif method in ("notifications/initialized", "initialized"):
2411
+ continue # 通知,无响应
2412
+ elif method == "tools/list":
2413
+ _reply(rid, {"tools": tools_for_surface()})
2414
+ elif method == "tools/call":
2415
+ params = msg.get("params") or {}
2416
+ name = params.get("name")
2417
+ args = params.get("arguments") or {}
2418
+ try:
2419
+ out = call_tool(cg, name, args)
2420
+ _reply(rid, {"content": [{"type": "text", "text": _j(out)}],
2421
+ "isError": False})
2422
+ except Exception as exc: # noqa: BLE001 —— 工具错误以 MCP 结果返回
2423
+ _reply(rid, {"content": [{"type": "text",
2424
+ "text": _j({"error": f"{type(exc).__name__}: {exc}"})}],
2425
+ "isError": True})
2426
+ elif method == "shutdown":
2427
+ _reply(rid, {})
2428
+ break
2429
+ elif rid is not None:
2430
+ _reply(rid, error={"code": -32601, "message": f"method not found: {method}"})
2431
+
2432
+ try: # 正常下线:清戳,对端看到的是 stopped
2433
+ from . import sustain
2434
+ sustain.stop_all()
2435
+ except Exception: # noqa: BLE001
2436
+ pass
2437
+ try:
2438
+ cg.close()
2439
+ except Exception: # noqa: BLE001
2440
+ pass
2441
+ return 0
2442
+
2443
+
2444
+ if __name__ == "__main__":
2445
+ sys.exit(main())