@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,1389 @@
1
+ # -*- coding: utf-8 -*-
2
+ """md_cg · 离线固化:LLM 补 CCG 四要素 → 确定性验证 → 固化为 md 字段
3
+
4
+ 为什么是「离线固化」而不是「在线向量」:
5
+ 白箱第 1 篇:相似度可以产生候选,但**不授予执行资格**;资格必须由条件证据裁决。
6
+ LLM 是黑箱,它的输出只能是**候选条件**,不能直接成为检索依据——否则在线检索
7
+ 就被黑箱污染,CCG 28%→88% 的改进会退化回去。故本工具把 LLM 严格限制在
8
+ **离线一次性的固化工序**里:
9
+
10
+ 读节点 → LLM 产出四要素候选 → 确定性验证 → 通过才写进 md 字段
11
+
12
+ 在线检索(search / recall / _path_semantic)仍然只读 md 里已固化的字段,全程白箱。
13
+
14
+ 理论 / 纪律对齐(docs/工作纪律_认知图条目_v1.1.json):
15
+ · 第 3 条 白箱方法:不猜测;**未验证不写入**。
16
+ · 第 5 条 验证纪律:**未经验证不固化**——入库前必须走验证(回放 / 断言 / 回归)。
17
+ · 第 13 条 访谈澄清:节点四要素 = 条件 / 子内容 / 如何执行 / 不适用条件
18
+ ——本工具固化的正是这四个字段(对齐 CCG 的生效条件 / 子功能 / 执行 / 不适用条件)。
19
+ · 《智能的认知过程》:新条件能否**稳定解释误差**?成立 → 纳入知识结构;
20
+ 不成立 → **不固化**,标记为待验证。
21
+ 故 verdict 三态对齐白箱资格判定:ACCEPT(固化)/ REJECT(丢弃)/ DEFER(只存候选)。
22
+
23
+ 验证分三段闸门——前两段确定性零 LLM,第三段是「双模型交叉验证」:
24
+
25
+ 闸门 1 · grounding 支撑度(确定性):候选短语必须能在节点正文里找到字符级依据,
26
+ 否则判为幻觉 → REJECT。(对应「不猜测」)
27
+ 闸门 2 · replay 回放(确定性):把候选条件当作查询,回放生产检索路径的判定:
28
+ · pos_recall 以「生效条件」为查询 → 本节点应被召回,且不被自身负条件挡住;
29
+ · neg_separated 以「不适用条件」为查询 → 应触发条件级负路由,且负条件与正文
30
+ 低相关(负条件必须是「域外」的,不能把知识本身否定掉);
31
+ · no_conflict 生效条件与不适用条件不得互相覆盖。
32
+ 三者同时成立才算「条件稳定」。(对应「回放 / 断言 / 回归」)
33
+ 闸门 3 · 验证单元(GLM,独立模型):逐条核验候选是否有正文依据、负条件是否真域外。
34
+ 硬约束:**验证单元只能否决,不能新增/改写**——它没有产出权,
35
+ 否则验证环节自己就成了新的幻觉源。
36
+
37
+ 回放器复用 _path_semantic 的同一批原语(_declared_conditions / _neg_hit /
38
+ _weighted_coverage / expand_query_terms_weighted),并由 P6 测试与真实
39
+ MdCGOS._path_semantic 做一致性回归,保证不漂移。
40
+
41
+ 双模型角色分工(用户配置,可用环境变量覆盖):
42
+ 反思单元 reflect → 默认 deepseek-v4.1-flash-expires-on-0910
43
+ (IDE 显示名 DeepSeek-V4.1-Flash;限时模型,见常量注释)
44
+ 验证单元 verify → 默认 glm-5.3-flash (IDE 显示名 GLM-5.3-flash)
45
+ 环境变量:MDCG_REFLECT_MODEL/BASE/KEY、MDCG_VERIFY_MODEL/BASE/KEY。
46
+ 注意 IDE 显示名 ≠ API 模型 id;`--check` 可零 token 探测各网关真实 id。
47
+ 两个模型分属不同厂商,避免同源模型的系统性偏见互相印证(交叉验证的本意)。
48
+
49
+ · 验证单元不可用(未配 key)时,默认 **不固化**(DEFER)——纪律 5「未经验证不固化」;
50
+ 确需单模型跑通可显式 --no-verify(provenance 记为 skipped)或 --self-verify
51
+ (同模型自审,provenance 记为 self_verify=true,属于降级模式)。
52
+ · 「验证方式」是 CCG 必需要素,其值 = 声明的验证基底。本工具可写
53
+ `# 验证方式:<声明>`(--verification-basis,默认即上面的双模型声明);
54
+ frontmatter.verification_basis 只能取 nodefile 的枚举
55
+ (compiler/test/measurement/formal_proof/data/other),双 LLM 交叉验证对应 "other"。
56
+ 纯文本声明无需 LLM → --basis-only 可零成本补齐全库(纪律 3:不猜测)。
57
+
58
+ 零第三方依赖(D-005):HTTP 走标准库 urllib.request;reflect_fn / verify_fn 可注入
59
+ (离线可测)。默认 --dry-run,只有 --apply 才写盘(纪律 6:改动可核对)。
60
+ 写盘只动 CCG 字段与 provenance,**不覆盖已有非空字段**(除非 --overwrite)。
61
+ """
62
+ from __future__ import annotations
63
+
64
+ import argparse
65
+ import hashlib
66
+ import json
67
+ import math
68
+ import os
69
+ import re
70
+ import sys
71
+ import time
72
+ import urllib.error
73
+ import urllib.request
74
+
75
+ from . import crypto, evolution, nodefile, routing
76
+ from .fsutil import append_jsonl
77
+ from .mdcg import BUCKETED_LAYERS, bigrams, expand_query_terms_weighted
78
+ from .mdcos import (MdCGOS, _ccg_field, _declared_conditions, _neg_hit, _sig,
79
+ _weighted_coverage)
80
+
81
+ # ---- 常量 ----------------------------------------------------------------
82
+
83
+ # 与工作纪律第 13 条「节点四要素」同构:
84
+ # 生效条件 ↔ conditions(什么时候适用)
85
+ # 子功能 ↔ subgraph / depends_on(子内容)
86
+ # 执行 ↔ execution(如何执行)
87
+ # 不适用条件 ↔ negative(什么时候不适用)
88
+ CCG_FIELDS = ("生效条件", "子功能", "执行", "不适用条件")
89
+ MULTI_FIELDS = ("生效条件", "子功能", "不适用条件") # 列表型
90
+ SINGLE_FIELDS = ("执行",) # 单值型
91
+
92
+ # LLM 常把「子功能」写成「子内容」,别名容错(固化时统一落到标准字段名)
93
+ FIELD_ALIASES = {
94
+ "生效条件": ("生效条件", "适用条件", "conditions", "condition"),
95
+ "子功能": ("子功能", "子内容", "子流程", "subgraph", "sub"),
96
+ "执行": ("执行", "如何执行", "执行方式", "execution", "how"),
97
+ "不适用条件": ("不适用条件", "不适用", "负条件", "negative", "reject"),
98
+ }
99
+
100
+ # 默认 grounding 阈值:不适用条件描述的是「域外」情境,与正文天然低相关,
101
+ # 故阈值放宽;其余三要素必须能在正文里找到实打实的依据。
102
+ DEFAULT_GROUNDING = {"生效条件": 0.5, "子功能": 0.5, "执行": 0.5, "不适用条件": 0.34}
103
+
104
+ MAX_BODY_CHARS = 3000 # 正文截断(控制 token,且条件主要来自开头)
105
+ MAX_TERMS = 8 # 单字段候选条数上限
106
+ MAX_TERM_LEN = 40 # 单条候选长度上限
107
+
108
+ # CCG 声明行(`# 生效条件:…` 等)——它们不是正文,grounding/replay 必须把它们剥掉,
109
+ # 否则已写入的「不适用条件」会在二次运行时被当成正文依据,导致节点自我否定。
110
+ _CCG_LINE_RE = re.compile(
111
+ r"^\s*#\s*(功能名|生效条件|子功能|执行|验证方式|不适用条件)\s*[::]")
112
+
113
+
114
+ def body_text(content: str) -> str:
115
+ """剥掉 CCG 声明行后的正文——验证只认正文,不认已写下的声明。"""
116
+ return "\n".join(l for l in (content or "").split("\n")
117
+ if not _CCG_LINE_RE.match(l))
118
+
119
+ # ---- 双模型角色(反思单元 / 验证单元)-------------------------------------
120
+
121
+ REFLECT_ROLE = "reflect" # 反思单元:产出候选
122
+ VERIFY_ROLE = "verify" # 验证单元:否决候选(无产出权)
123
+ ROLES = (REFLECT_ROLE, VERIFY_ROLE)
124
+
125
+ # 推荐模型(真实 API id,经实际调用确认;可用 MDCG_<ROLE>_MODEL 覆盖)
126
+ # 注意:reflect 的 id 带过期标记(expires-on-0910),属**限时模型**——过期后 /models
127
+ # 列表会下架该 id,届时改用 deepseek-v4-flash 或用 MDCG_REFLECT_MODEL 覆盖。
128
+ ROLE_DEFAULT_MODEL = {REFLECT_ROLE: "deepseek-v4.1-flash-expires-on-0910",
129
+ VERIFY_ROLE: "glm-5.3-flash"}
130
+ ROLE_DEFAULT_BASE = {REFLECT_ROLE: "https://api.deepseek.com",
131
+ VERIFY_ROLE: "https://open.bigmodel.cn/api/paas/v4"}
132
+ _ROLE_ENV = {REFLECT_ROLE: ("MDCG_REFLECT_MODEL", "MDCG_REFLECT_BASE", "MDCG_REFLECT_KEY"),
133
+ VERIFY_ROLE: ("MDCG_VERIFY_MODEL", "MDCG_VERIFY_BASE", "MDCG_VERIFY_KEY")}
134
+ # 验证单元 key 的常见别名(智谱系)
135
+ VERIFY_KEY_ALIASES = ("ZHIPU_API_KEY", "ZHIPUAI_API_KEY", "GLM_API_KEY", "BIGMODEL_API_KEY")
136
+
137
+ # 「验证方式」的声明文本(可 --verification-basis 覆盖 / --no-basis 关闭)
138
+ BASIS_TEMPLATE = "双模型交叉验证(反思单元={reflect},验证单元={verify})"
139
+ # frontmatter.verification_basis 只能取 nodefile 的枚举;双 LLM 交叉验证 → other
140
+ BASIS_ENUM_DEFAULT = "other"
141
+
142
+ REFLECT_PROMPT = (
143
+ "你是认知图节点的**反思单元**。给定一个知识节点的标题与正文,反思并抽取四要素。\n"
144
+ "只输出一个 JSON 对象,不要任何解释或代码围栏。\n"
145
+ "字段含义:\n"
146
+ ' "生效条件": 什么查询/情境下该知识**适用**(短语数组,2~5 条)\n'
147
+ ' "子功能": 该知识包含的子内容/子步骤(短语数组,2~5 条)\n'
148
+ ' "执行": 如何执行/如何使用该知识(单个字符串)\n'
149
+ ' "不适用条件": 什么查询/情境下该知识**不**适用(短语数组,1~3 条)\n'
150
+ "硬约束:\n"
151
+ " 1. 每条短语必须能在正文中找到依据,禁止编造正文里没有的工具/概念;\n"
152
+ " 2. 不适用条件必须是**正文之外的邻近易混情境**,不得与生效条件语义重叠;\n"
153
+ " 3. 短语要短(不超过 20 字),不要写完整句子。\n"
154
+ "输出格式:"
155
+ '{{"生效条件": ["..."], "子功能": ["..."], "执行": "...", "不适用条件": ["..."]}}\n'
156
+ "标题:{title}\n正文:\n{body}"
157
+ )
158
+
159
+ VERIFY_PROMPT = (
160
+ "你是认知图节点的**验证单元**。你的职责是**否决**,不是补充。\n"
161
+ "只能从候选里删除不成立的条目,**绝不允许新增或改写任何条目**。\n"
162
+ "给定标题、正文与反思单元给出的候选四要素,逐条核验:\n"
163
+ " · 该条目是否真的能在正文中找到依据?找不到依据 → 删除;\n"
164
+ " · 不适用条件是否真的域外?若它其实是该节点的适用情境 → 删除;\n"
165
+ " · 生效条件与不适用条件是否语义重叠?重叠者删除其一(保留更贴合正文的那个)。\n"
166
+ "只输出一个 JSON 对象,键为字段名,值为 "
167
+ '{{"keep": ["保留的条目"], "drop": ["删除的条目"], "reason": "一句话理由"}}。\n'
168
+ "候选:{cand}\n标题:{title}\n正文:\n{body}"
169
+ )
170
+
171
+
172
+ # ---- LLM 侧(黑箱只在离线工序,产出候选)--------------------------------
173
+
174
+ def role_config(role: str, model: str = None, base: str = None,
175
+ key: str = None) -> tuple:
176
+ """解析某角色的 (model, base, key):显式参数 > 角色环境变量 > 通用兜底。
177
+
178
+ key 刻意**不**让验证单元回落到 DEEPSEEK_API_KEY——跨厂商混用会把一个厂商的
179
+ 凭证发到另一个厂商的网关,既必然失败又构成凭证外泄。
180
+ """
181
+ m_env, b_env, k_env = _ROLE_ENV[role]
182
+ if key is None:
183
+ key = os.environ.get(k_env)
184
+ if key is None and role == VERIFY_ROLE:
185
+ for alias in VERIFY_KEY_ALIASES:
186
+ key = os.environ.get(alias)
187
+ if key:
188
+ break
189
+ if key is None:
190
+ key = os.environ.get("MDCG_LLM_KEY")
191
+ if key is None and role == REFLECT_ROLE:
192
+ key = os.environ.get("DEEPSEEK_API_KEY")
193
+ model = (model or os.environ.get(m_env) or os.environ.get("MDCG_LLM_MODEL")
194
+ or ROLE_DEFAULT_MODEL[role])
195
+ base = (base or os.environ.get(b_env) or os.environ.get("MDCG_LLM_BASE")
196
+ or ROLE_DEFAULT_BASE[role])
197
+ return model, base, key
198
+
199
+
200
+ def http_llm(prompt: str, model: str = None, base: str = None, key: str = None,
201
+ role: str = None, timeout: int = 120, max_tokens: int = 1200) -> str:
202
+ """标准库 HTTP 调 LLM(OpenAI 兼容 /chat/completions)。零第三方依赖。
203
+
204
+ role 给定时按该角色配置解析(reflect / verify),否则走通用配置。
205
+ """
206
+ if role:
207
+ model, base, key = role_config(role, model, base, key)
208
+ else:
209
+ model = (model or os.environ.get("MDCG_LLM_MODEL")
210
+ or ROLE_DEFAULT_MODEL[REFLECT_ROLE])
211
+ base = (base or os.environ.get("MDCG_LLM_BASE")
212
+ or ROLE_DEFAULT_BASE[REFLECT_ROLE])
213
+ key = (key or os.environ.get("MDCG_LLM_KEY")
214
+ or os.environ.get("DEEPSEEK_API_KEY"))
215
+ if not key:
216
+ raise RuntimeError(
217
+ f"未配置 {role or 'llm'} 的 API key"
218
+ f"({_ROLE_ENV[role][2] if role in _ROLE_ENV else 'MDCG_LLM_KEY'})")
219
+ payload = json.dumps({
220
+ "model": model,
221
+ "messages": [{"role": "user", "content": prompt}],
222
+ "max_tokens": max_tokens,
223
+ }).encode("utf-8")
224
+ req = urllib.request.Request(
225
+ base.rstrip("/") + "/chat/completions", data=payload,
226
+ headers={"Authorization": f"Bearer {key}",
227
+ "Content-Type": "application/json"})
228
+ try:
229
+ with urllib.request.urlopen(req, timeout=timeout) as resp:
230
+ data = json.loads(resp.read().decode("utf-8"))
231
+ except urllib.error.HTTPError as exc:
232
+ detail = exc.read().decode("utf-8", "replace")[:300]
233
+ raise RuntimeError(f"HTTP {exc.code} model={model} base={base} :: {detail}") from None
234
+ return data["choices"][0]["message"]["content"]
235
+
236
+
237
+ def probe_models(role: str, timeout: int = 20) -> dict:
238
+ """零 token 探测:列出该角色网关的可用模型 id(GET /models)。"""
239
+ model, base, key = role_config(role)
240
+ if not key:
241
+ return {"role": role, "model": model, "base": base, "ok": False,
242
+ "error": "no_key", "models": []}
243
+ req = urllib.request.Request(
244
+ base.rstrip("/") + "/models",
245
+ headers={"Authorization": f"Bearer {key}"})
246
+ try:
247
+ with urllib.request.urlopen(req, timeout=timeout) as resp:
248
+ data = json.loads(resp.read().decode("utf-8"))
249
+ ids = [m.get("id") for m in (data.get("data") or []) if m.get("id")]
250
+ except Exception as exc: # noqa: BLE001 —— 探测要抗单点
251
+ return {"role": role, "model": model, "base": base, "ok": False,
252
+ "error": f"{type(exc).__name__}: {exc}"[:200], "models": []}
253
+ res = {"role": role, "model": model, "base": base, "ok": True,
254
+ "model_available": model in ids, "models": ids}
255
+ if not res["model_available"]:
256
+ res["note"] = ("该 id 未出现在 /models 列表:可能是限时/按需模型,或已下架;"
257
+ "以实际 /chat/completions 调用结果为准")
258
+ return res
259
+
260
+
261
+ def _extract_json_obj(raw: str):
262
+ """从 LLM 输出里抠出第一个 JSON 对象(容忍代码围栏 / 前后废话)。"""
263
+ s = (raw or "").strip()
264
+ i, j = s.find("{"), s.rfind("}")
265
+ if i < 0 or j <= i:
266
+ return None
267
+ try:
268
+ return json.loads(s[i:j + 1])
269
+ except ValueError:
270
+ return None
271
+
272
+
273
+ def _as_terms(v, limit: int = MAX_TERMS):
274
+ """把 LLM 给的值规范成去重、限长的短语列表。"""
275
+ if v is None:
276
+ return []
277
+ if isinstance(v, str):
278
+ items = [v]
279
+ elif isinstance(v, (list, tuple)):
280
+ items = list(v)
281
+ else:
282
+ items = [str(v)]
283
+ out = []
284
+ for x in items:
285
+ s = str(x).strip().strip(",。;;、,.;\"'“”")
286
+ if not s or len(s) > MAX_TERM_LEN:
287
+ continue
288
+ if s not in out:
289
+ out.append(s)
290
+ if len(out) >= limit:
291
+ break
292
+ return out
293
+
294
+
295
+ def parse_candidate(raw: str) -> dict:
296
+ """LLM 原始输出 → {字段: 列表/字符串};解析失败返回 {}。"""
297
+ obj = _extract_json_obj(raw)
298
+ if not isinstance(obj, dict):
299
+ return {}
300
+ out = {}
301
+ for field in CCG_FIELDS:
302
+ val = None
303
+ for alias in FIELD_ALIASES[field]:
304
+ if alias in obj and obj[alias] not in (None, "", [], {}):
305
+ val = obj[alias]
306
+ break
307
+ if val is None:
308
+ continue
309
+ if field in SINGLE_FIELDS:
310
+ terms = _as_terms(val, limit=1)
311
+ if terms:
312
+ out[field] = terms[0]
313
+ else:
314
+ terms = _as_terms(val)
315
+ if terms:
316
+ out[field] = terms
317
+ return out
318
+
319
+
320
+ def parse_verdict(raw: str) -> dict:
321
+ """验证单元输出 → {字段: {keep, drop, has_keep, reason}};解析失败返回 {}。"""
322
+ obj = _extract_json_obj(raw)
323
+ if not isinstance(obj, dict):
324
+ return {}
325
+ out = {}
326
+ for field in CCG_FIELDS:
327
+ val = None
328
+ for alias in FIELD_ALIASES[field]:
329
+ if alias in obj and obj[alias] not in (None, "", [], {}):
330
+ val = obj[alias]
331
+ break
332
+ if val is None:
333
+ continue
334
+ if isinstance(val, list): # 容忍只给 keep 数组
335
+ out[field] = {"keep": _as_terms(val), "drop": [], "has_keep": True,
336
+ "reason": ""}
337
+ elif isinstance(val, dict):
338
+ out[field] = {"keep": _as_terms(val.get("keep")),
339
+ "drop": _as_terms(val.get("drop")),
340
+ "has_keep": "keep" in val,
341
+ "reason": str(val.get("reason") or "")[:200]}
342
+ return out
343
+
344
+
345
+ def narrow_by_verdict(kept: dict, verdict: dict):
346
+ """按验证单元裁决收窄候选——**只能否决,不能新增**。
347
+
348
+ · 验证单元未表态的字段 → 保留(沉默不等于否决)
349
+ · has_keep=True → 取「候选 ∩ keep」;否则只按 drop 剔除
350
+ 返回 (收窄后候选, 被剔除明细)。
351
+ """
352
+ if not verdict:
353
+ return dict(kept), {}
354
+ out, dropped = {}, {}
355
+ for field, val in kept.items():
356
+ terms = val if isinstance(val, list) else [val]
357
+ vd = verdict.get(field)
358
+ if vd is None:
359
+ out[field] = val
360
+ continue
361
+ dropset = set(vd.get("drop") or [])
362
+ keepset = set(vd.get("keep") or [])
363
+ surv, gone = [], []
364
+ for t in terms:
365
+ if t in dropset:
366
+ gone.append(t)
367
+ elif vd.get("has_keep") and t not in keepset:
368
+ gone.append(t)
369
+ else:
370
+ surv.append(t)
371
+ if gone:
372
+ dropped[field] = {"terms": gone, "reason": vd.get("reason") or ""}
373
+ if surv:
374
+ out[field] = surv if field in MULTI_FIELDS else surv[0]
375
+ return out, dropped
376
+
377
+
378
+ # ---- 确定性验证(零 LLM)-------------------------------------------------
379
+
380
+ def grounding_score(term: str, body: str) -> float:
381
+ """候选短语在正文里的字符级支撑度 = 命中 bigram 数 / 总 bigram 数。"""
382
+ bg = bigrams(term or "")
383
+ if not bg:
384
+ return 0.0
385
+ hit = sum(1 for g in bg if g in (body or ""))
386
+ return hit / len(bg)
387
+
388
+
389
+ def grounding_filter(cand: dict, body: str, thresholds: dict = None):
390
+ """逐字段过滤候选:返回 (kept, detail)。不达标者丢弃(对应「不猜测」)。"""
391
+ th = dict(DEFAULT_GROUNDING)
392
+ th.update(thresholds or {})
393
+ kept, detail = {}, {}
394
+ for field, val in cand.items():
395
+ terms = val if isinstance(val, list) else [val]
396
+ ok_terms, scores = [], {}
397
+ for t in terms:
398
+ g = grounding_score(t, body)
399
+ scores[t] = round(g, 3)
400
+ if g >= th.get(field, 0.5):
401
+ ok_terms.append(t)
402
+ detail[field] = {"scores": scores, "kept": len(ok_terms)}
403
+ if ok_terms:
404
+ kept[field] = ok_terms if field in MULTI_FIELDS else ok_terms[0]
405
+ return kept, detail
406
+
407
+
408
+ def replay_check(pos_terms, neg_terms, body: str) -> dict:
409
+ """回放生产判定:正例召回 + 负例剔除 + 无自相矛盾。
410
+
411
+ 复用 _path_semantic 的同一批原语,保证与生产路同源(P6 与真实路做一致性回归)。
412
+ """
413
+ pos_text = " ".join(pos_terms or [])
414
+ neg_text = " ".join(neg_terms or [])
415
+ tw_pos = expand_query_terms_weighted(pos_text) if pos_text else {}
416
+ tw_neg = expand_query_terms_weighted(neg_text) if neg_text else {}
417
+
418
+ # 1. 正例:以生效条件为查询,本节点正文应被命中,且不被自身负条件挡住
419
+ pos_recall = bool(pos_text) and _weighted_coverage(tw_pos, body) > 0.0 \
420
+ and not _neg_hit(tw_pos, neg_terms)
421
+
422
+ # 2. 负例:以不适用条件为查询,应触发条件级负路由;且负条件与正文低相关
423
+ # (负条件必须是「域外」的,若与正文强相关,等于让知识否定自己)
424
+ if neg_terms:
425
+ neg_separated = _neg_hit(tw_neg, neg_terms) \
426
+ and _weighted_coverage(tw_neg, body) < 0.5
427
+ else:
428
+ neg_separated = True
429
+
430
+ # 3. 生效条件与不适用条件不得互相覆盖
431
+ no_conflict = (not pos_text) or (not neg_text) \
432
+ or _weighted_coverage(tw_pos, neg_text) < 0.5
433
+
434
+ ok = pos_recall and neg_separated and no_conflict
435
+ return {"pos_recall": pos_recall, "neg_separated": neg_separated,
436
+ "no_conflict": no_conflict, "ok": ok}
437
+
438
+
439
+ # ---- 写盘(固化)---------------------------------------------------------
440
+
441
+ def _has_ccg_line(content: str, field: str) -> bool:
442
+ return f"# {field}:" in (content or "") or f"# {field}:" in (content or "")
443
+
444
+
445
+ def existing_fields(fm: dict, content: str) -> dict:
446
+ """节点当前已有的四要素:正文 CCG 行 或 frontmatter.comment 任一存在即算有。"""
447
+ comment = (fm.get("state_attributes") or {}).get("comment") or {}
448
+ out = {}
449
+ for field in CCG_FIELDS:
450
+ v = comment.get(field)
451
+ if v not in (None, "", [], {}):
452
+ out[field] = v
453
+ elif _has_ccg_line(content, field):
454
+ out[field] = True
455
+ return out
456
+
457
+
458
+ def _upsert_ccg_line(content: str, field: str, value: str) -> str:
459
+ """在正文里写入/替换 `# <字段>:<值>`,优先插在「# 功能名」之后。"""
460
+ lines = (content or "").split("\n")
461
+ for i, ln in enumerate(lines):
462
+ s = ln.strip()
463
+ if not s.startswith("#") or field not in s:
464
+ continue
465
+ name = s.lstrip("#").strip().split(":")[0].split(":")[0].strip()
466
+ if name == field:
467
+ lines[i] = f"# {field}:{value}"
468
+ return "\n".join(lines)
469
+ newline = f"# {field}:{value}"
470
+ for i, ln in enumerate(lines):
471
+ if ln.strip().startswith("# 功能名"):
472
+ lines.insert(i + 1, newline)
473
+ return "\n".join(lines)
474
+ return newline + "\n" + (content or "")
475
+
476
+
477
+ def _evo_pattern(kept: dict) -> str:
478
+ """规律(一句话):这一类节点反复缺的正是这批条件。"""
479
+ names = "、".join(kept.keys())
480
+ return f"缺「{names}」的节点条件不可判;补齐后四要素完整、可路由"
481
+
482
+
483
+ def _evo_evidence(prov: dict) -> str:
484
+ """证据:本次固化凭什么成立(模型 / 闸门 / 回放)。"""
485
+ parts = []
486
+ rf = (prov.get("reflect") or {}).get("model") or ""
487
+ vf = (prov.get("verify") or {}).get("model") or ""
488
+ if rf:
489
+ parts.append(f"reflect={rf}")
490
+ if vf:
491
+ parts.append(f"verify={vf}")
492
+ if prov.get("grounding"):
493
+ parts.append("grounding通过")
494
+ if prov.get("replay"):
495
+ parts.append("replay通过")
496
+ vb = prov.get("verification_basis") or ""
497
+ if vb:
498
+ parts.append(vb)
499
+ return " · ".join(parts)
500
+
501
+
502
+ def _apply_node(cg, e, fm: dict, content: str, kept: dict, prov: dict,
503
+ basis: str = "", basis_enum: str = BASIS_ENUM_DEFAULT):
504
+ """把通过验证的字段固化进 md:正文 CCG 行 + frontmatter.comment + 负条件 + provenance。
505
+
506
+ 固化 = 对一条缺失条件的补充 → 同步落一条演化条目(md 账本,可回滚)。
507
+ """
508
+ nid = e.get("id") or os.path.basename(e["path"])[:-3]
509
+ before = evolution.state_of(cg, nid) or {}
510
+ comment = (fm.get("state_attributes") or {}).get("comment")
511
+ if not isinstance(comment, dict):
512
+ fm["state_attributes"] = dict(fm.get("state_attributes") or {})
513
+ fm["state_attributes"]["comment"] = {}
514
+ comment = fm["state_attributes"]["comment"]
515
+ for field, val in kept.items():
516
+ text = ";".join(val) if isinstance(val, list) else str(val)
517
+ content = _upsert_ccg_line(content, field, text)
518
+ comment[field] = text
519
+ if field == "不适用条件":
520
+ # 同步 frontmatter.non_applicable_conditions(引擎负路由读它)
521
+ cur = [str(x) for x in (fm.get("non_applicable_conditions") or [])]
522
+ for t in (val if isinstance(val, list) else [val]):
523
+ if t not in cur:
524
+ cur.append(t)
525
+ fm["non_applicable_conditions"] = cur
526
+ if basis:
527
+ content = _upsert_ccg_line(content, "验证方式", basis)
528
+ comment["验证方式"] = basis
529
+ if not nodefile.verification_basis_valid(fm):
530
+ # 枚举里没有「LLM 交叉验证」这一档,只能落到 other(声明文本在 CCG 行里)
531
+ fm["verification_basis"] = basis_enum
532
+ fm["llm_consolidation"] = prov
533
+ cg._write_node(nid, os.path.join(cg.root, e["path"]), fm, content,
534
+ durable=True)
535
+ # 每一次修改都是对缺失条件的补充:记录规律 + 状态,不记录实现。
536
+ evolution.record(
537
+ cg, node_id=nid,
538
+ pattern=_evo_pattern(kept),
539
+ missing="、".join(kept.keys()),
540
+ action="补齐 CCG 字段:" + "、".join(kept.keys()),
541
+ evidence=_evo_evidence(prov),
542
+ source="consolidate", kind=evolution.KIND_CONDITION_GAP,
543
+ before=before, after=evolution.state_of(cg, nid) or {})
544
+
545
+
546
+ def consolidate(root: str, layer: str = None, limit: int = None, apply: bool = False,
547
+ overwrite: bool = False, llm_fn=None, reflect_fn=None,
548
+ verify_fn=None, reflect_model: str = "", verify_model: str = "",
549
+ verification_basis: str = "", basis_enum: str = BASIS_ENUM_DEFAULT,
550
+ require_verify: bool = True, thresholds: dict = None,
551
+ verbose: bool = True) -> dict:
552
+ """对正排层节点做「反思单元产出候选 → 白箱闸门 → 验证单元否决 → 固化」。
553
+
554
+ llm_fn 是 reflect_fn 的旧名(向后兼容,单模型模式)。
555
+ require_verify=True 且无 verify_fn → 一律 DEFER(纪律 5:未经验证不固化)。
556
+ """
557
+ reflect_fn = reflect_fn or llm_fn
558
+ cg = MdCGOS(root)
559
+ entries = cg._candidates(layer=layer)
560
+ t0 = time.time()
561
+ rep = {"root": root, "layer": layer, "dry_run": not apply,
562
+ "reflect_model": reflect_model, "verify_model": verify_model,
563
+ "reflect": bool(reflect_fn), "verify": bool(verify_fn), "llm": bool(reflect_fn),
564
+ "require_verify": require_verify,
565
+ "verification_basis": verification_basis,
566
+ "nodes_scanned": len(entries),
567
+ "targeted": 0, "accepted": 0, "rejected": 0, "deferred": 0,
568
+ "skipped_complete": 0, "written": 0, "reasons": {},
569
+ "per_field": {f: 0 for f in CCG_FIELDS}, "verify_dropped": 0,
570
+ "verification_basis_missing": 0, "samples": []}
571
+
572
+ def _bump(reason):
573
+ rep["reasons"][reason] = rep["reasons"].get(reason, 0) + 1
574
+
575
+ for e in entries:
576
+ if limit is not None and rep["targeted"] >= limit:
577
+ break
578
+ nid = os.path.basename(e["path"])[:-3]
579
+ fm, content = cg._read(e)
580
+ if fm is None:
581
+ _bump("read_failed")
582
+ continue
583
+ if crypto.is_encrypted(content):
584
+ _bump("locked") # 无密钥 → fail-closed:绝不改写密文
585
+ continue
586
+ have = existing_fields(fm, content)
587
+ missing = [f for f in CCG_FIELDS if f not in have]
588
+ if not nodefile.verification_basis_valid(fm):
589
+ rep["verification_basis_missing"] += 1
590
+ if not missing:
591
+ rep["skipped_complete"] += 1
592
+ continue
593
+ rep["targeted"] += 1
594
+
595
+ if not reflect_fn:
596
+ rep["deferred"] += 1
597
+ _bump("no_llm")
598
+ continue
599
+
600
+ # 1) 反思单元:产出候选(黑箱,唯一产出权)
601
+ body = body_text(content)[:MAX_BODY_CHARS]
602
+ title = _ccg_field(content, "功能名") or nid
603
+ prompt = REFLECT_PROMPT.format(title=title, body=body)
604
+ try:
605
+ raw = reflect_fn(prompt)
606
+ except Exception as exc: # noqa: BLE001 —— 离线批处理要抗单点失败
607
+ rep["deferred"] += 1
608
+ _bump(f"reflect_error:{type(exc).__name__}")
609
+ continue
610
+ cand = parse_candidate(raw)
611
+ if not cand:
612
+ rep["deferred"] += 1
613
+ _bump("parse_failed")
614
+ continue
615
+
616
+ # 2) 白箱闸门:grounding + replay(零 LLM,先跑,省调用)
617
+ kept, gdetail = grounding_filter(cand, body, thresholds)
618
+ pos = kept.get("生效条件") or []
619
+ neg = kept.get("不适用条件") or []
620
+ replay = replay_check(pos, neg, body)
621
+ if not kept or not replay["ok"]:
622
+ rep["rejected"] += 1
623
+ _bump("replay_failed" if kept else "grounding_failed")
624
+ if verbose and len(rep["samples"]) < 8:
625
+ rep["samples"].append({"id": nid, "verdict": "REJECT",
626
+ "stage": "whitebox", "grounding": gdetail,
627
+ "replay": replay})
628
+ continue
629
+
630
+ # 3) 验证单元:逐条核验,只能否决、不能新增
631
+ dropped, vprompt, vd = {}, "", None
632
+ if verify_fn:
633
+ vprompt = VERIFY_PROMPT.format(
634
+ cand=json.dumps(kept, ensure_ascii=False), title=title, body=body)
635
+ try:
636
+ vd = parse_verdict(verify_fn(vprompt))
637
+ kept, dropped = narrow_by_verdict(kept, vd)
638
+ except Exception as exc: # noqa: BLE001
639
+ rep["deferred"] += 1
640
+ _bump(f"verify_error:{type(exc).__name__}")
641
+ continue
642
+ if not kept:
643
+ rep["rejected"] += 1
644
+ _bump("verify_rejected")
645
+ if verbose and len(rep["samples"]) < 8:
646
+ rep["samples"].append({"id": nid, "verdict": "REJECT",
647
+ "stage": "verify", "dropped": dropped})
648
+ continue
649
+ rep["verify_dropped"] += sum(len(d["terms"]) for d in dropped.values())
650
+ elif require_verify:
651
+ # 验证单元不可用 → 不固化(纪律 5:未经验证不固化)
652
+ rep["deferred"] += 1
653
+ _bump("verify_unavailable")
654
+ continue
655
+
656
+ # 3) 不覆盖已有非空字段(保护人工既有知识)
657
+ if not overwrite:
658
+ kept = {f: v for f, v in kept.items() if f not in have}
659
+ if not kept:
660
+ rep["skipped_complete"] += 1
661
+ continue
662
+
663
+ prov = {"at": round(time.time(), 3), "verdict": "ACCEPT",
664
+ "source_hash": _sig(content),
665
+ "reflect": {"model": reflect_model, "prompt_hash": _sig(prompt),
666
+ "fields": sorted(kept)},
667
+ "verify": ({"model": verify_model, "prompt_hash": _sig(vprompt),
668
+ "dropped": dropped, "verdict_fields": sorted(vd or {}),
669
+ "self_verify": verify_fn is reflect_fn}
670
+ if verify_fn else {"model": "", "status": "skipped"}),
671
+ "grounding": gdetail, "replay": replay,
672
+ "verification_basis": verification_basis}
673
+ rep["accepted"] += 1
674
+ for f in kept:
675
+ rep["per_field"][f] += 1
676
+ if apply:
677
+ _apply_node(cg, e, fm, content, kept, prov,
678
+ verification_basis, basis_enum)
679
+ append_jsonl(os.path.join(cg.root, "_consolidate.jsonl"),
680
+ {"t": time.time(), "id": nid, "verdict": "ACCEPT",
681
+ "fields": sorted(kept),
682
+ "reflect_model": reflect_model,
683
+ "verify_model": verify_model, "dropped": dropped,
684
+ "source_hash": prov["source_hash"], "replay": replay})
685
+ rep["written"] += 1
686
+ if verbose and len(rep["samples"]) < 8:
687
+ rep["samples"].append({"id": nid, "verdict": "ACCEPT",
688
+ "fields": sorted(kept), "dropped": dropped,
689
+ "replay": replay})
690
+
691
+ if apply and rep["written"]:
692
+ # 正文新增了 `# 不适用条件:` / `# 验证方式:` → 索引字段变了
693
+ cg.rebuild_index()
694
+ rep["elapsed_sec"] = round(time.time() - t0, 3)
695
+ return rep
696
+
697
+
698
+ def fill_verification_basis(root: str, basis: str, layer: str = None,
699
+ limit: int = None, apply: bool = False,
700
+ basis_enum: str = BASIS_ENUM_DEFAULT) -> dict:
701
+ """只补「验证方式」——声明文本是常量,不需要黑箱生成,零 LLM 成本。
702
+
703
+ 对应纪律 3「不猜测」:验证基底必须由人/流程声明,而不是让模型编出来。
704
+ """
705
+ cg = MdCGOS(root)
706
+ entries = cg._candidates(layer=layer)
707
+ rep = {"root": root, "layer": layer, "dry_run": not apply, "basis": basis,
708
+ "basis_enum": basis_enum, "nodes_scanned": len(entries),
709
+ "targeted": 0, "skipped_present": 0, "skipped_locked": 0,
710
+ "written": 0}
711
+ for e in entries:
712
+ if limit is not None and rep["written"] >= limit:
713
+ break
714
+ fm, content = cg._read(e)
715
+ if fm is None:
716
+ continue
717
+ if crypto.is_encrypted(content):
718
+ rep["skipped_locked"] += 1 # 无密钥 → fail-closed:绝不改写密文
719
+ continue
720
+ if _has_ccg_line(content, "验证方式"):
721
+ rep["skipped_present"] += 1
722
+ continue
723
+ rep["targeted"] += 1
724
+ if not apply:
725
+ continue
726
+ comment = (fm.get("state_attributes") or {}).get("comment")
727
+ if not isinstance(comment, dict):
728
+ fm["state_attributes"] = dict(fm.get("state_attributes") or {})
729
+ fm["state_attributes"]["comment"] = {}
730
+ comment = fm["state_attributes"]["comment"]
731
+ content = _upsert_ccg_line(content, "验证方式", basis)
732
+ comment["验证方式"] = basis
733
+ if not nodefile.verification_basis_valid(fm):
734
+ fm["verification_basis"] = basis_enum
735
+ nid = e.get("id") or os.path.basename(e["path"])[:-3]
736
+ cg._write_node(nid, os.path.join(cg.root, e["path"]), fm, content,
737
+ durable=True)
738
+ rep["written"] += 1
739
+ if apply and rep["written"]:
740
+ cg.rebuild_index()
741
+ return rep
742
+
743
+
744
+ # ==========================================================================
745
+ # 情境层批量提升(consolidate.promote)
746
+ # ==========================================================================
747
+ #
748
+ # 场景:情境层(contextual)里有些记忆被反复命中/并入——它们已经不是「一次情境」,
749
+ # 而是稳定的规律。本动作把它们提升为长期知识(knowledge),并保留:
750
+ # · 双向可追溯:promoted_from + 演化账本(KIND_LAYER_SHIFT);
751
+ # · 条件门槛:四要素(CCG)不全者**不提升**(未可判定就不该升格为长期知识);
752
+ # · 可预演:apply=False 只出报表;可留痕:`_maintain.jsonl`。
753
+
754
+ MAINTAIN_LOG = "_maintain.jsonl"
755
+ CCG_REQUIRED = ("生效条件", "子功能", "执行", "不适用条件")
756
+
757
+
758
+ def _relocate_layer(cg, nid, e, fm, content, target_layer):
759
+ """把节点正文迁到目标层的正确目录(含分桶),删除旧文件。返回新相对路径。"""
760
+ d = os.path.join(cg.root, target_layer)
761
+ bucket = None
762
+ if target_layer in BUCKETED_LAYERS:
763
+ bucket = routing.bucket_dir(routing.route_key(fm.get("condition_space"),
764
+ fm.get("tags")))
765
+ d = os.path.join(d, bucket)
766
+ os.makedirs(d, exist_ok=True)
767
+ new_path = os.path.join(d, f"{nid}.md")
768
+ old_path = os.path.join(cg.root, e.get("path") or f"{nid}.md")
769
+ cg._write_node(nid, new_path, fm, content, durable=True)
770
+ if os.path.abspath(old_path) != os.path.abspath(new_path) and os.path.exists(old_path):
771
+ os.remove(old_path)
772
+ return {"path": os.path.relpath(new_path, cg.root).replace("\\", "/"),
773
+ "bucket": bucket}
774
+
775
+
776
+ def promote_memories(root, source_layer="contextual", target_layer="knowledge",
777
+ min_merge=2, min_importance=0.6, require_conditions=True,
778
+ limit=None, apply=False, actor="maintain") -> dict:
779
+ """把反复命中的情境记忆批量提升为长期知识(可预演 / 可留痕 / 可追溯)。"""
780
+ cg = MdCGOS(root)
781
+ entries = cg._candidates(layer=source_layer)
782
+ rep = {"root": root, "source_layer": source_layer, "target_layer": target_layer,
783
+ "dry_run": not apply, "nodes_scanned": len(entries), "targeted": 0,
784
+ "skipped_locked": 0, "skipped_incomplete": 0, "skipped_not_hot": 0,
785
+ "written": 0, "promoted": [], "samples": [],
786
+ "min_merge": min_merge, "min_importance": min_importance,
787
+ "require_conditions": bool(require_conditions)}
788
+ batch = time.strftime("%Y%m%d-%H%M%S")
789
+ for e in entries:
790
+ if limit is not None and rep["written"] >= int(limit):
791
+ break
792
+ fm, content = cg._read(e)
793
+ if fm is None:
794
+ continue
795
+ if crypto.is_encrypted(content):
796
+ rep["skipped_locked"] += 1 # 无密钥 → fail-closed,绝不解密回写
797
+ continue
798
+ nid = e.get("id") or os.path.basename(e["path"])[:-3]
799
+ hits = max(int(fm.get("merge_count") or 0),
800
+ int(fm.get("access_count") or 0),
801
+ int(fm.get("recall_count") or 0))
802
+ imp = float(fm.get("importance") or e.get("importance") or 0.0)
803
+ complete = all(_has_ccg_line(content, f) for f in CCG_REQUIRED)
804
+ if require_conditions and not complete:
805
+ rep["skipped_incomplete"] += 1 # 四要素不全 → 不可判定,不升格
806
+ continue
807
+ hot = hits >= int(min_merge)
808
+ if not hot and imp < float(min_importance):
809
+ rep["skipped_not_hot"] += 1
810
+ continue
811
+ rep["targeted"] += 1
812
+ item = {"id": nid, "hits": hits, "importance": round(imp, 4),
813
+ "conditions_complete": complete,
814
+ "basis": fm.get("verification_basis")}
815
+ if len(rep["samples"]) < 8:
816
+ rep["samples"].append(item)
817
+ if not apply:
818
+ continue
819
+ before = evolution.state_of(cg, nid) or {}
820
+ fm["layer"] = target_layer
821
+ fm["promoted_from"] = source_layer
822
+ fm["promoted_at"] = time.time()
823
+ fm["promotion_basis"] = {"hits": hits, "importance": round(imp, 4),
824
+ "conditions_complete": complete, "batch": batch,
825
+ "actor": actor}
826
+ moved = _relocate_layer(cg, nid, e, fm, content, target_layer)
827
+ evolution.record(
828
+ cg, node_id=nid,
829
+ pattern="情境记忆反复命中/并入 → 提升为长期知识",
830
+ missing="", action=f"层迁移 {source_layer}→{target_layer}",
831
+ evidence=f"hits={hits} importance={imp:.2f} conditions_complete={complete}",
832
+ source="consolidate", kind=evolution.KIND_LAYER_SHIFT,
833
+ before=before, after=evolution.state_of(cg, nid) or {})
834
+ append_jsonl(os.path.join(cg.root, MAINTAIN_LOG), {
835
+ "t": time.time(), "action": "promote", "batch": batch, "id": nid,
836
+ "from": source_layer, "to": target_layer, "hits": hits,
837
+ "importance": round(imp, 4), "path": moved["path"], "actor": actor})
838
+ rep["promoted"].append(nid)
839
+ rep["written"] += 1
840
+ if apply and rep["written"]:
841
+ cg.rebuild_index()
842
+ rep["note"] = ("dry-run:未写盘;apply=True 才迁移层"
843
+ if not apply else f"已提升 {rep['written']} 个节点到 {target_layer}")
844
+ return rep
845
+
846
+
847
+ def rollback_promotion(root, node_ids=None, batch=None, actor="maintain") -> dict:
848
+ """回滚情境提升:把 promoted_from 层迁回,并记一条演化条目。"""
849
+ cg = MdCGOS(root)
850
+ recs = [r for r in _read_maintain(root)
851
+ if r.get("action") == "promote"
852
+ and (not batch or r.get("batch") == batch)
853
+ and (not node_ids or str(r.get("id")) in {str(x) for x in node_ids})]
854
+ if not recs:
855
+ return {"ok": False, "error": "no_records", "reverted": 0}
856
+ reverted, ids = 0, []
857
+ for rec in recs:
858
+ nid = rec["id"]
859
+ e = (cg.index.get("nodes") or {}).get(nid)
860
+ if not e:
861
+ continue
862
+ fm, content = cg._read(e)
863
+ if fm is None or crypto.is_encrypted(content):
864
+ continue
865
+ back = rec.get("from") or "contextual"
866
+ before = evolution.state_of(cg, nid) or {}
867
+ fm["layer"] = back
868
+ fm["promoted_from"] = None
869
+ fm["promotion_basis"] = {"rollback_of": rec.get("batch"), "actor": actor}
870
+ _relocate_layer(cg, nid, e, fm, content, back)
871
+ evolution.record(cg, node_id=nid, pattern="提升回滚:长期知识退回情境层",
872
+ action=f"层迁移 {rec.get('to')}→{back}",
873
+ evidence=f"rollback batch={rec.get('batch')}",
874
+ source="consolidate", kind=evolution.KIND_ROLLBACK,
875
+ before=before, after=evolution.state_of(cg, nid) or {})
876
+ append_jsonl(os.path.join(cg.root, MAINTAIN_LOG), {
877
+ "t": time.time(), "action": "promote_rollback", "batch": rec.get("batch"),
878
+ "id": nid, "to": back, "actor": actor})
879
+ reverted += 1
880
+ ids.append(nid)
881
+ if reverted:
882
+ cg.rebuild_index()
883
+ return {"ok": True, "reverted": reverted, "ids": ids}
884
+
885
+
886
+ # ==========================================================================
887
+ # 层归位(consolidate.contextualize)
888
+ # ==========================================================================
889
+ #
890
+ # 场景:批次流水账(note_/milestone_/retest6_)与感知产物(imgpart_/vpipe_)混在
891
+ # knowledge 层——它们的语义是**情境**(某次批次的记录 / 某张图的一次观测),不是
892
+ # 长期知识;但也不该进 rejected/unresolved(那是「失效 / 未解」,不是「情境」)。
893
+ # 故归位到 contextual:
894
+ # · 只改 layer 与落点目录;正文 / 密级 / id / tags 一律不动;
895
+ # · **保留可召回**(contextual 已在层白名单内,且 predict._SAFE_LAYERS 含之);
896
+ # · 可预演(apply=False)/ 可留痕(`_maintain.jsonl`)/ 可追溯(KIND_LAYER_SHIFT)
897
+ # / 可回滚(按 batch 或 id 反向迁层)。
898
+ #
899
+ # 与 promote 的关系:promote 是 contextual→knowledge(升格),本动作是
900
+ # knowledge→contextual(归位)。两者共用 `_relocate_layer` 与批次台账,方向相反。
901
+
902
+ CONTEXTUALIZE_REASON_DEFAULT = "情境性内容归位(批次流水账 / 感知产物)"
903
+
904
+
905
+ def _entry_id(e) -> str:
906
+ """索引条目取 id:优先 `id` 字段,回落到文件名(索引不保证带 id)。"""
907
+ return str(e.get("id") or os.path.basename(e.get("path") or "")[:-3])
908
+
909
+
910
+ def _unique_batch(root, base) -> str:
911
+ """批次号去重:**同一秒内的两次调用不得共用批次号**。
912
+
913
+ 否则「按批次回滚」会连带命中上一次的台账记录(回滚必须是精确的、可对账的)。
914
+ """
915
+ seen = {r.get("batch") for r in _read_maintain(root)}
916
+ if base not in seen:
917
+ return base
918
+ n = 2
919
+ while f"{base}.{n}" in seen:
920
+ n += 1
921
+ return f"{base}.{n}"
922
+
923
+
924
+ def contextualize_prefixes(root, prefixes=None, node_ids=None,
925
+ source_layer="knowledge", target_layer="contextual",
926
+ reason="", limit=None, apply=False,
927
+ actor="maintain") -> dict:
928
+ """按 id 前缀(或定向 id 列表)把节点从 source_layer 归位到 target_layer。
929
+
930
+ 默认方向 knowledge→contextual。`prefixes` / `node_ids` **至少给一个**:
931
+ 宁可少搬,不可全库乱搬——不传白名单直接报错,拒绝「一次误调用把整个知识层改层」
932
+ 这种不可归因的批量改写。`node_ids` 用于定向(含「回滚后单独补迁」的对称操作)。
933
+ """
934
+ pref = tuple(str(p) for p in (prefixes or ()) if str(p))
935
+ ids = {str(i) for i in (node_ids or ()) if str(i)} or None
936
+ if not pref and not ids:
937
+ raise ValueError("contextualize 需要显式 prefixes 或 node_ids"
938
+ "(如 ['note_','imgpart_']),拒绝对整层无差别改写")
939
+ cg = MdCGOS(root)
940
+
941
+ def _hit(e) -> bool:
942
+ nid = _entry_id(e)
943
+ return nid in ids if ids is not None else nid.startswith(pref)
944
+
945
+ entries = [e for e in cg._candidates(layer=source_layer) if _hit(e)]
946
+ batch = _unique_batch(root, time.strftime("%Y%m%d-%H%M%S"))
947
+ rep = {"root": root, "action": "contextualize", "dry_run": not apply,
948
+ "source_layer": source_layer, "target_layer": target_layer,
949
+ "prefixes": list(pref), "node_ids": sorted(ids) if ids else [],
950
+ "reason": reason or CONTEXTUALIZE_REASON_DEFAULT,
951
+ "nodes_scanned": len(entries), "targeted": 0, "skipped_locked": 0,
952
+ "skipped_already": 0, "written": 0, "moved": [], "samples": [],
953
+ "batch": batch}
954
+ for e in entries:
955
+ if limit is not None and rep["written"] >= int(limit):
956
+ break
957
+ nid = _entry_id(e)
958
+ if not _hit(e):
959
+ continue
960
+ fm, content = cg._read(e)
961
+ if fm is None:
962
+ continue
963
+ if crypto.is_encrypted(content):
964
+ rep["skipped_locked"] += 1 # 无密钥 → fail-closed,绝不解密回写
965
+ continue
966
+ if fm.get("layer") != source_layer:
967
+ rep["skipped_already"] += 1
968
+ continue
969
+ rep["targeted"] += 1
970
+ if len(rep["samples"]) < 8:
971
+ rep["samples"].append({"id": nid, "from": fm.get("layer"),
972
+ "path": e.get("path")})
973
+ if not apply:
974
+ continue
975
+ before = evolution.state_of(cg, nid) or {}
976
+ fm["layer"] = target_layer
977
+ fm["contextualized_from"] = source_layer
978
+ fm["contextualized_at"] = time.time()
979
+ fm["contextualization_basis"] = {"reason": rep["reason"], "batch": batch,
980
+ "actor": actor}
981
+ moved = _relocate_layer(cg, nid, e, fm, content, target_layer)
982
+ evolution.record(
983
+ cg, node_id=nid,
984
+ pattern="情境性内容(批次流水账 / 感知产物)混在知识层 → 归位情境层",
985
+ missing="层归属规则", action=f"层迁移 {source_layer}→{target_layer}",
986
+ evidence=f"prefix={str(nid).split('_')[0]}_ reason={rep['reason']}",
987
+ source="consolidate", kind=evolution.KIND_LAYER_SHIFT,
988
+ before=before, after=evolution.state_of(cg, nid) or {})
989
+ append_jsonl(os.path.join(cg.root, MAINTAIN_LOG), {
990
+ "t": time.time(), "action": "contextualize", "batch": batch, "id": nid,
991
+ "from": source_layer, "to": target_layer, "path": moved["path"],
992
+ "bucket": moved.get("bucket"), "reason": rep["reason"], "actor": actor})
993
+ rep["moved"].append(nid)
994
+ rep["written"] += 1
995
+ if apply and rep["written"]:
996
+ cg.rebuild_index()
997
+ rep["note"] = ("dry-run:未写盘;apply=True 才归位"
998
+ if not apply else f"已归位 {rep['written']} 个节点到 {target_layer}")
999
+ return rep
1000
+
1001
+
1002
+ def rollback_contextualize(root, node_ids=None, batch=None, actor="maintain") -> dict:
1003
+ """回滚层归位:按 `_maintain.jsonl` 的 contextualize 记录把节点迁回原层。"""
1004
+ cg = MdCGOS(root)
1005
+ recs = [r for r in _read_maintain(root)
1006
+ if r.get("action") == "contextualize"
1007
+ and (not batch or r.get("batch") == batch)
1008
+ and (not node_ids or str(r.get("id")) in {str(x) for x in node_ids})]
1009
+ if not recs:
1010
+ return {"ok": False, "error": "no_records", "reverted": 0}
1011
+ reverted, ids = 0, []
1012
+ for rec in recs:
1013
+ nid = rec["id"]
1014
+ e = (cg.index.get("nodes") or {}).get(nid)
1015
+ if not e:
1016
+ continue
1017
+ fm, content = cg._read(e)
1018
+ if fm is None or crypto.is_encrypted(content):
1019
+ continue
1020
+ back = rec.get("from") or "knowledge"
1021
+ before = evolution.state_of(cg, nid) or {}
1022
+ fm["layer"] = back
1023
+ fm["contextualized_from"] = None
1024
+ fm["contextualization_basis"] = {"rollback_of": rec.get("batch"),
1025
+ "actor": actor}
1026
+ _relocate_layer(cg, nid, e, fm, content, back)
1027
+ evolution.record(cg, node_id=nid,
1028
+ pattern="层归位回滚:情境层迁回原层",
1029
+ action=f"层迁移 {rec.get('to')}→{back}",
1030
+ evidence=f"rollback batch={rec.get('batch')}",
1031
+ source="consolidate", kind=evolution.KIND_ROLLBACK,
1032
+ before=before, after=evolution.state_of(cg, nid) or {})
1033
+ append_jsonl(os.path.join(cg.root, MAINTAIN_LOG), {
1034
+ "t": time.time(), "action": "contextualize_rollback",
1035
+ "batch": rec.get("batch"), "id": nid, "to": back, "actor": actor})
1036
+ reverted += 1
1037
+ ids.append(nid)
1038
+ if reverted:
1039
+ cg.rebuild_index()
1040
+ return {"ok": True, "reverted": reverted, "ids": ids}
1041
+
1042
+
1043
+ def contextualize_history(root, limit=50):
1044
+ """层归位的批次记录(只读)。"""
1045
+ recs = [r for r in _read_maintain(root)
1046
+ if r.get("action") in ("contextualize", "contextualize_rollback")]
1047
+ return {"ok": True, "records": recs[-(int(limit) or 50):]}
1048
+
1049
+
1050
+ def _read_maintain(root):
1051
+ from .fsutil import read_jsonl
1052
+ return list(read_jsonl(os.path.join(root, MAINTAIN_LOG)))
1053
+
1054
+
1055
+ # ==========================================================================
1056
+ # 归纳聚类(consolidate.induce)
1057
+ # ==========================================================================
1058
+ #
1059
+ # 与 promote 的分工:
1060
+ # promote —— 把**已经存在**的单条情境记忆升格为长期知识(节点不变,只迁层);
1061
+ # induce —— 把**多条**具体记忆归纳为一个**新的概念节点**(新增节点)。
1062
+ #
1063
+ # 归纳是「由具体到一般」的推理,其输出**不是事实断言**,而是待验证的假设:
1064
+ # · 证据基底一律记 inferred(未经验证),不得冒充 verified;
1065
+ # · 概念节点必须携带成员清单 + `generalizes`/`instance_of` 对称边,保证可回溯;
1066
+ # · 归纳不出「共同条件」时默认**拒绝生成**(没有条件依据的抽象=编造,对齐
1067
+ # 纪律 3「不猜测」);确需放宽须显式 require_conditions=False,且概念正文
1068
+ # 会写明「未归纳出共同条件」,不掩盖证据缺口。
1069
+
1070
+ INDUCE_MIN_CLUSTER = 3
1071
+ INDUCE_MIN_JACCARD = 0.30
1072
+ INDUCE_MAX_NODES = 400
1073
+ INDUCE_MAX_TERMS = 6
1074
+ CONCEPT_REL = "generalizes" # concept → member(inferred)
1075
+ CONCEPT_MEMBER_REL = "instance_of" # member → concept(inferred)
1076
+ CONCEPT_PREFIX = "concept_"
1077
+ CONCEPT_IMPORTANCE = 0.5
1078
+ CONCEPT_TAGS = ("concept", "induced")
1079
+ # 归纳候选排除:受保护节点,以及洞察/场景/前馈/概念等派生物(避免自我进食)
1080
+ INDUCE_SKIP_TAGS = ("insight", "scene", "reconstructed", "gap_hint", "concept")
1081
+
1082
+
1083
+ def _concept_id(members):
1084
+ """概念节点 id:由成员清单派生,保证「同成员 ⇒ 同 id」的幂等性。"""
1085
+ h = hashlib.sha1("|".join(sorted(str(m) for m in members))
1086
+ .encode("utf-8")).hexdigest()
1087
+ return CONCEPT_PREFIX + h[:10]
1088
+
1089
+
1090
+ def _jaccard(a, b):
1091
+ if not a or not b:
1092
+ return 0.0
1093
+ return len(a & b) / float(len(a | b))
1094
+
1095
+
1096
+ def _common_terms(term_sets, min_share=0.6):
1097
+ """出现在 ≥ min_share 比例成员中的词面(共同条件);少于 2 个成员共享不算。"""
1098
+ if not term_sets:
1099
+ return []
1100
+ cnt = {}
1101
+ for s in term_sets:
1102
+ for t in set(s or ()):
1103
+ cnt[t] = cnt.get(t, 0) + 1
1104
+ need = max(2, int(math.ceil(min_share * len(term_sets))))
1105
+ return sorted(t for t, c in cnt.items() if c >= need)
1106
+
1107
+
1108
+ def _union_terms(term_sets, limit=INDUCE_MAX_TERMS):
1109
+ seen = []
1110
+ for s in term_sets:
1111
+ for t in sorted(s or ()):
1112
+ if t not in seen:
1113
+ seen.append(t)
1114
+ return seen[:limit]
1115
+
1116
+
1117
+ def _link_concept(cg, cid, members, reason, actor, batch):
1118
+ """写概念↔成员对称 inferred 边(幂等:已存在则不重复写)。"""
1119
+ nodes = (getattr(cg, "index", None) or {}).get("nodes") or {}
1120
+ out = {"concept": cid, "members": []}
1121
+ cnode = cg.get(cid)
1122
+ if cnode:
1123
+ fm = cnode.get("frontmatter") or {}
1124
+ edges = list(fm.get("edges") or [])
1125
+ have = {str(e.get("target")) for e in edges if isinstance(e, dict)}
1126
+ added = False
1127
+ for m in members:
1128
+ if m in have:
1129
+ continue
1130
+ edges.append({"target": m, "relation_type": CONCEPT_REL,
1131
+ "reason": reason, "created_at": time.time(),
1132
+ "confidence": 0.5, "verified": 0, "evidence": "inferred"})
1133
+ added = True
1134
+ if added:
1135
+ fm["edges"] = edges
1136
+ ent = nodes.get(cid) or {}
1137
+ cg._write_node(cid, os.path.join(cg.root, ent.get("path") or f"{cid}.md"),
1138
+ fm, cnode.get("content") or "")
1139
+ if ent:
1140
+ ent["edges"] = edges
1141
+ for m in members:
1142
+ node = cg.get(m)
1143
+ if not node:
1144
+ continue
1145
+ fm = node.get("frontmatter") or {}
1146
+ edges = list(fm.get("edges") or [])
1147
+ if any(isinstance(e, dict) and str(e.get("target")) == cid for e in edges):
1148
+ continue
1149
+ edges.append({"target": cid, "relation_type": CONCEPT_MEMBER_REL,
1150
+ "reason": reason, "created_at": time.time(),
1151
+ "confidence": 0.5, "verified": 0, "evidence": "inferred"})
1152
+ fm["edges"] = edges
1153
+ fm["induced_concept"] = cid
1154
+ ent = nodes.get(m) or {}
1155
+ cg._write_node(m, os.path.join(cg.root, ent.get("path") or f"{m}.md"),
1156
+ fm, node.get("content") or "")
1157
+ if ent:
1158
+ ent["edges"] = edges
1159
+ out["members"].append(m)
1160
+ return out
1161
+
1162
+
1163
+ def _concept_payload(members, common_pos, neg_union):
1164
+ """概念节点正文:把成员的共性条件抽象为可追溯的知识条目(显式标注 inferred)。"""
1165
+ label = "、".join(common_pos[:INDUCE_MAX_TERMS])
1166
+ pos_txt = ";".join(common_pos[:INDUCE_MAX_TERMS]) or "(未归纳出共同条件)"
1167
+ neg_txt = ";".join(neg_union[:INDUCE_MAX_TERMS]) or "(未判定)"
1168
+ return (
1169
+ "# 功能名:归纳概念:%s\n"
1170
+ "# 生效条件:%s\n"
1171
+ "# 子功能:%d 条具体记忆的共性(成员:%s)\n"
1172
+ "# 执行:由 consolidate.induce 归纳聚合(inferred;未经验证,不得直接当事实使用)\n"
1173
+ "# 验证方式:待验证(inferred 假设,需外部证据或实践重复后方可升格)\n"
1174
+ "# 不适用条件:%s\n"
1175
+ % (label or "共性", pos_txt, len(members), "、".join(members), neg_txt)
1176
+ )
1177
+
1178
+
1179
+ def induce_memories(cg_or_root, source_layer="contextual", target_layer="knowledge",
1180
+ min_cluster=INDUCE_MIN_CLUSTER, min_jaccard=INDUCE_MIN_JACCARD,
1181
+ max_nodes=INDUCE_MAX_NODES, require_conditions=True,
1182
+ limit=None, apply=False, actor="maintain", **extra):
1183
+ """归纳聚类:把多条具体记忆归纳为概念层条目(inferred,非事实断言)。
1184
+
1185
+ 流程:读取源层 → bigram 相似度贪心聚类 → 提炼共同条件 → 生成概念节点
1186
+ (apply=True)→ 写 `generalizes` / `instance_of` 对称 inferred 边 → 写留痕。
1187
+
1188
+ apply=False(默认)只出候选报表(可预演);apply=True 才写盘(可留痕、可回溯)。
1189
+ 幂等:概念 id 由成员清单派生,同成员重复归纳不新增节点。
1190
+ """
1191
+ cg = cg_or_root if isinstance(cg_or_root, MdCGOS) else MdCGOS(str(cg_or_root))
1192
+ from . import subgraph # 惰性导入:复用统一的条件/词面抽取
1193
+
1194
+ # MCP 分发层会把未提供的参数以 None 传入;此处归一化,避免 int(None) 崩溃,
1195
+ # 也避免 require_conditions=None 被当成 False 而悄悄关掉「无共同条件即拒绝生成」
1196
+ # 这条纪律(默认必须为真,放宽只能显式传 False)。
1197
+ min_cluster = INDUCE_MIN_CLUSTER if min_cluster is None else int(min_cluster)
1198
+ min_jaccard = INDUCE_MIN_JACCARD if min_jaccard is None else float(min_jaccard)
1199
+ max_nodes = INDUCE_MAX_NODES if max_nodes is None else int(max_nodes)
1200
+ if require_conditions is None:
1201
+ require_conditions = True
1202
+
1203
+ nodes = (getattr(cg, "index", None) or {}).get("nodes") or {}
1204
+ pool = [nid for nid, e in nodes.items()
1205
+ if (not source_layer or (e or {}).get("layer") == source_layer)
1206
+ and not (e or {}).get("protected")
1207
+ and not (set(INDUCE_SKIP_TAGS) & set((e or {}).get("tags") or []))]
1208
+ pool.sort()
1209
+ truncated = len(pool) > int(max_nodes)
1210
+ pool = pool[:int(max_nodes)]
1211
+
1212
+ cache = {}
1213
+ for nid in pool:
1214
+ got = subgraph._node_terms_and_grams(cg, nid)
1215
+ if got and got["grams"]:
1216
+ cache[nid] = got
1217
+ keys = sorted(cache.keys())
1218
+
1219
+ rep = {"ok": True, "action": "induce", "op": "consolidate",
1220
+ "source_layer": source_layer, "target_layer": target_layer,
1221
+ "dry_run": not apply, "nodes_scanned": len(pool), "indexed": len(keys),
1222
+ "truncated": truncated, "min_cluster": int(min_cluster),
1223
+ "min_jaccard": float(min_jaccard),
1224
+ "require_conditions": bool(require_conditions),
1225
+ "skipped_small": 0, "skipped_no_condition": 0, "skipped_existing": 0,
1226
+ "clusters": 0, "written": 0, "concepts": [], "samples": [],
1227
+ "log": MAINTAIN_LOG}
1228
+
1229
+ # ---- 贪心聚类(只读) ----
1230
+ assigned, proposals = set(), []
1231
+ for i, a in enumerate(keys):
1232
+ if a in assigned:
1233
+ continue
1234
+ ga = cache[a]["grams"]
1235
+ grp = [b for b in keys[i + 1:]
1236
+ if b not in assigned
1237
+ and _jaccard(ga, cache[b]["grams"]) >= float(min_jaccard)]
1238
+ if len(grp) + 1 < int(min_cluster):
1239
+ continue
1240
+ members = [a] + grp
1241
+ assigned.update(members)
1242
+ common_pos = _common_terms([cache[m]["pos"] for m in members])
1243
+ if require_conditions and not common_pos:
1244
+ rep["skipped_no_condition"] += 1
1245
+ continue
1246
+ neg_union = _union_terms([cache[m]["neg"] for m in members])
1247
+ proposals.append({
1248
+ "members": members, "concept_id": _concept_id(members),
1249
+ "common_conditions": common_pos, "non_applicable": neg_union,
1250
+ "reason": ("%d 条记忆内容相近且共享条件「%s」→ 归纳为概念"
1251
+ % (len(members), "、".join(common_pos) or "无")),
1252
+ })
1253
+ rep["clusters"] = len(proposals)
1254
+ for p in proposals[:8]:
1255
+ rep["samples"].append(p)
1256
+
1257
+ if not apply:
1258
+ rep["note"] = ("dry-run:未写盘;apply=True 才生成概念节点与 inferred 边"
1259
+ if proposals else "无满足条件的聚类(内容不够相近或缺乏共同条件)")
1260
+ rep["concepts"] = [p["concept_id"] for p in proposals]
1261
+ return rep
1262
+
1263
+ # ---- 落库(可留痕) ----
1264
+ batch = time.strftime("%Y%m%d-%H%M%S")
1265
+ for p in proposals:
1266
+ if limit is not None and rep["written"] >= int(limit):
1267
+ break
1268
+ cid = p["concept_id"]
1269
+ if cid in nodes:
1270
+ rep["skipped_existing"] += 1
1271
+ continue
1272
+ content = _concept_payload(p["members"], p["common_conditions"],
1273
+ p["non_applicable"])
1274
+ cg.add(cid, content, layer=target_layer, tags=list(CONCEPT_TAGS),
1275
+ importance=CONCEPT_IMPORTANCE, verification_basis="other",
1276
+ induced_from=list(p["members"]), induced_at=time.time(),
1277
+ induction={"method": "bigram_jaccard", "min_jaccard": float(min_jaccard),
1278
+ "common_conditions": p["common_conditions"], "batch": batch,
1279
+ "actor": actor, "evidence": "inferred"},
1280
+ actor=actor)
1281
+ _link_concept(cg, cid, p["members"], p["reason"], actor, batch)
1282
+ append_jsonl(os.path.join(cg.root, MAINTAIN_LOG), {
1283
+ "t": time.time(), "action": "induce", "batch": batch, "concept": cid,
1284
+ "members": list(p["members"]), "common_conditions": p["common_conditions"],
1285
+ "source_layer": source_layer, "target_layer": target_layer, "actor": actor})
1286
+ rep["concepts"].append(cid)
1287
+ rep["written"] += 1
1288
+ if rep["written"]:
1289
+ cg.rebuild_index()
1290
+ rep["note"] = (f"已归纳 {rep['written']} 个概念节点(inferred,待验证)"
1291
+ if rep["written"] else "无可落库的归纳(均跳过或已达 limit)")
1292
+ return rep
1293
+
1294
+
1295
+ # ---- CLI ----------------------------------------------------------------
1296
+
1297
+ def _cli(argv=None) -> int:
1298
+ ap = argparse.ArgumentParser(
1299
+ description="md_cg 离线固化:反思单元(LLM)产出候选 → 白箱闸门 → "
1300
+ "验证单元(LLM)否决 → 固化为 md 字段")
1301
+ ap.add_argument("--root", required=True, help="md 认知图根目录")
1302
+ ap.add_argument("--layer", default=None, help="只处理某层(如 knowledge)")
1303
+ ap.add_argument("--limit", type=int, default=None, help="只处理前 N 个待补节点")
1304
+ ap.add_argument("--apply", action="store_true", help="真正写盘(默认只验证)")
1305
+ ap.add_argument("--dry-run", action="store_true", help="只验证不写盘(默认行为)")
1306
+ ap.add_argument("--overwrite", action="store_true",
1307
+ help="允许覆盖已有非空字段(默认保护人工既有知识)")
1308
+ ap.add_argument("--reflect-model", default=None,
1309
+ help=f"反思单元模型(默认 {ROLE_DEFAULT_MODEL[REFLECT_ROLE]})")
1310
+ ap.add_argument("--verify-model", default=None,
1311
+ help=f"验证单元模型(默认 {ROLE_DEFAULT_MODEL[VERIFY_ROLE]})")
1312
+ ap.add_argument("--self-verify", action="store_true",
1313
+ help="降级:验证单元复用反思单元模型(非交叉验证,provenance 标记)")
1314
+ ap.add_argument("--no-verify", action="store_true",
1315
+ help="降级:跳过验证单元,仅靠白箱闸门(不推荐)")
1316
+ ap.add_argument("--verification-basis", default=None,
1317
+ help="写入 `# 验证方式:` 的声明文本(默认双模型声明)")
1318
+ ap.add_argument("--no-basis", action="store_true", help="不写「验证方式」")
1319
+ ap.add_argument("--basis-only", action="store_true",
1320
+ help="只补「验证方式」(零 LLM 成本),不做四要素反思")
1321
+ ap.add_argument("--min-grounding", type=float, default=None,
1322
+ help="统一 grounding 阈值(默认按字段 0.5 / 不适用条件 0.34)")
1323
+ ap.add_argument("--no-llm", action="store_true",
1324
+ help="不调用 LLM,只做四要素完整性普查")
1325
+ ap.add_argument("--check", action="store_true",
1326
+ help="零 token 探测两个角色网关的可用模型后退出")
1327
+ ap.add_argument("--report", default=None, help="把汇总 JSON 另存一份")
1328
+ a = ap.parse_args(argv)
1329
+
1330
+ r_model, _, r_key = role_config(REFLECT_ROLE, a.reflect_model)
1331
+ v_model, _, v_key = role_config(VERIFY_ROLE, a.verify_model)
1332
+
1333
+ if a.check:
1334
+ out = {"reflect": probe_models(REFLECT_ROLE),
1335
+ "verify": probe_models(VERIFY_ROLE)}
1336
+ print(json.dumps(out, ensure_ascii=False, indent=2))
1337
+ return 0
1338
+
1339
+ basis = None if a.no_basis else (
1340
+ a.verification_basis or BASIS_TEMPLATE.format(reflect=r_model, verify=v_model))
1341
+
1342
+ if a.basis_only:
1343
+ rep = fill_verification_basis(a.root, basis, layer=a.layer, limit=a.limit,
1344
+ apply=a.apply)
1345
+ print(json.dumps(rep, ensure_ascii=False, indent=2))
1346
+ if a.report:
1347
+ with open(a.report, "w", encoding="utf-8") as f:
1348
+ json.dump(rep, f, ensure_ascii=False, indent=2)
1349
+ return 0
1350
+
1351
+ thresholds = ({f: a.min_grounding for f in CCG_FIELDS}
1352
+ if a.min_grounding is not None else None)
1353
+
1354
+ reflect_fn = verify_fn = None
1355
+ if not a.no_llm:
1356
+ if not r_key:
1357
+ print(f"[consolidate] 反思单元未配置 key"
1358
+ f"({_ROLE_ENV[REFLECT_ROLE][2]} / DEEPSEEK_API_KEY)→ 退化为普查模式",
1359
+ file=sys.stderr)
1360
+ else:
1361
+ reflect_fn = (lambda p: http_llm(p, role=REFLECT_ROLE, # noqa: E731
1362
+ model=a.reflect_model))
1363
+ if a.self_verify:
1364
+ verify_fn = reflect_fn
1365
+ elif not a.no_verify:
1366
+ if v_key:
1367
+ verify_fn = (lambda p: http_llm(p, role=VERIFY_ROLE, # noqa: E731
1368
+ model=a.verify_model))
1369
+ else:
1370
+ print(f"[consolidate] 验证单元未配置 key"
1371
+ f"({_ROLE_ENV[VERIFY_ROLE][2]} / ZHIPU_API_KEY / GLM_API_KEY)"
1372
+ "→ 待补节点将 DEFER,不写盘(纪律 5:未经验证不固化)",
1373
+ file=sys.stderr)
1374
+
1375
+ rep = consolidate(a.root, layer=a.layer, limit=a.limit, apply=a.apply,
1376
+ overwrite=a.overwrite, reflect_fn=reflect_fn,
1377
+ verify_fn=verify_fn, reflect_model=r_model,
1378
+ verify_model=v_model if verify_fn else "",
1379
+ verification_basis=basis or "",
1380
+ require_verify=not a.no_verify, thresholds=thresholds)
1381
+ print(json.dumps(rep, ensure_ascii=False, indent=2))
1382
+ if a.report:
1383
+ with open(a.report, "w", encoding="utf-8") as f:
1384
+ json.dump(rep, f, ensure_ascii=False, indent=2)
1385
+ return 0
1386
+
1387
+
1388
+ if __name__ == "__main__":
1389
+ raise SystemExit(_cli())