@furongjun1999/dsh-memory 0.4.4 → 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 (1470) hide show
  1. package/README.md +104 -483
  2. package/cordis.yml.example +78 -9
  3. 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
  4. 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
  5. package/docs/README/350/257/246/347/273/206/347/211/210_v0.4.5.md +625 -0
  6. package/docs/cordis-patch-profile-web.example.yml +49 -5
  7. package/docs/release_v0.3.0.md +36 -0
  8. package/docs/release_v0.4.5.md +55 -0
  9. package/docs/tool_table_v0.3.0.md +117 -0
  10. 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
  11. 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
  12. 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 +26 -2
  13. 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
  14. 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
  15. 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
  16. 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
  17. package/docs//347/274/272/345/217/243/345/215/225_P0/346/224/266/345/217/243_v0.1.md +270 -0
  18. package/docs//350/234/202/347/276/244/344/272/222/350/201/224_v0.1.md +704 -0
  19. 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
  20. 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 +60 -38
  21. 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
  22. 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
  23. 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 +2 -2
  24. 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 +129 -26
  25. package/lib/bridge.d.ts +4 -4
  26. package/lib/bridge.js +4 -4
  27. package/lib/hooks.d.ts +23 -8
  28. package/lib/hooks.js +75 -26
  29. package/lib/index.d.ts +53 -8
  30. package/lib/index.js +216 -63
  31. package/lib/lib/datapath.d.ts +16 -0
  32. package/lib/lib/datapath.js +114 -0
  33. package/lib/lib/mdcg_client.d.ts +152 -0
  34. package/lib/lib/mdcg_client.js +266 -0
  35. package/lib/lib/mutual.d.ts +121 -0
  36. package/lib/lib/mutual.js +348 -0
  37. package/lib/lib/roleplay_web.d.ts +6 -0
  38. package/{src/roleplay_web.ts → lib/lib/roleplay_web.js} +503 -450
  39. package/lib/lib/whitebox_llm.d.ts +129 -0
  40. package/lib/lib/whitebox_llm.js +249 -0
  41. package/lib/tools.d.ts +13 -6
  42. package/lib/tools.js +41 -55
  43. package/md_cg/__init__.py +7 -0
  44. package/md_cg/__pycache__/__init__.cpython-310.pyc +0 -0
  45. package/md_cg/__pycache__/_dbg_p30.cpython-310.pyc +0 -0
  46. package/md_cg/__pycache__/_diag_p19.cpython-310.pyc +0 -0
  47. package/md_cg/__pycache__/_tmp_dbg.cpython-310.pyc +0 -0
  48. package/md_cg/__pycache__/audit.cpython-310.pyc +0 -0
  49. package/md_cg/__pycache__/backfill.cpython-310.pyc +0 -0
  50. package/md_cg/__pycache__/bench_membench.cpython-310.pyc +0 -0
  51. package/md_cg/__pycache__/bench_p0.cpython-310.pyc +0 -0
  52. package/md_cg/__pycache__/census.cpython-310.pyc +0 -0
  53. package/md_cg/__pycache__/chain.cpython-310.pyc +0 -0
  54. package/md_cg/__pycache__/codeindex.cpython-310.pyc +0 -0
  55. package/md_cg/__pycache__/consistency.cpython-310.pyc +0 -0
  56. package/md_cg/__pycache__/consolidate.cpython-310.pyc +0 -0
  57. package/md_cg/__pycache__/corpus.cpython-310.pyc +0 -0
  58. package/md_cg/__pycache__/crosscheck.cpython-310.pyc +0 -0
  59. package/md_cg/__pycache__/crypto.cpython-310.pyc +0 -0
  60. package/md_cg/__pycache__/datapath.cpython-310.pyc +0 -0
  61. package/md_cg/__pycache__/docindex.cpython-310.pyc +0 -0
  62. package/md_cg/__pycache__/evidence.cpython-310.pyc +0 -0
  63. package/md_cg/__pycache__/evolution.cpython-310.pyc +0 -0
  64. package/md_cg/__pycache__/export.cpython-310.pyc +0 -0
  65. package/md_cg/__pycache__/forgetting.cpython-310.pyc +0 -0
  66. package/md_cg/__pycache__/fsutil.cpython-310.pyc +0 -0
  67. package/md_cg/__pycache__/identity.cpython-310.pyc +0 -0
  68. package/md_cg/__pycache__/insight.cpython-310.pyc +0 -0
  69. package/md_cg/__pycache__/links.cpython-310.pyc +0 -0
  70. package/md_cg/__pycache__/mcp_server.cpython-310.pyc +0 -0
  71. package/md_cg/__pycache__/md_whitebox.cpython-310.pyc +0 -0
  72. package/md_cg/__pycache__/mdcg.cpython-310.pyc +0 -0
  73. package/md_cg/__pycache__/mdcos.cpython-310.pyc +0 -0
  74. package/md_cg/__pycache__/metacognition.cpython-310.pyc +0 -0
  75. package/md_cg/__pycache__/migrate.cpython-310.pyc +0 -0
  76. package/md_cg/__pycache__/migrate_aeis.cpython-310.pyc +0 -0
  77. package/md_cg/__pycache__/migrate_roleplay.cpython-310.pyc +0 -0
  78. package/md_cg/__pycache__/migrate_wisdom_graph.cpython-310.pyc +0 -0
  79. package/md_cg/__pycache__/nodefile.cpython-310.pyc +0 -0
  80. package/md_cg/__pycache__/pooling.cpython-310.pyc +0 -0
  81. package/md_cg/__pycache__/predict.cpython-310.pyc +0 -0
  82. package/md_cg/__pycache__/protect.cpython-310.pyc +0 -0
  83. package/md_cg/__pycache__/provenance.cpython-310.pyc +0 -0
  84. package/md_cg/__pycache__/refindex.cpython-310.pyc +0 -0
  85. package/md_cg/__pycache__/refine.cpython-310.pyc +0 -0
  86. package/md_cg/__pycache__/routing.cpython-310.pyc +0 -0
  87. package/md_cg/__pycache__/scrub.cpython-310.pyc +0 -0
  88. package/md_cg/__pycache__/security.cpython-310.pyc +0 -0
  89. package/md_cg/__pycache__/self_state.cpython-310.pyc +0 -0
  90. package/md_cg/__pycache__/signer.cpython-310.pyc +0 -0
  91. package/md_cg/__pycache__/sources.cpython-310.pyc +0 -0
  92. package/md_cg/__pycache__/stg.cpython-310.pyc +0 -0
  93. package/md_cg/__pycache__/subgraph.cpython-310.pyc +0 -0
  94. package/md_cg/__pycache__/sustain.cpython-310.pyc +0 -0
  95. package/md_cg/__pycache__/test_lock.cpython-310-pytest-9.1.1.pyc +0 -0
  96. package/md_cg/__pycache__/test_lock.cpython-310.pyc +0 -0
  97. package/md_cg/__pycache__/test_p0.cpython-310-pytest-9.1.1.pyc +0 -0
  98. package/md_cg/__pycache__/test_p0.cpython-310.pyc +0 -0
  99. package/md_cg/__pycache__/test_p1.cpython-310-pytest-9.1.1.pyc +0 -0
  100. package/md_cg/__pycache__/test_p1.cpython-310.pyc +0 -0
  101. package/md_cg/__pycache__/test_p10_identity.cpython-310-pytest-9.1.1.pyc +0 -0
  102. package/md_cg/__pycache__/test_p10_identity.cpython-310.pyc +0 -0
  103. package/md_cg/__pycache__/test_p11_consistency.cpython-310-pytest-9.1.1.pyc +0 -0
  104. package/md_cg/__pycache__/test_p11_consistency.cpython-310.pyc +0 -0
  105. package/md_cg/__pycache__/test_p12_metacognition.cpython-310-pytest-9.1.1.pyc +0 -0
  106. package/md_cg/__pycache__/test_p12_metacognition.cpython-310.pyc +0 -0
  107. package/md_cg/__pycache__/test_p13_encryption.cpython-310-pytest-9.1.1.pyc +0 -0
  108. package/md_cg/__pycache__/test_p13_encryption.cpython-310.pyc +0 -0
  109. package/md_cg/__pycache__/test_p14_sustain.cpython-310-pytest-9.1.1.pyc +0 -0
  110. package/md_cg/__pycache__/test_p14_sustain.cpython-310.pyc +0 -0
  111. package/md_cg/__pycache__/test_p15_scrub.cpython-310-pytest-9.1.1.pyc +0 -0
  112. package/md_cg/__pycache__/test_p15_scrub.cpython-310.pyc +0 -0
  113. package/md_cg/__pycache__/test_p16_self_state.cpython-310.pyc +0 -0
  114. package/md_cg/__pycache__/test_p17_predict.cpython-310.pyc +0 -0
  115. package/md_cg/__pycache__/test_p18_whitebox.cpython-310.pyc +0 -0
  116. package/md_cg/__pycache__/test_p19_migrate_roleplay.cpython-310.pyc +0 -0
  117. package/md_cg/__pycache__/test_p2.cpython-310-pytest-9.1.1.pyc +0 -0
  118. package/md_cg/__pycache__/test_p2.cpython-310.pyc +0 -0
  119. package/md_cg/__pycache__/test_p20_evolution.cpython-310.pyc +0 -0
  120. package/md_cg/__pycache__/test_p21_tokens.cpython-310.pyc +0 -0
  121. package/md_cg/__pycache__/test_p22_theory.cpython-310.pyc +0 -0
  122. package/md_cg/__pycache__/test_p23_links.cpython-310.pyc +0 -0
  123. package/md_cg/__pycache__/test_p24_evidence.cpython-310.pyc +0 -0
  124. package/md_cg/__pycache__/test_p25_weights.cpython-310.pyc +0 -0
  125. package/md_cg/__pycache__/test_p26_refindex.cpython-310.pyc +0 -0
  126. package/md_cg/__pycache__/test_p27_docindex.cpython-310.pyc +0 -0
  127. package/md_cg/__pycache__/test_p28_refcheck.cpython-310.pyc +0 -0
  128. package/md_cg/__pycache__/test_p29_session_ingest_export.cpython-310.pyc +0 -0
  129. package/md_cg/__pycache__/test_p2_mcp.cpython-310-pytest-9.1.1.pyc +0 -0
  130. package/md_cg/__pycache__/test_p2_mcp.cpython-310.pyc +0 -0
  131. package/md_cg/__pycache__/test_p3.cpython-310-pytest-9.1.1.pyc +0 -0
  132. package/md_cg/__pycache__/test_p3.cpython-310.pyc +0 -0
  133. package/md_cg/__pycache__/test_p30_maintain.cpython-310.pyc +0 -0
  134. package/md_cg/__pycache__/test_p31_insight.cpython-310.pyc +0 -0
  135. package/md_cg/__pycache__/test_p32_backfill.cpython-310.pyc +0 -0
  136. package/md_cg/__pycache__/test_p33_ccg_wiring.cpython-310.pyc +0 -0
  137. package/md_cg/__pycache__/test_p34_crosscheck.cpython-310.pyc +0 -0
  138. package/md_cg/__pycache__/test_p35_conditioned_claim.cpython-310.pyc +0 -0
  139. package/md_cg/__pycache__/test_p36_kp_align.cpython-310.pyc +0 -0
  140. package/md_cg/__pycache__/test_p37_condition_space.cpython-310.pyc +0 -0
  141. package/md_cg/__pycache__/test_p38_contextualize.cpython-310.pyc +0 -0
  142. package/md_cg/__pycache__/test_p39_vision_evidence.cpython-310.pyc +0 -0
  143. package/md_cg/__pycache__/test_p40_refine_worklist.cpython-310.pyc +0 -0
  144. package/md_cg/__pycache__/test_p41_evolve_patrol.cpython-310.pyc +0 -0
  145. package/md_cg/__pycache__/test_p42_provenance.cpython-310.pyc +0 -0
  146. package/md_cg/__pycache__/test_p43_pooling.cpython-310.pyc +0 -0
  147. package/md_cg/__pycache__/test_p44_md_whitebox.cpython-310.pyc +0 -0
  148. package/md_cg/__pycache__/test_p4_fuzzy.cpython-310-pytest-9.1.1.pyc +0 -0
  149. package/md_cg/__pycache__/test_p4_fuzzy.cpython-310.pyc +0 -0
  150. package/md_cg/__pycache__/test_p5_semantic.cpython-310-pytest-9.1.1.pyc +0 -0
  151. package/md_cg/__pycache__/test_p5_semantic.cpython-310.pyc +0 -0
  152. package/md_cg/__pycache__/test_p6_consolidate.cpython-310-pytest-9.1.1.pyc +0 -0
  153. package/md_cg/__pycache__/test_p6_consolidate.cpython-310.pyc +0 -0
  154. package/md_cg/__pycache__/test_p7_goals_recent.cpython-310-pytest-9.1.1.pyc +0 -0
  155. package/md_cg/__pycache__/test_p7_goals_recent.cpython-310.pyc +0 -0
  156. package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310-pytest-9.1.1.pyc +0 -0
  157. package/md_cg/__pycache__/test_p8_subgraph_chain.cpython-310.pyc +0 -0
  158. package/md_cg/__pycache__/test_p9_forget_protect.cpython-310-pytest-9.1.1.pyc +0 -0
  159. package/md_cg/__pycache__/test_p9_forget_protect.cpython-310.pyc +0 -0
  160. package/md_cg/__pycache__/theory.cpython-310.pyc +0 -0
  161. package/md_cg/__pycache__/tokens.cpython-310.pyc +0 -0
  162. package/md_cg/__pycache__/vision_evidence.cpython-310.pyc +0 -0
  163. package/md_cg/__pycache__/weights.cpython-310.pyc +0 -0
  164. package/md_cg/__pycache__/whitebox.cpython-310.pyc +0 -0
  165. package/md_cg/audit.py +223 -0
  166. package/md_cg/backfill.py +1272 -0
  167. package/md_cg/bench_membench.py +602 -0
  168. package/md_cg/bench_p0.py +147 -0
  169. package/md_cg/bench_task_ab.py +237 -0
  170. package/md_cg/bench_task_ab_llm.py +397 -0
  171. package/md_cg/census.py +117 -0
  172. package/md_cg/chain.py +280 -0
  173. package/md_cg/codeindex.py +359 -0
  174. package/md_cg/consistency.py +593 -0
  175. package/md_cg/consolidate.py +1389 -0
  176. package/md_cg/corpus.py +106 -0
  177. package/md_cg/crosscheck.py +1058 -0
  178. package/md_cg/crypto.py +404 -0
  179. package/md_cg/datapath.py +160 -0
  180. package/md_cg/docindex.py +333 -0
  181. package/md_cg/evidence.py +555 -0
  182. package/md_cg/evolution.py +458 -0
  183. package/md_cg/export.py +210 -0
  184. package/md_cg/forgetting.py +552 -0
  185. package/md_cg/fsutil.py +251 -0
  186. package/md_cg/identity.py +374 -0
  187. package/md_cg/insight.py +485 -0
  188. package/md_cg/links.py +595 -0
  189. package/md_cg/mcp_server.py +2445 -0
  190. package/md_cg/md_whitebox.py +271 -0
  191. package/md_cg/mdcg.py +1210 -0
  192. package/md_cg/mdcos.py +2505 -0
  193. package/md_cg/metacognition.py +557 -0
  194. package/md_cg/migrate.py +115 -0
  195. package/md_cg/migrate_aeis.py +213 -0
  196. package/md_cg/migrate_roleplay.py +285 -0
  197. package/md_cg/migrate_wisdom_graph.py +348 -0
  198. package/md_cg/nodefile.py +308 -0
  199. package/md_cg/pooling.py +451 -0
  200. package/md_cg/predict.py +918 -0
  201. package/md_cg/protect.py +260 -0
  202. package/md_cg/provenance.py +321 -0
  203. package/md_cg/refindex.py +585 -0
  204. package/md_cg/refine.py +586 -0
  205. package/md_cg/routing.py +290 -0
  206. package/md_cg/scrub.py +788 -0
  207. package/md_cg/security.py +235 -0
  208. package/md_cg/self_state.py +843 -0
  209. package/md_cg/signer.py +523 -0
  210. package/md_cg/sources.py +547 -0
  211. package/md_cg/stg.py +250 -0
  212. package/md_cg/subgraph.py +706 -0
  213. package/md_cg/sustain.py +874 -0
  214. package/md_cg/test_lock.py +43 -0
  215. package/md_cg/test_p0.py +250 -0
  216. package/md_cg/test_p1.py +317 -0
  217. package/md_cg/test_p10_identity.py +173 -0
  218. package/md_cg/test_p11_consistency.py +233 -0
  219. package/md_cg/test_p12_metacognition.py +212 -0
  220. package/md_cg/test_p13_encryption.py +241 -0
  221. package/md_cg/test_p14_sustain.py +249 -0
  222. package/md_cg/test_p15_scrub.py +280 -0
  223. package/md_cg/test_p16_self_state.py +275 -0
  224. package/md_cg/test_p17_predict.py +341 -0
  225. package/md_cg/test_p18_whitebox.py +171 -0
  226. package/md_cg/test_p19_migrate_roleplay.py +149 -0
  227. package/md_cg/test_p2.py +205 -0
  228. package/md_cg/test_p20_evolution.py +315 -0
  229. package/md_cg/test_p21_tokens.py +270 -0
  230. package/md_cg/test_p22_theory.py +175 -0
  231. package/md_cg/test_p23_links.py +311 -0
  232. package/md_cg/test_p24_evidence.py +227 -0
  233. package/md_cg/test_p25_weights.py +156 -0
  234. package/md_cg/test_p26_refindex.py +387 -0
  235. package/md_cg/test_p27_docindex.py +377 -0
  236. package/md_cg/test_p28_refcheck.py +305 -0
  237. package/md_cg/test_p29_session_ingest_export.py +333 -0
  238. package/md_cg/test_p2_mcp.py +425 -0
  239. package/md_cg/test_p3.py +252 -0
  240. package/md_cg/test_p30_maintain.py +330 -0
  241. package/md_cg/test_p31_insight.py +510 -0
  242. package/md_cg/test_p32_backfill.py +298 -0
  243. package/md_cg/test_p33_ccg_wiring.py +293 -0
  244. package/md_cg/test_p34_crosscheck.py +331 -0
  245. package/md_cg/test_p35_conditioned_claim.py +252 -0
  246. package/md_cg/test_p36_kp_align.py +225 -0
  247. package/md_cg/test_p37_condition_space.py +248 -0
  248. package/md_cg/test_p38_contextualize.py +273 -0
  249. package/md_cg/test_p39_vision_evidence.py +369 -0
  250. package/md_cg/test_p40_refine_worklist.py +241 -0
  251. package/md_cg/test_p41_evolve_patrol.py +224 -0
  252. package/md_cg/test_p42_provenance.py +269 -0
  253. package/md_cg/test_p43_pooling.py +360 -0
  254. package/md_cg/test_p44_md_whitebox.py +218 -0
  255. package/md_cg/test_p4_fuzzy.py +223 -0
  256. package/md_cg/test_p5_semantic.py +226 -0
  257. package/md_cg/test_p6_consolidate.py +387 -0
  258. package/md_cg/test_p7_goals_recent.py +202 -0
  259. package/md_cg/test_p8_subgraph_chain.py +200 -0
  260. package/md_cg/test_p9_forget_protect.py +231 -0
  261. package/md_cg/theory.py +259 -0
  262. package/md_cg/tokens.py +506 -0
  263. package/md_cg/vision_evidence.py +644 -0
  264. package/md_cg/weights.py +602 -0
  265. package/md_cg/whitebox.py +497 -0
  266. package/md_cg/whitebox_kb/__init__.py +37 -0
  267. package/md_cg/whitebox_kb/__pycache__/__init__.cpython-310.pyc +0 -0
  268. package/md_cg/whitebox_kb/__pycache__/engine.cpython-310.pyc +0 -0
  269. package/md_cg/whitebox_kb/aeis_core/__init__.py +42 -0
  270. package/md_cg/whitebox_kb/aeis_core/__pycache__/__init__.cpython-310.pyc +0 -0
  271. package/md_cg/whitebox_kb/aeis_core/__pycache__/core.cpython-310.pyc +0 -0
  272. package/md_cg/whitebox_kb/aeis_core/__pycache__/semantic.cpython-310.pyc +0 -0
  273. package/md_cg/whitebox_kb/aeis_core/__pycache__/time_core.cpython-310.pyc +0 -0
  274. package/md_cg/whitebox_kb/aeis_core/api.py +1042 -0
  275. package/md_cg/whitebox_kb/aeis_core/core.py +5014 -0
  276. package/md_cg/whitebox_kb/aeis_core/semantic.py +280 -0
  277. package/md_cg/whitebox_kb/aeis_core/textutil.py +13 -0
  278. package/md_cg/whitebox_kb/aeis_core/time_core.py +43 -0
  279. package/md_cg/whitebox_kb/data/verify_cache.json +1873 -0
  280. package/md_cg/whitebox_kb/data/verify_savings.jsonl +1330 -0
  281. package/md_cg/whitebox_kb/engine.py +310 -0
  282. package/md_cg/whitebox_kb/knowledge/_ccg_dump.json +1 -0
  283. package/md_cg/whitebox_kb/knowledge/_index.json +15300 -0
  284. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/345/234/260/346/240/207.md +22 -0
  285. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/346/226/207/345/214/226.md +15 -0
  286. 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
  287. package/md_cg/whitebox_kb/knowledge//344/270/226/347/225/214/351/201/227/344/272/247.md +15 -0
  288. 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
  289. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/220/215/350/203/234.md +15 -0
  290. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/345/257/223/350/250/200.md +15 -0
  291. 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
  292. package/md_cg/whitebox_kb/knowledge//344/270/255/345/233/275/347/245/236/350/257/235.md +22 -0
  293. package/md_cg/whitebox_kb/knowledge//344/271/246/346/263/225/346/226/207/345/214/226.md +22 -0
  294. package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/345/256/211/345/205/250.md +15 -0
  295. package/md_cg/whitebox_kb/knowledge//344/272/244/351/200/232/351/200/232/350/257/206.md +15 -0
  296. package/md_cg/whitebox_kb/knowledge//344/272/272/344/275/223/347/224/237/347/220/206.md +22 -0
  297. 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
  298. package/md_cg/whitebox_kb/knowledge//344/272/272/346/226/207/351/200/232/350/257/206.md +1296 -0
  299. package/md_cg/whitebox_kb/knowledge//344/272/272/347/211/251/345/216/206/345/217/262.md +15 -0
  300. 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
  301. package/md_cg/whitebox_kb/knowledge//344/272/272/351/231/205/346/262/237/351/200/232.md +22 -0
  302. 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
  303. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/344/271/220/345/231/250.md +15 -0
  304. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/205/273/347/224/237.md +15 -0
  305. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/216/206/346/263/225.md +15 -0
  306. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/267/245/350/211/272.md +148 -0
  307. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/345/273/272/347/255/221.md +29 -0
  308. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/226/207/345/214/226.md +92 -0
  309. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/243/213/347/261/273.md +15 -0
  310. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/346/255/246/346/234/257.md +15 -0
  311. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/345/276/267.md +29 -0
  312. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/347/276/216/351/243/237.md +36 -0
  313. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/211/272/346/234/257.md +71 -0
  314. package/md_cg/whitebox_kb/knowledge//344/274/240/347/273/237/350/212/202/346/227/245.md +22 -0
  315. package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262.md +15 -0
  316. package/md_cg/whitebox_kb/knowledge//344/275/223/350/202/262/350/277/220/345/212/250.md +15 -0
  317. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/345/256/211/345/205/250.md +15 -0
  318. package/md_cg/whitebox_kb/knowledge//344/277/241/346/201/257/346/212/200/346/234/257.md +22 -0
  319. 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
  320. package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/344/271/240/346/203/257.md +15 -0
  321. package/md_cg/whitebox_kb/knowledge//345/201/245/345/272/267/345/270/270/350/257/206.md +50 -0
  322. package/md_cg/whitebox_kb/knowledge//345/205/211/345/255/246/351/200/232/350/257/206.md +15 -0
  323. package/md_cg/whitebox_kb/knowledge//345/205/273/347/224/237/346/226/271/346/263/225.md +15 -0
  324. package/md_cg/whitebox_kb/knowledge//345/206/233/344/272/213/345/217/262.md +15 -0
  325. package/md_cg/whitebox_kb/knowledge//345/206/234/344/270/232/345/270/270/350/257/206.md +15 -0
  326. 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
  327. 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
  328. 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
  329. 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
  330. 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
  331. 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
  332. 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
  333. 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
  334. 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
  335. 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
  336. 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
  337. package/md_cg/whitebox_kb/knowledge//345/210/266/345/272/246/345/217/262.md +64 -0
  338. package/md_cg/whitebox_kb/knowledge//345/211/215/346/262/277/347/247/221/346/212/200.md +36 -0
  339. 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
  340. 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
  341. 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
  342. 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
  343. package/md_cg/whitebox_kb/knowledge//345/216/206/345/217/262/345/234/260/347/220/206.md +29 -0
  344. 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
  345. 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
  346. 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
  347. package/md_cg/whitebox_kb/knowledge//345/217/244/347/224/237/347/211/251.md +22 -0
  348. 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
  349. package/md_cg/whitebox_kb/knowledge//345/225/206/344/270/232/345/217/262.md +15 -0
  350. package/md_cg/whitebox_kb/knowledge//345/231/250/347/211/251/345/267/245/350/211/272.md +15 -0
  351. package/md_cg/whitebox_kb/knowledge//345/233/255/346/236/227/345/273/272/347/255/221.md +15 -0
  352. 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
  353. package/md_cg/whitebox_kb/knowledge//345/233/276/345/203/217/347/224/237/346/210/220.md +99 -0
  354. 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
  355. 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
  356. 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
  357. 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
  358. 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
  359. 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
  360. 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
  361. 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
  362. 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
  363. 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
  364. package/md_cg/whitebox_kb/knowledge//345/255/230/345/234/250/350/256/272.md +43 -0
  365. package/md_cg/whitebox_kb/knowledge//345/255/246/344/271/240/346/226/271/346/263/225.md +57 -0
  366. package/md_cg/whitebox_kb/knowledge//345/256/211/345/205/250/345/270/270/350/257/206.md +22 -0
  367. 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
  368. 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
  369. package/md_cg/whitebox_kb/knowledge//345/256/240/347/211/251.md +29 -0
  370. package/md_cg/whitebox_kb/knowledge//345/256/266/345/272/255/345/205/263/347/263/273.md +29 -0
  371. 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
  372. 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
  373. 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
  374. 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
  375. 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
  376. 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
  377. 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
  378. package/md_cg/whitebox_kb/knowledge//345/267/245/347/250/213/347/247/221/345/255/246.md +22 -0
  379. package/md_cg/whitebox_kb/knowledge//345/267/245/350/211/272/351/200/232/350/257/206.md +15 -0
  380. 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
  381. 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
  382. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/344/272/272/346/226/207.md +15 -0
  383. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/345/216/206/345/217/262.md +43 -0
  384. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/350/211/272/346/234/257.md +15 -0
  385. package/md_cg/whitebox_kb/knowledge//345/273/272/347/255/221/351/200/232/350/257/206.md +15 -0
  386. package/md_cg/whitebox_kb/knowledge//345/275/261/350/247/206/345/270/270/350/257/206.md +29 -0
  387. 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
  388. 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
  389. 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
  390. 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
  391. package/md_cg/whitebox_kb/knowledge//346/200/235/347/273/264/345/256/232/345/276/213.md +29 -0
  392. 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
  393. package/md_cg/whitebox_kb/knowledge//346/210/217/346/233/262/350/211/272/346/234/257.md +22 -0
  394. package/md_cg/whitebox_kb/knowledge//346/210/220/350/257/255/345/205/270/346/225/205.md +15 -0
  395. package/md_cg/whitebox_kb/knowledge//346/211/213/345/267/245/345/270/270/350/257/206.md +15 -0
  396. 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
  397. 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
  398. 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
  399. package/md_cg/whitebox_kb/knowledge//346/224/266/350/227/217/351/233/206/350/227/217.md +92 -0
  400. 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
  401. package/md_cg/whitebox_kb/knowledge//346/225/210/347/216/207/346/226/271/346/263/225.md +15 -0
  402. 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
  403. 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
  404. package/md_cg/whitebox_kb/knowledge//346/225/260/345/255/227/347/264/240/345/205/273.md +22 -0
  405. 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
  406. 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
  407. 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
  408. 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
  409. 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
  410. package/md_cg/whitebox_kb/knowledge//346/226/207/345/205/267/345/270/270/350/257/206.md +15 -0
  411. package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226.md +36 -0
  412. package/md_cg/whitebox_kb/knowledge//346/226/207/345/214/226/351/200/232/350/257/206.md +15 -0
  413. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/345/255/246.md +15 -0
  414. package/md_cg/whitebox_kb/knowledge//346/226/207/345/255/227/350/265/267/346/272/220.md +15 -0
  415. 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
  416. package/md_cg/whitebox_kb/knowledge//346/226/207/346/225/231/345/216/206/345/217/262.md +15 -0
  417. package/md_cg/whitebox_kb/knowledge//346/226/207/347/211/251/351/200/232/350/257/206.md +22 -0
  418. package/md_cg/whitebox_kb/knowledge//346/226/207/347/214/256/345/255/246.md +22 -0
  419. 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
  420. 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
  421. package/md_cg/whitebox_kb/knowledge//346/230/206/350/231/253/345/270/270/350/257/206.md +29 -0
  422. 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
  423. package/md_cg/whitebox_kb/knowledge//346/233/262/350/211/272/345/270/270/350/257/206.md +15 -0
  424. 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
  425. package/md_cg/whitebox_kb/knowledge//346/234/215/351/245/260/346/226/207/345/214/226.md +22 -0
  426. package/md_cg/whitebox_kb/knowledge//346/234/252/345/210/206/347/261/273.md +52 -0
  427. package/md_cg/whitebox_kb/knowledge//346/234/272/346/242/260/351/200/232/350/257/206.md +15 -0
  428. 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
  429. 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
  430. package/md_cg/whitebox_kb/knowledge//346/243/213/347/211/214/350/247/204/345/210/231.md +15 -0
  431. package/md_cg/whitebox_kb/knowledge//346/243/213/347/261/273/350/247/204/345/210/231.md +36 -0
  432. 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
  433. 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
  434. 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
  435. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227.md +64 -0
  436. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/344/277/241/344/273/260.md +36 -0
  437. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/205/273/347/224/237.md +15 -0
  438. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/216/206/346/263/225.md +15 -0
  439. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/345/231/250/347/211/251.md +15 -0
  440. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/346/226/207/345/214/226.md +22 -0
  441. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/350/257/255/350/250/200.md +15 -0
  442. package/md_cg/whitebox_kb/knowledge//346/260/221/344/277/227/351/233/205/347/216/251.md +50 -0
  443. package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/345/270/270/350/257/206.md +15 -0
  444. package/md_cg/whitebox_kb/knowledge//346/260/224/350/261/241/351/200/232/350/257/206.md +15 -0
  445. package/md_cg/whitebox_kb/knowledge//346/261/202/350/201/214/346/212/200/350/203/275.md +29 -0
  446. package/md_cg/whitebox_kb/knowledge//346/262/237/351/200/232.md +29 -0
  447. 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
  448. 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
  449. package/md_cg/whitebox_kb/knowledge//346/265/267/346/264/213/347/224/237/347/211/251.md +15 -0
  450. 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
  451. package/md_cg/whitebox_kb/knowledge//347/203/271/351/245/252/346/212/200/346/263/225.md +15 -0
  452. 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
  453. 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
  454. 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
  455. 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
  456. 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
  457. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/215/253/347/224/237.md +15 -0
  458. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/345/270/270/350/257/206.md +1296 -0
  459. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/346/212/200/350/203/275.md +43 -0
  460. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/347/247/221/346/212/200.md +22 -0
  461. package/md_cg/whitebox_kb/knowledge//347/224/237/346/264/273/351/200/232/350/257/206.md +15 -0
  462. package/md_cg/whitebox_kb/knowledge//347/224/237/347/211/251/344/277/235/346/212/244.md +36 -0
  463. 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
  464. 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
  465. 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
  466. 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
  467. 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
  468. package/md_cg/whitebox_kb/knowledge//347/231/275/347/256/261/345/215/217/350/256/256.md +22 -0
  469. package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/346/270/270/346/210/217.md +15 -0
  470. package/md_cg/whitebox_kb/knowledge//347/233/212/346/231/272/351/200/232/350/257/206.md +15 -0
  471. package/md_cg/whitebox_kb/knowledge//347/244/276/344/272/244/346/212/200/345/267/247.md +15 -0
  472. 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
  473. package/md_cg/whitebox_kb/knowledge//347/244/276/344/274/232/347/247/221/345/255/246.md +43 -0
  474. package/md_cg/whitebox_kb/knowledge//347/245/236/350/257/235/344/274/240/350/257/264.md +15 -0
  475. package/md_cg/whitebox_kb/knowledge//347/247/221/345/255/246/345/217/262.md +22 -0
  476. package/md_cg/whitebox_kb/knowledge//347/247/221/346/212/200/351/200/232/350/257/206.md +78 -0
  477. 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
  478. 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
  479. 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
  480. 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
  481. 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
  482. package/md_cg/whitebox_kb/knowledge//347/273/217/346/265/216/345/217/262.md +43 -0
  483. 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
  484. 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
  485. 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
  486. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-Git.md +15 -0
  487. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213-JS.md +15 -0
  488. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/346/246/202/345/277/265.md +15 -0
  489. package/md_cg/whitebox_kb/knowledge//347/274/226/347/250/213/350/257/255/350/250/200.md +120 -0
  490. 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
  491. package/md_cg/whitebox_kb/knowledge//347/275/221/347/273/234/345/256/211/345/205/250.md +34 -0
  492. package/md_cg/whitebox_kb/knowledge//350/200/203/345/217/244/345/270/270/350/257/206.md +64 -0
  493. 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
  494. package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/345/220/215/345/256/266.md +15 -0
  495. package/md_cg/whitebox_kb/knowledge//350/211/272/346/234/257/346/265/201/346/264/276.md +15 -0
  496. package/md_cg/whitebox_kb/knowledge//350/214/266/346/226/207/345/214/226.md +15 -0
  497. 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
  498. 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
  499. 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
  500. 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
  501. package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/217/262.md +15 -0
  502. package/md_cg/whitebox_kb/knowledge//350/264/247/345/270/201/345/270/270/350/257/206.md +15 -0
  503. 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
  504. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/201/245/345/272/267.md +15 -0
  505. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/345/270/270/350/257/206.md +15 -0
  506. package/md_cg/whitebox_kb/knowledge//350/277/220/345/212/250/347/247/221/345/255/246.md +22 -0
  507. package/md_cg/whitebox_kb/knowledge//350/277/221/344/270/226/346/234/215/351/245/260.md +15 -0
  508. package/md_cg/whitebox_kb/knowledge//351/200/273/350/276/221/345/255/246.md +14 -0
  509. 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
  510. 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
  511. 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
  512. package/md_cg/whitebox_kb/knowledge//351/235/236/351/201/227/350/211/272/346/234/257.md +43 -0
  513. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220.md +15 -0
  514. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/220/215/345/256/266.md +22 -0
  515. package/md_cg/whitebox_kb/knowledge//351/237/263/344/271/220/345/270/270/350/257/206.md +29 -0
  516. package/md_cg/whitebox_kb/knowledge//351/243/237/345/223/201/347/247/221/345/255/246.md +57 -0
  517. package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/345/270/270/350/257/206.md +29 -0
  518. package/md_cg/whitebox_kb/knowledge//351/245/256/351/243/237/346/226/207/345/214/226.md +29 -0
  519. 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
  520. 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
  521. 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
  522. 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
  523. 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
  524. 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
  525. 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
  526. 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
  527. 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
  528. 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
  529. 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
  530. 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
  531. package/md_cg/whitebox_kb/seed_knowledge/__init__.py +2 -0
  532. package/md_cg/whitebox_kb/seed_knowledge/guardrail-charter.md +164 -0
  533. 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
  534. 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
  535. 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
  536. 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
  537. 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
  538. 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
  539. 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
  540. 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
  541. 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
  542. 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
  543. 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
  544. 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
  545. 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
  546. 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
  547. 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
  548. 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
  549. 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
  550. 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
  551. 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
  552. 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
  553. 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
  554. 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
  555. 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
  556. 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
  557. 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
  558. 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
  559. 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
  560. 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
  561. 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
  562. 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
  563. 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
  564. 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
  565. 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
  566. 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
  567. 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
  568. 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
  569. 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
  570. 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
  571. 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
  572. 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
  573. 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
  574. 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
  575. 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
  576. 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
  577. 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
  578. 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
  579. 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
  580. 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
  581. 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
  582. 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
  583. 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
  584. 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
  585. 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
  586. 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
  587. 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
  588. 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
  589. 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
  590. 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
  591. 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
  592. 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
  593. 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
  594. 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
  595. 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
  596. 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
  597. 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
  598. 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
  599. 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
  600. 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
  601. 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
  602. 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
  603. 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
  604. 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
  605. 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
  606. 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
  607. 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
  608. 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
  609. 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
  610. 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
  611. 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
  612. 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
  613. 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
  614. 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
  615. 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
  616. 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
  617. 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
  618. 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
  619. 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
  620. 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
  621. 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
  622. 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
  623. 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
  624. 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
  625. 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
  626. 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
  627. 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
  628. 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
  629. 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
  630. 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
  631. 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
  632. 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
  633. 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
  634. 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
  635. 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
  636. 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
  637. 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
  638. 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
  639. 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
  640. 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
  641. 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
  642. 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
  643. 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
  644. 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
  645. 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
  646. 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
  647. 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
  648. 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
  649. package/md_cg/whitebox_kb/seed_knowledge//346/231/272/350/203/275/350/256/2723.3.md +4620 -0
  650. package/md_cg/whitebox_kb/wisdom/__init__.py +6 -0
  651. package/md_cg/whitebox_kb/wisdom/__pycache__/browser_units.cpython-310.pyc +0 -0
  652. package/md_cg/whitebox_kb/wisdom/__pycache__/chat_engine.cpython-310.pyc +0 -0
  653. package/md_cg/whitebox_kb/wisdom/__pycache__/code_compose.cpython-310.pyc +0 -0
  654. package/md_cg/whitebox_kb/wisdom/__pycache__/compiler_code_units.cpython-310.pyc +0 -0
  655. package/md_cg/whitebox_kb/wisdom/__pycache__/condition_frame.cpython-310.pyc +0 -0
  656. package/md_cg/whitebox_kb/wisdom/__pycache__/condition_kb.cpython-310.pyc +0 -0
  657. package/md_cg/whitebox_kb/wisdom/__pycache__/danmaku_audit.cpython-310.pyc +0 -0
  658. package/md_cg/whitebox_kb/wisdom/__pycache__/graph_db_units.cpython-310.pyc +0 -0
  659. package/md_cg/whitebox_kb/wisdom/__pycache__/net_units.cpython-310.pyc +0 -0
  660. package/md_cg/whitebox_kb/wisdom/__pycache__/neural_retrieve.cpython-310.pyc +0 -0
  661. package/md_cg/whitebox_kb/wisdom/__pycache__/os_units.cpython-310.pyc +0 -0
  662. package/md_cg/whitebox_kb/wisdom/__pycache__/python_code_units.cpython-310.pyc +0 -0
  663. package/md_cg/whitebox_kb/wisdom/__pycache__/route_memory.cpython-310.pyc +0 -0
  664. package/md_cg/whitebox_kb/wisdom/__pycache__/semantic_translate.cpython-310.pyc +0 -0
  665. package/md_cg/whitebox_kb/wisdom/__pycache__/verifier.cpython-310.pyc +0 -0
  666. package/md_cg/whitebox_kb/wisdom/__pycache__/verify_answer.cpython-310.pyc +0 -0
  667. package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_book.cpython-310.pyc +0 -0
  668. package/md_cg/whitebox_kb/wisdom/__pycache__/wisdom_cloud.cpython-310.pyc +0 -0
  669. package/md_cg/whitebox_kb/wisdom/answer_spec_anchor.py +87 -0
  670. package/md_cg/whitebox_kb/wisdom/audit_log/chain_heat.json +26 -0
  671. package/md_cg/whitebox_kb/wisdom/browser_units.py +2631 -0
  672. package/md_cg/whitebox_kb/wisdom/card_validator.py +223 -0
  673. package/md_cg/whitebox_kb/wisdom/causal_discover.py +313 -0
  674. package/md_cg/whitebox_kb/wisdom/chat.html +185 -0
  675. package/md_cg/whitebox_kb/wisdom/chat_engine.py +1506 -0
  676. package/md_cg/whitebox_kb/wisdom/code_compose.py +730 -0
  677. package/md_cg/whitebox_kb/wisdom/code_qa.py +119 -0
  678. package/md_cg/whitebox_kb/wisdom/code_route_bridge.py +90 -0
  679. package/md_cg/whitebox_kb/wisdom/code_solidified.json +6196 -0
  680. package/md_cg/whitebox_kb/wisdom/code_test_runner.py +217 -0
  681. package/md_cg/whitebox_kb/wisdom/codegraph_white.py +312 -0
  682. package/md_cg/whitebox_kb/wisdom/compiler_code_units.py +3033 -0
  683. package/md_cg/whitebox_kb/wisdom/compiler_compose.py +160 -0
  684. package/md_cg/whitebox_kb/wisdom/compose_engine.py +1633 -0
  685. package/md_cg/whitebox_kb/wisdom/condition_algebra.py +112 -0
  686. package/md_cg/whitebox_kb/wisdom/condition_frame.py +315 -0
  687. package/md_cg/whitebox_kb/wisdom/condition_kb.py +108 -0
  688. package/md_cg/whitebox_kb/wisdom/condition_vm.py +264 -0
  689. package/md_cg/whitebox_kb/wisdom/conflict_map.json +4446 -0
  690. package/md_cg/whitebox_kb/wisdom/core/compiler.py +301 -0
  691. package/md_cg/whitebox_kb/wisdom/core/condition_vm.py +298 -0
  692. package/md_cg/whitebox_kb/wisdom/core/lexer.py +512 -0
  693. package/md_cg/whitebox_kb/wisdom/core/name_checker.py +1023 -0
  694. package/md_cg/whitebox_kb/wisdom/core/parser.py +1065 -0
  695. package/md_cg/whitebox_kb/wisdom/cspmn.py +258 -0
  696. package/md_cg/whitebox_kb/wisdom/csre.py +256 -0
  697. package/md_cg/whitebox_kb/wisdom/csre_lexicon_index.npz +0 -0
  698. package/md_cg/whitebox_kb/wisdom/danmaku_audit.py +252 -0
  699. package/md_cg/whitebox_kb/wisdom/danmaku_bridge.py +141 -0
  700. package/md_cg/whitebox_kb/wisdom/distilled_condition_units.json +6418 -0
  701. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902b.json +1951 -0
  702. package/md_cg/whitebox_kb/wisdom/docs/WB-EVAL-20260902c.json +1297 -0
  703. package/md_cg/whitebox_kb/wisdom/docs/codegraph_ref_rating.md +52 -0
  704. package/md_cg/whitebox_kb/wisdom/docs/daoti_absorb_analysis.md +54 -0
  705. package/md_cg/whitebox_kb/wisdom/docs/dsh_memory_v030_stable.md +34 -0
  706. package/md_cg/whitebox_kb/wisdom/docs/github_absorb_analysis.md +71 -0
  707. package/md_cg/whitebox_kb/wisdom/docs/gliding_horse_absorb_analysis.md +47 -0
  708. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph.md +61 -0
  709. package/md_cg/whitebox_kb/wisdom/docs/whitebox_capability_graph_demo.json +60 -0
  710. package/md_cg/whitebox_kb/wisdom/docs/whitebox_code_rating_202609.md +43 -0
  711. 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
  712. 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
  713. 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
  714. 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
  715. 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
  716. 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
  717. 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
  718. 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
  719. package/md_cg/whitebox_kb/wisdom/ds_compose.py +177 -0
  720. package/md_cg/whitebox_kb/wisdom/graph_db_units.py +3089 -0
  721. package/md_cg/whitebox_kb/wisdom/graph_qa.py +123 -0
  722. package/md_cg/whitebox_kb/wisdom/human_observer_knowledge.json +43 -0
  723. package/md_cg/whitebox_kb/wisdom/knowledge_points.py +234 -0
  724. package/md_cg/whitebox_kb/wisdom/merge_subgraph.py +178 -0
  725. package/md_cg/whitebox_kb/wisdom/migrate_wisdom.py +475 -0
  726. package/md_cg/whitebox_kb/wisdom/mini_python.py +958 -0
  727. package/md_cg/whitebox_kb/wisdom/multilang_ir.py +124 -0
  728. package/md_cg/whitebox_kb/wisdom/navigate.py +248 -0
  729. package/md_cg/whitebox_kb/wisdom/net_units.py +2895 -0
  730. package/md_cg/whitebox_kb/wisdom/neural_index.json +3032 -0
  731. package/md_cg/whitebox_kb/wisdom/neural_index.npz +0 -0
  732. package/md_cg/whitebox_kb/wisdom/neural_retrieve.py +224 -0
  733. package/md_cg/whitebox_kb/wisdom/os_units.py +2735 -0
  734. package/md_cg/whitebox_kb/wisdom/pattern_separation.py +223 -0
  735. package/md_cg/whitebox_kb/wisdom/prereq_map.json +365 -0
  736. package/md_cg/whitebox_kb/wisdom/python_code_units.py +2766 -0
  737. package/md_cg/whitebox_kb/wisdom/role_compose.py +268 -0
  738. package/md_cg/whitebox_kb/wisdom/role_solidified.json +8 -0
  739. package/md_cg/whitebox_kb/wisdom/route_memory.py +244 -0
  740. package/md_cg/whitebox_kb/wisdom/scene_reconstruction.py +148 -0
  741. package/md_cg/whitebox_kb/wisdom/se_compose.py +137 -0
  742. package/md_cg/whitebox_kb/wisdom/semantic_translate.py +4050 -0
  743. package/md_cg/whitebox_kb/wisdom/snr_dashboard.py +219 -0
  744. package/md_cg/whitebox_kb/wisdom/snr_report.json +41 -0
  745. package/md_cg/whitebox_kb/wisdom/spatial_closure.py +96 -0
  746. package/md_cg/whitebox_kb/wisdom/spatial_qa.py +182 -0
  747. package/md_cg/whitebox_kb/wisdom/status_terms.json +21 -0
  748. package/md_cg/whitebox_kb/wisdom/task_discipline.json +43 -0
  749. package/md_cg/whitebox_kb/wisdom/test_code_compose_domains.py +7541 -0
  750. package/md_cg/whitebox_kb/wisdom/test_compiler_self_bootstrap.py +354 -0
  751. package/md_cg/whitebox_kb/wisdom/test_ecosystem_assembly.py +158 -0
  752. package/md_cg/whitebox_kb/wisdom/test_ecosystem_demos.py +193 -0
  753. package/md_cg/whitebox_kb/wisdom/test_graph_db.py +292 -0
  754. package/md_cg/whitebox_kb/wisdom/test_navigate_self_bootstrap.py +69 -0
  755. package/md_cg/whitebox_kb/wisdom/test_python_self_bootstrap.py +160 -0
  756. package/md_cg/whitebox_kb/wisdom/trigger_words_index.json +4367 -0
  757. package/md_cg/whitebox_kb/wisdom/verifier.py +1012 -0
  758. package/md_cg/whitebox_kb/wisdom/verify_answer.py +116 -0
  759. package/md_cg/whitebox_kb/wisdom/wisdom-book-cloud.db +0 -0
  760. package/md_cg/whitebox_kb/wisdom/wisdom_book.py +2582 -0
  761. package/md_cg/whitebox_kb/wisdom/wisdom_cloud.py +479 -0
  762. package/md_cg/whitebox_kb/wisdom/wisdom_ui.html +863 -0
  763. package/package.json +4 -2
  764. package/skills/README.md +108 -0
  765. package/skills/plugin.json +52 -0
  766. package/skills/skills/analyze-type-infer/SKILL.md +45 -0
  767. package/skills/skills/browser-02898b15/SKILL.md +45 -0
  768. package/skills/skills/browser-03b04f98/SKILL.md +45 -0
  769. package/skills/skills/browser-0754386d/SKILL.md +45 -0
  770. package/skills/skills/browser-093c03ab/SKILL.md +45 -0
  771. package/skills/skills/browser-09e60b35/SKILL.md +45 -0
  772. package/skills/skills/browser-0ab4f2db/SKILL.md +45 -0
  773. package/skills/skills/browser-0c7f88d6/SKILL.md +45 -0
  774. package/skills/skills/browser-0f598430/SKILL.md +45 -0
  775. package/skills/skills/browser-0fd64fa5/SKILL.md +45 -0
  776. package/skills/skills/browser-17906c62/SKILL.md +45 -0
  777. package/skills/skills/browser-18f823e2/SKILL.md +45 -0
  778. package/skills/skills/browser-1bafe81c/SKILL.md +45 -0
  779. package/skills/skills/browser-1f9ab1f0/SKILL.md +45 -0
  780. package/skills/skills/browser-1fdb5852/SKILL.md +45 -0
  781. package/skills/skills/browser-21b0359c/SKILL.md +45 -0
  782. package/skills/skills/browser-22e8de36/SKILL.md +45 -0
  783. package/skills/skills/browser-24163519/SKILL.md +45 -0
  784. package/skills/skills/browser-2471a991/SKILL.md +45 -0
  785. package/skills/skills/browser-25afee4d/SKILL.md +45 -0
  786. package/skills/skills/browser-283a91bd/SKILL.md +45 -0
  787. package/skills/skills/browser-2895ff52/SKILL.md +45 -0
  788. package/skills/skills/browser-2cc1da58/SKILL.md +45 -0
  789. package/skills/skills/browser-3189fe6f/SKILL.md +45 -0
  790. package/skills/skills/browser-31f2b08f/SKILL.md +45 -0
  791. package/skills/skills/browser-37b8339e/SKILL.md +45 -0
  792. package/skills/skills/browser-396ec3a6/SKILL.md +45 -0
  793. package/skills/skills/browser-3df2f904/SKILL.md +45 -0
  794. package/skills/skills/browser-43154cec/SKILL.md +45 -0
  795. package/skills/skills/browser-434b74b8/SKILL.md +45 -0
  796. package/skills/skills/browser-440d4398/SKILL.md +45 -0
  797. package/skills/skills/browser-44d7f183/SKILL.md +45 -0
  798. package/skills/skills/browser-4d6c0788/SKILL.md +45 -0
  799. package/skills/skills/browser-50fecd89/SKILL.md +45 -0
  800. package/skills/skills/browser-555c0626/SKILL.md +45 -0
  801. package/skills/skills/browser-57312d24/SKILL.md +45 -0
  802. package/skills/skills/browser-59a0ada4/SKILL.md +45 -0
  803. package/skills/skills/browser-5a455aeb/SKILL.md +45 -0
  804. package/skills/skills/browser-5ae7623a/SKILL.md +45 -0
  805. package/skills/skills/browser-5dac60b6/SKILL.md +45 -0
  806. package/skills/skills/browser-5e5f1396/SKILL.md +45 -0
  807. package/skills/skills/browser-5ebb01dd/SKILL.md +45 -0
  808. package/skills/skills/browser-5f5453f9/SKILL.md +45 -0
  809. package/skills/skills/browser-5f90f58c/SKILL.md +45 -0
  810. package/skills/skills/browser-609362ee/SKILL.md +45 -0
  811. package/skills/skills/browser-60aefeeb/SKILL.md +45 -0
  812. package/skills/skills/browser-6636d49c/SKILL.md +45 -0
  813. package/skills/skills/browser-6cfcb6db/SKILL.md +45 -0
  814. package/skills/skills/browser-6e1c1158/SKILL.md +45 -0
  815. package/skills/skills/browser-7008e942/SKILL.md +45 -0
  816. package/skills/skills/browser-716cd26c/SKILL.md +45 -0
  817. package/skills/skills/browser-720ce1a1/SKILL.md +45 -0
  818. package/skills/skills/browser-77a97b43/SKILL.md +45 -0
  819. package/skills/skills/browser-7bb4871d/SKILL.md +45 -0
  820. package/skills/skills/browser-7be57bbe/SKILL.md +45 -0
  821. package/skills/skills/browser-7da433f3/SKILL.md +45 -0
  822. package/skills/skills/browser-7e96fe1d/SKILL.md +45 -0
  823. package/skills/skills/browser-7f9cefec/SKILL.md +45 -0
  824. package/skills/skills/browser-80224e71/SKILL.md +45 -0
  825. package/skills/skills/browser-81345ecd/SKILL.md +45 -0
  826. package/skills/skills/browser-822cfa44/SKILL.md +45 -0
  827. package/skills/skills/browser-853690c0/SKILL.md +45 -0
  828. package/skills/skills/browser-85553126/SKILL.md +45 -0
  829. package/skills/skills/browser-87b0ce80/SKILL.md +45 -0
  830. package/skills/skills/browser-900c4484/SKILL.md +45 -0
  831. package/skills/skills/browser-910405c4/SKILL.md +45 -0
  832. package/skills/skills/browser-95fd3c86/SKILL.md +45 -0
  833. package/skills/skills/browser-97a14ca3/SKILL.md +45 -0
  834. package/skills/skills/browser-9de10895/SKILL.md +45 -0
  835. package/skills/skills/browser-9e4914a7/SKILL.md +45 -0
  836. package/skills/skills/browser-a280ec64/SKILL.md +45 -0
  837. package/skills/skills/browser-a2d9b0b0/SKILL.md +45 -0
  838. package/skills/skills/browser-a372edeb/SKILL.md +45 -0
  839. package/skills/skills/browser-a4c793a4/SKILL.md +45 -0
  840. package/skills/skills/browser-a681d0c2/SKILL.md +45 -0
  841. package/skills/skills/browser-a7a2b0c1/SKILL.md +45 -0
  842. package/skills/skills/browser-a990e68e/SKILL.md +45 -0
  843. package/skills/skills/browser-aaac4eec/SKILL.md +45 -0
  844. package/skills/skills/browser-ae6586bb/SKILL.md +45 -0
  845. package/skills/skills/browser-afa4091f/SKILL.md +45 -0
  846. package/skills/skills/browser-b4c8cf65/SKILL.md +45 -0
  847. package/skills/skills/browser-b501767c/SKILL.md +45 -0
  848. package/skills/skills/browser-bcd4288d/SKILL.md +45 -0
  849. package/skills/skills/browser-bfad66a5/SKILL.md +45 -0
  850. package/skills/skills/browser-c45cbfe9/SKILL.md +45 -0
  851. package/skills/skills/browser-c4dd6078/SKILL.md +45 -0
  852. package/skills/skills/browser-c879eb0b/SKILL.md +45 -0
  853. package/skills/skills/browser-c92ac01b/SKILL.md +45 -0
  854. package/skills/skills/browser-cb179242/SKILL.md +45 -0
  855. package/skills/skills/browser-cc7d3d6d/SKILL.md +45 -0
  856. package/skills/skills/browser-cf3c47f0/SKILL.md +45 -0
  857. package/skills/skills/browser-cf9f812e/SKILL.md +45 -0
  858. package/skills/skills/browser-d462581c/SKILL.md +45 -0
  859. package/skills/skills/browser-d5fa0b7f/SKILL.md +45 -0
  860. package/skills/skills/browser-d72e225b/SKILL.md +45 -0
  861. package/skills/skills/browser-df1a919e/SKILL.md +45 -0
  862. package/skills/skills/browser-e84565c1/SKILL.md +45 -0
  863. package/skills/skills/browser-e947a564/SKILL.md +45 -0
  864. package/skills/skills/browser-ea9b2b8e/SKILL.md +45 -0
  865. package/skills/skills/browser-f5ffc6d9/SKILL.md +45 -0
  866. package/skills/skills/browser-f75a4418/SKILL.md +45 -0
  867. package/skills/skills/browser-f8f2966e/SKILL.md +45 -0
  868. package/skills/skills/browser-fa65fa2d/SKILL.md +45 -0
  869. package/skills/skills/browser-faac8812/SKILL.md +45 -0
  870. package/skills/skills/browser-ff94a671/SKILL.md +45 -0
  871. package/skills/skills/check-name-real/SKILL.md +45 -0
  872. package/skills/skills/compile-assign/SKILL.md +45 -0
  873. package/skills/skills/compile-expr-tree/SKILL.md +45 -0
  874. package/skills/skills/compile-full-pipeline/SKILL.md +45 -0
  875. package/skills/skills/compile-func-def/SKILL.md +45 -0
  876. package/skills/skills/compile-if-then/SKILL.md +45 -0
  877. package/skills/skills/compile-logic-expr/SKILL.md +45 -0
  878. package/skills/skills/compile-recursive/SKILL.md +45 -0
  879. package/skills/skills/compile-scope/SKILL.md +45 -0
  880. package/skills/skills/compile-type-check/SKILL.md +45 -0
  881. package/skills/skills/compile-while/SKILL.md +45 -0
  882. package/skills/skills/compiler-0010c4bf/SKILL.md +45 -0
  883. package/skills/skills/compiler-0355bffb/SKILL.md +45 -0
  884. package/skills/skills/compiler-0361708a/SKILL.md +45 -0
  885. package/skills/skills/compiler-054a0414/SKILL.md +45 -0
  886. package/skills/skills/compiler-05a1691a/SKILL.md +45 -0
  887. package/skills/skills/compiler-05eeed1e/SKILL.md +45 -0
  888. package/skills/skills/compiler-0622a1f6/SKILL.md +45 -0
  889. package/skills/skills/compiler-08b54217/SKILL.md +45 -0
  890. package/skills/skills/compiler-0a62b70c/SKILL.md +45 -0
  891. package/skills/skills/compiler-0ab24d00/SKILL.md +45 -0
  892. package/skills/skills/compiler-0e093688/SKILL.md +45 -0
  893. package/skills/skills/compiler-0e82b966/SKILL.md +45 -0
  894. package/skills/skills/compiler-0ee9b9b9/SKILL.md +45 -0
  895. package/skills/skills/compiler-0f3787e6/SKILL.md +45 -0
  896. package/skills/skills/compiler-1028685f/SKILL.md +45 -0
  897. package/skills/skills/compiler-11897630/SKILL.md +45 -0
  898. package/skills/skills/compiler-16661b9b/SKILL.md +45 -0
  899. package/skills/skills/compiler-1f722303/SKILL.md +45 -0
  900. package/skills/skills/compiler-25be1262/SKILL.md +45 -0
  901. package/skills/skills/compiler-2a76ba07/SKILL.md +45 -0
  902. package/skills/skills/compiler-2dbea54a/SKILL.md +45 -0
  903. package/skills/skills/compiler-2df52f16/SKILL.md +45 -0
  904. package/skills/skills/compiler-2ec2c9d2/SKILL.md +45 -0
  905. package/skills/skills/compiler-2f8c8f39/SKILL.md +45 -0
  906. package/skills/skills/compiler-38378ac7/SKILL.md +45 -0
  907. package/skills/skills/compiler-39457d2e/SKILL.md +45 -0
  908. package/skills/skills/compiler-39fb5926/SKILL.md +45 -0
  909. package/skills/skills/compiler-47f4fbfa/SKILL.md +45 -0
  910. package/skills/skills/compiler-4a8cd1f1/SKILL.md +45 -0
  911. package/skills/skills/compiler-4b230b6b/SKILL.md +45 -0
  912. package/skills/skills/compiler-4cbbda95/SKILL.md +45 -0
  913. package/skills/skills/compiler-4d5a68ff/SKILL.md +45 -0
  914. package/skills/skills/compiler-56dc9bdd/SKILL.md +45 -0
  915. package/skills/skills/compiler-57e76ebe/SKILL.md +45 -0
  916. package/skills/skills/compiler-61ff016b/SKILL.md +45 -0
  917. package/skills/skills/compiler-63eae588/SKILL.md +45 -0
  918. package/skills/skills/compiler-64c4224b/SKILL.md +45 -0
  919. package/skills/skills/compiler-66377955/SKILL.md +45 -0
  920. package/skills/skills/compiler-674ab4f6/SKILL.md +45 -0
  921. package/skills/skills/compiler-6af76fd6/SKILL.md +45 -0
  922. package/skills/skills/compiler-6d979db2/SKILL.md +45 -0
  923. package/skills/skills/compiler-6de326c0/SKILL.md +45 -0
  924. package/skills/skills/compiler-6f1c0eea/SKILL.md +45 -0
  925. package/skills/skills/compiler-724d6c9b/SKILL.md +45 -0
  926. package/skills/skills/compiler-7690177f/SKILL.md +45 -0
  927. package/skills/skills/compiler-7b229a7d/SKILL.md +45 -0
  928. package/skills/skills/compiler-7f471b3a/SKILL.md +45 -0
  929. package/skills/skills/compiler-815cad08/SKILL.md +45 -0
  930. package/skills/skills/compiler-83c61634/SKILL.md +45 -0
  931. package/skills/skills/compiler-8c798c81/SKILL.md +45 -0
  932. package/skills/skills/compiler-8dd747ac/SKILL.md +45 -0
  933. package/skills/skills/compiler-90324d0a/SKILL.md +45 -0
  934. package/skills/skills/compiler-94b8d72d/SKILL.md +45 -0
  935. package/skills/skills/compiler-94f12231/SKILL.md +45 -0
  936. package/skills/skills/compiler-95937c16/SKILL.md +45 -0
  937. package/skills/skills/compiler-98a5625b/SKILL.md +45 -0
  938. package/skills/skills/compiler-98b4c42f/SKILL.md +45 -0
  939. package/skills/skills/compiler-98e3894a/SKILL.md +45 -0
  940. package/skills/skills/compiler-9bdfe4b8/SKILL.md +45 -0
  941. package/skills/skills/compiler-9d9b4e83/SKILL.md +45 -0
  942. package/skills/skills/compiler-9f7be5ad/SKILL.md +45 -0
  943. package/skills/skills/compiler-a6daf076/SKILL.md +45 -0
  944. package/skills/skills/compiler-a7995a0c/SKILL.md +45 -0
  945. package/skills/skills/compiler-a8399248/SKILL.md +45 -0
  946. package/skills/skills/compiler-aabbd099/SKILL.md +45 -0
  947. package/skills/skills/compiler-afe169d8/SKILL.md +45 -0
  948. package/skills/skills/compiler-b0678bda/SKILL.md +45 -0
  949. package/skills/skills/compiler-b09bd196/SKILL.md +45 -0
  950. package/skills/skills/compiler-b1396e23/SKILL.md +45 -0
  951. package/skills/skills/compiler-b9b31ce0/SKILL.md +45 -0
  952. package/skills/skills/compiler-c10264a7/SKILL.md +45 -0
  953. package/skills/skills/compiler-cb1e8e4b/SKILL.md +45 -0
  954. package/skills/skills/compiler-ccafd438/SKILL.md +45 -0
  955. package/skills/skills/compiler-cda9c262/SKILL.md +45 -0
  956. package/skills/skills/compiler-ce648068/SKILL.md +45 -0
  957. package/skills/skills/compiler-cf5776a4/SKILL.md +45 -0
  958. package/skills/skills/compiler-d974e5d3/SKILL.md +45 -0
  959. package/skills/skills/compiler-e3979fd3/SKILL.md +45 -0
  960. package/skills/skills/compiler-eb1cf2b5/SKILL.md +45 -0
  961. package/skills/skills/compiler-ecb30d5b/SKILL.md +45 -0
  962. package/skills/skills/compiler-f8c8b24b/SKILL.md +45 -0
  963. package/skills/skills/compiler-f99fedbe/SKILL.md +45 -0
  964. package/skills/skills/compiler-fa8ff5f7/SKILL.md +45 -0
  965. package/skills/skills/compiler-fe1b058d/SKILL.md +45 -0
  966. package/skills/skills/designer-perspective/SKILL.md +157 -0
  967. package/skills/skills/designer-perspective/references/01-observation-position.md +66 -0
  968. package/skills/skills/designer-perspective/references/02-structure-recognition.md +62 -0
  969. package/skills/skills/designer-perspective/references/03-direction-judgment.md +55 -0
  970. package/skills/skills/designer-perspective/references/04-qualification-verdict.md +72 -0
  971. package/skills/skills/designer-perspective/references/05-condition-attribution.md +74 -0
  972. package/skills/skills/designer-perspective/scripts/__pycache__/designer.cpython-310.pyc +0 -0
  973. package/skills/skills/designer-perspective/scripts/designer.py +527 -0
  974. package/skills/skills/designer-perspective/tests/cases.jsonl +17 -0
  975. package/skills/skills/designer-perspective/tests/selftest.py +60 -0
  976. package/skills/skills/graph-04cd431b/SKILL.md +45 -0
  977. package/skills/skills/graph-06e2b1f2/SKILL.md +45 -0
  978. package/skills/skills/graph-0de12477/SKILL.md +45 -0
  979. package/skills/skills/graph-0e564e68/SKILL.md +45 -0
  980. package/skills/skills/graph-10d58a7b/SKILL.md +45 -0
  981. package/skills/skills/graph-12cd830a/SKILL.md +45 -0
  982. package/skills/skills/graph-185f2cd2/SKILL.md +45 -0
  983. package/skills/skills/graph-19a6a301/SKILL.md +45 -0
  984. package/skills/skills/graph-1b266557/SKILL.md +45 -0
  985. package/skills/skills/graph-1b707621/SKILL.md +45 -0
  986. package/skills/skills/graph-1d73b597/SKILL.md +45 -0
  987. package/skills/skills/graph-2041fa98/SKILL.md +45 -0
  988. package/skills/skills/graph-2461bc41/SKILL.md +45 -0
  989. package/skills/skills/graph-2465dff8/SKILL.md +45 -0
  990. package/skills/skills/graph-2508389f/SKILL.md +45 -0
  991. package/skills/skills/graph-276d554d/SKILL.md +45 -0
  992. package/skills/skills/graph-299f4a32/SKILL.md +45 -0
  993. package/skills/skills/graph-2d455cd8/SKILL.md +45 -0
  994. package/skills/skills/graph-2fddf701/SKILL.md +45 -0
  995. package/skills/skills/graph-33385442/SKILL.md +45 -0
  996. package/skills/skills/graph-34a1dba7/SKILL.md +45 -0
  997. package/skills/skills/graph-3721be1c/SKILL.md +45 -0
  998. package/skills/skills/graph-3755dbc9/SKILL.md +45 -0
  999. package/skills/skills/graph-37a45d4b/SKILL.md +45 -0
  1000. package/skills/skills/graph-3a4a984c/SKILL.md +45 -0
  1001. package/skills/skills/graph-3aa4c941/SKILL.md +45 -0
  1002. package/skills/skills/graph-3b69a528/SKILL.md +45 -0
  1003. package/skills/skills/graph-3bc2eb69/SKILL.md +45 -0
  1004. package/skills/skills/graph-3d255ed4/SKILL.md +45 -0
  1005. package/skills/skills/graph-3d34961d/SKILL.md +45 -0
  1006. package/skills/skills/graph-3e18a380/SKILL.md +45 -0
  1007. package/skills/skills/graph-3f920bf3/SKILL.md +45 -0
  1008. package/skills/skills/graph-40b7bf61/SKILL.md +45 -0
  1009. package/skills/skills/graph-42187d5d/SKILL.md +45 -0
  1010. package/skills/skills/graph-4361c60e/SKILL.md +45 -0
  1011. package/skills/skills/graph-44e56113/SKILL.md +45 -0
  1012. package/skills/skills/graph-4b363727/SKILL.md +45 -0
  1013. package/skills/skills/graph-52e6e216/SKILL.md +45 -0
  1014. package/skills/skills/graph-53fbfef5/SKILL.md +45 -0
  1015. package/skills/skills/graph-54ac2988/SKILL.md +45 -0
  1016. package/skills/skills/graph-580dadcd/SKILL.md +45 -0
  1017. package/skills/skills/graph-5ca34baa/SKILL.md +45 -0
  1018. package/skills/skills/graph-5cb7fbdf/SKILL.md +45 -0
  1019. package/skills/skills/graph-5f894c05/SKILL.md +45 -0
  1020. package/skills/skills/graph-656e7bd4/SKILL.md +45 -0
  1021. package/skills/skills/graph-6dc48231/SKILL.md +45 -0
  1022. package/skills/skills/graph-7186924a/SKILL.md +45 -0
  1023. package/skills/skills/graph-72ce5342/SKILL.md +45 -0
  1024. package/skills/skills/graph-7376a24e/SKILL.md +45 -0
  1025. package/skills/skills/graph-7412a7cb/SKILL.md +45 -0
  1026. package/skills/skills/graph-7becedf0/SKILL.md +45 -0
  1027. package/skills/skills/graph-7c38fbf3/SKILL.md +45 -0
  1028. package/skills/skills/graph-7dc36de7/SKILL.md +45 -0
  1029. package/skills/skills/graph-7fe49de7/SKILL.md +45 -0
  1030. package/skills/skills/graph-80d82194/SKILL.md +45 -0
  1031. package/skills/skills/graph-85bf101e/SKILL.md +45 -0
  1032. package/skills/skills/graph-8650548b/SKILL.md +45 -0
  1033. package/skills/skills/graph-86583b09/SKILL.md +45 -0
  1034. package/skills/skills/graph-8727827c/SKILL.md +45 -0
  1035. package/skills/skills/graph-873fb505/SKILL.md +45 -0
  1036. package/skills/skills/graph-89b11de0/SKILL.md +45 -0
  1037. package/skills/skills/graph-8d7b569b/SKILL.md +45 -0
  1038. package/skills/skills/graph-8e920d5d/SKILL.md +45 -0
  1039. package/skills/skills/graph-8eb38e3d/SKILL.md +45 -0
  1040. package/skills/skills/graph-94582f69/SKILL.md +45 -0
  1041. package/skills/skills/graph-947355f7/SKILL.md +45 -0
  1042. package/skills/skills/graph-9507aff7/SKILL.md +45 -0
  1043. package/skills/skills/graph-95b86a8b/SKILL.md +45 -0
  1044. package/skills/skills/graph-96b85e1f/SKILL.md +45 -0
  1045. package/skills/skills/graph-97b22f09/SKILL.md +45 -0
  1046. package/skills/skills/graph-9833cfda/SKILL.md +45 -0
  1047. package/skills/skills/graph-9aa8a3f4/SKILL.md +45 -0
  1048. package/skills/skills/graph-9f6665c0/SKILL.md +45 -0
  1049. package/skills/skills/graph-a125d282/SKILL.md +45 -0
  1050. package/skills/skills/graph-a49ef4f0/SKILL.md +45 -0
  1051. package/skills/skills/graph-a5cd04ae/SKILL.md +45 -0
  1052. package/skills/skills/graph-add9a63b/SKILL.md +45 -0
  1053. package/skills/skills/graph-b00e3dc7/SKILL.md +45 -0
  1054. package/skills/skills/graph-b33a7662/SKILL.md +45 -0
  1055. package/skills/skills/graph-b76d15ee/SKILL.md +45 -0
  1056. package/skills/skills/graph-b77fa05a/SKILL.md +45 -0
  1057. package/skills/skills/graph-b912fc3b/SKILL.md +45 -0
  1058. package/skills/skills/graph-baf61b7c/SKILL.md +45 -0
  1059. package/skills/skills/graph-c1d5687b/SKILL.md +45 -0
  1060. package/skills/skills/graph-c407bbed/SKILL.md +45 -0
  1061. package/skills/skills/graph-c4676460/SKILL.md +45 -0
  1062. package/skills/skills/graph-c4a59d80/SKILL.md +45 -0
  1063. package/skills/skills/graph-c5815621/SKILL.md +45 -0
  1064. package/skills/skills/graph-ccad55f1/SKILL.md +45 -0
  1065. package/skills/skills/graph-d0677ce1/SKILL.md +45 -0
  1066. package/skills/skills/graph-d1289b39/SKILL.md +45 -0
  1067. package/skills/skills/graph-d15f39b1/SKILL.md +45 -0
  1068. package/skills/skills/graph-d40691ca/SKILL.md +45 -0
  1069. package/skills/skills/graph-d43b387a/SKILL.md +45 -0
  1070. package/skills/skills/graph-d4dd02f4/SKILL.md +45 -0
  1071. package/skills/skills/graph-d724ea18/SKILL.md +45 -0
  1072. package/skills/skills/graph-d74d36fd/SKILL.md +45 -0
  1073. package/skills/skills/graph-d9d3934c/SKILL.md +45 -0
  1074. package/skills/skills/graph-ddf563ff/SKILL.md +45 -0
  1075. package/skills/skills/graph-de00894f/SKILL.md +45 -0
  1076. package/skills/skills/graph-df1ebb63/SKILL.md +45 -0
  1077. package/skills/skills/graph-e2905c20/SKILL.md +45 -0
  1078. package/skills/skills/graph-e4f8cefd/SKILL.md +45 -0
  1079. package/skills/skills/graph-ea3150e7/SKILL.md +45 -0
  1080. package/skills/skills/graph-eb4ac7dd/SKILL.md +45 -0
  1081. package/skills/skills/graph-ee9f6dfa/SKILL.md +45 -0
  1082. package/skills/skills/graph-f055b2ea/SKILL.md +45 -0
  1083. package/skills/skills/graph-f1891287/SKILL.md +45 -0
  1084. package/skills/skills/graph-f1bb5aa1/SKILL.md +45 -0
  1085. package/skills/skills/graph-f56fa220/SKILL.md +45 -0
  1086. package/skills/skills/graph-f729034f/SKILL.md +45 -0
  1087. package/skills/skills/graph-f748a63f/SKILL.md +45 -0
  1088. package/skills/skills/graph-f8c4a59e/SKILL.md +45 -0
  1089. package/skills/skills/graph-fca3d129/SKILL.md +45 -0
  1090. package/skills/skills/graph-fd02d934/SKILL.md +45 -0
  1091. package/skills/skills/graph-fd51ece9/SKILL.md +45 -0
  1092. package/skills/skills/graph-fd6a81ab/SKILL.md +45 -0
  1093. package/skills/skills/lex-chinese-program/SKILL.md +45 -0
  1094. package/skills/skills/lex-dao-de-jing/SKILL.md +45 -0
  1095. package/skills/skills/lex-nine-chapters/SKILL.md +45 -0
  1096. package/skills/skills/net-02090d29/SKILL.md +45 -0
  1097. package/skills/skills/net-05937712/SKILL.md +45 -0
  1098. package/skills/skills/net-059d072f/SKILL.md +45 -0
  1099. package/skills/skills/net-080f6012/SKILL.md +45 -0
  1100. package/skills/skills/net-08a2fc88/SKILL.md +45 -0
  1101. package/skills/skills/net-0935edf1/SKILL.md +45 -0
  1102. package/skills/skills/net-0e7f91e4/SKILL.md +45 -0
  1103. package/skills/skills/net-0f2850e0/SKILL.md +45 -0
  1104. package/skills/skills/net-107ab486/SKILL.md +45 -0
  1105. package/skills/skills/net-111e79b0/SKILL.md +45 -0
  1106. package/skills/skills/net-126876c1/SKILL.md +45 -0
  1107. package/skills/skills/net-13eeb575/SKILL.md +45 -0
  1108. package/skills/skills/net-14102d54/SKILL.md +45 -0
  1109. package/skills/skills/net-14e9ad0d/SKILL.md +45 -0
  1110. package/skills/skills/net-184175d3/SKILL.md +45 -0
  1111. package/skills/skills/net-1da1c695/SKILL.md +45 -0
  1112. package/skills/skills/net-240a14ec/SKILL.md +45 -0
  1113. package/skills/skills/net-2784f98b/SKILL.md +45 -0
  1114. package/skills/skills/net-292ef917/SKILL.md +45 -0
  1115. package/skills/skills/net-3434e92f/SKILL.md +45 -0
  1116. package/skills/skills/net-35019e6b/SKILL.md +45 -0
  1117. package/skills/skills/net-3bbc6afb/SKILL.md +45 -0
  1118. package/skills/skills/net-3bdf9d9d/SKILL.md +45 -0
  1119. package/skills/skills/net-3dcb84d3/SKILL.md +45 -0
  1120. package/skills/skills/net-431cccf9/SKILL.md +45 -0
  1121. package/skills/skills/net-435a9f7f/SKILL.md +45 -0
  1122. package/skills/skills/net-4508101f/SKILL.md +45 -0
  1123. package/skills/skills/net-4585c9e7/SKILL.md +45 -0
  1124. package/skills/skills/net-479612a0/SKILL.md +45 -0
  1125. package/skills/skills/net-47a19838/SKILL.md +45 -0
  1126. package/skills/skills/net-4e36e1e3/SKILL.md +45 -0
  1127. package/skills/skills/net-509b8001/SKILL.md +45 -0
  1128. package/skills/skills/net-51930c5e/SKILL.md +45 -0
  1129. package/skills/skills/net-56dbd63f/SKILL.md +45 -0
  1130. package/skills/skills/net-57387462/SKILL.md +45 -0
  1131. package/skills/skills/net-5c115606/SKILL.md +45 -0
  1132. package/skills/skills/net-5d27f392/SKILL.md +45 -0
  1133. package/skills/skills/net-5f69c938/SKILL.md +45 -0
  1134. package/skills/skills/net-5fa6c13b/SKILL.md +45 -0
  1135. package/skills/skills/net-61580202/SKILL.md +45 -0
  1136. package/skills/skills/net-61926703/SKILL.md +45 -0
  1137. package/skills/skills/net-61f64fbc/SKILL.md +45 -0
  1138. package/skills/skills/net-6200f3b2/SKILL.md +45 -0
  1139. package/skills/skills/net-63c3eda3/SKILL.md +45 -0
  1140. package/skills/skills/net-66e6119b/SKILL.md +45 -0
  1141. package/skills/skills/net-68643014/SKILL.md +45 -0
  1142. package/skills/skills/net-686632aa/SKILL.md +45 -0
  1143. package/skills/skills/net-6967ff14/SKILL.md +45 -0
  1144. package/skills/skills/net-6996f499/SKILL.md +45 -0
  1145. package/skills/skills/net-6c3b02c2/SKILL.md +45 -0
  1146. package/skills/skills/net-6eb37f63/SKILL.md +45 -0
  1147. package/skills/skills/net-6f96c190/SKILL.md +45 -0
  1148. package/skills/skills/net-6fb27488/SKILL.md +45 -0
  1149. package/skills/skills/net-703559d0/SKILL.md +45 -0
  1150. package/skills/skills/net-706d2692/SKILL.md +45 -0
  1151. package/skills/skills/net-70a20e04/SKILL.md +45 -0
  1152. package/skills/skills/net-7376158c/SKILL.md +45 -0
  1153. package/skills/skills/net-74d647cb/SKILL.md +45 -0
  1154. package/skills/skills/net-74e8a576/SKILL.md +45 -0
  1155. package/skills/skills/net-7801c2c0/SKILL.md +45 -0
  1156. package/skills/skills/net-78cae54d/SKILL.md +45 -0
  1157. package/skills/skills/net-78ec0324/SKILL.md +45 -0
  1158. package/skills/skills/net-7998097c/SKILL.md +45 -0
  1159. package/skills/skills/net-7d81ae06/SKILL.md +45 -0
  1160. package/skills/skills/net-7eabbbc8/SKILL.md +45 -0
  1161. package/skills/skills/net-7ed4f2c5/SKILL.md +45 -0
  1162. package/skills/skills/net-80b56cd6/SKILL.md +45 -0
  1163. package/skills/skills/net-83447546/SKILL.md +45 -0
  1164. package/skills/skills/net-8361fe5b/SKILL.md +45 -0
  1165. package/skills/skills/net-85e3996c/SKILL.md +45 -0
  1166. package/skills/skills/net-8897d5cc/SKILL.md +45 -0
  1167. package/skills/skills/net-88ad93a6/SKILL.md +45 -0
  1168. package/skills/skills/net-8e6f359e/SKILL.md +45 -0
  1169. package/skills/skills/net-8edc4cdb/SKILL.md +45 -0
  1170. package/skills/skills/net-8f6169e9/SKILL.md +45 -0
  1171. package/skills/skills/net-91e00638/SKILL.md +45 -0
  1172. package/skills/skills/net-96c61a3c/SKILL.md +45 -0
  1173. package/skills/skills/net-99076a29/SKILL.md +45 -0
  1174. package/skills/skills/net-998f3641/SKILL.md +45 -0
  1175. package/skills/skills/net-a1d7228a/SKILL.md +45 -0
  1176. package/skills/skills/net-a74da501/SKILL.md +45 -0
  1177. package/skills/skills/net-ac57deb7/SKILL.md +45 -0
  1178. package/skills/skills/net-b22d2f2b/SKILL.md +45 -0
  1179. package/skills/skills/net-b2b29d8d/SKILL.md +45 -0
  1180. package/skills/skills/net-b2ddce5d/SKILL.md +45 -0
  1181. package/skills/skills/net-b4151e9a/SKILL.md +45 -0
  1182. package/skills/skills/net-b873d6f7/SKILL.md +45 -0
  1183. package/skills/skills/net-bd3d2d55/SKILL.md +45 -0
  1184. package/skills/skills/net-c2a3f019/SKILL.md +45 -0
  1185. package/skills/skills/net-c685b788/SKILL.md +45 -0
  1186. package/skills/skills/net-c6c1fd79/SKILL.md +45 -0
  1187. package/skills/skills/net-c74a1b5d/SKILL.md +45 -0
  1188. package/skills/skills/net-cdac702d/SKILL.md +45 -0
  1189. package/skills/skills/net-d12dff5c/SKILL.md +45 -0
  1190. package/skills/skills/net-d3747882/SKILL.md +45 -0
  1191. package/skills/skills/net-d5fefa59/SKILL.md +45 -0
  1192. package/skills/skills/net-d67ec725/SKILL.md +45 -0
  1193. package/skills/skills/net-d80c1c4c/SKILL.md +45 -0
  1194. package/skills/skills/net-d9cb43b0/SKILL.md +45 -0
  1195. package/skills/skills/net-da559517/SKILL.md +45 -0
  1196. package/skills/skills/net-db4f414e/SKILL.md +45 -0
  1197. package/skills/skills/net-dc09d67c/SKILL.md +45 -0
  1198. package/skills/skills/net-e2d185de/SKILL.md +45 -0
  1199. package/skills/skills/net-e2fc73f8/SKILL.md +45 -0
  1200. package/skills/skills/net-e33ef0c2/SKILL.md +45 -0
  1201. package/skills/skills/net-e346863c/SKILL.md +45 -0
  1202. package/skills/skills/net-e6b3389a/SKILL.md +45 -0
  1203. package/skills/skills/net-e9758fc0/SKILL.md +45 -0
  1204. package/skills/skills/net-e9a9747a/SKILL.md +45 -0
  1205. package/skills/skills/net-ea14aab8/SKILL.md +45 -0
  1206. package/skills/skills/net-eba92ac1/SKILL.md +45 -0
  1207. package/skills/skills/net-f29d91d2/SKILL.md +45 -0
  1208. package/skills/skills/net-f314dd0d/SKILL.md +45 -0
  1209. package/skills/skills/net-f332b629/SKILL.md +45 -0
  1210. package/skills/skills/net-f7df127c/SKILL.md +45 -0
  1211. package/skills/skills/net-fb9d8f5d/SKILL.md +45 -0
  1212. package/skills/skills/net-fdec2c86/SKILL.md +45 -0
  1213. package/skills/skills/os-0205cf9b/SKILL.md +45 -0
  1214. package/skills/skills/os-027dc9be/SKILL.md +45 -0
  1215. package/skills/skills/os-03c0d7d6/SKILL.md +45 -0
  1216. package/skills/skills/os-040b5505/SKILL.md +45 -0
  1217. package/skills/skills/os-06fa98ed/SKILL.md +45 -0
  1218. package/skills/skills/os-0854291c/SKILL.md +45 -0
  1219. package/skills/skills/os-0c7f14cb/SKILL.md +45 -0
  1220. package/skills/skills/os-0d855af2/SKILL.md +45 -0
  1221. package/skills/skills/os-0e87e997/SKILL.md +45 -0
  1222. package/skills/skills/os-0f8ed882/SKILL.md +45 -0
  1223. package/skills/skills/os-111ce1de/SKILL.md +45 -0
  1224. package/skills/skills/os-1234eb00/SKILL.md +45 -0
  1225. package/skills/skills/os-128f3820/SKILL.md +45 -0
  1226. package/skills/skills/os-15796db5/SKILL.md +45 -0
  1227. package/skills/skills/os-1898928a/SKILL.md +45 -0
  1228. package/skills/skills/os-192b8ca9/SKILL.md +45 -0
  1229. package/skills/skills/os-1d3bcf28/SKILL.md +45 -0
  1230. package/skills/skills/os-1f224514/SKILL.md +45 -0
  1231. package/skills/skills/os-26a4f86a/SKILL.md +45 -0
  1232. package/skills/skills/os-29c96147/SKILL.md +45 -0
  1233. package/skills/skills/os-2ea9a5ff/SKILL.md +45 -0
  1234. package/skills/skills/os-300ef22c/SKILL.md +45 -0
  1235. package/skills/skills/os-310dda5b/SKILL.md +45 -0
  1236. package/skills/skills/os-313ef4ed/SKILL.md +45 -0
  1237. package/skills/skills/os-329a2147/SKILL.md +45 -0
  1238. package/skills/skills/os-34ad4b62/SKILL.md +45 -0
  1239. package/skills/skills/os-350bc623/SKILL.md +45 -0
  1240. package/skills/skills/os-35ee1a30/SKILL.md +45 -0
  1241. package/skills/skills/os-3cd28220/SKILL.md +45 -0
  1242. package/skills/skills/os-3d84e0c9/SKILL.md +45 -0
  1243. package/skills/skills/os-3db42aac/SKILL.md +45 -0
  1244. package/skills/skills/os-3e0aff42/SKILL.md +45 -0
  1245. package/skills/skills/os-3e9405d2/SKILL.md +45 -0
  1246. package/skills/skills/os-41d14544/SKILL.md +45 -0
  1247. package/skills/skills/os-462f3ed4/SKILL.md +45 -0
  1248. package/skills/skills/os-485833fa/SKILL.md +45 -0
  1249. package/skills/skills/os-4a1cf781/SKILL.md +45 -0
  1250. package/skills/skills/os-4bf77933/SKILL.md +45 -0
  1251. package/skills/skills/os-4c14cec2/SKILL.md +45 -0
  1252. package/skills/skills/os-4f05d577/SKILL.md +45 -0
  1253. package/skills/skills/os-4f50ad0b/SKILL.md +45 -0
  1254. package/skills/skills/os-509a4596/SKILL.md +45 -0
  1255. package/skills/skills/os-512b1b6c/SKILL.md +45 -0
  1256. package/skills/skills/os-5192621b/SKILL.md +45 -0
  1257. package/skills/skills/os-55672763/SKILL.md +45 -0
  1258. package/skills/skills/os-5582bce6/SKILL.md +45 -0
  1259. package/skills/skills/os-5a096a1f/SKILL.md +45 -0
  1260. package/skills/skills/os-5ca15108/SKILL.md +45 -0
  1261. package/skills/skills/os-601663e1/SKILL.md +45 -0
  1262. package/skills/skills/os-607f1963/SKILL.md +45 -0
  1263. package/skills/skills/os-6158581b/SKILL.md +45 -0
  1264. package/skills/skills/os-62f9278b/SKILL.md +45 -0
  1265. package/skills/skills/os-63797b86/SKILL.md +45 -0
  1266. package/skills/skills/os-6a1fe224/SKILL.md +45 -0
  1267. package/skills/skills/os-6b0a68bf/SKILL.md +45 -0
  1268. package/skills/skills/os-6e5cee67/SKILL.md +45 -0
  1269. package/skills/skills/os-6fb1ff58/SKILL.md +45 -0
  1270. package/skills/skills/os-71389592/SKILL.md +45 -0
  1271. package/skills/skills/os-72e879a3/SKILL.md +45 -0
  1272. package/skills/skills/os-7598748a/SKILL.md +45 -0
  1273. package/skills/skills/os-80cc3283/SKILL.md +45 -0
  1274. package/skills/skills/os-819f3093/SKILL.md +45 -0
  1275. package/skills/skills/os-83670c2b/SKILL.md +45 -0
  1276. package/skills/skills/os-878c18b3/SKILL.md +45 -0
  1277. package/skills/skills/os-89ed7af1/SKILL.md +45 -0
  1278. package/skills/skills/os-8cb7279d/SKILL.md +45 -0
  1279. package/skills/skills/os-92276145/SKILL.md +45 -0
  1280. package/skills/skills/os-955c4d66/SKILL.md +45 -0
  1281. package/skills/skills/os-97aacf40/SKILL.md +45 -0
  1282. package/skills/skills/os-9b6ed02c/SKILL.md +45 -0
  1283. package/skills/skills/os-9c86a7a2/SKILL.md +45 -0
  1284. package/skills/skills/os-a13ce4aa/SKILL.md +45 -0
  1285. package/skills/skills/os-a568affe/SKILL.md +45 -0
  1286. package/skills/skills/os-abd48f17/SKILL.md +45 -0
  1287. package/skills/skills/os-b0416edc/SKILL.md +45 -0
  1288. package/skills/skills/os-b6509cac/SKILL.md +45 -0
  1289. package/skills/skills/os-b718657b/SKILL.md +45 -0
  1290. package/skills/skills/os-b776ade1/SKILL.md +45 -0
  1291. package/skills/skills/os-ba24fa08/SKILL.md +45 -0
  1292. package/skills/skills/os-bd1fc177/SKILL.md +45 -0
  1293. package/skills/skills/os-bda92711/SKILL.md +45 -0
  1294. package/skills/skills/os-c0fa71bd/SKILL.md +45 -0
  1295. package/skills/skills/os-c3d5cd44/SKILL.md +45 -0
  1296. package/skills/skills/os-c6b6a763/SKILL.md +45 -0
  1297. package/skills/skills/os-c7661eb1/SKILL.md +45 -0
  1298. package/skills/skills/os-c76b5a43/SKILL.md +45 -0
  1299. package/skills/skills/os-c7d35a30/SKILL.md +45 -0
  1300. package/skills/skills/os-c980a25d/SKILL.md +45 -0
  1301. package/skills/skills/os-c9f8df6e/SKILL.md +45 -0
  1302. package/skills/skills/os-cc49ef2f/SKILL.md +45 -0
  1303. package/skills/skills/os-cd9e686a/SKILL.md +45 -0
  1304. package/skills/skills/os-cfa66a1b/SKILL.md +45 -0
  1305. package/skills/skills/os-d237e500/SKILL.md +45 -0
  1306. package/skills/skills/os-d39ef086/SKILL.md +45 -0
  1307. package/skills/skills/os-d4f9e813/SKILL.md +45 -0
  1308. package/skills/skills/os-d97915c0/SKILL.md +45 -0
  1309. package/skills/skills/os-da0aadde/SKILL.md +45 -0
  1310. package/skills/skills/os-da482caf/SKILL.md +45 -0
  1311. package/skills/skills/os-dd4ff45e/SKILL.md +45 -0
  1312. package/skills/skills/os-de0556c5/SKILL.md +45 -0
  1313. package/skills/skills/os-e0ad3364/SKILL.md +45 -0
  1314. package/skills/skills/os-e7612c68/SKILL.md +45 -0
  1315. package/skills/skills/os-ea444e45/SKILL.md +45 -0
  1316. package/skills/skills/os-ea6e7e0b/SKILL.md +45 -0
  1317. package/skills/skills/os-ebc34d83/SKILL.md +45 -0
  1318. package/skills/skills/os-ecbebbe3/SKILL.md +45 -0
  1319. package/skills/skills/os-ecfceae7/SKILL.md +45 -0
  1320. package/skills/skills/os-ed8de3a3/SKILL.md +45 -0
  1321. package/skills/skills/os-f69c0b08/SKILL.md +45 -0
  1322. package/skills/skills/os-f6ae6205/SKILL.md +45 -0
  1323. package/skills/skills/os-f9bf8dd4/SKILL.md +45 -0
  1324. package/skills/skills/os-fcdd828d/SKILL.md +45 -0
  1325. package/skills/skills/pylang-01b23f80/SKILL.md +45 -0
  1326. package/skills/skills/pylang-074fd698/SKILL.md +45 -0
  1327. package/skills/skills/pylang-0b490bb2/SKILL.md +45 -0
  1328. package/skills/skills/pylang-0ca7f08b/SKILL.md +45 -0
  1329. package/skills/skills/pylang-10ce3e91/SKILL.md +45 -0
  1330. package/skills/skills/pylang-15f76c64/SKILL.md +45 -0
  1331. package/skills/skills/pylang-1703046f/SKILL.md +45 -0
  1332. package/skills/skills/pylang-1aa3e939/SKILL.md +45 -0
  1333. package/skills/skills/pylang-1bed54cf/SKILL.md +45 -0
  1334. package/skills/skills/pylang-1dd35612/SKILL.md +45 -0
  1335. package/skills/skills/pylang-24273d7b/SKILL.md +45 -0
  1336. package/skills/skills/pylang-2853f59f/SKILL.md +45 -0
  1337. package/skills/skills/pylang-2a6bc16e/SKILL.md +45 -0
  1338. package/skills/skills/pylang-2ae78997/SKILL.md +45 -0
  1339. package/skills/skills/pylang-2bc88f4c/SKILL.md +45 -0
  1340. package/skills/skills/pylang-31f5b8db/SKILL.md +45 -0
  1341. package/skills/skills/pylang-36d178bc/SKILL.md +45 -0
  1342. package/skills/skills/pylang-38600583/SKILL.md +45 -0
  1343. package/skills/skills/pylang-38e8f9ff/SKILL.md +45 -0
  1344. package/skills/skills/pylang-395085ca/SKILL.md +45 -0
  1345. package/skills/skills/pylang-399b317e/SKILL.md +45 -0
  1346. package/skills/skills/pylang-39c72c78/SKILL.md +45 -0
  1347. package/skills/skills/pylang-3a659480/SKILL.md +45 -0
  1348. package/skills/skills/pylang-482be62b/SKILL.md +45 -0
  1349. package/skills/skills/pylang-486a1e94/SKILL.md +45 -0
  1350. package/skills/skills/pylang-49026041/SKILL.md +45 -0
  1351. package/skills/skills/pylang-4963b28a/SKILL.md +45 -0
  1352. package/skills/skills/pylang-4af9140e/SKILL.md +45 -0
  1353. package/skills/skills/pylang-4ca283f2/SKILL.md +45 -0
  1354. package/skills/skills/pylang-4ddf31f3/SKILL.md +45 -0
  1355. package/skills/skills/pylang-50614726/SKILL.md +45 -0
  1356. package/skills/skills/pylang-5102c069/SKILL.md +45 -0
  1357. package/skills/skills/pylang-521b1bf8/SKILL.md +45 -0
  1358. package/skills/skills/pylang-5880b7a1/SKILL.md +45 -0
  1359. package/skills/skills/pylang-61a9102d/SKILL.md +45 -0
  1360. package/skills/skills/pylang-621123dd/SKILL.md +45 -0
  1361. package/skills/skills/pylang-642cd625/SKILL.md +45 -0
  1362. package/skills/skills/pylang-65ca79b7/SKILL.md +45 -0
  1363. package/skills/skills/pylang-672df225/SKILL.md +45 -0
  1364. package/skills/skills/pylang-67d3368e/SKILL.md +45 -0
  1365. package/skills/skills/pylang-6be54340/SKILL.md +45 -0
  1366. package/skills/skills/pylang-70b2006f/SKILL.md +45 -0
  1367. package/skills/skills/pylang-70b215f1/SKILL.md +45 -0
  1368. package/skills/skills/pylang-730c3fe4/SKILL.md +45 -0
  1369. package/skills/skills/pylang-733c1286/SKILL.md +45 -0
  1370. package/skills/skills/pylang-79845f4d/SKILL.md +45 -0
  1371. package/skills/skills/pylang-7c4cc6f8/SKILL.md +45 -0
  1372. package/skills/skills/pylang-7c7193ad/SKILL.md +45 -0
  1373. package/skills/skills/pylang-7d86ab5d/SKILL.md +45 -0
  1374. package/skills/skills/pylang-7df8ca78/SKILL.md +45 -0
  1375. package/skills/skills/pylang-8182681d/SKILL.md +45 -0
  1376. package/skills/skills/pylang-81ad40ee/SKILL.md +45 -0
  1377. package/skills/skills/pylang-8283d7c0/SKILL.md +45 -0
  1378. package/skills/skills/pylang-82b73f3d/SKILL.md +45 -0
  1379. package/skills/skills/pylang-8404bbde/SKILL.md +45 -0
  1380. package/skills/skills/pylang-8584040d/SKILL.md +45 -0
  1381. package/skills/skills/pylang-85d8617b/SKILL.md +45 -0
  1382. package/skills/skills/pylang-886935a3/SKILL.md +45 -0
  1383. package/skills/skills/pylang-88ab2f96/SKILL.md +45 -0
  1384. package/skills/skills/pylang-8b6f071e/SKILL.md +45 -0
  1385. package/skills/skills/pylang-8d6ec58a/SKILL.md +45 -0
  1386. package/skills/skills/pylang-8fe98252/SKILL.md +45 -0
  1387. package/skills/skills/pylang-9018c39a/SKILL.md +45 -0
  1388. package/skills/skills/pylang-91277748/SKILL.md +45 -0
  1389. package/skills/skills/pylang-943b9dcb/SKILL.md +45 -0
  1390. package/skills/skills/pylang-961e9e43/SKILL.md +45 -0
  1391. package/skills/skills/pylang-962954d9/SKILL.md +45 -0
  1392. package/skills/skills/pylang-9dbd8e2b/SKILL.md +45 -0
  1393. package/skills/skills/pylang-a02eac31/SKILL.md +45 -0
  1394. package/skills/skills/pylang-a4d3d7b1/SKILL.md +45 -0
  1395. package/skills/skills/pylang-a7c3d0e2/SKILL.md +45 -0
  1396. package/skills/skills/pylang-a88db70d/SKILL.md +45 -0
  1397. package/skills/skills/pylang-ab7dddc2/SKILL.md +45 -0
  1398. package/skills/skills/pylang-ac2a4b38/SKILL.md +45 -0
  1399. package/skills/skills/pylang-afaf67c0/SKILL.md +45 -0
  1400. package/skills/skills/pylang-b00660e6/SKILL.md +45 -0
  1401. package/skills/skills/pylang-b4d7616d/SKILL.md +45 -0
  1402. package/skills/skills/pylang-b67b1878/SKILL.md +45 -0
  1403. package/skills/skills/pylang-b8040e1c/SKILL.md +45 -0
  1404. package/skills/skills/pylang-b880c6c6/SKILL.md +45 -0
  1405. package/skills/skills/pylang-b8d45f76/SKILL.md +45 -0
  1406. package/skills/skills/pylang-ba956e52/SKILL.md +45 -0
  1407. package/skills/skills/pylang-bb18b1f9/SKILL.md +45 -0
  1408. package/skills/skills/pylang-bb46f3f2/SKILL.md +45 -0
  1409. package/skills/skills/pylang-be55a094/SKILL.md +45 -0
  1410. package/skills/skills/pylang-beb47b63/SKILL.md +45 -0
  1411. package/skills/skills/pylang-c017681a/SKILL.md +45 -0
  1412. package/skills/skills/pylang-c1317cd9/SKILL.md +45 -0
  1413. package/skills/skills/pylang-c36fabf7/SKILL.md +45 -0
  1414. package/skills/skills/pylang-c42465ec/SKILL.md +45 -0
  1415. package/skills/skills/pylang-c5c76a12/SKILL.md +45 -0
  1416. package/skills/skills/pylang-c910ad31/SKILL.md +45 -0
  1417. package/skills/skills/pylang-ca9332cf/SKILL.md +45 -0
  1418. package/skills/skills/pylang-cce90fa0/SKILL.md +45 -0
  1419. package/skills/skills/pylang-cd4234a5/SKILL.md +45 -0
  1420. package/skills/skills/pylang-cf0fca1c/SKILL.md +45 -0
  1421. package/skills/skills/pylang-d2001e1f/SKILL.md +45 -0
  1422. package/skills/skills/pylang-d616eb28/SKILL.md +45 -0
  1423. package/skills/skills/pylang-d8962e66/SKILL.md +45 -0
  1424. package/skills/skills/pylang-db6214cd/SKILL.md +45 -0
  1425. package/skills/skills/pylang-dcde3040/SKILL.md +45 -0
  1426. package/skills/skills/pylang-dfad3dba/SKILL.md +45 -0
  1427. package/skills/skills/pylang-dfd5aac2/SKILL.md +45 -0
  1428. package/skills/skills/pylang-e1aa3818/SKILL.md +45 -0
  1429. package/skills/skills/pylang-e476915b/SKILL.md +45 -0
  1430. package/skills/skills/pylang-e88e31fd/SKILL.md +45 -0
  1431. package/skills/skills/pylang-ecd569d2/SKILL.md +45 -0
  1432. package/skills/skills/pylang-ecf27e0c/SKILL.md +45 -0
  1433. package/skills/skills/pylang-f124f0e6/SKILL.md +45 -0
  1434. package/skills/skills/pylang-f127a8d1/SKILL.md +45 -0
  1435. package/skills/skills/pylang-f2d6ec27/SKILL.md +45 -0
  1436. package/skills/skills/pylang-f2f40090/SKILL.md +45 -0
  1437. package/skills/skills/pylang-f4aa9e65/SKILL.md +45 -0
  1438. package/skills/skills/pylang-f4f820d4/SKILL.md +45 -0
  1439. package/skills/skills/pylang-f5b34833/SKILL.md +45 -0
  1440. package/skills/skills/pylang-f6ebb66e/SKILL.md +45 -0
  1441. package/skills/skills/pylang-f78bdcd7/SKILL.md +45 -0
  1442. package/skills/skills/pylang-f92bc49b/SKILL.md +45 -0
  1443. package/skills/skills/pylang-fd7595f0/SKILL.md +45 -0
  1444. package/skills/skills/pylang-fda87aa1/SKILL.md +45 -0
  1445. package/skills/skills/vm-arithmetic/SKILL.md +45 -0
  1446. package/skills/skills/vm-array-ops/SKILL.md +45 -0
  1447. package/skills/skills/vm-closure-call/SKILL.md +45 -0
  1448. package/skills/skills/vm-closure-create/SKILL.md +45 -0
  1449. package/skills/skills/vm-compare/SKILL.md +45 -0
  1450. package/skills/skills/vm-cond-jump/SKILL.md +45 -0
  1451. package/skills/skills/vm-cond-space/SKILL.md +45 -0
  1452. package/skills/skills/vm-exception/SKILL.md +45 -0
  1453. package/skills/skills/vm-func-call/SKILL.md +45 -0
  1454. package/skills/skills/vm-loop-run/SKILL.md +45 -0
  1455. package/skills/skills/vm-profiling/SKILL.md +45 -0
  1456. package/skills/skills/vm-refcount/SKILL.md +45 -0
  1457. package/skills/skills/vm-run-loop/SKILL.md +45 -0
  1458. package/skills/skills/vm-short-circuit/SKILL.md +45 -0
  1459. package/skills/skills/vm-stack-guard/SKILL.md +45 -0
  1460. package/skills/skills/vm-stack-ops/SKILL.md +45 -0
  1461. package/skills/skills/vm-trust-accum/SKILL.md +45 -0
  1462. package/src/bridge.ts +7 -7
  1463. package/src/hooks.ts +78 -27
  1464. package/src/index.ts +246 -66
  1465. package/src/lib/datapath.ts +112 -0
  1466. package/src/lib/mdcg_client.ts +329 -0
  1467. package/src/lib/roleplay_web.ts +932 -0
  1468. package/src/{llm_adapter.ts → lib/whitebox_llm.ts} +13 -7
  1469. package/src/tools.ts +41 -55
  1470. /package/src/{mutual.ts → lib/mutual.ts} +0 -0
@@ -0,0 +1,2735 @@
1
+ # -*- coding: utf-8 -*-
2
+ """os_units.py · 迷你 Linux 白箱单元库(第六阶段·目标4 初级复现)
3
+ 用户设想:终极目标「中文操作系统」← 初级复现「Linux 操作系统」。
4
+ 内核核心抽象:进程调度/内存管理/文件系统/IPC——白箱自举(外部只校准)。
5
+ 单元:{任务 → 代码模式模板 + 验证样例 + 校准基准}。
6
+ """
7
+ import sys
8
+ sys.stdout.reconfigure(encoding='utf-8')
9
+
10
+ OS_UNITS = {
11
+ "进程-调度": {
12
+ "task": "进程调度",
13
+ "pattern": (
14
+ "def fcfs_schedule(processes):\n"
15
+ " # 生效条件:参数 processes 合法\n"
16
+ " # 子功能:① 调用 max\n"
17
+ " # 执行:循环迭代;顺序调用\n"
18
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
19
+ " # FCFS 进程调度:[(到达时间, 运行时长)] → 完成时间列表\n"
20
+ " time, done = 0, []\n"
21
+ " for at, dur in processes:\n"
22
+ " time = max(time, at) + dur\n"
23
+ " done.append(time)\n"
24
+ " return done\n"),
25
+ "cases": [(([(0, 3), (2, 2)],), [3, 5]),
26
+ (([(0, 3)],), [3]),
27
+ (([],), [])],
28
+ "params": [],
29
+ "calibration": "对照:OS 进程调度 FCFS——先到先服务,完成时间=前序完成+运行时长",
30
+ },
31
+ "进程-时间片轮转": {
32
+ "task": "轮转调度",
33
+ "pattern": (
34
+ "def round_robin(processes, quantum=2):\n"
35
+ " # 生效条件:参数 processes/quantum 合法\n"
36
+ " # 子功能:① 调用 list;② 调用 any;③ 调用 min\n"
37
+ " # 执行:循环迭代;顺序调用\n"
38
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
39
+ " # RR 时间片轮转:[(运行时长)] → 调度序列(进程索引)\n"
40
+ " remain = list(processes)\n"
41
+ " order, i = [], 0\n"
42
+ " while any(r > 0 for r in remain):\n"
43
+ " if remain[i] > 0:\n"
44
+ " run = min(quantum, remain[i])\n"
45
+ " remain[i] -= run\n"
46
+ " order.append(i)\n"
47
+ " i = (i + 1) % len(remain)\n"
48
+ " return order\n"),
49
+ "cases": [(([4, 2, 3], 2), [0, 1, 2, 0, 2]),
50
+ (([1, 1], 2), [0, 1]),
51
+ (([5], 2), [0, 0, 0])],
52
+ "params": [],
53
+ "calibration": "对照:OS 时间片轮转——每进程最多运行 quantum,循环调度",
54
+ },
55
+ "内存-分页分配": {
56
+ "task": "内存分配",
57
+ "pattern": (
58
+ "def page_alloc(pages_free, requests):\n"
59
+ " # 生效条件:参数 pages_free/requests 合法\n"
60
+ " # 子功能:① 条件判定 ② 结果处理\n"
61
+ " # 执行:循环迭代\n"
62
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
63
+ " # 分页内存分配:请求页数 → 分配成功/拒绝(可用内存耗尽拒绝)\n"
64
+ " free = pages_free\n"
65
+ " results = []\n"
66
+ " for req in requests:\n"
67
+ " if req <= free:\n"
68
+ " free -= req\n"
69
+ " results.append(True)\n"
70
+ " else:\n"
71
+ " results.append(False)\n"
72
+ " return results\n"),
73
+ "cases": [((10, [3, 5, 4]), [True, True, False]),
74
+ ((5, [6]), [False]),
75
+ ((0, []), [])],
76
+ "params": [],
77
+ "calibration": "对照:OS 内存管理——分页分配,内存不足拒绝请求",
78
+ },
79
+ "文件-路径解析": {
80
+ "task": "文件路径",
81
+ "pattern": (
82
+ "def resolve_path(path, cwd):\n"
83
+ " # 路径解析(文件系统路径解析):绝对/相对/.. /./ → 规范路径\n"
84
+ " # 生效条件:path 为路径字符串;cwd 为当前工作目录\n"
85
+ " # 子功能:① 绝对/相对判定 ② 分量规整 ③ .. 上溯\n"
86
+ " # 执行:split 分量 + 栈式规整\n"
87
+ " # 不适用条件:p 非 {..} 时\n"
88
+ " if path.startswith('/'):\n"
89
+ " parts = path.split('/')[1:]\n"
90
+ " else:\n"
91
+ " parts = cwd.split('/')[1:] + path.split('/')\n"
92
+ " stack = []\n"
93
+ " for p in parts:\n"
94
+ " if p == '..':\n"
95
+ " if stack:\n"
96
+ " stack.pop()\n"
97
+ " elif p and p != '.':\n"
98
+ " stack.append(p)\n"
99
+ " return '/' + '/'.join(stack) if stack else '/'\n"),
100
+ "cases": [(("/a/b", "/c"), "/a/b"),
101
+ (("..", "/a/b"), "/a"),
102
+ (("./x", "/a"), "/a/x"),
103
+ (("/", "/a"), "/")],
104
+ "params": [],
105
+ "calibration": "对照:OS 文件系统——路径规范化(绝对/相对/.. 解析)",
106
+ },
107
+ "IPC-管道": {
108
+ "task": "进程通信",
109
+ "pattern": (
110
+ "def pipe_transfer(sender_data, reader):\n"
111
+ " # 生效条件:参数 sender_data/reader 合法\n"
112
+ " # 子功能:① 调用 list;② 调用 range\n"
113
+ " # 执行:循环迭代;顺序调用\n"
114
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
115
+ " # 管道 IPC:写端数据 → FIFO 缓冲 → 读端取前 reader 项\n"
116
+ " buf = list(sender_data)\n"
117
+ " out = []\n"
118
+ " for _ in range(reader):\n"
119
+ " if buf:\n"
120
+ " out.append(buf.pop(0))\n"
121
+ " return out\n"),
122
+ "cases": [(([1, 2, 3], 2), [1, 2]),
123
+ (([7], 3), [7]),
124
+ (([], 2), [])],
125
+ "params": [],
126
+ "calibration": "对照:OS IPC 管道——FIFO 缓冲,读端消费数据",
127
+ },
128
+ "内存-页置换": {
129
+ "task": "页置换",
130
+ "pattern": (
131
+ "def lru_replace(page_seq, capacity):\n"
132
+ " # LRU 页置换(最近最久未使用淘汰):页序列 + 容量 → 缺页次数\n"
133
+ " # 生效条件:page_seq 为页访问序列;capacity 为物理帧容量\n"
134
+ " # 子功能:① 命中页前移 ② 未命中缺页计数 ③ 满时淘汰最久未用\n"
135
+ " # 执行:frames 列表维护 LRU 序(remove+append 前移)\n"
136
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
137
+ " frames, faults = [], 0\n"
138
+ " for p in page_seq:\n"
139
+ " if p in frames:\n"
140
+ " frames.remove(p)\n"
141
+ " frames.append(p)\n"
142
+ " else:\n"
143
+ " if len(frames) >= capacity:\n"
144
+ " frames.pop(0)\n"
145
+ " frames.append(p)\n"
146
+ " faults += 1\n"
147
+ " return faults\n"),
148
+ "cases": [(([1, 2, 3, 2, 1, 4, 2, 3], 3), 5),
149
+ (([1, 1, 1], 2), 1),
150
+ (([], 2), 0)],
151
+ "params": [],
152
+ "calibration": "对照:OS 虚拟内存——LRU 页置换(容量 3 时 8 页访问 5 次缺页)",
153
+ },
154
+ "文件-inode": {
155
+ "task": "inode查询",
156
+ "pattern": (
157
+ "def inode_lookup(files, name):\n"
158
+ " # 生效条件:参数 files/name 合法\n"
159
+ " # 子功能:① 条件判定 ② 结果处理\n"
160
+ " # 执行:循环迭代\n"
161
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
162
+ " # inode 表查询:文件名 → (大小, 权限) 或 None\n"
163
+ " for f in files:\n"
164
+ " if f['name'] == name:\n"
165
+ " return (f['size'], f['perm'])\n"
166
+ " return None\n"),
167
+ "cases": [(([{'name': 'a.txt', 'size': 100, 'perm': 644},
168
+ {'name': 'b', 'size': 50, 'perm': 600}], 'a.txt'), (100, 644)),
169
+ (([{'name': 'a.txt', 'size': 100, 'perm': 644}], 'c.txt'), None)],
170
+ "params": [],
171
+ "calibration": "对照:OS 文件系统 inode——文件名→元数据(大小/权限)查询",
172
+ },
173
+ "进程-状态机": {
174
+ "task": "进程状态",
175
+ "pattern": (
176
+ "def process_state(transitions):\n"
177
+ " # 进程状态机:事件序列 → 最终状态(就绪→运行→阻塞→就绪→终止)\n"
178
+ " # 生效条件:transitions 为事件序列(按状态转移表合法)\n"
179
+ " # 子功能:① 初始就绪 ② 逐事件迁移 ③ 返回终态\n"
180
+ " # 执行:状态转移表逐事件推进\n"
181
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
182
+ " state = '就绪'\n"
183
+ " for ev in transitions:\n"
184
+ " if state == '就绪' and ev == '调度':\n"
185
+ " state = '运行'\n"
186
+ " elif state == '运行' and ev == 'IO等待':\n"
187
+ " state = '阻塞'\n"
188
+ " elif state == '阻塞' and ev == 'IO完成':\n"
189
+ " state = '就绪'\n"
190
+ " elif state == '运行' and ev == '完成':\n"
191
+ " state = '终止'\n"
192
+ " return state\n"),
193
+ "cases": [((['调度', 'IO等待', 'IO完成', '调度', '完成'],), '终止'),
194
+ ((['IO完成'],), '就绪'),
195
+ ((['调度', 'IO等待'],), '阻塞')],
196
+ "params": [],
197
+ "calibration": "对照:OS 进程状态机——就绪/运行/阻塞/终止 事件驱动转换",
198
+ },
199
+ "调度-SJF": {
200
+ "task": "最短作业",
201
+ "pattern": (
202
+ "def sjf_schedule(processes):\n"
203
+ " # 生效条件:ready.sort 可用\n"
204
+ " # 子功能:① 调用 sorted\n"
205
+ " # 执行:循环迭代;顺序调用\n"
206
+ " # 不适用条件:ready 为空/非法时\n"
207
+ " # SJF 最短作业优先(非抢占):[(到达, 时长)] → 完成时间列表\n"
208
+ " time, done, ready = 0, [], []\n"
209
+ " remaining = sorted(processes)\n"
210
+ " while remaining or ready:\n"
211
+ " ready += [p for p in remaining if p[0] <= time]\n"
212
+ " remaining = [p for p in remaining if p[0] > time]\n"
213
+ " if not ready:\n"
214
+ " time = remaining[0][0]\n"
215
+ " ready.append(remaining.pop(0))\n"
216
+ " continue\n"
217
+ " ready.sort(key=lambda p: p[1])\n"
218
+ " at, dur = ready.pop(0)\n"
219
+ " time += dur\n"
220
+ " done.append(time)\n"
221
+ " return done\n"),
222
+ "cases": [(([(0, 3), (1, 2), (2, 5)],), [3, 5, 10]),
223
+ (([(0, 2)],), [2]),
224
+ (([],), [])],
225
+ "params": [],
226
+ "calibration": "对照:OS 调度 SJF——最短作业优先(平均等待最小化)",
227
+ },
228
+ "文件-块管理": {
229
+ "task": "块管理",
230
+ "pattern": (
231
+ "def block_alloc(bitmap, size):\n"
232
+ " # 生效条件:参数 bitmap/size 合法\n"
233
+ " # 子功能:① 调用 len;② 调用 range;③ 调用 all\n"
234
+ " # 执行:循环迭代;顺序调用\n"
235
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
236
+ " # 块位图分配:连续 size 块 → 起始块(首次适配)或 -1\n"
237
+ " n = len(bitmap)\n"
238
+ " for start in range(n - size + 1):\n"
239
+ " if all(b == 0 for b in bitmap[start:start + size]):\n"
240
+ " for i in range(start, start + size):\n"
241
+ " bitmap[i] = 1\n"
242
+ " return start\n"
243
+ " return -1\n"),
244
+ "cases": [(([0, 0, 1, 0, 0], 2), 0),
245
+ (([1, 1, 1], 1), -1),
246
+ (([0, 1, 0], 2), -1)],
247
+ "params": [],
248
+ "calibration": "对照:OS 文件系统——块位图分配(连续块首次适配)",
249
+ },
250
+ "调度-优先级": {
251
+ "task": "优先级调度",
252
+ "pattern": (
253
+ "def priority_schedule(processes):\n"
254
+ " # 生效条件:参数 processes 合法\n"
255
+ " # 子功能:① 调用 sorted\n"
256
+ " # 执行:循环迭代;顺序调用\n"
257
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
258
+ " # 优先级调度(非抢占):[(时长, 优先级)] → 完成时间(高优先先跑)\n"
259
+ " procs = sorted(processes, key=lambda p: p[1], reverse=True)\n"
260
+ " time, done = 0, []\n"
261
+ " for dur, pri in procs:\n"
262
+ " time += dur\n"
263
+ " done.append(time)\n"
264
+ " return done\n"),
265
+ "cases": [(([(2, 1), (3, 3)],), [3, 5]),
266
+ (([(1, 5), (2, 1)],), [1, 3]),
267
+ (( [],), [])],
268
+ "params": [],
269
+ "calibration": "对照:OS 调度——优先级调度(高优先级先执行)",
270
+ },
271
+ "进程-互斥锁": {
272
+ "task": "互斥锁",
273
+ "pattern": (
274
+ "def mutex_op(state, op, owner=None):\n"
275
+ " # 生效条件:op ∈ {lock, unlock};state ∈ {free}\n"
276
+ " # 子功能:① op 分支处理;2 state 分支处理\n"
277
+ " # 执行:按 op 分派\n"
278
+ " # 不适用条件:op 非 {lock, unlock} 时;state 非 {free} 时\n"
279
+ " # 互斥锁操作:lock/unlock(忙等语义:占用时 lock 失败)\n"
280
+ " if op == 'lock':\n"
281
+ " if state == 'free':\n"
282
+ " return 'locked', True\n"
283
+ " return 'locked', False\n"
284
+ " if op == 'unlock':\n"
285
+ " return 'free', True\n"
286
+ " return state, False\n"),
287
+ "cases": [(('free', 'lock'), ('locked', True)),
288
+ (('locked', 'lock'), ('locked', False)),
289
+ (('locked', 'unlock'), ('free', True))],
290
+ "params": [],
291
+ "calibration": "对照:OS 并发——互斥锁(占用时加锁失败,释放后可用)",
292
+ },
293
+ "内存-首次适配": {
294
+ "task": "首次适配",
295
+ "pattern": (
296
+ "def first_fit(blocks, size):\n"
297
+ " # 生效条件:参数 blocks/size 合法\n"
298
+ " # 子功能:① 调用 enumerate\n"
299
+ " # 执行:循环迭代;顺序调用\n"
300
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
301
+ " # 内存首次适配:空闲块大小列表 → 分配的块索引(首个足够大)\n"
302
+ " for i, b in enumerate(blocks):\n"
303
+ " if b >= size:\n"
304
+ " return i\n"
305
+ " return -1\n"),
306
+ "cases": [(([5, 2, 8], 6), 2),
307
+ (([5, 2], 6), -1),
308
+ (([10], 3), 0)],
309
+ "params": [],
310
+ "calibration": "对照:OS 内存分配——首次适配(首个足够大的空闲块)",
311
+ },
312
+ "内存-页表映射": {
313
+ "task": "页表映射",
314
+ "pattern": (
315
+ "def page_table_lookup(page_table, vpn):\n"
316
+ " # 页表映射(虚拟内存页表):虚拟页号 → 物理帧号(present=1 已映射,0 缺页)\n"
317
+ " # 生效条件:page_table 为 VPN→页表项 映射;vpn 为虚拟页号\n"
318
+ " # 子功能:① 查页表项 ② present 位判定 ③ 缺页/命中返回\n"
319
+ " # 执行:无条目或 present≠1 → None(缺页);否则返 frame\n"
320
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
321
+ " entry = page_table.get(vpn)\n"
322
+ " if entry is None or entry.get('present') != 1:\n"
323
+ " return None # 缺页:页不在物理内存\n"
324
+ " return entry['frame']\n"),
325
+ "cases": [(({1: {'present': 1, 'frame': 7}}, 1), 7),
326
+ (({1: {'present': 0, 'frame': None}}, 1), None),
327
+ (({}, 2), None)],
328
+ "params": [],
329
+ "calibration": "对照:OS 虚拟内存——页表映射(VPN→物理帧;present=0 或缺项=缺页)",
330
+ },
331
+ "内存-缺页处理": {
332
+ "task": "缺页处理",
333
+ "pattern": (
334
+ "def page_fault_handler(page_table, vpn, free_frames, load):\n"
335
+ " # 生效条件:参数 page_table/vpn/free_frames/load 合法\n"
336
+ " # 子功能:① 调用 load\n"
337
+ " # 执行:顺序调用\n"
338
+ " # 不适用条件:free_frames 为空/非法时\n"
339
+ " # 缺页处理:present=0 → 分配空闲帧加载;无空闲帧 → 拒绝(置换由上层调度)\n"
340
+ " if vpn in page_table and page_table[vpn].get('present') == 1:\n"
341
+ " return 'hit', page_table[vpn]['frame']\n"
342
+ " if not free_frames:\n"
343
+ " return 'page_fault_no_frame', None\n"
344
+ " frame = free_frames.pop(0)\n"
345
+ " page_table[vpn] = {'present': 1, 'frame': frame}\n"
346
+ " load(vpn, frame)\n"
347
+ " return 'page_fault_loaded', frame\n"),
348
+ "cases": [(({1: {'present': 1, 'frame': 3}}, 1, [], lambda v, f: None),
349
+ ('hit', 3)),
350
+ (({}, 2, [8], lambda v, f: None), ('page_fault_loaded', 8)),
351
+ (({}, 3, [], lambda v, f: None), ('page_fault_no_frame', None))],
352
+ "params": [],
353
+ "calibration": "对照:OS 虚拟内存——缺页处理(命中/加载/无空闲帧拒绝;置换交由页置换策略)",
354
+ },
355
+ "内存-页面错误": {
356
+ "task": "页面错误分类",
357
+ "pattern": (
358
+ "def classify_page_fault(vpn, page_table, access):\n"
359
+ " # 生效条件:参数 vpn/page_table/access 合法\n"
360
+ " # 子功能:① 条件判定 ② 结果处理\n"
361
+ " # 执行:顺序执行\n"
362
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
363
+ " # 页面错误分类:未映射/未驻留/写保护 → 错误类型(MMU 语义)\n"
364
+ " entry = page_table.get(vpn)\n"
365
+ " if entry is None:\n"
366
+ " return 'segment_fault' # 非法地址(未映射)\n"
367
+ " if entry.get('present') != 1:\n"
368
+ " return 'minor_fault' # 缺页(软缺页:磁盘→内存)\n"
369
+ " if access == 'write' and not entry.get('writable'):\n"
370
+ " return 'protection_fault' # 写保护违例\n"
371
+ " return 'ok'\n"),
372
+ "cases": [((5, {}, 'read'), 'segment_fault'),
373
+ ((1, {1: {'present': 0}}, 'read'), 'minor_fault'),
374
+ ((1, {1: {'present': 1, 'writable': False}}, 'write'),
375
+ 'protection_fault'),
376
+ ((1, {1: {'present': 1, 'writable': True}}, 'write'), 'ok')],
377
+ "params": [],
378
+ "calibration": "对照:OS 虚拟内存——页面错误分类(MMU:未映射段错误/软缺页/写保护违例)",
379
+ },
380
+ "文件-目录树": {
381
+ "task": "目录树",
382
+ "pattern": (
383
+ "def dir_ls(root, name, children=None, prefix='/'):\n"
384
+ " # 生效条件:prefix.rstrip 可用\n"
385
+ " # 子功能:① 调用 sorted\n"
386
+ " # 执行:循环迭代;顺序调用\n"
387
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
388
+ " # 目录树 + 列目录:根/子目录/文件 → 路径列表(mkdir/ls 语义)\n"
389
+ " out = [prefix.rstrip('/') + '/' + root]\n"
390
+ " if name is None:\n"
391
+ " return out\n"
392
+ " base = prefix.rstrip('/') + '/' + root + '/' + name\n"
393
+ " out.append(base)\n"
394
+ " for c in (children or []):\n"
395
+ " out.append(base + '/' + c)\n"
396
+ " return sorted(out)\n"),
397
+ "cases": [(('home', 'user', ['a.txt']),
398
+ ['/home', '/home/user', '/home/user/a.txt']),
399
+ (('etc', None, None), ['/etc'])],
400
+ "params": [],
401
+ "calibration": "对照:OS 文件系统——目录树(mkdir 层级 + ls 路径展开)",
402
+ },
403
+ "文件-文件描述符": {
404
+ "task": "文件描述符",
405
+ "pattern": (
406
+ "def fd_alloc(table, path):\n"
407
+ " # 生效条件:参数 table/path 合法\n"
408
+ " # 子功能:① 主体逻辑执行\n"
409
+ " # 执行:循环迭代\n"
410
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
411
+ " # 打开文件表:分配最小可用 fd(0/1/2 留给标准流,从 3 起)\n"
412
+ " fd = 3\n"
413
+ " while fd in table:\n"
414
+ " fd += 1\n"
415
+ " table[fd] = path\n"
416
+ " return fd\n"
417
+ "def fd_close(table, fd):\n"
418
+ " # 关闭:释放 fd(返回被关闭的路径)\n"
419
+ " return table.pop(fd, None)\n"),
420
+ "cases": [(({}, '/etc/passwd'), 3),
421
+ (({3: '/a', 4: '/b'}, '/c'), 5),
422
+ (({3: '/a'}, '/b'), 4)],
423
+ "params": [],
424
+ "calibration": "对照:OS 文件系统——打开文件表(fd 最小分配,0/1/2 标准流保留)",
425
+ },
426
+ "设备-字符设备": {
427
+ "task": "字符设备",
428
+ "pattern": (
429
+ "def char_device(device, op, data=None):\n"
430
+ " # 生效条件:op ∈ {close, open, read, write}\n"
431
+ " # 子功能:① op 分支处理\n"
432
+ " # 执行:按 op 分派\n"
433
+ " # 不适用条件:op 非 {close, open, read, write} 时\n"
434
+ " # 字符设备抽象:open/read/write/close(驱动接口——设备=文件 语义)\n"
435
+ " if op == 'open':\n"
436
+ " device['opened'] = True\n"
437
+ " return True\n"
438
+ " if op == 'read':\n"
439
+ " if not device.get('opened'):\n"
440
+ " return None\n"
441
+ " buf = device.get('buf', '')\n"
442
+ " device['buf'] = ''\n"
443
+ " return buf\n"
444
+ " if op == 'write':\n"
445
+ " if not device.get('opened'):\n"
446
+ " return False\n"
447
+ " device['buf'] = device.get('buf', '') + (data or '')\n"
448
+ " return True\n"
449
+ " if op == 'close':\n"
450
+ " device['opened'] = False\n"
451
+ " return True\n"
452
+ " return False\n"),
453
+ "cases": [(({'opened': False}, 'open'), True),
454
+ (({'opened': True, 'buf': ''}, 'write', '数据'), True),
455
+ (({'opened': True, 'buf': '数据'}, 'read'), '数据'),
456
+ (({'opened': False}, 'read'), None)],
457
+ "params": [],
458
+ "calibration": "对照:OS 设备驱动——字符设备接口(open/read/write/close,设备即文件)",
459
+ },
460
+ "中断-向量表": {
461
+ "task": "中断向量",
462
+ "pattern": (
463
+ "def vector_lookup(table, irq):\n"
464
+ " # 生效条件:参数 table/irq 合法\n"
465
+ " # 子功能:① 主体逻辑执行\n"
466
+ " # 执行:顺序执行\n"
467
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
468
+ " # 中断向量表:IRQ 号 → 处理函数(未注册 → None)\n"
469
+ " return table.get(irq)\n"),
470
+ "cases": [(({3: 'timer_handler', 14: 'disk_handler'}, 3), 'timer_handler'),
471
+ (({3: 'timer_handler'}, 14), None),
472
+ (({}, 0), None)],
473
+ "params": [],
474
+ "calibration": "对照:OS 中断——向量表(IRQ→handler 查表分派,未注册返回 None)",
475
+ },
476
+ "中断-上下文切换": {
477
+ "task": "上下文切换",
478
+ "pattern": (
479
+ "def ctx_switch(ctx, save):\n"
480
+ " # 生效条件:参数 ctx/save 合法\n"
481
+ " # 子功能:① 调用 dict\n"
482
+ " # 执行:顺序调用\n"
483
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
484
+ " # 中断上下文切换:保存当前寄存器 → 恢复目标(现场保护/恢复)\n"
485
+ " if save:\n"
486
+ " ctx['saved'] = dict(ctx.get('regs', {}))\n"
487
+ " return 'saved'\n"
488
+ " regs = ctx.pop('saved', {})\n"
489
+ " ctx['regs'] = dict(regs)\n"
490
+ " return 'restored'\n"),
491
+ "cases": [(({'regs': {'a': 1, 'b': 2}}, True), 'saved'),
492
+ (({'regs': {'a': 1}, 'saved': {'a': 9}}, False), 'restored')],
493
+ "params": [],
494
+ "calibration": "对照:OS 中断——上下文切换(现场保存/恢复,中断处理不破坏用户态)",
495
+ },
496
+ "中断-嵌套优先级": {
497
+ "task": "中断优先级",
498
+ "pattern": (
499
+ "def nested_irq(current_prio, new_prio):\n"
500
+ " # 生效条件:参数 current_prio/new_prio 合法\n"
501
+ " # 子功能:① 主体逻辑执行\n"
502
+ " # 执行:顺序执行\n"
503
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
504
+ " # 中断嵌套:新中断优先级更高 → 可抢占当前(NMI/高优先抢占)\n"
505
+ " return new_prio > current_prio\n"),
506
+ "cases": [((3, 5), True),
507
+ ((5, 3), False),
508
+ ((3, 3), False)],
509
+ "params": [],
510
+ "calibration": "对照:OS 中断——嵌套优先级(高优先级中断可抢占低优先级,同级不嵌套)",
511
+ },
512
+ "文件-系统挂载": {
513
+ "task": "文件系统挂载",
514
+ "pattern": (
515
+ "def mount_op(mounts, path, fs_type=None):\n"
516
+ " # 生效条件:参数 mounts/path/fs_type 合法\n"
517
+ " # 子功能:① 条件判定 ② 结果处理\n"
518
+ " # 执行:顺序执行\n"
519
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
520
+ " # VFS 挂载:挂载点→文件系统(mount 注册/unmount 卸载/查询)\n"
521
+ " if fs_type is not None:\n"
522
+ " mounts[path] = fs_type\n"
523
+ " return True\n"
524
+ " if fs_type is None and path in mounts:\n"
525
+ " return mounts.pop(path) # unmount\n"
526
+ " return None\n"),
527
+ "cases": [(({}, '/data', 'ext4'), True),
528
+ (({'/data': 'ext4'}, '/data'), 'ext4'),
529
+ (({'/data': 'ext4'}, '/other'), None)],
530
+ "params": [],
531
+ "calibration": "对照:OS VFS——文件系统挂载(mount 注册/unmount 卸载/未挂载 None)",
532
+ },
533
+ "文件-文件权限": {
534
+ "task": "文件权限",
535
+ "pattern": (
536
+ "def check_perm(mode, access):\n"
537
+ " # 生效条件:参数 mode/access 合法\n"
538
+ " # 子功能:① 调用 bool\n"
539
+ " # 执行:顺序调用\n"
540
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
541
+ " # 文件权限:模式位 rwx 检查(读4/写2/执行1 位运算)\n"
542
+ " bit = {'r': 4, 'w': 2, 'x': 1}[access]\n"
543
+ " return bool(mode & bit)\n"),
544
+ "cases": [((7, 'r'), True), ((7, 'w'), True), ((5, 'w'), False),
545
+ ((1, 'x'), True), ((0, 'r'), False)],
546
+ "params": [],
547
+ "calibration": "对照:OS 文件权限——模式位检查(r=4/w=2/x=1 位与运算)",
548
+ },
549
+ "进程-进程树": {
550
+ "task": "进程树",
551
+ "pattern": (
552
+ "def process_tree(parents, root):\n"
553
+ " # 生效条件:参数 parents/root 合法\n"
554
+ " # 子功能:① 调用 walk;② 调用 sorted\n"
555
+ " # 执行:循环迭代;顺序调用\n"
556
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
557
+ " # 进程树:父进程关系 → 后代集合(递归收集子树)\n"
558
+ " children = {}\n"
559
+ " for pid, ppid in parents.items():\n"
560
+ " children.setdefault(ppid, []).append(pid)\n"
561
+ " desc = []\n"
562
+ " def walk(pid):\n"
563
+ " # 递归遍历:收集当前进程的直接子进程及后代\n"
564
+ " for c in children.get(pid, []):\n"
565
+ " desc.append(c)\n"
566
+ " walk(c)\n"
567
+ " walk(root)\n"
568
+ " return sorted(desc)\n"),
569
+ "cases": [(({'a': 'root', 'b': 'a', 'c': 'a'}, 'root'), ['a', 'b', 'c']),
570
+ (({'b': 'a'}, 'a'), ['b']),
571
+ (({}, 'a'), [])],
572
+ "params": [],
573
+ "calibration": "对照:OS 进程树——父子关系后代收集(fork 产生的进程层级)",
574
+ },
575
+ "系统调用-接口": {
576
+ "task": "系统调用",
577
+ "pattern": (
578
+ "def syscall_dispatch(table, num, args):\n"
579
+ " # 生效条件:参数 table/num/args 合法\n"
580
+ " # 子功能:① 调用 fn\n"
581
+ " # 执行:顺序调用\n"
582
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
583
+ " # 系统调用:编号 → 处理函数分派(未知编号 → None)\n"
584
+ " fn = table.get(num)\n"
585
+ " if fn is None:\n"
586
+ " return None\n"
587
+ " return fn(*args)\n"),
588
+ "cases": [(({1: lambda x: x + 1, 2: lambda a, b: a * b}, 1, [5]), 6),
589
+ (({1: lambda x: x}, 2, [3]), None),
590
+ (({}, 9, []), None)],
591
+ "params": [],
592
+ "calibration": "对照:OS 系统调用——编号分派(syscall 表,未知编号返回 None)",
593
+ },
594
+ "信号-信号处理": {
595
+ "task": "信号处理",
596
+ "pattern": (
597
+ "def signal_op(handlers, op, signum=None, handler=None):\n"
598
+ " # 生效条件:op ∈ {register, send}\n"
599
+ " # 子功能:① op 分支处理\n"
600
+ " # 执行:按 op 分派;顺序调用\n"
601
+ " # 不适用条件:op 非 {register, send} 时\n"
602
+ " # 信号:注册 handler / 发送信号 / 默认处理(忽略/终止)\n"
603
+ " if op == 'register':\n"
604
+ " handlers[signum] = handler\n"
605
+ " return True\n"
606
+ " if op == 'send':\n"
607
+ " fn = handlers.get(signum)\n"
608
+ " if fn is not None:\n"
609
+ " return ('handled', fn())\n"
610
+ " return ('default', 'terminate' if signum == 2 else 'ignore')\n"
611
+ " return None\n"),
612
+ "cases": [(({}, 'register', 2, lambda: 'cleanup'), True),
613
+ (({2: lambda: 'cleanup'}, 'send', 2), ('handled', 'cleanup')),
614
+ (({}, 'send', 2), ('default', 'terminate')),
615
+ (({}, 'send', 10), ('default', 'ignore'))],
616
+ "params": [],
617
+ "calibration": "对照:OS 信号——注册/发送/默认(SIGINT=2 默认终止,SIGUSR=10 默认忽略)",
618
+ },
619
+ "系统调用-参数校验": {
620
+ "task": "参数校验",
621
+ "pattern": (
622
+ "def validate_args(args, types):\n"
623
+ " # 生效条件:参数 args/types 合法\n"
624
+ " # 子功能:① 调用 zip;② 调用 len;③ 调用 isinstance\n"
625
+ " # 执行:循环迭代;顺序调用\n"
626
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
627
+ " # 系统调用参数校验:类型检查(copy_from_user 语义——非法参数拒绝)\n"
628
+ " if len(args) != len(types):\n"
629
+ " return False\n"
630
+ " for a, t in zip(args, types):\n"
631
+ " if not isinstance(a, t):\n"
632
+ " return False\n"
633
+ " return True\n"),
634
+ "cases": [(([1, 'x'], [int, str]), True),
635
+ (([1, 2], [int, str]), False),
636
+ (([1], [int, str]), False)],
637
+ "params": [],
638
+ "calibration": "对照:OS 系统调用——参数类型校验(copy_from_user 语义,非法拒绝)",
639
+ },
640
+ "文件-日志恢复": {
641
+ "task": "日志恢复",
642
+ "pattern": (
643
+ "def journal_replay(entries, disk):\n"
644
+ " # 生效条件:参数 entries/disk 合法\n"
645
+ " # 子功能:① 调用 dict\n"
646
+ " # 执行:循环迭代;顺序调用\n"
647
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
648
+ " # 文件系统日志:崩溃后重放(journal 条目 → 磁盘状态恢复)\n"
649
+ " for e in entries:\n"
650
+ " if e.get('type') == 'write':\n"
651
+ " disk[e['inode']] = e['data']\n"
652
+ " elif e.get('type') == 'delete':\n"
653
+ " disk.pop(e['inode'], None)\n"
654
+ " return dict(disk)\n"),
655
+ "cases": [(([{'type': 'write', 'inode': 'a', 'data': 'X'},
656
+ {'type': 'write', 'inode': 'b', 'data': 'Y'},
657
+ {'type': 'delete', 'inode': 'a'}], {}),
658
+ {'b': 'Y'}),
659
+ (([], {'a': 'keep'}), {'a': 'keep'})],
660
+ "params": [],
661
+ "calibration": "对照:OS 文件系统日志——journal 重放(崩溃恢复,write/delete 条目应用)",
662
+ },
663
+ "系统-监控指标": {
664
+ "task": "系统监控",
665
+ "pattern": (
666
+ "def sys_metrics(usage_samples):\n"
667
+ " # 生效条件:参数 usage_samples 合法\n"
668
+ " # 子功能:① 调用 round;② 调用 max;③ 调用 sum\n"
669
+ " # 执行:顺序调用\n"
670
+ " # 不适用条件:usage_samples 为空/非法时(隐式盲区:返回默认值 {'avg': 0.0, 'peak': 0.0} = 未知行为——不适用)\n"
671
+ " # 系统监控:CPU/内存采样 → 平均/峰值(负载统计)\n"
672
+ " if not usage_samples:\n"
673
+ " return {'avg': 0.0, 'peak': 0.0}\n"
674
+ " return {'avg': round(sum(usage_samples) / len(usage_samples), 2),\n"
675
+ " 'peak': max(usage_samples)}\n"),
676
+ "cases": [(([30, 50, 70],), {'avg': 50.0, 'peak': 70}),
677
+ (([],), {'avg': 0.0, 'peak': 0.0}),
678
+ (([100],), {'avg': 100.0, 'peak': 100})],
679
+ "params": [],
680
+ "calibration": "对照:OS 系统监控——CPU 使用率采样统计(平均/峰值)",
681
+ },
682
+ "系统-守护进程": {
683
+ "task": "守护进程",
684
+ "pattern": (
685
+ "def daemon_lifecycle(state, op):\n"
686
+ " # 生效条件:op ∈ {start, status, stop}\n"
687
+ " # 子功能:① op 分支处理\n"
688
+ " # 执行:按 op 分派\n"
689
+ " # 不适用条件:op 非 {start, status, stop} 时(隐式盲区:返回默认值 unknown = 未知行为——不适用)\n"
690
+ " # 守护进程:启动→运行→停止(后台服务生命周期)\n"
691
+ " if op == 'start':\n"
692
+ " state['status'] = 'running'\n"
693
+ " return 'running'\n"
694
+ " if op == 'stop':\n"
695
+ " state['status'] = 'stopped'\n"
696
+ " return 'stopped'\n"
697
+ " if op == 'status':\n"
698
+ " return state.get('status', 'unknown')\n"
699
+ " return 'unknown'\n"),
700
+ "cases": [(({'status': 'idle'}, 'start'), 'running'),
701
+ (({'status': 'running'}, 'stop'), 'stopped'),
702
+ (({'status': 'running'}, 'status'), 'running')],
703
+ "params": [],
704
+ "calibration": "对照:OS 守护进程——生命周期(start/stop/status 状态机)",
705
+ },
706
+ "并发-信号量": {
707
+ "task": "信号量",
708
+ "pattern": (
709
+ "def semaphore_op(sem, op):\n"
710
+ " # 生效条件:op ∈ {P, V}\n"
711
+ " # 子功能:① op 分支处理\n"
712
+ " # 执行:按 op 分派\n"
713
+ " # 不适用条件:op 非 {P, V} 时\n"
714
+ " # 信号量:P 减(资源不足阻塞)/ V 加(释放资源)——计数同步\n"
715
+ " if op == 'P':\n"
716
+ " if sem['count'] <= 0:\n"
717
+ " return 'blocked'\n"
718
+ " sem['count'] -= 1\n"
719
+ " return 'acquired'\n"
720
+ " if op == 'V':\n"
721
+ " sem['count'] += 1\n"
722
+ " return 'released'\n"
723
+ " return None\n"),
724
+ "cases": [(({'count': 1}, 'P'), 'acquired'),
725
+ (({'count': 0}, 'P'), 'blocked'),
726
+ (({'count': 0}, 'V'), 'released')],
727
+ "params": [],
728
+ "calibration": "对照:OS 并发——信号量 P/V(计数同步,资源耗尽 P 阻塞)",
729
+ },
730
+ "并发-读写锁": {
731
+ "task": "读写锁",
732
+ "pattern": (
733
+ "def rwlock_op(lock, op):\n"
734
+ " # 生效条件:op ∈ {r_lock, r_unlock, w_lock, w_unlock}\n"
735
+ " # 子功能:① op 分支处理\n"
736
+ " # 执行:按 op 分派;顺序调用\n"
737
+ " # 不适用条件:op 非 {r_lock, r_unlock, w_lock, w_unlock} 时\n"
738
+ " # 读写锁:多读并发/写独占(读者计数 + 写者标志)\n"
739
+ " if op == 'r_lock':\n"
740
+ " if lock.get('writer'):\n"
741
+ " return 'blocked'\n"
742
+ " lock['readers'] = lock.get('readers', 0) + 1\n"
743
+ " return 'r_acquired'\n"
744
+ " if op == 'w_lock':\n"
745
+ " if lock.get('writer') or lock.get('readers', 0) > 0:\n"
746
+ " return 'blocked'\n"
747
+ " lock['writer'] = True\n"
748
+ " return 'w_acquired'\n"
749
+ " if op == 'r_unlock':\n"
750
+ " lock['readers'] = max(0, lock.get('readers', 0) - 1)\n"
751
+ " return 'r_released'\n"
752
+ " if op == 'w_unlock':\n"
753
+ " lock['writer'] = False\n"
754
+ " return 'w_released'\n"
755
+ " return None\n"),
756
+ "cases": [(({'readers': 0}, 'r_lock'), 'r_acquired'),
757
+ (({'readers': 1, 'writer': False}, 'w_lock'), 'blocked'),
758
+ (({'readers': 0, 'writer': False}, 'w_lock'), 'w_acquired')],
759
+ "params": [],
760
+ "calibration": "对照:OS 并发——读写锁(多读并发/写独占,读者在场写阻塞)",
761
+ },
762
+ "并发-生产者消费者": {
763
+ "task": "生产者消费者",
764
+ "pattern": (
765
+ "def producer_consumer(buf, op, item=None):\n"
766
+ " # 生效条件:op ∈ {consume, produce}\n"
767
+ " # 子功能:① op 分支处理\n"
768
+ " # 执行:按 op 分派;顺序调用\n"
769
+ " # 不适用条件:buf 为空/非法时;op 非 {consume, produce} 时\n"
770
+ " # 生产者-消费者:有界缓冲(生产入队/消费出队)\n"
771
+ " if op == 'produce':\n"
772
+ " if len(buf) >= 4:\n"
773
+ " return 'buffer_full'\n"
774
+ " buf.append(item)\n"
775
+ " return len(buf)\n"
776
+ " if op == 'consume':\n"
777
+ " if not buf:\n"
778
+ " return 'buffer_empty'\n"
779
+ " return buf.pop(0)\n"
780
+ " return None\n"),
781
+ "cases": [(([], 'produce', 'a'), 1),
782
+ ((['a'], 'consume'), 'a'),
783
+ (([], 'consume'), 'buffer_empty'),
784
+ ((['a', 'b', 'c', 'd'], 'produce', 'e'), 'buffer_full')],
785
+ "params": [],
786
+ "calibration": "对照:OS 并发——生产者-消费者(有界缓冲,满/空边界)",
787
+ },
788
+ "虚拟化-命名空间": {
789
+ "task": "命名空间",
790
+ "pattern": (
791
+ "def ns_map(op, ns, pid=None):\n"
792
+ " # 生效条件:op ∈ {lookup, register}\n"
793
+ " # 子功能:① op 分支处理\n"
794
+ " # 执行:按 op 分派\n"
795
+ " # 不适用条件:op 非 {lookup, register} 时\n"
796
+ " # 命名空间隔离:PID/网络视图映射(容器进程 → 命名空间内 PID)\n"
797
+ " if op == 'register':\n"
798
+ " ns['inner'] = ns.get('inner', 100) + 1\n"
799
+ " ns[pid] = ns['inner']\n"
800
+ " return ns[pid]\n"
801
+ " if op == 'lookup':\n"
802
+ " return ns.get(pid)\n"
803
+ " return None\n"),
804
+ "cases": [(('register', {}, 'p1'), 101),
805
+ (('lookup', {'inner': 100, 'p1': 101}, 'p1'), 101),
806
+ (('lookup', {'inner': 100}, 'nope'), None)],
807
+ "params": [],
808
+ "calibration": "对照:容器命名空间——PID 视图映射(进程在命名空间内重编号,隔离语义)",
809
+ },
810
+ "虚拟化-cgroup限制": {
811
+ "task": "资源限制",
812
+ "pattern": (
813
+ "def cgroup_limit(cg, resource, limit, usage):\n"
814
+ " # 生效条件:参数 cg/resource/limit/usage 合法\n"
815
+ " # 子功能:① 条件判定 ② 结果处理\n"
816
+ " # 执行:顺序执行\n"
817
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
818
+ " # cgroup:资源配额(CPU/内存 限额,超限拒绝)\n"
819
+ " if resource not in cg:\n"
820
+ " cg[resource] = limit\n"
821
+ " return usage <= cg[resource]\n"),
822
+ "cases": [(({}, 'cpu', 100, 80), True),
823
+ (({}, 'cpu', 100, 120), False),
824
+ (({'mem': 50}, 'mem', 50, 50), True)],
825
+ "params": [],
826
+ "calibration": "对照:cgroup 资源限制——CPU/内存配额(使用量超限拒绝)",
827
+ },
828
+ "容器-生命周期": {
829
+ "task": "容器生命周期",
830
+ "pattern": (
831
+ "def container_ops(state, op, img=None):\n"
832
+ " # 生效条件:op ∈ {create, remove, start, stop};state.clear 可用\n"
833
+ " # 子功能:① op 分支处理\n"
834
+ " # 执行:按 op 分派\n"
835
+ " # 不适用条件:op 非 {create, remove, start, stop} 时\n"
836
+ " # 容器:创建/启动/停止/删除(镜像 → 运行实例)\n"
837
+ " if op == 'create':\n"
838
+ " state['img'] = img\n"
839
+ " state['status'] = 'created'\n"
840
+ " return 'created'\n"
841
+ " if op == 'start':\n"
842
+ " state['status'] = 'running'\n"
843
+ " return 'running'\n"
844
+ " if op == 'stop':\n"
845
+ " state['status'] = 'exited'\n"
846
+ " return 'exited'\n"
847
+ " if op == 'remove':\n"
848
+ " state.clear()\n"
849
+ " return 'removed'\n"
850
+ " return None\n"),
851
+ "cases": [(({}, 'create', 'alpine'), 'created'),
852
+ (({'status': 'created'}, 'start'), 'running'),
853
+ (({'status': 'running'}, 'stop'), 'exited'),
854
+ (({'status': 'exited'}, 'remove'), 'removed')],
855
+ "params": [],
856
+ "calibration": "对照:容器生命周期——create/start/stop/remove(镜像→实例状态机)",
857
+ },
858
+ "文件-RAID条带": {
859
+ "task": "RAID条带",
860
+ "pattern": (
861
+ "def raid_stripe(data, disks):\n"
862
+ " # 生效条件:参数 data/disks 合法\n"
863
+ " # 子功能:① 调用 range\n"
864
+ " # 执行:顺序调用\n"
865
+ " # 不适用条件:disks 为空/非法时(隐式盲区:返回默认值 [] = 未知行为——不适用)\n"
866
+ " # RAID 0:数据条带化(分块分布到多盘——并行读写)\n"
867
+ " if not disks:\n"
868
+ " return []\n"
869
+ " return [data[i::disks] for i in range(disks)]\n"),
870
+ "cases": [((list('abcdef'), 2), [list('ace'), list('bdf')]),
871
+ ((list('abc'), 1), [list('abc')]),
872
+ ((list('ab'), 0), [])],
873
+ "params": [],
874
+ "calibration": "对照:RAID 0——数据条带化(分块分布,并行 I/O 语义)",
875
+ },
876
+ "文件-RAID奇偶校验": {
877
+ "task": "RAID奇偶",
878
+ "pattern": (
879
+ "def raid_parity(blocks):\n"
880
+ " # 生效条件:参数 blocks 合法\n"
881
+ " # 子功能:① 主体逻辑执行\n"
882
+ " # 执行:循环迭代\n"
883
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
884
+ " # RAID 5:XOR 奇偶校验(N-1 容错——单盘故障可恢复)\n"
885
+ " parity = 0\n"
886
+ " for b in blocks:\n"
887
+ " parity ^= b\n"
888
+ " return parity\n"),
889
+ "cases": [(([1, 2, 3],), 0),
890
+ (([5, 3],), 6),
891
+ (([7],), 7)],
892
+ "params": [],
893
+ "calibration": "对照:RAID 5——XOR 奇偶校验(任一数据盘故障可由其余+奇偶恢复)",
894
+ },
895
+ "文件-文件系统快照": {
896
+ "task": "文件快照",
897
+ "pattern": (
898
+ "def fs_snapshot(blocks, op, idx=None, data=None):\n"
899
+ " # 生效条件:op ∈ {rollback, snap, write}\n"
900
+ " # 子功能:① op 分支处理\n"
901
+ " # 执行:按 op 分派;顺序调用\n"
902
+ " # 不适用条件:op 非 {rollback, snap, write} 时\n"
903
+ " # 文件系统快照:写时复制(修改前复制原块——快照一致性)\n"
904
+ " if op == 'snap':\n"
905
+ " blocks['snap'] = dict(blocks['data'])\n"
906
+ " return 'snapped'\n"
907
+ " if op == 'write':\n"
908
+ " if 'snap' in blocks and idx not in blocks['snap']:\n"
909
+ " blocks['snap'][idx] = blocks['data'][idx] # 写时复制\n"
910
+ " blocks['data'][idx] = data\n"
911
+ " return blocks['data'][idx]\n"
912
+ " if op == 'rollback':\n"
913
+ " blocks['data'] = dict(blocks.get('snap', {}))\n"
914
+ " return blocks['data']\n"
915
+ " return None\n"),
916
+ "cases": [(({'data': {1: 'a'}}, 'snap'), 'snapped'),
917
+ (({'data': {1: 'a'}, 'snap': {1: 'a'}}, 'write', 1, 'b'), 'b'),
918
+ (({'data': {1: 'b'}, 'snap': {1: 'a'}}, 'rollback'), {1: 'a'})],
919
+ "params": [],
920
+ "calibration": "对照:文件系统快照——写时复制(修改前复制原块,可回滚)",
921
+ },
922
+ "启动-引导加载": {
923
+ "task": "引导加载",
924
+ "pattern": (
925
+ "def bootloader(disk, stage):\n"
926
+ " # 生效条件:stage ∈ {initrd, mbr}\n"
927
+ " # 子功能:1 stage 分支处理\n"
928
+ " # 执行:按 op 分派\n"
929
+ " # 不适用条件:stage 非 {initrd, mbr} 时(隐式盲区:返回默认值 unknown = 未知行为——不适用)\n"
930
+ " # bootloader:MBR→内核加载(引导阶段推进)\n"
931
+ " if stage == 'mbr':\n"
932
+ " return ('loaded', disk.get('kernel', 'vmlinuz'))\n"
933
+ " if stage == 'initrd':\n"
934
+ " return ('mounted', 'initramfs')\n"
935
+ " return 'unknown'\n"),
936
+ "cases": [(({'kernel': 'vmlinuz'}, 'mbr'), ('loaded', 'vmlinuz')),
937
+ (({}, 'initrd'), ('mounted', 'initramfs')),
938
+ (({}, 'x'), 'unknown')],
939
+ "params": [],
940
+ "calibration": "对照:OS 启动——bootloader(MBR→内核→initrd 加载)",
941
+ },
942
+ "启动-初始化流程": {
943
+ "task": "初始化流程",
944
+ "pattern": (
945
+ "def init_sequence(services):\n"
946
+ " # 生效条件:参数 services 合法\n"
947
+ " # 子功能:① 调用 set;② 调用 sorted;③ 调用 all\n"
948
+ " # 执行:循环迭代;顺序调用\n"
949
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
950
+ " # init 进程:按依赖顺序启动服务(启动序列)\n"
951
+ " order = []\n"
952
+ " remaining = set(services)\n"
953
+ " while remaining:\n"
954
+ " for s in sorted(remaining):\n"
955
+ " deps = services[s]\n"
956
+ " if all(d in order for d in deps):\n"
957
+ " order.append(s)\n"
958
+ " remaining.remove(s)\n"
959
+ " break\n"
960
+ " return order\n"),
961
+ "cases": [(({'网络': [], '应用': ['网络'], '存储': []},),
962
+ ['存储', '网络', '应用']),
963
+ (({},), [])],
964
+ "params": [],
965
+ "calibration": "对照:OS init——依赖排序启动(先依赖后服务)",
966
+ },
967
+ "系统-固件接口": {
968
+ "task": "固件接口",
969
+ "pattern": (
970
+ "def firmware_call(fw, call):\n"
971
+ " # 生效条件:call ∈ {get_time, reboot, set_boot}\n"
972
+ " # 子功能:1 call 分支处理\n"
973
+ " # 执行:按 op 分派\n"
974
+ " # 不适用条件:call 非 {get_time, reboot, set_boot} 时\n"
975
+ " # 固件接口:UEFI/BIOS 调用(硬件抽象服务)\n"
976
+ " if call == 'get_time':\n"
977
+ " return fw.get('time', 0)\n"
978
+ " if call == 'reboot':\n"
979
+ " return 'rebooting'\n"
980
+ " if call == 'set_boot':\n"
981
+ " fw['boot_dev'] = 'disk0'\n"
982
+ " return 'set'\n"
983
+ " return None\n"),
984
+ "cases": [(({'time': 42}, 'get_time'), 42),
985
+ (({}, 'reboot'), 'rebooting'),
986
+ (({}, 'set_boot'), 'set')],
987
+ "params": [],
988
+ "calibration": "对照:固件接口——UEFI 服务(时间/重启/启动设备)",
989
+ },
990
+ "安全-访问控制": {
991
+ "task": "访问控制",
992
+ "pattern": (
993
+ "def acl_check(acl, subject, resource, action):\n"
994
+ " # 生效条件:参数 acl/subject/resource/action 合法\n"
995
+ " # 子功能:① 条件判定 ② 结果处理\n"
996
+ " # 执行:循环迭代\n"
997
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
998
+ " # ACL:访问控制列表(主体→资源→动作 权限判定)\n"
999
+ " rules = acl.get(resource, [])\n"
1000
+ " for r in rules:\n"
1001
+ " if r['subject'] == subject and r['action'] == action:\n"
1002
+ " return r['allow']\n"
1003
+ " return False # 默认拒绝\n"),
1004
+ "cases": [(({'file': [{'subject': 'u1', 'action': 'read', 'allow': True}]},
1005
+ 'u1', 'file', 'read'), True),
1006
+ (({'file': []}, 'u1', 'file', 'read'), False),
1007
+ (({'file': [{'subject': 'u1', 'action': 'write', 'allow': False}]},
1008
+ 'u1', 'file', 'write'), False)],
1009
+ "params": [],
1010
+ "calibration": "对照:OS 安全——ACL 访问控制(主体/资源/动作 规则判定,默认拒绝)",
1011
+ },
1012
+ "安全-审计日志": {
1013
+ "task": "审计日志",
1014
+ "pattern": (
1015
+ "def audit_log(log, event, subject):\n"
1016
+ " # 生效条件:参数 log/event/subject 合法\n"
1017
+ " # 子功能:① 调用 len\n"
1018
+ " # 执行:顺序调用\n"
1019
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1020
+ " # 审计:安全事件记录(操作 → 日志条目)\n"
1021
+ " log.append({'event': event, 'subject': subject})\n"
1022
+ " return len(log)\n"),
1023
+ "cases": [(([], 'login', 'u1'), 1),
1024
+ (([{'event': 'login', 'subject': 'u1'}], 'logout', 'u1'), 2)],
1025
+ "params": [],
1026
+ "calibration": "对照:OS 安全——审计日志(安全事件记录,可追溯)",
1027
+ },
1028
+ "安全-能力系统": {
1029
+ "task": "能力系统",
1030
+ "pattern": (
1031
+ "def capability(caps, op, cap=None):\n"
1032
+ " # 生效条件:op ∈ {check, grant, revoke};caps.discard 可用\n"
1033
+ " # 子功能:① op 分支处理\n"
1034
+ " # 执行:按 op 分派\n"
1035
+ " # 不适用条件:op 非 {check, grant, revoke} 时\n"
1036
+ " # 能力:特权令牌(持能力才可操作——最小权限语义)\n"
1037
+ " if op == 'grant':\n"
1038
+ " caps.add(cap)\n"
1039
+ " return True\n"
1040
+ " if op == 'check':\n"
1041
+ " return cap in caps\n"
1042
+ " if op == 'revoke':\n"
1043
+ " caps.discard(cap)\n"
1044
+ " return cap not in caps\n"
1045
+ " return False\n"),
1046
+ "cases": [((set(), 'grant', 'net_raw'), True),
1047
+ (({'net_raw'}, 'check', 'net_raw'), True),
1048
+ ((set(), 'check', 'net_raw'), False),
1049
+ (({'net_raw'}, 'revoke', 'net_raw'), True)],
1050
+ "params": [],
1051
+ "calibration": "对照:OS 安全——能力系统(特权令牌授予/检查/撤销,最小权限)",
1052
+ },
1053
+ "性能-性能分析": {
1054
+ "task": "性能分析",
1055
+ "pattern": (
1056
+ "def profile_funcs(times):\n"
1057
+ " # 生效条件:参数 times 合法\n"
1058
+ " # 子功能:① 调用 sum;② 调用 round;③ 调用 len\n"
1059
+ " # 执行:顺序调用\n"
1060
+ " # 不适用条件:times 为空/非法时\n"
1061
+ " # profiling:函数耗时统计(累计/平均——热点定位)\n"
1062
+ " total = sum(times)\n"
1063
+ " if not times:\n"
1064
+ " return {'total': 0, 'avg': 0.0}\n"
1065
+ " return {'total': total, 'avg': round(total / len(times), 2)}\n"),
1066
+ "cases": [(([10, 20, 30],), {'total': 60, 'avg': 20.0}),
1067
+ (([],), {'total': 0, 'avg': 0.0})],
1068
+ "params": [],
1069
+ "calibration": "对照:OS 性能——profiling(函数耗时统计,热点定位)",
1070
+ },
1071
+ "性能-瓶颈检测": {
1072
+ "task": "瓶颈检测",
1073
+ "pattern": (
1074
+ "def bottleneck(resources):\n"
1075
+ " # 生效条件:参数 resources 合法\n"
1076
+ " # 子功能:① 调用 max\n"
1077
+ " # 执行:顺序调用\n"
1078
+ " # 不适用条件:resources 为空/非法时\n"
1079
+ " # 瓶颈检测:利用率最高的资源(系统瓶颈定位)\n"
1080
+ " if not resources:\n"
1081
+ " return None\n"
1082
+ " return max(resources.items(), key=lambda kv: kv[1])\n"),
1083
+ "cases": [(({'cpu': 90, 'mem': 60, 'io': 30},), ('cpu', 90)),
1084
+ (({},), None)],
1085
+ "params": [],
1086
+ "calibration": "对照:OS 性能——瓶颈检测(最高利用率资源)",
1087
+ },
1088
+ "性能-调优建议": {
1089
+ "task": "调优建议",
1090
+ "pattern": (
1091
+ "def tuning_advice(metrics):\n"
1092
+ " # 生效条件:参数 metrics 合法\n"
1093
+ " # 子功能:① 条件判定 ② 结果处理\n"
1094
+ " # 执行:顺序执行\n"
1095
+ " # 不适用条件:adv 为空/非法时\n"
1096
+ " # 调优:指标 → 建议(瓶颈 → 调整参数)\n"
1097
+ " adv = []\n"
1098
+ " if metrics.get('cpu', 0) > 80:\n"
1099
+ " adv.append('升级 CPU 或减少进程')\n"
1100
+ " if metrics.get('mem', 0) > 80:\n"
1101
+ " adv.append('增加内存或优化缓存')\n"
1102
+ " if not adv:\n"
1103
+ " adv.append('当前配置合理')\n"
1104
+ " return adv\n"),
1105
+ "cases": [(({'cpu': 90, 'mem': 50},), ['升级 CPU 或减少进程']),
1106
+ (({'cpu': 50, 'mem': 90},), ['增加内存或优化缓存']),
1107
+ (({'cpu': 50, 'mem': 50},), ['当前配置合理'])],
1108
+ "params": [],
1109
+ "calibration": "对照:OS 性能——调优建议(瓶颈 → 参数调整建议)",
1110
+ },
1111
+ "文件-磁盘配额": {
1112
+ "task": "磁盘配额",
1113
+ "pattern": (
1114
+ "def quota_check(quotas, user, usage, size):\n"
1115
+ " # 生效条件:参数 quotas/user/usage/size 合法\n"
1116
+ " # 子功能:① 调用 float\n"
1117
+ " # 执行:顺序调用\n"
1118
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1119
+ " # 磁盘配额:用户使用量 + 新写入 ≤ 限额(超限拒绝)\n"
1120
+ " limit = quotas.get(user, float('inf'))\n"
1121
+ " return usage + size <= limit\n"),
1122
+ "cases": [(({'u1': 100}, 'u1', 80, 10), True),
1123
+ (({'u1': 100}, 'u1', 95, 10), False),
1124
+ (({}, 'u2', 50, 10), True)],
1125
+ "params": [],
1126
+ "calibration": "对照:OS 磁盘配额——用户限额(使用量+写入 ≤ 限额,超限拒绝)",
1127
+ },
1128
+ "文件-文件锁": {
1129
+ "task": "文件锁",
1130
+ "pattern": (
1131
+ "def file_lock(state, op):\n"
1132
+ " # 生效条件:op ∈ {lock, unlock}\n"
1133
+ " # 子功能:① op 分支处理\n"
1134
+ " # 执行:按 op 分派\n"
1135
+ " # 不适用条件:op 非 {lock, unlock} 时\n"
1136
+ " # 文件锁:flock 语义(独占/释放——并发写保护)\n"
1137
+ " if op == 'lock':\n"
1138
+ " if state.get('locked'):\n"
1139
+ " return 'blocked'\n"
1140
+ " state['locked'] = True\n"
1141
+ " return 'locked'\n"
1142
+ " if op == 'unlock':\n"
1143
+ " state['locked'] = False\n"
1144
+ " return 'unlocked'\n"
1145
+ " return None\n"),
1146
+ "cases": [(({'locked': False}, 'lock'), 'locked'),
1147
+ (({'locked': True}, 'lock'), 'blocked'),
1148
+ (({'locked': True}, 'unlock'), 'unlocked')],
1149
+ "params": [],
1150
+ "calibration": "对照:OS 文件锁——flock(独占/释放,并发写保护)",
1151
+ },
1152
+ "系统-资源限额": {
1153
+ "task": "资源限额",
1154
+ "pattern": (
1155
+ "def rlimit(res, op, soft=None):\n"
1156
+ " # 生效条件:op ∈ {check, get, set}\n"
1157
+ " # 子功能:① op 分支处理\n"
1158
+ " # 执行:按 op 分派;顺序调用\n"
1159
+ " # 不适用条件:op 非 {check, get, set} 时\n"
1160
+ " # ulimit:进程资源限制(设置/查询软限制)\n"
1161
+ " if op == 'set':\n"
1162
+ " res['soft'] = soft\n"
1163
+ " return soft\n"
1164
+ " if op == 'get':\n"
1165
+ " return res.get('soft')\n"
1166
+ " if op == 'check':\n"
1167
+ " return res.get('soft', float('inf'))\n"
1168
+ " return None\n"),
1169
+ "cases": [(({}, 'set', 1024), 1024),
1170
+ (({'soft': 1024}, 'get', None), 1024),
1171
+ (({}, 'check', None), float('inf'))],
1172
+ "params": [],
1173
+ "calibration": "对照:OS ulimit——进程资源限制(软限制设置/查询)",
1174
+ },
1175
+ "可信-安全启动": {
1176
+ "task": "安全启动",
1177
+ "pattern": (
1178
+ "def secure_boot(chain, keyring):\n"
1179
+ " # 生效条件:参数 chain/keyring 合法\n"
1180
+ " # 子功能:① 条件判定 ② 结果处理\n"
1181
+ " # 执行:循环迭代\n"
1182
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1183
+ " # 安全启动:启动组件签名验证链(未签名/密钥不符拒绝)\n"
1184
+ " for comp in chain:\n"
1185
+ " if comp not in keyring:\n"
1186
+ " return ('denied', comp)\n"
1187
+ " return ('booted', True)\n"),
1188
+ "cases": [((['kernel', 'initrd'], {'kernel', 'initrd'}), ('booted', True)),
1189
+ ((['kernel', 'evil'], {'kernel'}), ('denied', 'evil'))],
1190
+ "params": [],
1191
+ "calibration": "对照:安全启动——签名验证链(组件须在可信密钥库)",
1192
+ },
1193
+ "可信-TPM度量": {
1194
+ "task": "TPM度量",
1195
+ "pattern": (
1196
+ "def tpm_measure(pcr, component):\n"
1197
+ " # 生效条件:参数 pcr/component 合法\n"
1198
+ " # 子功能:① 调用 sum;② 调用 ord\n"
1199
+ " # 执行:顺序调用\n"
1200
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1201
+ " # TPM 度量:PCR 扩展(哈希累加——信任链度量)\n"
1202
+ " h = sum(ord(c) for c in component) % 256\n"
1203
+ " pcr = (pcr + h) % 256\n"
1204
+ " return pcr\n"),
1205
+ "cases": [((0, 'BIOS'), 45),
1206
+ ((45, 'loader'), 164),
1207
+ ((0, ''), 0)],
1208
+ "params": [],
1209
+ "calibration": "对照:TPM——PCR 扩展度量(组件哈希累加到平台寄存器)",
1210
+ },
1211
+ "可信-哈希校验": {
1212
+ "task": "哈希校验",
1213
+ "pattern": (
1214
+ "def hash_verify(file_hash, expected):\n"
1215
+ " # 生效条件:参数 file_hash/expected 合法\n"
1216
+ " # 子功能:① 条件判定 ② 结果处理\n"
1217
+ " # 执行:顺序执行\n"
1218
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1219
+ " # 文件完整性:哈希比对(不匹配 → 篡改告警)\n"
1220
+ " if file_hash == expected:\n"
1221
+ " return 'integrity_ok'\n"
1222
+ " return 'tampered'\n"),
1223
+ "cases": [(('abc123', 'abc123'), 'integrity_ok'),
1224
+ (('abc', 'xyz'), 'tampered')],
1225
+ "params": [],
1226
+ "calibration": "对照:可信计算——文件哈希校验(完整性验证,篡改检测)",
1227
+ },
1228
+ "设备-热插拔": {
1229
+ "task": "热插拔",
1230
+ "pattern": (
1231
+ "def hotplug(bus, op, device=None):\n"
1232
+ " # 生效条件:op ∈ {list, plug, unplug};bus.discard 可用\n"
1233
+ " # 子功能:① op 分支处理\n"
1234
+ " # 执行:按 op 分派;顺序调用\n"
1235
+ " # 不适用条件:op 非 {list, plug, unplug} 时\n"
1236
+ " # 热插拔:设备接入/移除(运行中动态管理)\n"
1237
+ " if op == 'plug':\n"
1238
+ " bus.add(device)\n"
1239
+ " return 'plugged'\n"
1240
+ " if op == 'unplug':\n"
1241
+ " bus.discard(device)\n"
1242
+ " return 'unplugged'\n"
1243
+ " if op == 'list':\n"
1244
+ " return sorted(bus)\n"
1245
+ " return None\n"),
1246
+ "cases": [((set(), 'plug', 'usb1'), 'plugged'),
1247
+ (({'usb1'}, 'unplug', 'usb1'), 'unplugged'),
1248
+ (({'usb1', 'usb2'}, 'list'), ['usb1', 'usb2'])],
1249
+ "params": [],
1250
+ "calibration": "对照:设备热插拔——接入/移除(运行中动态管理 USB 语义)",
1251
+ },
1252
+ "设备-即插即用": {
1253
+ "task": "即插即用",
1254
+ "pattern": (
1255
+ "def plug_and_play(device, drivers):\n"
1256
+ " # 生效条件:device.startswith 可用\n"
1257
+ " # 子功能:① 条件判定 ② 结果处理\n"
1258
+ " # 执行:循环迭代\n"
1259
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1260
+ " # 即插即用:设备 ID → 自动匹配驱动(免手动配置)\n"
1261
+ " for d in drivers:\n"
1262
+ " if device.startswith(d['vendor']):\n"
1263
+ " return ('matched', d['name'])\n"
1264
+ " return ('nomatch', None)\n"),
1265
+ "cases": [(('VID_1234_PID_1', [{'vendor': 'VID_1234', 'name': '鼠标'}]),
1266
+ ('matched', '鼠标')),
1267
+ (('VID_9999_PID_1', [{'vendor': 'VID_1234', 'name': '鼠标'}]),
1268
+ ('nomatch', None))],
1269
+ "params": [],
1270
+ "calibration": "对照:即插即用——设备 ID 自动匹配驱动(PnP 语义)",
1271
+ },
1272
+ "设备-设备树": {
1273
+ "task": "设备树",
1274
+ "pattern": (
1275
+ "def device_tree_lookup(tree, node):\n"
1276
+ " # 生效条件:参数 tree/node 合法\n"
1277
+ " # 子功能:① 主体逻辑执行\n"
1278
+ " # 执行:顺序执行\n"
1279
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1280
+ " # 设备树:硬件拓扑节点查找(属性查询)\n"
1281
+ " return tree.get(node)\n"),
1282
+ "cases": [(({'uart0': {'compatible': 'ns16550'}}, 'uart0'),
1283
+ {'compatible': 'ns16550'}),
1284
+ (({}, 'uart0'), None)],
1285
+ "params": [],
1286
+ "calibration": "对照:设备树——硬件拓扑节点(compatible 属性)",
1287
+ },
1288
+ "IPC-消息队列": {
1289
+ "task": "消息队列",
1290
+ "pattern": (
1291
+ "def msg_queue_ops(q, op, mtype=None, body=None):\n"
1292
+ " # 生效条件:op ∈ {count, recv, send}\n"
1293
+ " # 子功能:① op 分支处理\n"
1294
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1295
+ " # 不适用条件:op 非 {count, recv, send} 时\n"
1296
+ " # 消息队列:send 按类型投递 / recv 按类型取最早 / count 统计\n"
1297
+ " # (SysV msg 语义:消息带类型,按类型取)\n"
1298
+ " if op == 'send':\n"
1299
+ " q.append((mtype, body))\n"
1300
+ " return len(q)\n"
1301
+ " if op == 'recv':\n"
1302
+ " for i, (t, b) in enumerate(q):\n"
1303
+ " if mtype is None or t == mtype:\n"
1304
+ " q.pop(i)\n"
1305
+ " return (t, b)\n"
1306
+ " return None\n"
1307
+ " if op == 'count':\n"
1308
+ " return len(q)\n"
1309
+ " return None\n"),
1310
+ "cases": [(([], 'send', 1, '甲'), 1),
1311
+ (([(1, '甲'), (2, '乙')], 'recv', 1, None), (1, '甲')),
1312
+ (([], 'recv', None, None), None),
1313
+ (([(1, '甲')], 'count', None, None), 1)],
1314
+ "params": [],
1315
+ "calibration": "对照:OS IPC 消息队列——SysV msg(类型投递/按类型取最早)",
1316
+ },
1317
+ "IPC-共享内存": {
1318
+ "task": "共享内存",
1319
+ "pattern": (
1320
+ "def shm_ops(segments, key, op, offset=0, value=None, size=0):\n"
1321
+ " # 生效条件:op ∈ {attach, detach, read, write}\n"
1322
+ " # 子功能:① op 分支处理\n"
1323
+ " # 执行:按 op 分派;顺序调用\n"
1324
+ " # 不适用条件:op 非 {attach, detach, read, write} 时\n"
1325
+ " # 共享内存:attach 挂接 / write 写偏移 / read 读偏移 / detach 释放\n"
1326
+ " # (多进程映射同一物理页,引用计数)\n"
1327
+ " if op == 'attach':\n"
1328
+ " if key not in segments:\n"
1329
+ " segments[key] = {'data': bytearray(size), 'refs': 0}\n"
1330
+ " segments[key]['refs'] += 1\n"
1331
+ " return segments[key]['refs']\n"
1332
+ " if op == 'write':\n"
1333
+ " segments[key]['data'][offset] = value\n"
1334
+ " return value\n"
1335
+ " if op == 'read':\n"
1336
+ " return segments[key]['data'][offset]\n"
1337
+ " if op == 'detach':\n"
1338
+ " segments[key]['refs'] -= 1\n"
1339
+ " return segments[key]['refs']\n"
1340
+ " return None\n"),
1341
+ "cases": [(({}, 'k1', 'attach', 0, None, 8), 1),
1342
+ (({'k1': {'data': bytearray(4), 'refs': 1}}, 'k1',
1343
+ 'write', 2, 65, 0), 65),
1344
+ (({'k1': {'data': bytearray([0, 0, 65, 0]), 'refs': 1}},
1345
+ 'k1', 'read', 2, None, 0), 65),
1346
+ (({'k1': {'data': bytearray(4), 'refs': 2}}, 'k1',
1347
+ 'detach', 0, None, 0), 1)],
1348
+ "params": [],
1349
+ "calibration": "对照:OS IPC 共享内存——attach/write/read/detach(物理页共享,引用计数)",
1350
+ },
1351
+ "IPC-邮箱": {
1352
+ "task": "邮箱",
1353
+ "pattern": (
1354
+ "def mailbox_ops(mb, op, msg=None):\n"
1355
+ " # 生效条件:op ∈ {get, put}\n"
1356
+ " # 子功能:① op 分支处理\n"
1357
+ " # 执行:按 op 分派;顺序调用\n"
1358
+ " # 不适用条件:op 非 {get, put} 时\n"
1359
+ " # 邮箱:put 投递 / get 取最早(FIFO)/ 空返回 None\n"
1360
+ " # (异步消息槽,收发进程解耦)\n"
1361
+ " if op == 'put':\n"
1362
+ " mb.append(msg)\n"
1363
+ " return len(mb)\n"
1364
+ " if op == 'get':\n"
1365
+ " return mb.pop(0) if mb else None\n"
1366
+ " return None\n"),
1367
+ "cases": [(([], 'put', '甲'), 1),
1368
+ (([], 'get', None), None),
1369
+ (([1, 2], 'get', None), 1),
1370
+ ((['甲'], 'put', '乙'), 2)],
1371
+ "params": [],
1372
+ "calibration": "对照:OS IPC 邮箱——异步消息槽(put 投递/get FIFO 取,进程解耦)",
1373
+ },
1374
+ "调度-多级反馈队列": {
1375
+ "task": "多级反馈队列",
1376
+ "pattern": (
1377
+ "def mlfq_ops(queues, op, pid=None, level=None, boost_to=0):\n"
1378
+ " # 生效条件:op ∈ {boost, enqueue, pick}\n"
1379
+ " # 子功能:① op 分支处理\n"
1380
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1381
+ " # 不适用条件:op 非 {boost, enqueue, pick} 时\n"
1382
+ " # 多级反馈队列:enqueue 按等级入队 / pick 取最高级队首\n"
1383
+ " # / boost 低优先级提升(防饿死)\n"
1384
+ " if op == 'enqueue':\n"
1385
+ " queues[level].append(pid)\n"
1386
+ " return queues[level]\n"
1387
+ " if op == 'pick':\n"
1388
+ " for q in queues:\n"
1389
+ " if q:\n"
1390
+ " return q.pop(0)\n"
1391
+ " return None\n"
1392
+ " if op == 'boost':\n"
1393
+ " if boost_to < len(queues):\n"
1394
+ " merged = []\n"
1395
+ " for i in range(boost_to + 1, len(queues)):\n"
1396
+ " merged.extend(queues[i])\n"
1397
+ " queues[i] = []\n"
1398
+ " queues[boost_to].extend(merged)\n"
1399
+ " return queues[boost_to]\n"
1400
+ " return None\n"),
1401
+ "cases": [(([[], [], []], 'enqueue', 'a', 2, 0), ['a']),
1402
+ (([['x'], ['a'], []], 'pick', None, None, 0), 'x'),
1403
+ (([[], [], ['c', 'd']], 'pick', None, None, 0), 'c'),
1404
+ (([[], [], [], ['e']], 'boost', None, None, 0), ['e']),
1405
+ (([[],[],[]], 'pick', None, None, 0), None)],
1406
+ "params": [],
1407
+ "calibration": "对照:OS 多级反馈队列 MLFQ——高等级优先调度,低等级定期提升(防饿死)",
1408
+ },
1409
+ "调度-实时EDF": {
1410
+ "task": "实时调度",
1411
+ "pattern": (
1412
+ "def edf_pick(ready, now):\n"
1413
+ " # 生效条件:参数 ready/now 合法\n"
1414
+ " # 子功能:① 调用 min\n"
1415
+ " # 执行:顺序调用\n"
1416
+ " # 不适用条件:ready 为空/非法时\n"
1417
+ " # 实时调度:最早截止时间优先(EDF——deadline 最近者先执行)\n"
1418
+ " if not ready:\n"
1419
+ " return None\n"
1420
+ " return min(ready, key=lambda t: t[1])[0]\n"),
1421
+ "cases": [(([('a', 10), ('b', 5)], 0), 'b'),
1422
+ (([], 0), None),
1423
+ (([('a', 10)], 0), 'a')],
1424
+ "params": [],
1425
+ "calibration": "对照:OS 实时调度 EDF——最早截止时间优先(deadline 最近先执行)",
1426
+ },
1427
+ "系统调用-文件分派": {
1428
+ "task": "文件系统调用",
1429
+ "pattern": (
1430
+ "def syscall_file(op, fd_table, fd=None, path=None, data=None, mode='r'):\n"
1431
+ " # 生效条件:op ∈ {close, open, read, write}\n"
1432
+ " # 子功能:① op 分支处理\n"
1433
+ " # 执行:按 op 分派;顺序调用\n"
1434
+ " # 不适用条件:op 非 {close, open, read, write} 时\n"
1435
+ " # 系统调用:open/read/write/close 分派(fd 表管理文件操作)\n"
1436
+ " if op == 'open':\n"
1437
+ " fd_table.append({'path': path, 'mode': mode, 'data': data or ''})\n"
1438
+ " return len(fd_table) - 1\n"
1439
+ " if op == 'read':\n"
1440
+ " return fd_table[fd]['data']\n"
1441
+ " if op == 'write':\n"
1442
+ " fd_table[fd]['data'] += data\n"
1443
+ " return len(data)\n"
1444
+ " if op == 'close':\n"
1445
+ " fd_table[fd] = None\n"
1446
+ " return 'closed'\n"
1447
+ " return None\n"),
1448
+ "cases": [(('open', [], 'a.txt', None, '', 'r'), 0),
1449
+ (('read', [{'path': 'a', 'data': '你好'}], 0,
1450
+ None, None, 'r'), '你好'),
1451
+ (('write', [{'path': 'a', 'data': ''}], 0, None, 'x', 'w'), 1),
1452
+ (('close', [{'path': 'a'}], 0, None, None, 'r'), 'closed')],
1453
+ "params": [],
1454
+ "calibration": "对照:OS 系统调用——open/read/write/close 文件操作(fd 表分派)",
1455
+ },
1456
+ "内存-伙伴系统": {
1457
+ "task": "伙伴系统",
1458
+ "pattern": (
1459
+ "def buddy_alloc(free_lists, size):\n"
1460
+ " # 伙伴系统(buddy system):2 的幂块分配(最小合适阶取,缺则高阶分裂回补)\n"
1461
+ " # 生效条件:free_lists 为各阶空闲块列表;size 为申请字节数\n"
1462
+ " # 子功能:① 计算合适阶 ② 低阶无块则高阶分裂 ③ 取块返回\n"
1463
+ " # 执行:阶逐级查找,分裂回补低阶\n"
1464
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1465
+ " order = 0\n"
1466
+ " while (1 << order) < size:\n"
1467
+ " order += 1\n"
1468
+ " for o in range(order, max(free_lists) + 1):\n"
1469
+ " if free_lists[o]:\n"
1470
+ " free_lists[o] -= 1\n"
1471
+ " while o > order:\n"
1472
+ " o -= 1\n"
1473
+ " free_lists[o] += 1\n"
1474
+ " return 'allocated'\n"
1475
+ " return 'failed'\n"),
1476
+ "cases": [(({0: 0, 1: 1, 2: 0}, 1), 'allocated'),
1477
+ (({0: 0, 1: 0, 2: 1}, 1), 'allocated'),
1478
+ (({0: 0, 1: 0, 2: 0}, 4), 'failed'),
1479
+ (({0: 2, 1: 0}, 1), 'allocated')],
1480
+ "params": [],
1481
+ "calibration": "对照:OS 内存——伙伴系统(2 的幂块分配,高阶块分裂到合适阶)",
1482
+ },
1483
+ "内存-写时复制": {
1484
+ "task": "写时复制",
1485
+ "pattern": (
1486
+ "def cow_write(pages, idx, value, shared_set):\n"
1487
+ " # 生效条件:shared_set.discard 可用\n"
1488
+ " # 子功能:① 条件判定 ② 结果处理\n"
1489
+ " # 执行:顺序执行\n"
1490
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1491
+ " # 写时复制:写共享页 → 复制新页再写(原页保留,fork COW 语义)\n"
1492
+ " if idx in shared_set:\n"
1493
+ " pages[idx] = value\n"
1494
+ " shared_set.discard(idx)\n"
1495
+ " return 'copied'\n"
1496
+ " pages[idx] = value\n"
1497
+ " return 'written'\n"),
1498
+ "cases": [((['a', 'b'], 0, 'X', {0}), 'copied'),
1499
+ ((['a', 'b'], 1, 'Y', set()), 'written'),
1500
+ ((['a'], 0, 'Z', {0}), 'copied')],
1501
+ "params": [],
1502
+ "calibration": "对照:OS 内存——写时复制(fork 共享页写时复制,节省物理内存)",
1503
+ },
1504
+ "内存-内存压缩": {
1505
+ "task": "内存压缩",
1506
+ "pattern": (
1507
+ "def memory_compress(pages, threshold):\n"
1508
+ " # 生效条件:参数 pages/threshold 合法\n"
1509
+ " # 子功能:① 调用 len\n"
1510
+ " # 执行:循环迭代;顺序调用\n"
1511
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1512
+ " # 内存压缩:超长页压缩存储(zswap——节省物理内存)\n"
1513
+ " saved = 0\n"
1514
+ " for p in pages:\n"
1515
+ " if len(p) > threshold:\n"
1516
+ " saved += len(p) - threshold\n"
1517
+ " return saved\n"),
1518
+ "cases": [((['aaaa', 'b'], 2), 2),
1519
+ ((['a', 'bb'], 2), 0),
1520
+ (([], 2), 0)],
1521
+ "params": [],
1522
+ "calibration": "对照:OS 内存——内存压缩(超阈页压缩存储,减少占用)",
1523
+ },
1524
+ "文件-链接管理": {
1525
+ "task": "文件链接",
1526
+ "pattern": (
1527
+ "def link_ops(fs, op, name=None, target=None):\n"
1528
+ " # 生效条件:op ∈ {hard, resolve, soft}\n"
1529
+ " # 子功能:① op 分支处理\n"
1530
+ " # 执行:按 op 分派\n"
1531
+ " # 不适用条件:op 非 {hard, resolve, soft} 时\n"
1532
+ " # 文件链接:hard 硬链接(共享 inode)/ soft 软链接(路径引用)/ resolve 解析\n"
1533
+ " if op == 'hard':\n"
1534
+ " if target in fs:\n"
1535
+ " fs[name] = {'type': 'hard', 'inode': fs[target]['inode']}\n"
1536
+ " return 'linked'\n"
1537
+ " return 'missing'\n"
1538
+ " if op == 'soft':\n"
1539
+ " fs[name] = {'type': 'soft', 'target': target}\n"
1540
+ " return 'linked'\n"
1541
+ " if op == 'resolve':\n"
1542
+ " entry = fs.get(name)\n"
1543
+ " if entry is None:\n"
1544
+ " return None\n"
1545
+ " if entry['type'] == 'soft':\n"
1546
+ " return fs.get(entry['target'], {}).get('data')\n"
1547
+ " return entry.get('data')\n"
1548
+ " return None\n"),
1549
+ "cases": [(({'a': {'inode': 1, 'data': 'D'}}, 'hard', 'b', 'a'), 'linked'),
1550
+ (({}, 'hard', 'b', 'a'), 'missing'),
1551
+ (({'a': {'inode': 1, 'data': 'D'}}, 'soft', 'b', 'a'), 'linked'),
1552
+ (({'a': {'inode': 1, 'data': 'D'},
1553
+ 'b': {'type': 'soft', 'target': 'a'}}, 'resolve', 'b'), 'D'),
1554
+ (({}, 'resolve', 'x'), None)],
1555
+ "params": [],
1556
+ "calibration": "对照:OS 文件系统——硬链接共享 inode/软链接路径引用(解析语义)",
1557
+ },
1558
+ "文件-元数据查询": {
1559
+ "task": "文件元数据",
1560
+ "pattern": (
1561
+ "def stat_file(fs, name):\n"
1562
+ " # 生效条件:参数 fs/name 合法\n"
1563
+ " # 子功能:① 条件判定 ② 结果处理\n"
1564
+ " # 执行:顺序执行\n"
1565
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1566
+ " # 文件元数据:stat 查询(大小/权限/类型——文件信息)\n"
1567
+ " f = fs.get(name)\n"
1568
+ " if f is None:\n"
1569
+ " return None\n"
1570
+ " return {'size': f.get('size', 0), 'mode': f.get('mode', 'rw'),\n"
1571
+ " 'type': f.get('type', 'file')}\n"),
1572
+ "cases": [(({'a': {'size': 10, 'mode': 'r', 'type': 'file'}}, 'a'),
1573
+ {'size': 10, 'mode': 'r', 'type': 'file'}),
1574
+ (({}, 'a'), None),
1575
+ (({'a': {}}, 'a'), {'size': 0, 'mode': 'rw', 'type': 'file'})],
1576
+ "params": [],
1577
+ "calibration": "对照:OS stat——文件元数据(大小/权限/类型)",
1578
+ },
1579
+ "文件-内存映射": {
1580
+ "task": "内存映射",
1581
+ "pattern": (
1582
+ "def mmap_ops(maps, op, path=None, offset=0, size=0, data=None):\n"
1583
+ " # 生效条件:op ∈ {map, read, write}\n"
1584
+ " # 子功能:① op 分支处理\n"
1585
+ " # 执行:按 op 分派;顺序调用\n"
1586
+ " # 不适用条件:op 非 {map, read, write} 时\n"
1587
+ " # 内存映射:map 映射文件段到内存 / read 读偏移 / write 写偏移回写\n"
1588
+ " if op == 'map':\n"
1589
+ " maps[path] = {'offset': offset, 'size': size,\n"
1590
+ " 'data': bytearray(data or b'\\x00' * size)}\n"
1591
+ " return path\n"
1592
+ " if op == 'read':\n"
1593
+ " m = maps[path]\n"
1594
+ " return bytes(m['data'][offset:offset + size])\n"
1595
+ " if op == 'write':\n"
1596
+ " m = maps[path]\n"
1597
+ " m['data'][offset:offset + len(data)] = data\n"
1598
+ " return len(data)\n"
1599
+ " return None\n"),
1600
+ "cases": [(({}, 'map', 'f', 0, 4, b'abcd'), 'f'),
1601
+ (({'f': {'offset': 0, 'size': 4, 'data': bytearray(b'abcd')}},
1602
+ 'read', 'f', 1, 2), b'bc'),
1603
+ (({'f': {'offset': 0, 'size': 4, 'data': bytearray(b'abcd')}},
1604
+ 'write', 'f', 1, 0, b'XY'), 2)],
1605
+ "params": [],
1606
+ "calibration": "对照:OS mmap——文件映射到内存(读偏移/写回)",
1607
+ },
1608
+ "并发-屏障同步": {
1609
+ "task": "屏障同步",
1610
+ "pattern": (
1611
+ "def barrier_ops(state, op, n=None):\n"
1612
+ " # 生效条件:op ∈ {wait}\n"
1613
+ " # 子功能:① op 分支处理\n"
1614
+ " # 执行:按 op 分派\n"
1615
+ " # 不适用条件:op 非 {wait} 时\n"
1616
+ " # 屏障同步:wait 到达汇合点 / 全部到达释放(多线程同步汇合)\n"
1617
+ " if op == 'wait':\n"
1618
+ " state['arrived'] = state.get('arrived', 0) + 1\n"
1619
+ " if state['arrived'] >= n:\n"
1620
+ " state['arrived'] = 0\n"
1621
+ " return 'released'\n"
1622
+ " return 'waiting'\n"
1623
+ " return None\n"),
1624
+ "cases": [(({'arrived': 0}, 'wait', 3), 'waiting'),
1625
+ (({'arrived': 2}, 'wait', 3), 'released'),
1626
+ (({'arrived': 0}, 'wait', 1), 'released')],
1627
+ "params": [],
1628
+ "calibration": "对照:OS 并发——屏障同步(全部到达汇合点才释放)",
1629
+ },
1630
+ "并发-工作池": {
1631
+ "task": "工作池",
1632
+ "pattern": (
1633
+ "def worker_pool(tasks, workers):\n"
1634
+ " # 生效条件:参数 tasks/workers 合法\n"
1635
+ " # 子功能:① 调用 enumerate;② 调用 range\n"
1636
+ " # 执行:循环迭代;顺序调用\n"
1637
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1638
+ " # 工作池:任务队列分发给固定 worker(并发处理,轮询负载均衡)\n"
1639
+ " out = [[] for _ in range(workers)]\n"
1640
+ " for i, t in enumerate(tasks):\n"
1641
+ " out[i % workers].append(t)\n"
1642
+ " return out\n"),
1643
+ "cases": [(([1, 2, 3, 4], 2), [[1, 3], [2, 4]]),
1644
+ (([1, 2, 3], 3), [[1], [2], [3]]),
1645
+ (([], 2), [[], []])],
1646
+ "params": [],
1647
+ "calibration": "对照:OS 并发——工作池(任务分发固定 worker,并发处理)",
1648
+ },
1649
+ "进程-生命周期": {
1650
+ "task": "进程生命周期",
1651
+ "pattern": (
1652
+ "def proc_life(states, op, pid=None, code=0):\n"
1653
+ " # 生效条件:op ∈ {exec, fork, wait}\n"
1654
+ " # 子功能:① op 分支处理\n"
1655
+ " # 执行:按 op 分派\n"
1656
+ " # 不适用条件:op 非 {exec, fork, wait} 时\n"
1657
+ " # 进程生命周期:fork 创建 / exec 执行 / wait 等待退出(状态机)\n"
1658
+ " if op == 'fork':\n"
1659
+ " states[pid] = 'created'\n"
1660
+ " return 'created'\n"
1661
+ " if op == 'exec':\n"
1662
+ " if pid in states:\n"
1663
+ " states[pid] = 'running'\n"
1664
+ " return 'running'\n"
1665
+ " return 'unknown'\n"
1666
+ " if op == 'wait':\n"
1667
+ " if pid in states:\n"
1668
+ " states[pid] = 'exited'\n"
1669
+ " return code\n"
1670
+ " return 'unknown'\n"
1671
+ " return None\n"),
1672
+ "cases": [(({}, 'fork', 1), 'created'),
1673
+ (({1: 'created'}, 'exec', 1), 'running'),
1674
+ (({1: 'running'}, 'wait', 1, 0), 0),
1675
+ (({}, 'exec', 9), 'unknown')],
1676
+ "params": [],
1677
+ "calibration": "对照:OS 进程——fork/exec/wait 生命周期状态机",
1678
+ },
1679
+ "存储-磁盘调度SCAN": {
1680
+ "task": "磁盘调度",
1681
+ "pattern": (
1682
+ "def scan_schedule(requests, head, direction=1):\n"
1683
+ " # 生效条件:参数 requests/head/direction 合法\n"
1684
+ " # 子功能:① 调用 sorted\n"
1685
+ " # 执行:顺序调用\n"
1686
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1687
+ " # 磁盘调度:SCAN 电梯算法(单向扫描到端再折返)\n"
1688
+ " up = sorted(r for r in requests if r >= head)\n"
1689
+ " down = sorted((r for r in requests if r < head), reverse=True)\n"
1690
+ " if direction == 1:\n"
1691
+ " return up + down\n"
1692
+ " return down + up\n"),
1693
+ "cases": [(([10, 30, 50], 40), [50, 30, 10]),
1694
+ (([10, 30, 50], 20, -1), [10, 30, 50]),
1695
+ (([], 40), [])],
1696
+ "params": [],
1697
+ "calibration": "对照:OS 磁盘调度——SCAN 电梯算法(单向扫描折返)",
1698
+ },
1699
+ "文件-写时复制快照": {
1700
+ "task": "写时复制快照",
1701
+ "pattern": (
1702
+ "def cow_snapshot(blocks, op, snapshot=None, block=None, data=None,\n"
1703
+ " snapshots=None):\n"
1704
+ " # 写时复制快照(COW 快照):snapshot 冻结块引用 / write 写块时快照侧冻结原值\n"
1705
+ " # 生效条件:op ∈ {snapshot, write};snapshots 为快照表(可空)\n"
1706
+ " # 子功能:① snapshot 冻结块引用 ② write 写块时复制原值\n"
1707
+ " # 执行:按 op 分派快照/写时复制\n"
1708
+ " # 不适用条件:op 非 {read, snapshot, write} 时\n"
1709
+ " snapshots = snapshots if snapshots is not None else {}\n"
1710
+ " if op == 'snapshot':\n"
1711
+ " snapshots[snapshot] = dict(blocks)\n"
1712
+ " return snapshot\n"
1713
+ " if op == 'write':\n"
1714
+ " for snap, refs in snapshots.items():\n"
1715
+ " if block in refs:\n"
1716
+ " refs['_cow'] = refs.get('_cow', []) + [block]\n"
1717
+ " blocks[block] = data\n"
1718
+ " return 'written'\n"
1719
+ " if op == 'read':\n"
1720
+ " return snapshots.get(snapshot, {}).get(block)\n"
1721
+ " return None\n"),
1722
+ "cases": [(({}, 'snapshot', 's1', None, None, {}), 's1'),
1723
+ (({'b1': 'A'}, 'snapshot', 's1', None, None, {}), 's1'),
1724
+ (({'b1': 'A'}, 'write', None, 'b1', 'B',
1725
+ {'s1': {'b1': 'A'}}), 'written'),
1726
+ (({'b1': 'A'}, 'read', 's1', 'b1', None,
1727
+ {'s1': {'b1': 'A'}}), 'A')],
1728
+ "params": [],
1729
+ "calibration": "对照:OS 文件系统——写时复制快照(快照冻结,写共享块先复制)",
1730
+ },
1731
+ "存储-磨损均衡": {
1732
+ "task": "磨损均衡",
1733
+ "pattern": (
1734
+ "def wear_leveling(blocks, op, block=None):\n"
1735
+ " # 生效条件:op ∈ {pick, write}\n"
1736
+ " # 子功能:① op 分支处理\n"
1737
+ " # 执行:按 op 分派;顺序调用\n"
1738
+ " # 不适用条件:blocks 为空/非法时;op 非 {pick, write} 时\n"
1739
+ " # 磨损均衡:写块记录写入次数,pick 选最少磨损块(SSD 寿命)\n"
1740
+ " if op == 'write':\n"
1741
+ " blocks[block] = blocks.get(block, 0) + 1\n"
1742
+ " return blocks[block]\n"
1743
+ " if op == 'pick':\n"
1744
+ " if not blocks:\n"
1745
+ " return None\n"
1746
+ " return min(blocks, key=blocks.get)\n"
1747
+ " return None\n"),
1748
+ "cases": [(({'a': 3, 'b': 1}, 'write', 'b'), 2),
1749
+ (({'a': 3, 'b': 1}, 'pick'), 'b'),
1750
+ (({}, 'pick'), None)],
1751
+ "params": [],
1752
+ "calibration": "对照:OS 存储——磨损均衡(写入次数记录,选最少磨损块)",
1753
+ },
1754
+ "安全-强制访问控制": {
1755
+ "task": "强制访问控制",
1756
+ "pattern": (
1757
+ "def mac_check(policy, subject_label, object_label, action):\n"
1758
+ " # 生效条件:参数 policy/subject_label/object_label/action 合法\n"
1759
+ " # 子功能:① 主体逻辑执行\n"
1760
+ " # 执行:顺序执行\n"
1761
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1762
+ " # MAC 强制访问控制:标签对操作授权(安全标签规则表——强制策略)\n"
1763
+ " rules = policy.get('rules', {})\n"
1764
+ " return rules.get((subject_label, object_label, action), 'denied')\n"),
1765
+ "cases": [(({'rules': {('内部', '秘密', '读'): 'allowed'}},
1766
+ '内部', '秘密', '读'), 'allowed'),
1767
+ (({'rules': {}}, '内部', '秘密', '读'), 'denied'),
1768
+ (({'rules': {('外部', '公开', '读'): 'allowed'}},
1769
+ '外部', '公开', '读'), 'allowed')],
1770
+ "params": [],
1771
+ "calibration": "对照:OS 安全——MAC 强制访问控制(安全标签规则,未授权默认拒绝)",
1772
+ },
1773
+ "安全-系统调用过滤": {
1774
+ "task": "系统调用过滤",
1775
+ "pattern": (
1776
+ "def seccomp_filter(syscalls, op, name=None):\n"
1777
+ " # 生效条件:op ∈ {allow, check}\n"
1778
+ " # 子功能:① op 分支处理\n"
1779
+ " # 执行:按 op 分派\n"
1780
+ " # 不适用条件:op 非 {allow, check} 时\n"
1781
+ " # 系统调用过滤:seccomp——白名单拦截(沙箱限制进程能力)\n"
1782
+ " if op == 'allow':\n"
1783
+ " syscalls.add(name)\n"
1784
+ " return 'allowed'\n"
1785
+ " if op == 'check':\n"
1786
+ " return 'ok' if name in syscalls else 'blocked'\n"
1787
+ " return None\n"),
1788
+ "cases": [((set(), 'allow', 'read'), 'allowed'),
1789
+ (({'read'}, 'check', 'read'), 'ok'),
1790
+ (({'read'}, 'check', 'write'), 'blocked')],
1791
+ "params": [],
1792
+ "calibration": "对照:OS 安全——seccomp 系统调用过滤(白名单,沙箱)",
1793
+ },
1794
+ "安全-加密文件系统": {
1795
+ "task": "加密文件系统",
1796
+ "pattern": (
1797
+ "def crypt_fs(fs, op, path=None, data=None, key=7):\n"
1798
+ " # 生效条件:op ∈ {read, write}\n"
1799
+ " # 子功能:① op 分支处理\n"
1800
+ " # 执行:按 op 分派;顺序调用\n"
1801
+ " # 不适用条件:op 非 {read, write} 时\n"
1802
+ " # 加密文件系统:write 加密存储 / read 解密读取(透明加解密)\n"
1803
+ " if op == 'write':\n"
1804
+ " fs[path] = ''.join(chr(ord(c) ^ key) for c in data)\n"
1805
+ " return 'stored'\n"
1806
+ " if op == 'read':\n"
1807
+ " raw = fs.get(path)\n"
1808
+ " if raw is None:\n"
1809
+ " return None\n"
1810
+ " return ''.join(chr(ord(c) ^ key) for c in raw)\n"
1811
+ " return None\n"),
1812
+ "cases": [(({}, 'write', 'a.txt', '秘密', 7), 'stored'),
1813
+ (({'a.txt': '租寁'}, 'read', 'a.txt', None, 7), '秘密'),
1814
+ (({}, 'read', 'a.txt', None, 7), None)],
1815
+ "params": [],
1816
+ "calibration": "对照:OS 安全——加密文件系统(透明加解密存储)",
1817
+ },
1818
+ "系统-服务管理": {
1819
+ "task": "服务管理",
1820
+ "pattern": (
1821
+ "def service_ops(services, op, name=None):\n"
1822
+ " # 生效条件:op ∈ {start, status, stop}\n"
1823
+ " # 子功能:① op 分支处理\n"
1824
+ " # 执行:按 op 分派\n"
1825
+ " # 不适用条件:op 非 {start, status, stop} 时\n"
1826
+ " # 服务管理:start 启动 / stop 停止 / status 查询(服务生命周期)\n"
1827
+ " if op == 'start':\n"
1828
+ " services[name] = 'running'\n"
1829
+ " return 'running'\n"
1830
+ " if op == 'stop':\n"
1831
+ " if name in services:\n"
1832
+ " services[name] = 'stopped'\n"
1833
+ " return 'stopped'\n"
1834
+ " return 'not_found'\n"
1835
+ " if op == 'status':\n"
1836
+ " return services.get(name, 'not_found')\n"
1837
+ " return None\n"),
1838
+ "cases": [(({}, 'start', 'nginx'), 'running'),
1839
+ (({'nginx': 'running'}, 'stop', 'nginx'), 'stopped'),
1840
+ (({}, 'status', 'nginx'), 'not_found'),
1841
+ (({'nginx': 'running'}, 'status', 'nginx'), 'running')],
1842
+ "params": [],
1843
+ "calibration": "对照:systemd 服务——start/stop/status(服务生命周期)",
1844
+ },
1845
+ "系统-日志轮转": {
1846
+ "task": "日志轮转",
1847
+ "pattern": (
1848
+ "def log_rotate(logs, op, name=None, size=0, limit=1024):\n"
1849
+ " # 生效条件:op ∈ {append, size}\n"
1850
+ " # 子功能:① op 分支处理\n"
1851
+ " # 执行:按 op 分派\n"
1852
+ " # 不适用条件:op 非 {append, size} 时\n"
1853
+ " # 日志轮转:append 追加(超限轮转)/ size 查询(logrotate)\n"
1854
+ " if op == 'append':\n"
1855
+ " entry = logs.setdefault(name, {'size': 0, 'rotations': 0})\n"
1856
+ " entry['size'] += size\n"
1857
+ " if entry['size'] > limit:\n"
1858
+ " entry['rotations'] += 1\n"
1859
+ " entry['size'] = size\n"
1860
+ " return 'rotated'\n"
1861
+ " return 'appended'\n"
1862
+ " if op == 'size':\n"
1863
+ " return logs.get(name, {}).get('size', 0)\n"
1864
+ " return None\n"),
1865
+ "cases": [(({}, 'append', 'app.log', 500), 'appended'),
1866
+ (({'app.log': {'size': 800, 'rotations': 0}},
1867
+ 'append', 'app.log', 500), 'rotated'),
1868
+ (({'app.log': {'size': 300, 'rotations': 0}},
1869
+ 'size', 'app.log'), 300)],
1870
+ "params": [],
1871
+ "calibration": "对照:logrotate——日志大小超限轮转",
1872
+ },
1873
+ "系统-定时任务": {
1874
+ "task": "定时任务",
1875
+ "pattern": (
1876
+ "def cron_match(rule, minute, hour):\n"
1877
+ " # 生效条件:参数 rule/minute/hour 合法\n"
1878
+ " # 子功能:① 调用 int\n"
1879
+ " # 执行:顺序调用\n"
1880
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1881
+ " # 定时任务:cron 规则匹配('*' 任意 / 数字精确——分钟小时)\n"
1882
+ " m_rule, h_rule = rule.split()\n"
1883
+ " m_ok = m_rule == '*' or int(m_rule) == minute\n"
1884
+ " h_ok = h_rule == '*' or int(h_rule) == hour\n"
1885
+ " return m_ok and h_ok\n"),
1886
+ "cases": [(('* *', 30, 10), True),
1887
+ (('30 *', 30, 10), True),
1888
+ (('30 *', 31, 10), False),
1889
+ (('* 2', 0, 2), True)],
1890
+ "params": [],
1891
+ "calibration": "对照:cron——分钟/小时规则匹配(* 任意)",
1892
+ },
1893
+ "系统-配置管理": {
1894
+ "task": "配置管理",
1895
+ "pattern": (
1896
+ "def config_ops(config, op, key=None, value=None, default=None):\n"
1897
+ " # 生效条件:op ∈ {get, list, set}\n"
1898
+ " # 子功能:① op 分支处理\n"
1899
+ " # 执行:按 op 分派;顺序调用\n"
1900
+ " # 不适用条件:op 非 {get, list, set} 时\n"
1901
+ " # 配置管理:set 设置 / get 读取(默认值)/ list 列出(键值配置)\n"
1902
+ " if op == 'set':\n"
1903
+ " config[key] = value\n"
1904
+ " return value\n"
1905
+ " if op == 'get':\n"
1906
+ " return config.get(key, default)\n"
1907
+ " if op == 'list':\n"
1908
+ " return sorted(config)\n"
1909
+ " return None\n"),
1910
+ "cases": [(({}, 'set', 'timeout', 30), 30),
1911
+ (({'timeout': 30}, 'get', 'timeout', None, 0), 30),
1912
+ (({}, 'get', 'timeout', None, 0), 0),
1913
+ (({'b': 1, 'a': 2}, 'list'), ['a', 'b'])],
1914
+ "params": [],
1915
+ "calibration": "对照:系统配置——键值设置/读取(默认值兜底)",
1916
+ },
1917
+ "系统-权限提升": {
1918
+ "task": "权限提升",
1919
+ "pattern": (
1920
+ "def sudo_check(auth, op, user=None, command=None):\n"
1921
+ " # 生效条件:op ∈ {check, run}\n"
1922
+ " # 子功能:① op 分支处理\n"
1923
+ " # 执行:按 op 分派\n"
1924
+ " # 不适用条件:op 非 {check, run} 时\n"
1925
+ " # 权限提升:check 校验授权 / run 提权执行(sudo——命令白名单)\n"
1926
+ " if op == 'check':\n"
1927
+ " if user in auth and command in auth[user]:\n"
1928
+ " return 'allowed'\n"
1929
+ " return 'denied'\n"
1930
+ " if op == 'run':\n"
1931
+ " if user in auth and command in auth[user]:\n"
1932
+ " return 'executed'\n"
1933
+ " return 'denied'\n"
1934
+ " return None\n"),
1935
+ "cases": [(({'root': ['reboot']}, 'check', 'root', 'reboot'), 'allowed'),
1936
+ (({'root': ['reboot']}, 'check', 'root', 'rm'), 'denied'),
1937
+ (({}, 'check', 'root', 'reboot'), 'denied'),
1938
+ (({'root': ['reboot']}, 'run', 'root', 'reboot'), 'executed')],
1939
+ "params": [],
1940
+ "calibration": "对照:sudo——命令白名单授权(提权执行)",
1941
+ },
1942
+ "系统-环境变量": {
1943
+ "task": "环境变量",
1944
+ "pattern": (
1945
+ "def env_ops(env, op, name=None, value=None, default=None):\n"
1946
+ " # 生效条件:op ∈ {get, set, unset}\n"
1947
+ " # 子功能:① op 分支处理\n"
1948
+ " # 执行:按 op 分派\n"
1949
+ " # 不适用条件:op 非 {get, set, unset} 时\n"
1950
+ " # 环境变量:set 设置 / get 读取(默认值)/ unset 删除(进程环境)\n"
1951
+ " if op == 'set':\n"
1952
+ " env[name] = value\n"
1953
+ " return value\n"
1954
+ " if op == 'get':\n"
1955
+ " return env.get(name, default)\n"
1956
+ " if op == 'unset':\n"
1957
+ " return env.pop(name, None)\n"
1958
+ " return None\n"),
1959
+ "cases": [(({}, 'set', 'PATH', '/bin'), '/bin'),
1960
+ (({'PATH': '/bin'}, 'get', 'PATH', None, '/usr/bin'), '/bin'),
1961
+ (({}, 'get', 'PATH', None, '/usr/bin'), '/usr/bin'),
1962
+ (({'PATH': '/bin'}, 'unset', 'PATH'), '/bin')],
1963
+ "params": [],
1964
+ "calibration": "对照:环境变量——设置/读取(默认值)/删除",
1965
+ },
1966
+ "系统-网络接口": {
1967
+ "task": "网络接口",
1968
+ "pattern": (
1969
+ "def netif_ops(interfaces, op, name=None, addr=None, up=None):\n"
1970
+ " # 生效条件:op ∈ {configure, set_state, status}\n"
1971
+ " # 子功能:① op 分支处理\n"
1972
+ " # 执行:按 op 分派\n"
1973
+ " # 不适用条件:op 非 {configure, set_state, status} 时\n"
1974
+ " # 网络接口:configure 配置 / status 查询 / set_state 启停(网卡抽象)\n"
1975
+ " if op == 'configure':\n"
1976
+ " interfaces[name] = {'addr': addr, 'up': up}\n"
1977
+ " return name\n"
1978
+ " if op == 'status':\n"
1979
+ " return interfaces.get(name)\n"
1980
+ " if op == 'set_state':\n"
1981
+ " if name in interfaces:\n"
1982
+ " interfaces[name]['up'] = up\n"
1983
+ " return 'ok'\n"
1984
+ " return 'missing'\n"
1985
+ " return None\n"),
1986
+ "cases": [(({}, 'configure', 'eth0', '192.168.1.1', True), 'eth0'),
1987
+ (({'eth0': {'addr': '192.168.1.1', 'up': True}},
1988
+ 'status', 'eth0'), {'addr': '192.168.1.1', 'up': True}),
1989
+ (({}, 'status', 'eth0'), None),
1990
+ (({'eth0': {'addr': 'x', 'up': True}},
1991
+ 'set_state', 'eth0', None, False), 'ok')],
1992
+ "params": [],
1993
+ "calibration": "对照:OS 网络栈——网卡接口配置/状态/启停",
1994
+ },
1995
+ "系统-设备驱动": {
1996
+ "task": "设备驱动",
1997
+ "pattern": (
1998
+ "def driver_register(drivers, op, device=None, driver=None):\n"
1999
+ " # 生效条件:op ∈ {match, register}\n"
2000
+ " # 子功能:① op 分支处理\n"
2001
+ " # 执行:按 op 分派;循环迭代\n"
2002
+ " # 不适用条件:op 非 {match, register} 时\n"
2003
+ " # 设备驱动:register 注册 / match 匹配(设备 ID→驱动)\n"
2004
+ " if op == 'register':\n"
2005
+ " drivers[driver] = device\n"
2006
+ " return driver\n"
2007
+ " if op == 'match':\n"
2008
+ " for d, dev in drivers.items():\n"
2009
+ " if dev == device:\n"
2010
+ " return d\n"
2011
+ " return None\n"
2012
+ " return None\n"),
2013
+ "cases": [(({}, 'register', 'VID_1234', 'drv_usb'), 'drv_usb'),
2014
+ (({'drv_usb': 'VID_1234'}, 'match', 'VID_1234'), 'drv_usb'),
2015
+ (({}, 'match', 'VID_1234'), None)],
2016
+ "params": [],
2017
+ "calibration": "对照:Linux 设备驱动——设备 ID 注册/匹配",
2018
+ },
2019
+ "系统-电源管理": {
2020
+ "task": "电源管理",
2021
+ "pattern": (
2022
+ "def power_ops(state, op):\n"
2023
+ " # 生效条件:op ∈ {resume, status, suspend}\n"
2024
+ " # 子功能:① op 分支处理\n"
2025
+ " # 执行:按 op 分派\n"
2026
+ " # 不适用条件:op 非 {resume, status, suspend} 时\n"
2027
+ " # 电源管理:suspend 休眠 / resume 唤醒 / status 状态(ACPI)\n"
2028
+ " if op == 'suspend':\n"
2029
+ " state['power'] = 'suspended'\n"
2030
+ " return 'suspended'\n"
2031
+ " if op == 'resume':\n"
2032
+ " state['power'] = 'active'\n"
2033
+ " return 'active'\n"
2034
+ " if op == 'status':\n"
2035
+ " return state.get('power', 'active')\n"
2036
+ " return None\n"),
2037
+ "cases": [(({}, 'suspend'), 'suspended'),
2038
+ (({'power': 'suspended'}, 'resume'), 'active'),
2039
+ (({}, 'status'), 'active'),
2040
+ (({'power': 'suspended'}, 'status'), 'suspended')],
2041
+ "params": [],
2042
+ "calibration": "对照:ACPI 电源管理——休眠/唤醒/状态",
2043
+ },
2044
+ "文件-文件压缩": {
2045
+ "task": "文件压缩",
2046
+ "pattern": (
2047
+ "def file_compress(data, mode):\n"
2048
+ " # 生效条件:mode ∈ {compress, decompress}\n"
2049
+ " # 子功能:1 mode 分支处理\n"
2050
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
2051
+ " # 不适用条件:mode 非 {compress, decompress} 时\n"
2052
+ " # 文件压缩:compress RLE 行程编码 / decompress 还原(体积优化)\n"
2053
+ " if mode == 'compress':\n"
2054
+ " out = []\n"
2055
+ " i = 0\n"
2056
+ " while i < len(data):\n"
2057
+ " j = i\n"
2058
+ " while j < len(data) and data[j] == data[i]:\n"
2059
+ " j += 1\n"
2060
+ " out.append((data[i], j - i))\n"
2061
+ " i = j\n"
2062
+ " return out\n"
2063
+ " if mode == 'decompress':\n"
2064
+ " return ''.join(c * n for c, n in data)\n"
2065
+ " return None\n"),
2066
+ "cases": [(('aaabbc', 'compress'), [('a', 3), ('b', 2), ('c', 1)]),
2067
+ (([('a', 3), ('b', 2)], 'decompress'), 'aaabb'),
2068
+ (('', 'compress'), [])],
2069
+ "params": [],
2070
+ "calibration": "对照:文件压缩——RLE 行程编码(重复段压缩/还原)",
2071
+ },
2072
+ "存储-存储池": {
2073
+ "task": "存储池",
2074
+ "pattern": (
2075
+ "def storage_pool(pool, op, name=None, size=0):\n"
2076
+ " # 生效条件:op ∈ {alloc, create, free, status}\n"
2077
+ " # 子功能:① op 分支处理\n"
2078
+ " # 执行:按 op 分派;顺序调用\n"
2079
+ " # 不适用条件:op 非 {alloc, create, free, status} 时\n"
2080
+ " # 存储池:create 建池 / alloc 分配(容量扣减)/ free 释放 / status 状态\n"
2081
+ " if op == 'create':\n"
2082
+ " pool[name] = {'total': size, 'used': 0}\n"
2083
+ " return name\n"
2084
+ " if op == 'alloc':\n"
2085
+ " p = pool.get(name)\n"
2086
+ " if p is None:\n"
2087
+ " return 'missing'\n"
2088
+ " if p['used'] + size > p['total']:\n"
2089
+ " return 'insufficient'\n"
2090
+ " p['used'] += size\n"
2091
+ " return 'allocated'\n"
2092
+ " if op == 'free':\n"
2093
+ " p = pool.get(name)\n"
2094
+ " if p is None:\n"
2095
+ " return 'missing'\n"
2096
+ " p['used'] = max(p['used'] - size, 0)\n"
2097
+ " return 'freed'\n"
2098
+ " if op == 'status':\n"
2099
+ " p = pool.get(name)\n"
2100
+ " return dict(p) if p else None\n"
2101
+ " return None\n"),
2102
+ "cases": [(({}, 'create', 'data', 100), 'data'),
2103
+ (({'data': {'total': 100, 'used': 0}}, 'alloc', 'data', 60),
2104
+ 'allocated'),
2105
+ (({'data': {'total': 100, 'used': 80}}, 'alloc', 'data', 30),
2106
+ 'insufficient'),
2107
+ (({'data': {'total': 100, 'used': 50}}, 'free', 'data', 20),
2108
+ 'freed'),
2109
+ (({'data': {'total': 100, 'used': 0}}, 'status', 'data'),
2110
+ {'total': 100, 'used': 0})],
2111
+ "params": [],
2112
+ "calibration": "对照:存储池——容量池分配/回收(超限拒绝)",
2113
+ },
2114
+ "文件-文件版本": {
2115
+ "task": "文件版本",
2116
+ "pattern": (
2117
+ "def file_version(versions, op, name=None, content=None):\n"
2118
+ " # 生效条件:op ∈ {get, list, save}\n"
2119
+ " # 子功能:① op 分支处理\n"
2120
+ " # 执行:按 op 分派;顺序调用\n"
2121
+ " # 不适用条件:op 非 {get, list, save} 时\n"
2122
+ " # 文件版本:save 存版本 / list 版本列表 / get 取最新(版本历史)\n"
2123
+ " if op == 'save':\n"
2124
+ " versions.setdefault(name, []).append(content)\n"
2125
+ " return len(versions[name])\n"
2126
+ " if op == 'list':\n"
2127
+ " return list(versions.get(name, []))\n"
2128
+ " if op == 'get':\n"
2129
+ " vs = versions.get(name, [])\n"
2130
+ " return vs[-1] if vs else None\n"
2131
+ " return None\n"),
2132
+ "cases": [(({}, 'save', 'f1', 'v1'), 1),
2133
+ (({'f1': ['v1']}, 'save', 'f1', 'v2'), 2),
2134
+ (({'f1': ['v1', 'v2']}, 'list', 'f1'), ['v1', 'v2']),
2135
+ (({'f1': ['v1']}, 'get', 'f1'), 'v1'),
2136
+ (({}, 'get', 'f1'), None)],
2137
+ "params": [],
2138
+ "calibration": "对照:文件版本——版本历史保存/列表/取最新",
2139
+ },
2140
+ "并发-条件变量": {
2141
+ "task": "条件变量",
2142
+ "pattern": (
2143
+ "def cond_var(state, op, waiters=None):\n"
2144
+ " # 生效条件:op ∈ {notify, notify_all, wait}\n"
2145
+ " # 子功能:① op 分支处理\n"
2146
+ " # 执行:按 op 分派;顺序调用\n"
2147
+ " # 不适用条件:op 非 {notify, notify_all, wait} 时\n"
2148
+ " # 条件变量:wait 等待 / notify 通知一个 / notify_all 全部(条件同步)\n"
2149
+ " if op == 'wait':\n"
2150
+ " state.setdefault('waiting', []).append(waiters)\n"
2151
+ " return 'waiting'\n"
2152
+ " if op == 'notify':\n"
2153
+ " if state.get('waiting'):\n"
2154
+ " state['waiting'].pop(0)\n"
2155
+ " return 'notified'\n"
2156
+ " return 'none'\n"
2157
+ " if op == 'notify_all':\n"
2158
+ " n = len(state.get('waiting', []))\n"
2159
+ " state['waiting'] = []\n"
2160
+ " return n\n"
2161
+ " return None\n"),
2162
+ "cases": [(({}, 'wait', 't1'), 'waiting'),
2163
+ (({'waiting': ['t1']}, 'notify'), 'notified'),
2164
+ (({}, 'notify'), 'none'),
2165
+ (({'waiting': ['t1', 't2']}, 'notify_all'), 2)],
2166
+ "params": [],
2167
+ "calibration": "对照:POSIX 条件变量——等待/通知(条件满足唤醒)",
2168
+ },
2169
+ "并发-自旋锁": {
2170
+ "task": "自旋锁",
2171
+ "pattern": (
2172
+ "def spinlock(lock, op):\n"
2173
+ " # 生效条件:op ∈ {acquire, release}\n"
2174
+ " # 子功能:① op 分支处理\n"
2175
+ " # 执行:按 op 分派\n"
2176
+ " # 不适用条件:op 非 {acquire, release} 时\n"
2177
+ " # 自旋锁:acquire 忙等获取 / release 释放(锁状态)\n"
2178
+ " if op == 'acquire':\n"
2179
+ " if lock.get('held'):\n"
2180
+ " return 'busy'\n"
2181
+ " lock['held'] = True\n"
2182
+ " return 'acquired'\n"
2183
+ " if op == 'release':\n"
2184
+ " if lock.get('held'):\n"
2185
+ " lock['held'] = False\n"
2186
+ " return 'released'\n"
2187
+ " return 'not_held'\n"
2188
+ " return None\n"),
2189
+ "cases": [(({}, 'acquire'), 'acquired'),
2190
+ (({'held': True}, 'acquire'), 'busy'),
2191
+ (({'held': True}, 'release'), 'released'),
2192
+ (({}, 'release'), 'not_held')],
2193
+ "params": [],
2194
+ "calibration": "对照:自旋锁——忙等获取/释放(短临界区)",
2195
+ },
2196
+ "调度-时间片轮转": {
2197
+ "task": "抢占轮转",
2198
+ "pattern": (
2199
+ "def round_robin(ready, op, quantum=None, current=None):\n"
2200
+ " # 生效条件:op ∈ {preempt, run, status}\n"
2201
+ " # 子功能:① op 分支处理\n"
2202
+ " # 执行:按 op 分派;顺序调用\n"
2203
+ " # 不适用条件:ready 为空/非法时;op 非 {preempt, run, status} 时\n"
2204
+ " # 时间片轮转:run 执行队首 / preempt 时间片耗尽抢占回队尾(RR)\n"
2205
+ " if op == 'run':\n"
2206
+ " if not ready:\n"
2207
+ " return None\n"
2208
+ " return ready.pop(0)\n"
2209
+ " if op == 'preempt':\n"
2210
+ " if current is not None:\n"
2211
+ " ready.append(current)\n"
2212
+ " return len(ready)\n"
2213
+ " if op == 'status':\n"
2214
+ " return list(ready)\n"
2215
+ " return None\n"),
2216
+ "cases": [(([], 'run'), None),
2217
+ (([1, 2], 'run'), 1),
2218
+ ((['t1'], 'preempt', None, 't2'), 2),
2219
+ (([1, 2], 'status'), [1, 2])],
2220
+ "params": [],
2221
+ "calibration": "对照:RR 时间片轮转——队首执行/时间片耗尽回队尾",
2222
+ },
2223
+ "进程-优先级继承": {
2224
+ "task": "优先级继承",
2225
+ "pattern": (
2226
+ "def prio_inherit(state, op, holder=None, waiter=None):\n"
2227
+ " # 生效条件:op ∈ {inherit, restore, wait}\n"
2228
+ " # 子功能:① op 分支处理\n"
2229
+ " # 执行:按 op 分派;顺序调用\n"
2230
+ " # 不适用条件:op 非 {inherit, restore, wait} 时\n"
2231
+ " # 优先级继承:wait 等待锁 / inherit 继承高优先 / restore 恢复(防优先级反转)\n"
2232
+ " if op == 'wait':\n"
2233
+ " state['holder'] = holder\n"
2234
+ " state['waiting'] = waiter\n"
2235
+ " if waiter > state.get('orig', 0):\n"
2236
+ " state['orig'] = waiter\n"
2237
+ " return 'waiting'\n"
2238
+ " if op == 'inherit':\n"
2239
+ " return max(state.get('orig', 0), state.get('waiting', 0))\n"
2240
+ " if op == 'restore':\n"
2241
+ " state['waiting'] = None\n"
2242
+ " return state.get('orig', 0)\n"
2243
+ " return None\n"),
2244
+ "cases": [
2245
+ (({}, 'wait', 'p1', 8), 'waiting'),
2246
+ (({'orig': 2, 'waiting': 8}, 'inherit'), 8),
2247
+ (({'orig': 5, 'waiting': 3}, 'inherit'), 5),
2248
+ (({'orig': 8, 'waiting': 8}, 'restore'), 8)],
2249
+ "params": [],
2250
+ "calibration": "对照:优先级继承——持锁者继承等待者高优先(防反转)",
2251
+ },
2252
+ "内存-内存池": {
2253
+ "task": "内存池",
2254
+ "pattern": (
2255
+ "def pool_alloc(state, op, size=None):\n"
2256
+ " # 生效条件:op ∈ {alloc, free, stats}\n"
2257
+ " # 子功能:① op 分支处理\n"
2258
+ " # 执行:按 op 分派;顺序调用\n"
2259
+ " # 不适用条件:op 非 {alloc, free, stats} 时\n"
2260
+ " # 内存池:alloc 分配 / free 释放 / stats 统计(固定块池)\n"
2261
+ " if op == 'alloc':\n"
2262
+ " free = state.setdefault('free', [])\n"
2263
+ " if size is not None and size not in state.setdefault('blocks', {}):\n"
2264
+ " state['blocks'][size] = [None] * 4\n"
2265
+ " pool = state.get('blocks', {}).get(size, free)\n"
2266
+ " if pool:\n"
2267
+ " return pool.pop()\n"
2268
+ " return None\n"
2269
+ " if op == 'free':\n"
2270
+ " state.setdefault('free', []).append(size)\n"
2271
+ " return 'freed'\n"
2272
+ " if op == 'stats':\n"
2273
+ " return len(state.get('free', []))\n"
2274
+ " return None\n"),
2275
+ "cases": [
2276
+ (({}, 'alloc', 16), None),
2277
+ (({'free': [1, 2]}, 'alloc', None), 2),
2278
+ (({}, 'free', 3), 'freed'),
2279
+ (({'free': [1, 2]}, 'stats'), 2)],
2280
+ "params": [],
2281
+ "calibration": "对照:内存池——固定块分配/释放/统计(池化分配)",
2282
+ },
2283
+ "文件-稀疏文件": {
2284
+ "task": "稀疏文件",
2285
+ "pattern": (
2286
+ "def sparse_file(state, op, offset=None, data=None):\n"
2287
+ " # 生效条件:op ∈ {holes, read, write}\n"
2288
+ " # 子功能:① op 分支处理\n"
2289
+ " # 执行:按 op 分派;顺序调用\n"
2290
+ " # 不适用条件:op 非 {holes, read, write} 时\n"
2291
+ " # 稀疏文件:write 写数据块 / read 读(空洞返回零)/ holes 空洞统计(稀疏存储)\n"
2292
+ " if op == 'write':\n"
2293
+ " state.setdefault('blocks', {})[offset] = data\n"
2294
+ " return offset\n"
2295
+ " if op == 'read':\n"
2296
+ " return state.get('blocks', {}).get(offset, chr(48) * len(data or [0]))\n"
2297
+ " if op == 'holes':\n"
2298
+ " total = state.get('size', 0)\n"
2299
+ " written = len(state.get('blocks', {}))\n"
2300
+ " return max(0, total - written)\n"
2301
+ " return None\n"),
2302
+ "cases": [
2303
+ (({}, 'write', 10, 'abc'), 10),
2304
+ (({'blocks': {10: 'abc'}}, 'read', 10, 'abc'), 'abc'),
2305
+ (({'size': 5, 'blocks': {1: 'a'}}, 'holes'), 4),
2306
+ (({'size': 0, 'blocks': {}}, 'holes'), 0)],
2307
+ "params": [],
2308
+ "calibration": "对照:稀疏文件——数据块存储+空洞零填充(稀疏存储)",
2309
+ },
2310
+ "存储-碎片整理": {
2311
+ "task": "碎片整理",
2312
+ "pattern": (
2313
+ "def defrag(disk, op):\n"
2314
+ " # 生效条件:op ∈ {compact, frags, scan}\n"
2315
+ " # 子功能:① op 分支处理\n"
2316
+ " # 执行:按 op 分派;顺序调用\n"
2317
+ " # 不适用条件:op 非 {compact, frags, scan} 时\n"
2318
+ " # 碎片整理:scan 扫描空洞 / compact 压实 / frags 碎片数(磁盘整理)\n"
2319
+ " if op == 'scan':\n"
2320
+ " return [i for i, b in enumerate(disk) if b is None]\n"
2321
+ " if op == 'compact':\n"
2322
+ " return [b for b in disk if b is not None]\n"
2323
+ " if op == 'frags':\n"
2324
+ " return sum(1 for i in range(1, len(disk))\n"
2325
+ " if disk[i] is not None and disk[i - 1] is None)\n"
2326
+ " return None\n"),
2327
+ "cases": [
2328
+ ((['a', None, 'b'], 'scan'), [1]),
2329
+ ((['a', None, 'b'], 'compact'), ['a', 'b']),
2330
+ ((['a', None, 'b'], 'frags'), 1),
2331
+ (([None, None], 'frags'), 0)],
2332
+ "params": [],
2333
+ "calibration": "对照:磁盘整理——空洞扫描/压实/碎片计数",
2334
+ },
2335
+ "内存-段式管理": {
2336
+ "task": "段式管理",
2337
+ "pattern": (
2338
+ "def segment_map(state, op, seg=None, base=None, limit=None):\n"
2339
+ " # 生效条件:op ∈ {access, base, map}\n"
2340
+ " # 子功能:① op 分支处理\n"
2341
+ " # 执行:按 op 分派\n"
2342
+ " # 不适用条件:op 非 {access, base, map} 时\n"
2343
+ " # 段式管理:map 登记段 / access 越界检查 / base 基址查询(分段内存)\n"
2344
+ " if op == 'map':\n"
2345
+ " state.setdefault('segs', {})[seg] = (base, limit)\n"
2346
+ " return base\n"
2347
+ " if op == 'access':\n"
2348
+ " s = state.get('segs', {}).get(seg)\n"
2349
+ " if s is None:\n"
2350
+ " return 'fault'\n"
2351
+ " b, l = s\n"
2352
+ " return b + base if base < l else 'fault'\n"
2353
+ " if op == 'base':\n"
2354
+ " s = state.get('segs', {}).get(seg)\n"
2355
+ " return s[0] if s else None\n"
2356
+ " return None\n"),
2357
+ "cases": [
2358
+ (({}, 'map', 'code', 100, 50), 100),
2359
+ (({'segs': {'code': (100, 50)}}, 'access', 'code', 30), 130),
2360
+ (({'segs': {'code': (100, 50)}}, 'access', 'code', 60), 'fault'),
2361
+ (({}, 'base', 'code'), None)],
2362
+ "params": [],
2363
+ "calibration": "对照:分段内存——段登记/基址+限长越界检查",
2364
+ },
2365
+ "系统-时钟节拍": {
2366
+ "task": "时钟节拍",
2367
+ "pattern": (
2368
+ "def timer_tick(state, op, hz=None):\n"
2369
+ " # 生效条件:op ∈ {elapsed, hz, tick}\n"
2370
+ " # 子功能:① op 分支处理\n"
2371
+ " # 执行:按 op 分派\n"
2372
+ " # 不适用条件:op 非 {elapsed, hz, tick} 时\n"
2373
+ " # 时钟节拍:tick 推进 / elapsed 已过 / hz 频率(定时器中断)\n"
2374
+ " if op == 'tick':\n"
2375
+ " state['t'] = state.get('t', 0) + 1\n"
2376
+ " return state['t']\n"
2377
+ " if op == 'elapsed':\n"
2378
+ " return state.get('t', 0) / state.get('hz', hz or 100)\n"
2379
+ " if op == 'hz':\n"
2380
+ " return state.get('hz', hz or 100)\n"
2381
+ " return None\n"),
2382
+ "cases": [
2383
+ (({}, 'tick'), 1),
2384
+ (({'t': 200, 'hz': 100}, 'elapsed'), 2.0),
2385
+ (({}, 'elapsed'), 0.0),
2386
+ (({'hz': 250}, 'hz'), 250)],
2387
+ "params": [],
2388
+ "calibration": "对照:定时器——节拍推进/已过时间/频率(HZ)",
2389
+ },
2390
+ "进程-孤儿进程": {
2391
+ "task": "孤儿进程",
2392
+ "pattern": (
2393
+ "def orphan_proc(state, op, pid=None):\n"
2394
+ " # 生效条件:op ∈ {adopt, orphaned, parent}\n"
2395
+ " # 子功能:① op 分支处理\n"
2396
+ " # 执行:按 op 分派;顺序调用\n"
2397
+ " # 不适用条件:op 非 {adopt, orphaned, parent} 时\n"
2398
+ " # 孤儿进程:adopt 收养 / orphaned 孤儿列表 / parent 查询(父亡子被 init 收养)\n"
2399
+ " if op == 'adopt':\n"
2400
+ " state.setdefault('adopted', []).append(pid)\n"
2401
+ " return pid\n"
2402
+ " if op == 'orphaned':\n"
2403
+ " return list(state.get('adopted', []))\n"
2404
+ " if op == 'parent':\n"
2405
+ " return state.get('parent', 1)\n"
2406
+ " return None\n"),
2407
+ "cases": [
2408
+ (({}, 'adopt', 5), 5),
2409
+ (({'adopted': [5]}, 'orphaned'), [5]),
2410
+ (({}, 'parent'), 1),
2411
+ (({'parent': 7}, 'parent'), 7)],
2412
+ "params": [],
2413
+ "calibration": "对照:孤儿进程——父亡子被 init(PID 1)收养",
2414
+ },
2415
+ "内存-内存碎片": {
2416
+ "task": "内存碎片",
2417
+ "pattern": (
2418
+ "def mem_frag(state, op, hole=None):\n"
2419
+ " # 生效条件:op ∈ {holes, rate, record}\n"
2420
+ " # 子功能:① op 分支处理\n"
2421
+ " # 执行:按 op 分派;顺序调用\n"
2422
+ " # 不适用条件:op 非 {holes, rate, record} 时\n"
2423
+ " # 内存碎片:record 记录空洞 / rate 碎片率 / holes 空洞数(碎片化度量)\n"
2424
+ " if op == 'record':\n"
2425
+ " state.setdefault('holes', []).append(hole)\n"
2426
+ " return len(state['holes'])\n"
2427
+ " if op == 'rate':\n"
2428
+ " holes = state.get('holes', [])\n"
2429
+ " total = state.get('total', 1)\n"
2430
+ " return round(sum(holes) / total, 2)\n"
2431
+ " if op == 'holes':\n"
2432
+ " return len(state.get('holes', []))\n"
2433
+ " return None\n"),
2434
+ "cases": [
2435
+ (({}, 'record', 10), 1),
2436
+ (({'holes': [10, 20], 'total': 100}, 'rate'), 0.3),
2437
+ (({}, 'holes'), 0),
2438
+ (({'holes': [10]}, 'holes'), 1)],
2439
+ "params": [],
2440
+ "calibration": "对照:内存碎片——空洞记录与碎片率(碎片化度量)",
2441
+ },
2442
+ "调度-多核均衡": {
2443
+ "task": "多核均衡",
2444
+ "pattern": (
2445
+ "def multi_core(state, op, load=None):\n"
2446
+ " # 生效条件:op ∈ {assign, balance, loads};cores.index 可用\n"
2447
+ " # 子功能:① op 分支处理\n"
2448
+ " # 执行:按 op 分派;顺序调用\n"
2449
+ " # 不适用条件:cores 为空/非法时;op 非 {assign, balance, loads} 时\n"
2450
+ " # 多核均衡:assign 分核 / balance 均衡迁移 / loads 各核负载(SMP 负载均衡)\n"
2451
+ " if op == 'assign':\n"
2452
+ " cores = state.setdefault('cores', [])\n"
2453
+ " if not cores:\n"
2454
+ " cores.extend([0, 0])\n"
2455
+ " i = cores.index(min(cores))\n"
2456
+ " cores[i] += load\n"
2457
+ " return i\n"
2458
+ " if op == 'balance':\n"
2459
+ " cores = state.get('cores', [0, 0])\n"
2460
+ " if cores:\n"
2461
+ " return max(cores) - min(cores) <= 1\n"
2462
+ " return True\n"
2463
+ " if op == 'loads':\n"
2464
+ " return list(state.get('cores', []))\n"
2465
+ " return None\n"),
2466
+ "cases": [
2467
+ (({}, 'assign', 3), 0),
2468
+ (({'cores': [3, 1]}, 'assign', 2), 1),
2469
+ (({'cores': [3, 3]}, 'balance'), True),
2470
+ (({'cores': [5, 1]}, 'balance'), False)],
2471
+ "params": [],
2472
+ "calibration": "对照:SMP——多核负载均衡(最小负载核分配)",
2473
+ },
2474
+ "进程-僵尸进程": {
2475
+ "task": "僵尸进程",
2476
+ "pattern": (
2477
+ "def zombie_proc(state, op, pid=None):\n"
2478
+ " # 生效条件:op ∈ {exit, reap, zombies}\n"
2479
+ " # 子功能:① op 分支处理\n"
2480
+ " # 执行:按 op 分派;顺序调用\n"
2481
+ " # 不适用条件:op 非 {exit, reap, zombies} 时\n"
2482
+ " # 僵尸进程:exit 退出未回收 / reap 回收 / zombies 列表(进程生命周期)\n"
2483
+ " if op == 'exit':\n"
2484
+ " state.setdefault('zombies', []).append(pid)\n"
2485
+ " return 'zombie'\n"
2486
+ " if op == 'reap':\n"
2487
+ " z = state.get('zombies', [])\n"
2488
+ " if pid in z:\n"
2489
+ " z.remove(pid)\n"
2490
+ " return 'reaped'\n"
2491
+ " return None\n"
2492
+ " if op == 'zombies':\n"
2493
+ " return list(state.get('zombies', []))\n"
2494
+ " return None\n"),
2495
+ "cases": [
2496
+ (({}, 'exit', 3), 'zombie'),
2497
+ (({'zombies': [3]}, 'reap', 3), 'reaped'),
2498
+ (({}, 'reap', 5), None),
2499
+ (({'zombies': [3]}, 'zombies'), [3])],
2500
+ "params": [],
2501
+ "calibration": "对照:僵尸进程——exit 未回收/reap 回收(wait 语义)",
2502
+ },
2503
+ "内存-内存热插拔": {
2504
+ "task": "内存热插拔",
2505
+ "pattern": (
2506
+ "def mem_hotplug(state, op, node=None, size=None):\n"
2507
+ " # 生效条件:op ∈ {nodes, offline, online}\n"
2508
+ " # 子功能:① op 分支处理\n"
2509
+ " # 执行:按 op 分派;顺序调用\n"
2510
+ " # 不适用条件:op 非 {nodes, offline, online} 时\n"
2511
+ " # 内存热插拔:online 上线 / offline 下线 / nodes 节点表(内存热添加)\n"
2512
+ " if op == 'online':\n"
2513
+ " state.setdefault('nodes', {})[node] = size\n"
2514
+ " return 'online'\n"
2515
+ " if op == 'offline':\n"
2516
+ " if node in state.get('nodes', {}):\n"
2517
+ " state['nodes'][node] = None\n"
2518
+ " return 'offline'\n"
2519
+ " return None\n"
2520
+ " if op == 'nodes':\n"
2521
+ " return dict(state.get('nodes', {}))\n"
2522
+ " return None\n"),
2523
+ "cases": [
2524
+ (({}, 'online', 'n0', 16), 'online'),
2525
+ (({'nodes': {'n0': 16}}, 'offline', 'n0'), 'offline'),
2526
+ (({}, 'offline', 'n0'), None),
2527
+ (({'nodes': {'n0': 16}}, 'nodes'), {'n0': 16})],
2528
+ "params": [],
2529
+ "calibration": "对照:内存热插拔——节点上线/下线(热添加内存)",
2530
+ },
2531
+ "文件-文件系统日志": {
2532
+ "task": "文件系统日志",
2533
+ "pattern": (
2534
+ "def journal(state, op, entry=None):\n"
2535
+ " # 生效条件:op ∈ {log, pending, replay}\n"
2536
+ " # 子功能:① op 分支处理\n"
2537
+ " # 执行:按 op 分派;顺序调用\n"
2538
+ " # 不适用条件:op 非 {log, pending, replay} 时\n"
2539
+ " # 文件系统日志:log 记录 / replay 重放 / pending 待重放(journaling)\n"
2540
+ " if op == 'log':\n"
2541
+ " state.setdefault('journal', []).append(entry)\n"
2542
+ " return 'logged'\n"
2543
+ " if op == 'replay':\n"
2544
+ " out = list(state.get('journal', []))\n"
2545
+ " state['journal'] = []\n"
2546
+ " return out\n"
2547
+ " if op == 'pending':\n"
2548
+ " return len(state.get('journal', []))\n"
2549
+ " return None\n"),
2550
+ "cases": [
2551
+ (({}, 'log', ('write', 'a')), 'logged'),
2552
+ (({'journal': [('write', 'a')]}, 'replay'), [('write', 'a')]),
2553
+ (({}, 'replay'), []),
2554
+ (({'journal': [1, 2]}, 'pending'), 2)],
2555
+ "params": [],
2556
+ "calibration": "对照:journaling——日志记录/崩溃重放/待重放",
2557
+ },
2558
+ "进程-进程组": {
2559
+ "task": "进程组",
2560
+ "pattern": (
2561
+ "def proc_group(state, op, pgid=None, pid=None):\n"
2562
+ " # 生效条件:op ∈ {join, members, signal}\n"
2563
+ " # 子功能:① op 分支处理\n"
2564
+ " # 执行:按 op 分派;顺序调用\n"
2565
+ " # 不适用条件:op 非 {join, members, signal} 时\n"
2566
+ " # 进程组:join 入组 / members 组员 / signal 组播信号(作业控制)\n"
2567
+ " if op == 'join':\n"
2568
+ " state.setdefault('groups', {}).setdefault(pgid, []).append(pid)\n"
2569
+ " return pgid\n"
2570
+ " if op == 'members':\n"
2571
+ " return list(state.get('groups', {}).get(pgid, []))\n"
2572
+ " if op == 'signal':\n"
2573
+ " m = state.get('groups', {}).get(pgid, [])\n"
2574
+ " return 'signaled' if m else None\n"
2575
+ " return None\n"),
2576
+ "cases": [
2577
+ (({}, 'join', 1, 101), 1),
2578
+ (({'groups': {1: [101]}}, 'members', 1), [101]),
2579
+ (({}, 'members', 1), []),
2580
+ (({'groups': {1: [101]}}, 'signal', 1), 'signaled')],
2581
+ "params": [],
2582
+ "calibration": "对照:进程组——组加入/成员/组播信号(作业控制)",
2583
+ },
2584
+ "内存-页缓存": {
2585
+ "task": "页缓存",
2586
+ "pattern": (
2587
+ "def page_cache(state, op, page=None, data=None):\n"
2588
+ " # 生效条件:op ∈ {get, put, stats}\n"
2589
+ " # 子功能:① op 分支处理\n"
2590
+ " # 执行:按 op 分派;顺序调用\n"
2591
+ " # 不适用条件:op 非 {get, put, stats} 时\n"
2592
+ " # 页缓存:get 命中读 / put 写入缓存 / stats 命中率(文件页缓存)\n"
2593
+ " if op == 'put':\n"
2594
+ " state.setdefault('cache', {})[page] = data\n"
2595
+ " return 'cached'\n"
2596
+ " if op == 'get':\n"
2597
+ " c = state.setdefault('cache', {})\n"
2598
+ " state['hits'] = state.get('hits', 0) + 1\n"
2599
+ " if page in c:\n"
2600
+ " state['hit'] = state.get('hit', 0) + 1\n"
2601
+ " return c[page]\n"
2602
+ " return None\n"
2603
+ " if op == 'stats':\n"
2604
+ " h = state.get('hit', 0)\n"
2605
+ " t = state.get('hits', 0)\n"
2606
+ " return round(h / t, 2) if t else 0.0\n"
2607
+ " return None\n"),
2608
+ "cases": [
2609
+ (({}, 'put', 1, 'A'), 'cached'),
2610
+ (({'cache': {1: 'A'}}, 'get', 1), 'A'),
2611
+ (({}, 'get', 1), None),
2612
+ (({'hit': 2, 'hits': 4}, 'stats'), 0.5)],
2613
+ "params": [],
2614
+ "calibration": "对照:页缓存——文件页缓存命中/写入/命中率",
2615
+ },
2616
+ "调度-亲和性": {
2617
+ "task": "亲和性",
2618
+ "pattern": (
2619
+ "def cpu_affinity(state, op, pid=None, cpu=None):\n"
2620
+ " # 生效条件:op ∈ {allowed, get, set}\n"
2621
+ " # 子功能:① op 分支处理\n"
2622
+ " # 执行:按 op 分派;顺序调用\n"
2623
+ " # 不适用条件:op 非 {allowed, get, set} 时\n"
2624
+ " # 亲和性:set 绑定核 / get 查询 / allowed 允许核集(CPU affinity)\n"
2625
+ " if op == 'set':\n"
2626
+ " state.setdefault('aff', {})[pid] = cpu\n"
2627
+ " return cpu\n"
2628
+ " if op == 'get':\n"
2629
+ " return state.get('aff', {}).get(pid)\n"
2630
+ " if op == 'allowed':\n"
2631
+ " c = state.get('aff', {}).get(pid)\n"
2632
+ " return c if c is not None else list(range(state.get('ncore', 4)))\n"
2633
+ " return None\n"),
2634
+ "cases": [
2635
+ (({}, 'set', 101, 2), 2),
2636
+ (({'aff': {101: 2}}, 'get', 101), 2),
2637
+ (({}, 'get', 101), None),
2638
+ (({}, 'allowed', 101), [0, 1, 2, 3])],
2639
+ "params": [],
2640
+ "calibration": "对照:CPU 亲和性——进程绑定核/查询/允许集",
2641
+ },
2642
+ "中断-软中断": {
2643
+ "task": "软中断",
2644
+ "pattern": (
2645
+ "def softirq(queue, action, item=None):\n"
2646
+ " # 软中断(softirq):硬中断中延迟的低优先级工作(defer 入队按优先级 / run 依次处理)\n"
2647
+ " # 生效条件:action ∈ {defer, run};defer 时 item 为 (优先级, 工作名)\n"
2648
+ " # 子功能:① defer 入队并按优先级排序 ② run 依序弹出处理\n"
2649
+ " # 执行:list.sort(key=优先级) + pop(0) 逐出队\n"
2650
+ " # 不适用条件:action 非 {defer, run} 时返回 None;不重复入队检查由调用方负责\n"
2651
+ " if action == 'defer':\n"
2652
+ " queue.append(item)\n"
2653
+ " queue.sort(key=lambda x: x[0])\n"
2654
+ " return len(queue)\n"
2655
+ " if action == 'run':\n"
2656
+ " out = []\n"
2657
+ " while queue:\n"
2658
+ " out.append(queue.pop(0))\n"
2659
+ " return out\n"
2660
+ " return None\n"),
2661
+ "cases": [
2662
+ (([], 'defer', (2, '网卡')), 1),
2663
+ (([(2, '网卡')], 'defer', (1, '定时器')), 2),
2664
+ (([(1, '定时器'), (2, '网卡')], 'run'), [(1, '定时器'), (2, '网卡')]),
2665
+ (([], 'run'), []),
2666
+ (([], 'unknown', None), None)],
2667
+ "params": [],
2668
+ "calibration": "对照:软中断(softirq)——硬中断处理中延迟低优先级工作,按优先级排队执行",
2669
+ },
2670
+ "调度-工作窃取": {
2671
+ "task": "工作窃取",
2672
+ "pattern": (
2673
+ "def work_steal(queues, worker):\n"
2674
+ " # 工作窃取(work stealing):空闲核从最忙队列窃取一个任务(多核负载均衡)\n"
2675
+ " # 生效条件:queues 为各核任务队列列表;worker 为申请窃取的核号\n"
2676
+ " # 子功能:① 空闲判定(自己队列非空则不窃取)② 找最忙非空队列 ③ 迁移一个任务\n"
2677
+ " # 执行:忙核直返;空闲则取最忙队列 pop(0) 到本队列\n"
2678
+ " # 不适用条件:candidates 为空/非法时\n"
2679
+ " if queues[worker]:\n"
2680
+ " return queues\n"
2681
+ " candidates = [(i, q) for i, q in enumerate(queues) if q and i != worker]\n"
2682
+ " if not candidates:\n"
2683
+ " return queues\n"
2684
+ " busiest = max(candidates, key=lambda x: len(x[1]))[0]\n"
2685
+ " queues[worker].append(queues[busiest].pop(0))\n"
2686
+ " return queues\n"),
2687
+ "cases": [
2688
+ (([[1, 2], [], [3, 4, 5]], 1), [[1, 2], [3], [4, 5]]),
2689
+ (([[1], [2]], 0), [[1], [2]]),
2690
+ (([[], []], 0), [[], []]),
2691
+ (([[7], [8], []], 2), [[], [8], [7]])],
2692
+ "params": [],
2693
+ "calibration": "对照:工作窃取(work stealing)——空闲核从最忙队列窃取任务,无其他非空队列则不动",
2694
+ },
2695
+ "系统-模块加载": {
2696
+ "task": "模块加载",
2697
+ "pattern": (
2698
+ "def module_load(registry, module, deps):\n"
2699
+ " # 模块加载(内核模块装载):依赖满足才注册(内核模块动态装载语义)\n"
2700
+ " # 生效条件:registry 为已加载模块表;deps 为模块依赖名列表\n"
2701
+ " # 子功能:① 依赖存在性检查 ② 全满足注册 ③ 缺依赖拒绝\n"
2702
+ " # 执行:all(d in registry) → 注册返回 ok,否则 missing_deps\n"
2703
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2704
+ " if all(d in registry for d in deps):\n"
2705
+ " registry[module] = 'loaded'\n"
2706
+ " return 'ok'\n"
2707
+ " return 'missing_deps'\n"),
2708
+ "cases": [
2709
+ (({'net': 'loaded'}, 'fs', ['net']), 'ok'),
2710
+ (({'net': 'loaded'}, 'fs', ['net', 'usb']), 'missing_deps'),
2711
+ (({}, 'fs', []), 'ok'),
2712
+ (({'a': 'loaded'}, 'b', ['a', 'a']), 'ok')],
2713
+ "params": [],
2714
+ "calibration": "对照:内核模块装载——依赖全部已注册才加载,缺依赖拒绝",
2715
+ },
2716
+ }
2717
+
2718
+
2719
+ def route_os_unit(question):
2720
+ """任务识别(问题 → OS 单元)"""
2721
+ best, best_len = None, 0
2722
+ for uid, u in OS_UNITS.items():
2723
+ for kw in (u["task"], uid):
2724
+ if kw in question and len(kw) > best_len:
2725
+ best, best_len = uid, len(kw)
2726
+ return best
2727
+
2728
+
2729
+ if __name__ == "__main__":
2730
+ print("=== 迷你 Linux 白箱单元库(目标4 · 中文操作系统初级复现)===\n")
2731
+ for uid, u in OS_UNITS.items():
2732
+ print(f"[{uid}] 任务={u['task']} 样例数={len(u['cases'])}")
2733
+ print(f" 校准: {u['calibration']}")
2734
+ print(f"\n=== 判定 ===\n迷你 Linux 单元库: "
2735
+ f"{'✔ 5 单元就绪(进程调度/轮转/内存/文件/IPC)' if len(OS_UNITS) >= 4 else '✘'}")