@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,2895 @@
1
+ # -*- coding: utf-8 -*-
2
+ """net_units.py · 蓝牙和互联网白箱单元库(第六阶段·目标7 初级复现)
3
+ 用户设想:终极目标「蜂群连接网络」← 初级复现「蓝牙和互联网」。
4
+ 网络核心:IP 分片/TCP 握手/UDP 校验/局域网发现/蜂群消息中继。
5
+ 单元:{任务 → 代码模式模板 + 验证样例 + 校准基准}——白箱自举(外部只校准)。
6
+ """
7
+ import sys
8
+ sys.stdout.reconfigure(encoding='utf-8')
9
+
10
+ NET_UNITS = {
11
+ "网络-IP分片": {
12
+ "task": "IP分片",
13
+ "pattern": (
14
+ "def ip_fragment(packet_size, mtu):\n"
15
+ " # 生效条件:math.ceil 可用\n"
16
+ " # 子功能:① 条件判定 ② 结果处理\n"
17
+ " # 执行:顺序执行\n"
18
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
19
+ " # IP 分片:包大小 + MTU → 分片数(每片含 20B IP 头)\n"
20
+ " import math\n"
21
+ " if packet_size <= mtu:\n"
22
+ " return 1\n"
23
+ " payload = mtu - 20\n"
24
+ " return math.ceil(packet_size / payload)\n"),
25
+ "cases": [((1000, 500), 3),
26
+ ((100, 500), 1),
27
+ ((500, 100), 7)],
28
+ "params": [],
29
+ "calibration": "对照:网络 IP——超过 MTU 需分片(每片 20B 头)",
30
+ },
31
+ "网络-TCP握手": {
32
+ "task": "TCP握手",
33
+ "pattern": (
34
+ "def tcp_handshake(states):\n"
35
+ " # TCP 三次握手:CLOSED → SYN → SYN-ACK → ESTABLISHED\n"
36
+ " # 生效条件:states 为事件序列(SYN/SYN-ACK/ACK 等)\n"
37
+ " # 子功能:① 状态机迁移 ② 非法事件忽略 ③ 到达 ESTABLISHED 判定\n"
38
+ " # 执行:状态转移表逐事件推进\n"
39
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
40
+ " state = 'CLOSED'\n"
41
+ " for ev in states:\n"
42
+ " if state == 'CLOSED' and ev == 'SYN':\n"
43
+ " state = 'SYN_SENT'\n"
44
+ " elif state == 'SYN_SENT' and ev == 'SYN-ACK':\n"
45
+ " state = 'ESTABLISHED'\n"
46
+ " return state\n"),
47
+ "cases": [((['SYN', 'SYN-ACK'],), 'ESTABLISHED'),
48
+ ((['SYN'],), 'SYN_SENT'),
49
+ (( [],), 'CLOSED')],
50
+ "params": [],
51
+ "calibration": "对照:网络 TCP——三次握手状态机(CLOSED→SYN_SENT→ESTABLISHED)",
52
+ },
53
+ "网络-校验和": {
54
+ "task": "校验和",
55
+ "pattern": (
56
+ "def checksum(data):\n"
57
+ " # 生效条件:参数 data 合法\n"
58
+ " # 子功能:① 条件判定 ② 结果处理\n"
59
+ " # 执行:循环迭代\n"
60
+ " # 不适用条件:total 越界(Gt)时\n"
61
+ " # UDP 校验和(简化):16 位和进位折叠 → 取反\n"
62
+ " total = 0\n"
63
+ " for b in data:\n"
64
+ " total += b\n"
65
+ " if total > 0xFFFF:\n"
66
+ " total = (total & 0xFFFF) + 1\n"
67
+ " return (~total) & 0xFFFF\n"),
68
+ "cases": [((bytes([1, 2, 3, 4]),), (~10) & 0xFFFF),
69
+ ((bytes([]),), 0xFFFF),
70
+ ((bytes([0xFF, 0xFF]),), (~510) & 0xFFFF)],
71
+ "params": [],
72
+ "calibration": "对照:网络 UDP——校验和(和取反,接收端校验出错)",
73
+ },
74
+ "网络-局域网发现": {
75
+ "task": "局域网发现",
76
+ "pattern": (
77
+ "def discover(devices, heartbeat_ttl=3):\n"
78
+ " # 生效条件:参数 devices/heartbeat_ttl 合法\n"
79
+ " # 子功能:① 调用 sorted\n"
80
+ " # 执行:循环迭代;顺序调用\n"
81
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
82
+ " # 局域网发现:设备表+心跳 → 在线设备(心跳超时剔除)\n"
83
+ " online = []\n"
84
+ " for dev in devices:\n"
85
+ " if dev.get('ttl', 0) > 0:\n"
86
+ " online.append(dev['name'])\n"
87
+ " return sorted(online)\n"),
88
+ "cases": [(([{'name': 'A', 'ttl': 2}, {'name': 'B', 'ttl': 0}],), ['A']),
89
+ (([{'name': 'X', 'ttl': 1}],), ['X']),
90
+ (( [],), [])],
91
+ "params": [],
92
+ "calibration": "对照:局域网发现——设备心跳在线判定(TTL 超时离线)",
93
+ },
94
+ "网络-蜂群中继": {
95
+ "task": "蜂群中继",
96
+ "pattern": (
97
+ "def swarm_relay(neighbors, source, message=None):\n"
98
+ " # 生效条件:参数 neighbors/source/message 合法\n"
99
+ " # 子功能:① 调用 set;② 调用 relay;③ 调用 sorted\n"
100
+ " # 执行:循环迭代;顺序调用\n"
101
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
102
+ " # 蜂群消息:源节点 → 邻居递归中继(seen 防回环)\n"
103
+ " delivered = set()\n"
104
+ " def relay(node, seen):\n"
105
+ " # 递归中继:未访问则记录并继续转发给邻居(去重防回环)\n"
106
+ " if node in seen:\n"
107
+ " return\n"
108
+ " seen.add(node)\n"
109
+ " delivered.add(node)\n"
110
+ " for nxt in neighbors.get(node, []):\n"
111
+ " relay(nxt, seen)\n"
112
+ " relay(source, set())\n"
113
+ " return sorted(delivered)\n"),
114
+ "cases": [(({'A': ['B', 'C'], 'B': ['D'], 'C': []}, 'A'), ['A', 'B', 'C', 'D']),
115
+ (({'A': ['B'], 'B': ['A']}, 'A'), ['A', 'B']),
116
+ (({'A': []}, 'A'), ['A'])],
117
+ "params": [],
118
+ "calibration": "对照:蜂群网络——消息经邻居递归中继,seen 防回环(去中心化传播)",
119
+ },
120
+ "蜂群-消息去重": {
121
+ "task": "消息去重",
122
+ "pattern": (
123
+ "def dedup(messages, seen_ids):\n"
124
+ " # 生效条件:参数 messages/seen_ids 合法\n"
125
+ " # 子功能:① 条件判定 ② 结果处理\n"
126
+ " # 执行:循环迭代\n"
127
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
128
+ " # 蜂群消息去重:已见 ID 跳过,新 ID 投递(防重复传播)\n"
129
+ " new = []\n"
130
+ " for msg in messages:\n"
131
+ " if msg['id'] not in seen_ids:\n"
132
+ " seen_ids.add(msg['id'])\n"
133
+ " new.append(msg)\n"
134
+ " return new\n"),
135
+ "cases": [(([{'id': 1}, {'id': 1}, {'id': 2}], set()),
136
+ [{'id': 1}, {'id': 2}]),
137
+ (([{'id': 1}], {1}), [])],
138
+ "params": [],
139
+ "calibration": "对照:蜂群协议——消息 ID 去重(多路径重复投递只处理一次)",
140
+ },
141
+ "蜂群-路由表": {
142
+ "task": "路由表",
143
+ "pattern": (
144
+ "def route_table_update(table, node, next_hop):\n"
145
+ " # 生效条件:参数 table/node/next_hop 合法\n"
146
+ " # 子功能:① 条件判定 ② 结果处理\n"
147
+ " # 执行:顺序执行\n"
148
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
149
+ " # 路由表:节点 → 下一跳 维护(更新/查询)\n"
150
+ " if next_hop is not None:\n"
151
+ " table[node] = next_hop\n"
152
+ " return table.get(node)\n"),
153
+ "cases": [(({}, 'A', 'B'), 'B'),
154
+ (({'A': 'B'}, 'A', None), 'B'),
155
+ (({'A': 'B'}, 'C', 'D'), 'D')],
156
+ "params": [],
157
+ "calibration": "对照:网络路由表——节点→下一跳(更新与查询)",
158
+ },
159
+ "蜂群-超时重传": {
160
+ "task": "超时重传",
161
+ "pattern": (
162
+ "def retransmit(packets, ack_ids, max_tries=3):\n"
163
+ " # 生效条件:参数 packets/ack_ids/max_tries 合法\n"
164
+ " # 子功能:① 条件判定 ② 结果处理\n"
165
+ " # 执行:循环迭代\n"
166
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
167
+ " # 蜂群可靠传输:未确认包超时重传(超过重试上限放弃)\n"
168
+ " need = []\n"
169
+ " for p in packets:\n"
170
+ " if p['id'] in ack_ids:\n"
171
+ " continue\n"
172
+ " if p.get('tries', 0) >= max_tries:\n"
173
+ " continue\n"
174
+ " p['tries'] = p.get('tries', 0) + 1\n"
175
+ " need.append(p['id'])\n"
176
+ " return need\n"),
177
+ "cases": [(([{'id': 1, 'tries': 0}, {'id': 2, 'tries': 3}], {2}), [1]),
178
+ (([{'id': 1, 'tries': 0}], set()), [1]),
179
+ (([{'id': 1, 'tries': 0}], {1}), [])],
180
+ "params": [],
181
+ "calibration": "对照:可靠传输——未确认包重传,超重试上限放弃(TCP 重传语义)",
182
+ },
183
+ "网络-停等协议": {
184
+ "task": "停等协议",
185
+ "pattern": (
186
+ "def stop_and_wait(send_packets, ack_all=True):\n"
187
+ " # 生效条件:参数 send_packets/ack_all 合法\n"
188
+ " # 子功能:① 条件判定 ② 结果处理\n"
189
+ " # 执行:循环迭代\n"
190
+ " # 不适用条件:ack_all 为空/非法时\n"
191
+ " # 停等协议:发送→等确认→再发下一个(ack_all=False 首包后停止)\n"
192
+ " sent = []\n"
193
+ " for p in send_packets:\n"
194
+ " sent.append(p)\n"
195
+ " if not ack_all:\n"
196
+ " break\n"
197
+ " return sent\n"),
198
+ "cases": [(([1, 2, 3], True), [1, 2, 3]),
199
+ (([1, 2], False), [1]),
200
+ (( [], True), [])],
201
+ "params": [],
202
+ "calibration": "对照:网络可靠传输——停等协议(逐包确认后再发下一包)",
203
+ },
204
+ "蜂群-消息分帧": {
205
+ "task": "消息分帧",
206
+ "pattern": (
207
+ "def frame_decode(buf, delim=b'\\r\\n'):\n"
208
+ " # 生效条件:buf.find 可用\n"
209
+ " # 子功能:① 调用 len\n"
210
+ " # 执行:循环迭代;顺序调用\n"
211
+ " # 不适用条件:idx 越界(Lt)时\n"
212
+ " # 蜂群会话层:字节流按分隔符分帧(粘包/半包处理)\n"
213
+ " frames = []\n"
214
+ " while True:\n"
215
+ " idx = buf.find(delim)\n"
216
+ " if idx < 0:\n"
217
+ " break\n"
218
+ " frames.append(buf[:idx])\n"
219
+ " buf = buf[idx + len(delim):]\n"
220
+ " return frames, buf\n"),
221
+ "cases": [((b'hi\r\nhello\r\n',), ([b'hi', b'hello'], b'')),
222
+ ((b'partial',), ([], b'partial')),
223
+ ((b'a\r\nb\r\nc',), ([b'a', b'b'], b'c'))],
224
+ "params": [],
225
+ "calibration": "对照:会话层——字节流分帧(粘包拆帧、半包留待下段)",
226
+ },
227
+ "蜂群-会话状态": {
228
+ "task": "会话状态",
229
+ "pattern": (
230
+ "def session_step(session, event):\n"
231
+ " # 生效条件:参数 session/event 合法\n"
232
+ " # 子功能:① 条件判定 ② 结果处理\n"
233
+ " # 执行:顺序执行\n"
234
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
235
+ " # 蜂群会话状态机:LISTEN→SYN_SENT→ESTABLISHED(确认)→CLOSED(结束)\n"
236
+ " s = session.get('state', 'LISTEN')\n"
237
+ " if s == 'LISTEN' and event == 'SYN':\n"
238
+ " return 'SYN_SENT'\n"
239
+ " if s == 'SYN_SENT' and event == 'ACK':\n"
240
+ " return 'ESTABLISHED'\n"
241
+ " if s == 'ESTABLISHED' and event == 'FIN':\n"
242
+ " return 'CLOSED'\n"
243
+ " return s\n"),
244
+ "cases": [(({'state': 'LISTEN'}, 'SYN'), 'SYN_SENT'),
245
+ (({'state': 'SYN_SENT'}, 'ACK'), 'ESTABLISHED'),
246
+ (({'state': 'ESTABLISHED'}, 'FIN'), 'CLOSED'),
247
+ (({'state': 'LISTEN'}, 'ACK'), 'LISTEN')],
248
+ "params": [],
249
+ "calibration": "对照:会话层——连接状态机(同步→确认→建立→关闭;非法事件不迁移)",
250
+ },
251
+ "网络-滑动窗口": {
252
+ "task": "滑动窗口",
253
+ "pattern": (
254
+ "def sliding_window(base, next_seq, window_size, ack):\n"
255
+ " # TCP 滑动窗口(滑动窗口协议):收到 ack 后窗口前移(可发送序号 = [next_seq, base+win))\n"
256
+ " # 生效条件:base=已确认序号;next_seq=下一待发;ack=收到的确认\n"
257
+ " # 子功能:① ack 前进基准 ② 待发序号同步 ③ 返回可发送窗口\n"
258
+ " # 执行:ack > base 则前移;next_seq 落后则推进(滑动窗口语义)\n"
259
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
260
+ " # base=已确认序号 next_seq=下一待发 ack=收到的确认\n"
261
+ " if ack > base:\n"
262
+ " base = ack\n"
263
+ " if next_seq < base:\n"
264
+ " next_seq = base\n"
265
+ " return {'base': base, 'next_seq': next_seq,\n"
266
+ " 'window': [base + i for i in range(window_size)]}\n"),
267
+ "cases": [((0, 0, 3, 2), {'base': 2, 'next_seq': 2,
268
+ 'window': [2, 3, 4]}),
269
+ ((2, 2, 3, 5), {'base': 5, 'next_seq': 5,
270
+ 'window': [5, 6, 7]}),
271
+ ((0, 1, 2, 0), {'base': 0, 'next_seq': 1,
272
+ 'window': [0, 1]})],
273
+ "params": [],
274
+ "calibration": "对照:TCP 可靠传输——滑动窗口(ACK 确认后窗口前移,窗口内可发送)",
275
+ },
276
+ "网络-累积确认": {
277
+ "task": "累积确认",
278
+ "pattern": (
279
+ "def cum_ack(received, seq):\n"
280
+ " # 生效条件:参数 received/seq 合法\n"
281
+ " # 子功能:① 主体逻辑执行\n"
282
+ " # 执行:循环迭代\n"
283
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
284
+ " # TCP 累积确认:收到乱序包不确认,连续序列推进 ack(收到 3 则 1,2,3 都确认)\n"
285
+ " received.add(seq)\n"
286
+ " ack = 0\n"
287
+ " while ack + 1 in received:\n"
288
+ " ack += 1\n"
289
+ " return ack\n"),
290
+ "cases": [(({1, 2}, 3), 3),
291
+ (({1, 3}, 2), 3),
292
+ ((set(), 1), 1),
293
+ (({2, 3}, 1), 3)],
294
+ "params": [],
295
+ "calibration": "对照:TCP 接收端——累积确认(连续序号推进 ACK;乱序只确认连续前缀)",
296
+ },
297
+ "网络-拥塞控制": {
298
+ "task": "拥塞控制",
299
+ "pattern": (
300
+ "def slow_start(cwnd, ssthresh, acked, lost):\n"
301
+ " # 生效条件:参数 cwnd/ssthresh/acked/lost 合法\n"
302
+ " # 子功能:① 调用 max;② 调用 min\n"
303
+ " # 执行:顺序调用\n"
304
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
305
+ " # TCP 拥塞控制:慢启动(cwnd 每 RTT 翻倍)→ 阈值后拥塞避免(线性+1)\n"
306
+ " # cwnd=拥塞窗口 ssthresh=慢启动阈值 acked=本 RTT 确认数 lost=是否丢包\n"
307
+ " if lost:\n"
308
+ " ssthresh = max(cwnd // 2, 1)\n"
309
+ " cwnd = 1\n"
310
+ " return {'cwnd': cwnd, 'ssthresh': ssthresh}\n"
311
+ " if cwnd < ssthresh:\n"
312
+ " return {'cwnd': min(cwnd + acked, ssthresh), 'ssthresh': ssthresh}\n"
313
+ " return {'cwnd': cwnd + 1, 'ssthresh': ssthresh}\n"),
314
+ "cases": [((1, 8, 2, False), {'cwnd': 3, 'ssthresh': 8}),
315
+ ((4, 8, 4, False), {'cwnd': 8, 'ssthresh': 8}),
316
+ ((8, 8, 8, False), {'cwnd': 9, 'ssthresh': 8}),
317
+ ((8, 8, 0, True), {'cwnd': 1, 'ssthresh': 4})],
318
+ "params": [],
319
+ "calibration": "对照:TCP 拥塞控制——慢启动指数增长→阈值后线性+1;丢包减半阈值+重置窗口",
320
+ },
321
+ "网络-CIDR": {
322
+ "task": "CIDR子网",
323
+ "pattern": (
324
+ "def cidr_network(ip, prefix):\n"
325
+ " # 生效条件:参数 ip/prefix 合法\n"
326
+ " # 子功能:① 调用 int;② 调用 to_ip;③ 调用 max\n"
327
+ " # 执行:顺序调用\n"
328
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
329
+ " # IP 子网计算:IP + 前缀长度 → 网络地址/广播地址/主机数\n"
330
+ " parts = [int(x) for x in ip.split('.')]\n"
331
+ " mask_int = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF\n"
332
+ " ip_int = (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3]\n"
333
+ " net_int = ip_int & mask_int\n"
334
+ " bcast_int = net_int | (~mask_int & 0xFFFFFFFF)\n"
335
+ " def to_ip(v):\n"
336
+ " # 整数转点分十进制 IP 字符串\n"
337
+ " return '.'.join(str((v >> s) & 0xFF) for s in (24, 16, 8, 0))\n"
338
+ " return {'network': to_ip(net_int), 'broadcast': to_ip(bcast_int),\n"
339
+ " 'hosts': max(0, (1 << (32 - prefix)) - 2)}\n"),
340
+ "cases": [(('192.168.1.130', 24),
341
+ {'network': '192.168.1.0', 'broadcast': '192.168.1.255',
342
+ 'hosts': 254}),
343
+ (('10.0.0.5', 8),
344
+ {'network': '10.0.0.0', 'broadcast': '10.255.255.255',
345
+ 'hosts': 16777214})],
346
+ "params": [],
347
+ "calibration": "对照:网络 IP——CIDR 子网计算(/24 网络地址+广播地址+可用主机数)",
348
+ },
349
+ "网络-距离矢量": {
350
+ "task": "距离矢量",
351
+ "pattern": (
352
+ "def distance_vector(routes, neighbor, neighbor_routes):\n"
353
+ " # 生效条件:参数 routes/neighbor/neighbor_routes 合法\n"
354
+ " # 子功能:① 调用 dict\n"
355
+ " # 执行:循环迭代;顺序调用\n"
356
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
357
+ " # 距离矢量路由(RIP):收到邻居路由表 → 合并(距离+1,取最短)\n"
358
+ " for dst, dist in neighbor_routes.items():\n"
359
+ " nd = dist + 1\n"
360
+ " if dst not in routes or nd < routes[dst]:\n"
361
+ " routes[dst] = nd\n"
362
+ " return dict(routes)\n"),
363
+ "cases": [(({'A': 0, 'B': 1}, 'C', {'A': 2, 'D': 1}),
364
+ {'A': 0, 'B': 1, 'D': 2}),
365
+ (({'A': 0}, 'B', {'A': 5, 'C': 1}),
366
+ {'A': 0, 'C': 2})],
367
+ "params": [],
368
+ "calibration": "对照:网络路由——距离矢量(邻居路由表合并,距离+1 取最短——RIP 语义)",
369
+ },
370
+ "网络-NAT": {
371
+ "task": "NAT转换",
372
+ "pattern": (
373
+ "def nat_translate(table, src_ip, src_port, pub_ip):\n"
374
+ " # 生效条件:参数 table/src_ip/src_port/pub_ip 合法\n"
375
+ " # 子功能:① 调用 len\n"
376
+ " # 执行:顺序调用\n"
377
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
378
+ " # NAT:内网地址→公网地址(端口映射表;已映射复用端口)\n"
379
+ " key = (src_ip, src_port)\n"
380
+ " if key in table:\n"
381
+ " return table[key]\n"
382
+ " pub_port = len(table) + 1024 # 分配新公网端口\n"
383
+ " table[key] = (pub_ip, pub_port)\n"
384
+ " return table[key]\n"),
385
+ "cases": [(({}, '192.168.1.10', 5000, '8.8.8.8'),
386
+ ('8.8.8.8', 1024)),
387
+ (({('192.168.1.10', 5000): ('8.8.8.8', 1024)},
388
+ '192.168.1.10', 5000, '8.8.8.8'),
389
+ ('8.8.8.8', 1024)),
390
+ (({('192.168.1.10', 5000): ('8.8.8.8', 1024)},
391
+ '192.168.1.11', 5000, '8.8.8.8'),
392
+ ('8.8.8.8', 1025))],
393
+ "params": [],
394
+ "calibration": "对照:网络 NAT——内网→公网地址转换(端口映射表,复用已映射端口)",
395
+ },
396
+ "网络-DNS解析": {
397
+ "task": "DNS解析",
398
+ "pattern": (
399
+ "def dns_resolve(cache, domain):\n"
400
+ " # 生效条件:参数 cache/domain 合法\n"
401
+ " # 子功能:① 条件判定 ② 结果处理\n"
402
+ " # 执行:顺序执行\n"
403
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
404
+ " # DNS 解析:域名→IP(缓存命中直返;未命中模拟查询 8.8.8.8)\n"
405
+ " if domain in cache:\n"
406
+ " return cache[domain], 'cache'\n"
407
+ " ip = '8.8.8.8'\n"
408
+ " cache[domain] = ip\n"
409
+ " return ip, 'query'\n"),
410
+ "cases": [(({'a.com': '1.1.1.1'}, 'a.com'), ('1.1.1.1', 'cache')),
411
+ (({}, 'b.com'), ('8.8.8.8', 'query')),
412
+ (({'a.com': '1.1.1.1'}, 'b.com'), ('8.8.8.8', 'query'))],
413
+ "params": [],
414
+ "calibration": "对照:DNS——域名解析(缓存命中直返/未命中查询,缓存加速语义)",
415
+ },
416
+ "网络-HTTP状态码": {
417
+ "task": "HTTP状态码",
418
+ "pattern": (
419
+ "def http_status_class(code):\n"
420
+ " # 生效条件:参数 code 合法\n"
421
+ " # 子功能:① 条件判定 ② 结果处理\n"
422
+ " # 执行:顺序执行\n"
423
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
424
+ " # HTTP 状态码分类:2xx 成功/3xx 重定向/4xx 客户端错/5xx 服务端错\n"
425
+ " if 200 <= code < 300:\n"
426
+ " return '成功'\n"
427
+ " if 300 <= code < 400:\n"
428
+ " return '重定向'\n"
429
+ " if 400 <= code < 500:\n"
430
+ " return '客户端错误'\n"
431
+ " if 500 <= code < 600:\n"
432
+ " return '服务端错误'\n"
433
+ " return '未知'\n"),
434
+ "cases": [((200,), '成功'), ((301,), '重定向'),
435
+ ((404,), '客户端错误'), ((500,), '服务端错误')],
436
+ "params": [],
437
+ "calibration": "对照:HTTP 状态码分类(RFC 9110:2xx/3xx/4xx/5xx)",
438
+ },
439
+ "网络-负载均衡": {
440
+ "task": "负载均衡",
441
+ "pattern": (
442
+ "def load_balance(servers, request_id):\n"
443
+ " # 生效条件:参数 servers/request_id 合法\n"
444
+ " # 子功能:① 调用 len\n"
445
+ " # 执行:顺序调用\n"
446
+ " # 不适用条件:servers 为空/非法时\n"
447
+ " # 负载均衡:轮询调度(请求 → 服务器轮转分配)\n"
448
+ " if not servers:\n"
449
+ " return None\n"
450
+ " return servers[request_id % len(servers)]\n"),
451
+ "cases": [((['s1', 's2', 's3'], 0), 's1'),
452
+ ((['s1', 's2', 's3'], 4), 's2'),
453
+ (([], 0), None)],
454
+ "params": [],
455
+ "calibration": "对照:网络负载均衡——轮询调度(请求均匀分布到服务器)",
456
+ },
457
+ "网络-WebSocket握手": {
458
+ "task": "WebSocket握手",
459
+ "pattern": (
460
+ "def ws_handshake(headers):\n"
461
+ " # 生效条件:参数 headers 合法\n"
462
+ " # 子功能:① 条件判定 ② 结果处理\n"
463
+ " # 执行:顺序执行\n"
464
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
465
+ " # WebSocket 握手:HTTP Upgrade: websocket → 101 切换协议\n"
466
+ " upgrade = headers.get('Upgrade', '').lower()\n"
467
+ " key_ok = 'Sec-WebSocket-Key' in headers\n"
468
+ " if upgrade == 'websocket' and key_ok:\n"
469
+ " return 101, 'Switching Protocols'\n"
470
+ " return 400, 'Bad Request'\n"),
471
+ "cases": [(({'Upgrade': 'websocket', 'Sec-WebSocket-Key': 'k'},),
472
+ (101, 'Switching Protocols')),
473
+ (({'Upgrade': 'http'},), (400, 'Bad Request')),
474
+ (({},), (400, 'Bad Request'))],
475
+ "params": [],
476
+ "calibration": "对照:WebSocket——HTTP Upgrade 握手(RFC 6455:101 切换协议/400 拒绝)",
477
+ },
478
+ "网络-帧封装": {
479
+ "task": "帧封装",
480
+ "pattern": (
481
+ "def ws_frame(opcode, payload):\n"
482
+ " # 生效条件:参数 opcode/payload 合法\n"
483
+ " # 子功能:① 调用 len;② 调用 bytes\n"
484
+ " # 执行:顺序调用\n"
485
+ " # 不适用条件:n 越界(Lt)时\n"
486
+ " # WebSocket 帧:首字节(FIN+opcode) + 长度 + 负载(RFC 6455 简化)\n"
487
+ " fin_opcode = 0x80 | opcode # FIN=1 + 4bit opcode\n"
488
+ " n = len(payload)\n"
489
+ " if n < 126:\n"
490
+ " return bytes([fin_opcode, n]) + payload\n"
491
+ " return bytes([fin_opcode, 126, (n >> 8) & 0xFF, n & 0xFF]) + payload\n"),
492
+ "cases": [((1, b'hi'), b'\x81\x02hi'),
493
+ ((2, b'hello'), b'\x82\x05hello'),
494
+ ((1, b'x' * 130), bytes([0x81, 126, 0, 130]) + b'x' * 130)],
495
+ "params": [],
496
+ "calibration": "对照:WebSocket 帧——FIN+opcode+长度+负载(RFC 6455 帧格式)",
497
+ },
498
+ "网络-流式传输": {
499
+ "task": "流式传输",
500
+ "pattern": (
501
+ "def chunked_encode(data, size=4):\n"
502
+ " # 生效条件:chunk.decode 可用\n"
503
+ " # 子功能:① 调用 range;② 调用 len\n"
504
+ " # 执行:循环迭代;顺序调用\n"
505
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
506
+ " # 流式分块传输:数据切块 + 长度前缀(HTTP chunked 语义)\n"
507
+ " out = []\n"
508
+ " for i in range(0, len(data), size):\n"
509
+ " chunk = data[i:i + size]\n"
510
+ " out.append(f'{len(chunk):X}\\r\\n' + chunk.decode('utf-8', 'ignore') + '\\r\\n')\n"
511
+ " out.append('0\\r\\n\\r\\n')\n"
512
+ " return ''.join(out)\n"),
513
+ "cases": [((b'abcdef', 4), '4\r\nabcd\r\n2\r\nef\r\n0\r\n\r\n'),
514
+ ((b'', 4), '0\r\n\r\n')],
515
+ "params": [],
516
+ "calibration": "对照:HTTP 流式传输——chunked 编码(分块+长度前缀+终止块)",
517
+ },
518
+ "网络-多路复用": {
519
+ "task": "多路复用",
520
+ "pattern": (
521
+ "def stream_mux(streams):\n"
522
+ " # 生效条件:参数 streams 合法\n"
523
+ " # 子功能:① 主体逻辑执行\n"
524
+ " # 执行:循环迭代\n"
525
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
526
+ " # HTTP/2 多路复用:多流帧交错(流 ID + 数据 → 单连接混合帧)\n"
527
+ " frames = []\n"
528
+ " for sid, data in streams:\n"
529
+ " frames.append((sid, data))\n"
530
+ " return frames\n"),
531
+ "cases": [(([(1, 'a'), (3, 'b'), (5, 'c')],),
532
+ [(1, 'a'), (3, 'b'), (5, 'c')]),
533
+ (([],), [])],
534
+ "params": [],
535
+ "calibration": "对照:HTTP/2 多路复用——单连接多流帧交错(流 ID 区分)",
536
+ },
537
+ "网络-连接池": {
538
+ "task": "连接池",
539
+ "pattern": (
540
+ "def conn_pool(pool, op, host=None):\n"
541
+ " # 生效条件:op ∈ {get, put}\n"
542
+ " # 子功能:① op 分支处理\n"
543
+ " # 执行:按 op 分派;顺序调用\n"
544
+ " # 不适用条件:op 非 {get, put} 时\n"
545
+ " # 连接池:获取复用/归还/新建(上限控制,避免频繁建连)\n"
546
+ " if op == 'get':\n"
547
+ " if pool.get(host):\n"
548
+ " return pool[host].pop()\n"
549
+ " return 'new'\n"
550
+ " if op == 'put':\n"
551
+ " pool.setdefault(host, []).append(1)\n"
552
+ " return len(pool[host])\n"
553
+ " return None\n"),
554
+ "cases": [(({'a.com': [1]}, 'get', 'a.com'), 1),
555
+ (({}, 'get', 'a.com'), 'new'),
556
+ (({}, 'put', 'a.com'), 1)],
557
+ "params": [],
558
+ "calibration": "对照:网络连接池——获取复用/归还(空闲复用,避免重复建连)",
559
+ },
560
+ "网络-QUIC握手": {
561
+ "task": "QUIC握手",
562
+ "pattern": (
563
+ "def quic_handshake(cache, client):\n"
564
+ " # 生效条件:参数 cache/client 合法\n"
565
+ " # 子功能:① 条件判定 ② 结果处理\n"
566
+ " # 执行:顺序执行\n"
567
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
568
+ " # QUIC:0-RTT 快速握手(缓存会话 → 首次往返即发数据)\n"
569
+ " if client in cache:\n"
570
+ " return '0-RTT', cache[client]\n"
571
+ " cache[client] = 'ticket'\n"
572
+ " return '1-RTT', 'ticket'\n"),
573
+ "cases": [(({}, 'c1'), ('1-RTT', 'ticket')),
574
+ (({'c1': 'ticket'}, 'c1'), ('0-RTT', 'ticket'))],
575
+ "params": [],
576
+ "calibration": "对照:QUIC——0-RTT 快速握手(缓存会话票据,二次连接免往返)",
577
+ },
578
+ "网络-BGP路径选择": {
579
+ "task": "BGP路径选择",
580
+ "pattern": (
581
+ "def bgp_select(routes):\n"
582
+ " # 生效条件:参数 routes 合法\n"
583
+ " # 子功能:① 调用 len\n"
584
+ " # 执行:循环迭代;顺序调用\n"
585
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
586
+ " # BGP 路径选择:AS 路径最短优先(选路决策属性)\n"
587
+ " best = None\n"
588
+ " for r in routes:\n"
589
+ " if best is None or len(r['as_path']) < len(best['as_path']):\n"
590
+ " best = r\n"
591
+ " return best\n"),
592
+ "cases": [(([{'prefix': '10.0.0.0/8', 'as_path': ['AS1', 'AS2', 'AS3']},
593
+ {'prefix': '10.0.0.0/8', 'as_path': ['AS1', 'AS4']},
594
+ {'prefix': '10.0.0.0/8', 'as_path': ['AS5']}],),
595
+ {'prefix': '10.0.0.0/8', 'as_path': ['AS5']}),
596
+ (([{'as_path': ['A']}],), {'as_path': ['A']})],
597
+ "params": [],
598
+ "calibration": "对照:BGP 路由——路径选择(AS 路径最短优先,选路决策)",
599
+ },
600
+ "网络-Anycast": {
601
+ "task": "Anycast",
602
+ "pattern": (
603
+ "def anycast_select(servers, client_loc):\n"
604
+ " # 生效条件:参数 servers/client_loc 合法\n"
605
+ " # 子功能:① 调用 min;② 调用 abs\n"
606
+ " # 执行:顺序调用\n"
607
+ " # 不适用条件:servers 为空/非法时\n"
608
+ " # Anycast:同一 IP 多节点 → 选最近(就近接入语义)\n"
609
+ " if not servers:\n"
610
+ " return None\n"
611
+ " return min(servers, key=lambda s: abs(s['loc'] - client_loc))\n"),
612
+ "cases": [(([{'id': 'a', 'loc': 10}, {'id': 'b', 'loc': 50}], 15),
613
+ {'id': 'a', 'loc': 10}),
614
+ (([{'id': 'a', 'loc': 10}, {'id': 'b', 'loc': 50}], 45),
615
+ {'id': 'b', 'loc': 50}),
616
+ (([], 0), None)],
617
+ "params": [],
618
+ "calibration": "对照:Anycast——同 IP 多节点就近接入(地理位置最近优先)",
619
+ },
620
+ "网络-CRC校验": {
621
+ "task": "CRC校验",
622
+ "pattern": (
623
+ "def crc16(data):\n"
624
+ " # 生效条件:参数 data 合法\n"
625
+ " # 子功能:① 调用 range\n"
626
+ " # 执行:循环迭代;顺序调用\n"
627
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
628
+ " # CRC-16 校验:多项式 0x8005(数据完整性——传输错误检测)\n"
629
+ " crc = 0\n"
630
+ " for b in data:\n"
631
+ " crc ^= b << 8\n"
632
+ " for _ in range(8):\n"
633
+ " if crc & 0x8000:\n"
634
+ " crc = ((crc << 1) ^ 0x8005) & 0xFFFF\n"
635
+ " else:\n"
636
+ " crc = (crc << 1) & 0xFFFF\n"
637
+ " return crc\n"),
638
+ "cases": [((b'',), 0),
639
+ ((b'AB',), 1929),
640
+ ((b'\x00',), 0)],
641
+ "params": [],
642
+ "calibration": "对照:CRC-16 校验——多项式除法余数(传输完整性检测)",
643
+ },
644
+ "网络-IPv6地址": {
645
+ "task": "IPv6地址",
646
+ "pattern": (
647
+ "def ipv6_parse(addr):\n"
648
+ " # 生效条件:参数 addr 合法\n"
649
+ " # 子功能:① 调用 len\n"
650
+ " # 执行:顺序调用\n"
651
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
652
+ " # IPv6 解析:压缩形式展开 + 分组(:: 零压缩还原)\n"
653
+ " if '::' in addr:\n"
654
+ " left, right = addr.split('::')\n"
655
+ " l = left.split(':') if left else []\n"
656
+ " r = right.split(':') if right else []\n"
657
+ " missing = 8 - len(l) - len(r)\n"
658
+ " groups = l + ['0'] * missing + r\n"
659
+ " else:\n"
660
+ " groups = addr.split(':')\n"
661
+ " return groups\n"),
662
+ "cases": [(('fe80::1',), ['fe80', '0', '0', '0', '0', '0', '0', '1']),
663
+ (('2001:db8::ff:1',), ['2001', 'db8', '0', '0', '0', '0', 'ff', '1']),
664
+ (('::1',), ['0', '0', '0', '0', '0', '0', '0', '1'])],
665
+ "params": [],
666
+ "calibration": "对照:IPv6 地址——:: 零压缩展开为 8 组(RFC 4291)",
667
+ },
668
+ "网络-隧道封装": {
669
+ "task": "隧道封装",
670
+ "pattern": (
671
+ "def tunnel_encap(inner, outer_src, outer_dst):\n"
672
+ " # 生效条件:参数 inner/outer_src/outer_dst 合法\n"
673
+ " # 子功能:① 主体逻辑执行\n"
674
+ " # 执行:顺序执行\n"
675
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
676
+ " # 隧道:内层包 + 外层头(IP-in-IP 封装——跨网络传输)\n"
677
+ " return {'outer': (outer_src, outer_dst), 'inner': inner}\n"
678
+ "def tunnel_decap(pkt):\n"
679
+ " # 解封装:剥离外层头 → 内层包\n"
680
+ " return pkt['inner']\n"),
681
+ "cases": [(('inner_data', '10.0.0.1', '10.0.0.2'),
682
+ {'outer': ('10.0.0.1', '10.0.0.2'), 'inner': 'inner_data'})],
683
+ "params": [],
684
+ "calibration": "对照:隧道——IP-in-IP 封装/解封装(外层头包裹内层包)",
685
+ },
686
+ "网络-VLAN划分": {
687
+ "task": "VLAN划分",
688
+ "pattern": (
689
+ "def vlan_tag(frame, vlan_id):\n"
690
+ " # 生效条件:参数 frame/vlan_id 合法\n"
691
+ " # 子功能:① 主体逻辑执行\n"
692
+ " # 执行:顺序执行\n"
693
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
694
+ " # VLAN:802.1Q 标签(4 字节——TPID+TCI 含 VID 12bit)\n"
695
+ " tci = vlan_id & 0xFFF\n"
696
+ " return ('0x8100', tci)\n"),
697
+ "cases": [(('data', 100), ('0x8100', 100)),
698
+ (('data', 4095), ('0x8100', 4095)),
699
+ (('data', 0), ('0x8100', 0))],
700
+ "params": [],
701
+ "calibration": "对照:VLAN——802.1Q 标签(TPID 0x8100 + VID 12bit)",
702
+ },
703
+ "网络-MQTT发布订阅": {
704
+ "task": "MQTT发布订阅",
705
+ "pattern": (
706
+ "def mqtt_broker(broker, op, topic=None, payload=None, client=None):\n"
707
+ " # 生效条件:op ∈ {publish, subscribe}\n"
708
+ " # 子功能:① op 分支处理\n"
709
+ " # 执行:按 op 分派;顺序调用\n"
710
+ " # 不适用条件:op 非 {publish, subscribe} 时\n"
711
+ " # MQTT:发布/订阅(主题路由——客户端订阅主题收消息)\n"
712
+ " if op == 'subscribe':\n"
713
+ " broker.setdefault(topic, set()).add(client)\n"
714
+ " return len(broker[topic])\n"
715
+ " if op == 'publish':\n"
716
+ " subs = broker.get(topic, set())\n"
717
+ " return sorted(subs)\n"
718
+ " return None\n"),
719
+ "cases": [(({}, 'subscribe', 'temp', None, 'dev1'), 1),
720
+ (({'temp': {'dev1'}}, 'publish', 'temp', 25.5), ['dev1']),
721
+ (({}, 'publish', 'temp', 1), [])],
722
+ "params": [],
723
+ "calibration": "对照:MQTT——发布/订阅(主题路由,订阅者接收主题消息)",
724
+ },
725
+ "网络-物联网遥测": {
726
+ "task": "物联网遥测",
727
+ "pattern": (
728
+ "def iot_telemetry(devices, device, reading):\n"
729
+ " # 生效条件:参数 devices/device/reading 合法\n"
730
+ " # 子功能:① 调用 len\n"
731
+ " # 执行:顺序调用\n"
732
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
733
+ " # IoT 遥测:传感器读数上报(设备 → 平台数据流)\n"
734
+ " devices.setdefault(device, []).append(reading)\n"
735
+ " return len(devices[device])\n"),
736
+ "cases": [(({}, 'sensor1', 22.5), 1),
737
+ (({'sensor1': [22.5]}, 'sensor1', 23.0), 2),
738
+ (({}, 'sensor2', 1), 1)],
739
+ "params": [],
740
+ "calibration": "对照:物联网——传感器遥测上报(设备读数持续流)",
741
+ },
742
+ "网络-消息队列": {
743
+ "task": "消息队列",
744
+ "pattern": (
745
+ "def msg_queue(q, op, item=None):\n"
746
+ " # 生效条件:op ∈ {dequeue, enqueue}\n"
747
+ " # 子功能:① op 分支处理\n"
748
+ " # 执行:按 op 分派;顺序调用\n"
749
+ " # 不适用条件:q 为空/非法时;op 非 {dequeue, enqueue} 时\n"
750
+ " # 消息队列:入队/出队(FIFO 生产消费解耦)\n"
751
+ " if op == 'enqueue':\n"
752
+ " q.append(item)\n"
753
+ " return len(q)\n"
754
+ " if op == 'dequeue':\n"
755
+ " if not q:\n"
756
+ " return None\n"
757
+ " return q.pop(0)\n"
758
+ " return None\n"),
759
+ "cases": [(([], 'enqueue', 'a'), 1),
760
+ ((['a'], 'dequeue'), 'a'),
761
+ (([], 'dequeue'), None)],
762
+ "params": [],
763
+ "calibration": "对照:消息队列——FIFO 入队出队(生产消费解耦)",
764
+ },
765
+ "网络-CDN缓存": {
766
+ "task": "CDN缓存",
767
+ "pattern": (
768
+ "def cdn_cache(edges, content, url):\n"
769
+ " # 生效条件:参数 edges/content/url 合法\n"
770
+ " # 子功能:① 条件判定 ② 结果处理\n"
771
+ " # 执行:顺序执行\n"
772
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
773
+ " # CDN:边缘节点缓存(内容就近分发——回源/命中)\n"
774
+ " edge = edges[0] if edges else None\n"
775
+ " if edge is None:\n"
776
+ " return ('origin', url)\n"
777
+ " edge.setdefault('cache', {})\n"
778
+ " if url in edge['cache']:\n"
779
+ " return ('hit', edge['cache'][url])\n"
780
+ " edge['cache'][url] = content\n"
781
+ " return ('miss', content)\n"),
782
+ "cases": [(([{'cache': {}}], 'DATA', '/a'), ('miss', 'DATA')),
783
+ (([{'cache': {'/a': 'DATA'}}], 'X', '/a'), ('hit', 'DATA')),
784
+ (([], 'DATA', '/a'), ('origin', '/a'))],
785
+ "params": [],
786
+ "calibration": "对照:CDN——边缘缓存(命中/回源/缓存写入,内容就近分发)",
787
+ },
788
+ "网络-边缘计算": {
789
+ "task": "边缘计算",
790
+ "pattern": (
791
+ "def edge_compute(nodes, task, data):\n"
792
+ " # 生效条件:参数 nodes/task/data 合法\n"
793
+ " # 子功能:① 调用 min\n"
794
+ " # 执行:顺序调用\n"
795
+ " # 不适用条件:nodes 为空/非法时(隐式盲区:返回默认值 ('cloud', 0) = 未知行为——不适用)\n"
796
+ " # 边缘计算:任务分发到就近节点处理(延迟降低语义)\n"
797
+ " if not nodes:\n"
798
+ " return ('cloud', task)\n"
799
+ " node = min(nodes, key=lambda n: n['loc'])\n"
800
+ " return (node['id'], task, node['fn'](data))\n"),
801
+ "cases": [(([{'id': 'e1', 'loc': 1, 'fn': lambda x: x * 2}], 'double', 5),
802
+ ('e1', 'double', 10)),
803
+ (([], 'task', 1), ('cloud', 'task'))],
804
+ "params": [],
805
+ "calibration": "对照:边缘计算——任务就近处理(边缘节点/云端回退)",
806
+ },
807
+ "网络-内容路由": {
808
+ "task": "内容路由",
809
+ "pattern": (
810
+ "def content_route(table, url):\n"
811
+ " # 生效条件:url.startswith 可用\n"
812
+ " # 子功能:① 调用 len\n"
813
+ " # 执行:循环迭代;顺序调用\n"
814
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
815
+ " # 内容路由:URL 前缀 → 后端节点(按内容寻址)\n"
816
+ " best = None\n"
817
+ " for prefix, node in table.items():\n"
818
+ " if url.startswith(prefix) and (best is None\n"
819
+ " or len(prefix) > len(best[0])):\n"
820
+ " best = (prefix, node)\n"
821
+ " return best[1] if best else None\n"),
822
+ "cases": [(({'/img': 'img-srv', '/img/logo': 'logo-srv'}, '/img/logo/a.png'),
823
+ 'logo-srv'),
824
+ (({'/api': 'api-srv'}, '/static/x'), None)],
825
+ "params": [],
826
+ "calibration": "对照:内容路由——URL 最长前缀匹配(按内容寻址到节点)",
827
+ },
828
+ "网络-流量统计": {
829
+ "task": "流量统计",
830
+ "pattern": (
831
+ "def traffic_stats(flows):\n"
832
+ " # 生效条件:参数 flows 合法\n"
833
+ " # 子功能:① 主体逻辑执行\n"
834
+ " # 执行:循环迭代\n"
835
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
836
+ " # 流量统计:每流字节/包汇总(流量分析)\n"
837
+ " stats = {}\n"
838
+ " for f in flows:\n"
839
+ " key = f['src'] + '→' + f['dst']\n"
840
+ " s = stats.setdefault(key, {'bytes': 0, 'pkts': 0})\n"
841
+ " s['bytes'] += f['bytes']\n"
842
+ " s['pkts'] += f['pkts']\n"
843
+ " return stats\n"),
844
+ "cases": [(([{'src': 'a', 'dst': 'b', 'bytes': 100, 'pkts': 2},
845
+ {'src': 'a', 'dst': 'b', 'bytes': 50, 'pkts': 1}],),
846
+ {'a→b': {'bytes': 150, 'pkts': 3}}),
847
+ (([],), {})],
848
+ "params": [],
849
+ "calibration": "对照:网络监控——流量统计(每流字节/包汇总)",
850
+ },
851
+ "网络-延迟测量": {
852
+ "task": "延迟测量",
853
+ "pattern": (
854
+ "def rtt_stats(samples):\n"
855
+ " # 生效条件:参数 samples 合法\n"
856
+ " # 子功能:① 调用 round;② 调用 min;③ 调用 max\n"
857
+ " # 执行:顺序调用\n"
858
+ " # 不适用条件:samples 为空/非法时(隐式盲区:返回默认值 {'avg': 0.0, 'min': 0, 'max': = 未知行为——不适用)\n"
859
+ " # RTT 测量:延迟样本 → 平均/最小/最大(链路质量)\n"
860
+ " if not samples:\n"
861
+ " return {'avg': 0.0, 'min': 0, 'max': 0}\n"
862
+ " return {'avg': round(sum(samples) / len(samples), 2),\n"
863
+ " 'min': min(samples), 'max': max(samples)}\n"),
864
+ "cases": [(([10, 20, 30],), {'avg': 20.0, 'min': 10, 'max': 30}),
865
+ (([],), {'avg': 0.0, 'min': 0, 'max': 0})],
866
+ "params": [],
867
+ "calibration": "对照:网络监控——RTT 延迟测量(平均/最小/最大)",
868
+ },
869
+ "网络-异常检测": {
870
+ "task": "异常检测",
871
+ "pattern": (
872
+ "def anomaly_detect(traffic, threshold):\n"
873
+ " # 生效条件:参数 traffic/threshold 合法\n"
874
+ " # 子功能:① 条件判定 ② 结果处理\n"
875
+ " # 执行:循环迭代\n"
876
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
877
+ " # 异常检测:流量突增(超过阈值 → 告警)\n"
878
+ " alerts = []\n"
879
+ " for t in traffic:\n"
880
+ " if t > threshold:\n"
881
+ " alerts.append(t)\n"
882
+ " return alerts\n"),
883
+ "cases": [(([50, 200, 80], 100), [200]),
884
+ (([10, 20], 100), []),
885
+ (([], 100), [])],
886
+ "params": [],
887
+ "calibration": "对照:网络监控——异常检测(流量突增告警)",
888
+ },
889
+ "网络-报文解析": {
890
+ "task": "报文解析",
891
+ "pattern": (
892
+ "def parse_ip(packet):\n"
893
+ " # 报文解析(IP 数据包解析):头部字段(版本/协议/源/目的)\n"
894
+ " # 生效条件:packet 为 IP 报文字节(≥20 字节头部)\n"
895
+ " # 子功能:① 版本/协议提取 ② 源地址提取 ③ 目的地址提取\n"
896
+ " # 执行:按字节偏移位运算 + 点分十进制拼接\n"
897
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
898
+ " ver = packet[0] >> 4\n"
899
+ " proto = packet[9]\n"
900
+ " src = '.'.join(str(b) for b in packet[12:16])\n"
901
+ " dst = '.'.join(str(b) for b in packet[16:20])\n"
902
+ " return {'version': ver, 'proto': proto, 'src': src, 'dst': dst}\n"),
903
+ "cases": [((bytes([0x45, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0,
904
+ 192, 168, 1, 1, 8, 8, 8, 8]),),
905
+ {'version': 4, 'proto': 6, 'src': '192.168.1.1',
906
+ 'dst': '8.8.8.8'})],
907
+ "params": [],
908
+ "calibration": "对照:网络分析——IP 报文解析(版本/协议/源/目的)",
909
+ },
910
+ "网络-抓包分析": {
911
+ "task": "抓包分析",
912
+ "pattern": (
913
+ "def capture_stats(captures):\n"
914
+ " # 生效条件:参数 captures 合法\n"
915
+ " # 子功能:① 调用 len\n"
916
+ " # 执行:循环迭代;顺序调用\n"
917
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
918
+ " # 抓包分析:包计数/协议分布(pcap 统计语义)\n"
919
+ " total = len(captures)\n"
920
+ " by_proto = {}\n"
921
+ " for c in captures:\n"
922
+ " by_proto[c['proto']] = by_proto.get(c['proto'], 0) + 1\n"
923
+ " return {'total': total, 'by_proto': by_proto}\n"),
924
+ "cases": [(([{'proto': 'TCP'}, {'proto': 'TCP'}, {'proto': 'UDP'}],),
925
+ {'total': 3, 'by_proto': {'TCP': 2, 'UDP': 1}}),
926
+ (([],), {'total': 0, 'by_proto': {}})],
927
+ "params": [],
928
+ "calibration": "对照:抓包分析——包计数/协议分布(pcap 统计)",
929
+ },
930
+ "网络-协议解码": {
931
+ "task": "协议解码",
932
+ "pattern": (
933
+ "def hex_decode(hex_str):\n"
934
+ " # 生效条件:bytes.fromhex 可用\n"
935
+ " # 子功能:① 主体逻辑执行\n"
936
+ " # 执行:顺序执行\n"
937
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
938
+ " # 协议解码:十六进制 → 字节串(抓包数据解码)\n"
939
+ " return bytes.fromhex(hex_str)\n"),
940
+ "cases": [(('48656c6c6f',), b'Hello'),
941
+ (('00',), b'\x00'),
942
+ (('',), b'')],
943
+ "params": [],
944
+ "calibration": "对照:协议解码——十六进制转字节(抓包数据)",
945
+ },
946
+ "网络-令牌桶限速": {
947
+ "task": "令牌桶",
948
+ "pattern": (
949
+ "def token_bucket(tokens, capacity, rate, elapsed):\n"
950
+ " # 生效条件:参数 tokens/capacity/rate/elapsed 合法\n"
951
+ " # 子功能:① 调用 min\n"
952
+ " # 执行:顺序调用\n"
953
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
954
+ " # 令牌桶限速:按速率补令牌(上限 capacity)——流量整形\n"
955
+ " return min(capacity, tokens + rate * elapsed)\n"),
956
+ "cases": [((0, 10, 2, 3), 6),
957
+ ((8, 10, 2, 3), 10),
958
+ ((5, 10, 0, 5), 5)],
959
+ "params": [],
960
+ "calibration": "对照:网络限速——令牌桶(速率补令牌,容量封顶)",
961
+ },
962
+ "网络-服务发现": {
963
+ "task": "服务发现",
964
+ "pattern": (
965
+ "def service_discover(registry, op, service=None, addr=None, ttl=0, now=0):\n"
966
+ " # 生效条件:op ∈ {discover, heartbeat, register}\n"
967
+ " # 子功能:① op 分支处理\n"
968
+ " # 执行:按 op 分派\n"
969
+ " # 不适用条件:op 非 {discover, heartbeat, register} 时\n"
970
+ " # 服务发现:注册 / 心跳续期 / 发现(健康节点,过期剔除)\n"
971
+ " if op == 'register':\n"
972
+ " registry[service] = {'addr': addr, 'expire': now + ttl}\n"
973
+ " return 'registered'\n"
974
+ " if op == 'heartbeat':\n"
975
+ " if service in registry:\n"
976
+ " registry[service]['expire'] = now + ttl\n"
977
+ " return 'renewed'\n"
978
+ " return 'unknown'\n"
979
+ " if op == 'discover':\n"
980
+ " return [s for s, info in registry.items()\n"
981
+ " if info['expire'] >= now]\n"
982
+ " return None\n"),
983
+ "cases": [(({}, 'register', 'svc1', '10.0.0.1', 60, 100), 'registered'),
984
+ (({'svc1': {'addr': '10.0.0.1', 'expire': 160}}, 'discover',
985
+ None, None, 0, 100), ['svc1']),
986
+ (({'svc1': {'addr': 'a', 'expire': 150}}, 'discover',
987
+ None, None, 0, 160), []),
988
+ (({}, 'heartbeat', 'svc1', None, 60, 100), 'unknown')],
989
+ "params": [],
990
+ "calibration": "对照:服务发现——注册/心跳续期/健康发现(过期剔除)",
991
+ },
992
+ "网络-加密握手": {
993
+ "task": "加密握手",
994
+ "pattern": (
995
+ "def tls_handshake(state, op):\n"
996
+ " # 生效条件:op ∈ {exchange, finish, hello}\n"
997
+ " # 子功能:① op 分支处理\n"
998
+ " # 执行:按 op 分派\n"
999
+ " # 不适用条件:op 非 {exchange, finish, hello} 时\n"
1000
+ " # 加密传输:TLS 简化握手状态机(问候→密钥交换→完成→安全通道)\n"
1001
+ " if op == 'hello':\n"
1002
+ " state['phase'] = 'hello'\n"
1003
+ " return 'server_hello'\n"
1004
+ " if op == 'exchange':\n"
1005
+ " state['phase'] = 'exchange'\n"
1006
+ " state['session_key'] = (state.get('client_rand', 0)\n"
1007
+ " + state.get('server_rand', 0)) % 256\n"
1008
+ " return 'key_established'\n"
1009
+ " if op == 'finish':\n"
1010
+ " if 'session_key' not in state:\n"
1011
+ " if 'client_rand' not in state or 'server_rand' not in state:\n"
1012
+ " return 'not_ready'\n"
1013
+ " # 防御式:未显式 exchange 时自动协商(状态机容错)\n"
1014
+ " state['session_key'] = (state['client_rand']\n"
1015
+ " + state['server_rand']) % 256\n"
1016
+ " state['phase'] = 'secure'\n"
1017
+ " return 'secure_channel'\n"
1018
+ " return None\n"),
1019
+ "cases": [(({'client_rand': 7}, 'hello'), 'server_hello'),
1020
+ (({'client_rand': 7, 'server_rand': 3}, 'exchange'),
1021
+ 'key_established'),
1022
+ (({'client_rand': 7, 'server_rand': 3}, 'finish'),
1023
+ 'secure_channel'),
1024
+ (({}, 'finish'), 'not_ready')],
1025
+ "params": [],
1026
+ "calibration": "对照:TLS 握手——问候→密钥交换→完成(会话密钥协商)",
1027
+ },
1028
+ "网络-慢启动": {
1029
+ "task": "慢启动",
1030
+ "pattern": (
1031
+ "def slow_start(cwnd, ssthresh, rtts):\n"
1032
+ " # 生效条件:参数 cwnd/ssthresh/rtts 合法\n"
1033
+ " # 子功能:① 调用 range\n"
1034
+ " # 执行:循环迭代;顺序调用\n"
1035
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1036
+ " # 慢启动:每 RTT 拥塞窗口翻倍(指数增长),达阈值转拥塞避免(线性)\n"
1037
+ " for _ in range(rtts):\n"
1038
+ " if cwnd < ssthresh:\n"
1039
+ " cwnd *= 2\n"
1040
+ " else:\n"
1041
+ " cwnd += 1\n"
1042
+ " return cwnd\n"),
1043
+ "cases": [((1, 8, 3), 8),
1044
+ ((1, 8, 5), 10),
1045
+ ((4, 8, 1), 8),
1046
+ ((1, 2, 0), 1)],
1047
+ "params": [],
1048
+ "calibration": "对照:TCP 慢启动——每 RTT 窗口翻倍,达阈值转线性(拥塞避免)",
1049
+ },
1050
+ "网络-快速重传": {
1051
+ "task": "快速重传",
1052
+ "pattern": (
1053
+ "def fast_retransmit(dup_acks, threshold=3):\n"
1054
+ " # 生效条件:参数 dup_acks/threshold 合法\n"
1055
+ " # 子功能:① 主体逻辑执行\n"
1056
+ " # 执行:顺序执行\n"
1057
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1058
+ " # 快速重传:重复 ACK 达阈值立即重传(不等超时——快速恢复)\n"
1059
+ " return dup_acks >= threshold\n"),
1060
+ "cases": [((2, 3), False),
1061
+ ((3, 3), True),
1062
+ ((5, 3), True),
1063
+ ((3, 4), False)],
1064
+ "params": [],
1065
+ "calibration": "对照:TCP 快速重传——3 个重复 ACK 触发立即重传(不等超时)",
1066
+ },
1067
+ "网络-选择性确认": {
1068
+ "task": "选择性确认",
1069
+ "pattern": (
1070
+ "def sack_missing(received, expected):\n"
1071
+ " # 生效条件:参数 received/expected 合法\n"
1072
+ " # 子功能:① 调用 range\n"
1073
+ " # 执行:顺序调用\n"
1074
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1075
+ " # 选择性确认:已收段 vs 期望序列 → 缺失段(SACK——只重传缺失)\n"
1076
+ " return [i for i in range(1, expected + 1) if i not in received]\n"),
1077
+ "cases": [(({1, 2, 4}, 5), [3, 5]),
1078
+ (({1, 2, 3}, 3), []),
1079
+ ((set(), 3), [1, 2, 3])],
1080
+ "params": [],
1081
+ "calibration": "对照:TCP SACK——块确认只重传缺失段(高效丢包恢复)",
1082
+ },
1083
+ "网络-端口转发": {
1084
+ "task": "端口转发",
1085
+ "pattern": (
1086
+ "def port_forward(table, op, ext_port=None, int_host=None, int_port=None):\n"
1087
+ " # 生效条件:op ∈ {add, lookup, remove}\n"
1088
+ " # 子功能:① op 分支处理\n"
1089
+ " # 执行:按 op 分派\n"
1090
+ " # 不适用条件:op 非 {add, lookup, remove} 时\n"
1091
+ " # 端口转发:add 映射 / lookup 查询 / remove 删除(外网端口→内网)\n"
1092
+ " if op == 'add':\n"
1093
+ " table[ext_port] = (int_host, int_port)\n"
1094
+ " return 'added'\n"
1095
+ " if op == 'lookup':\n"
1096
+ " return table.get(ext_port)\n"
1097
+ " if op == 'remove':\n"
1098
+ " return table.pop(ext_port, None)\n"
1099
+ " return None\n"),
1100
+ "cases": [(({}, 'add', 8080, '192.168.1.10', 80), 'added'),
1101
+ (({8080: ('192.168.1.10', 80)}, 'lookup', 8080),
1102
+ ('192.168.1.10', 80)),
1103
+ (({}, 'lookup', 8080), None),
1104
+ (({8080: ('h', 80)}, 'remove', 8080), ('h', 80))],
1105
+ "params": [],
1106
+ "calibration": "对照:NAT 端口转发——外网端口→内网主机端口映射(增删查)",
1107
+ },
1108
+ "网络-QoS队列": {
1109
+ "task": "QoS队列",
1110
+ "pattern": (
1111
+ "def qos_queue(queues, op, flow=None, priority=None):\n"
1112
+ " # 生效条件:op ∈ {classify, dequeue, enqueue}\n"
1113
+ " # 子功能:① op 分支处理\n"
1114
+ " # 执行:按 op 分派;循环迭代\n"
1115
+ " # 不适用条件:op 非 {classify, dequeue, enqueue} 时\n"
1116
+ " # QoS 队列:classify 流量分类 / enqueue 按优先级入队 / dequeue 高优先先出\n"
1117
+ " if op == 'classify':\n"
1118
+ " return 'high' if priority and priority >= 3 else 'low'\n"
1119
+ " if op == 'enqueue':\n"
1120
+ " lvl = 'high' if priority and priority >= 3 else 'low'\n"
1121
+ " queues.setdefault(lvl, []).append(flow)\n"
1122
+ " return lvl\n"
1123
+ " if op == 'dequeue':\n"
1124
+ " for lvl in ('high', 'low'):\n"
1125
+ " q = queues.get(lvl)\n"
1126
+ " if q:\n"
1127
+ " return q.pop(0)\n"
1128
+ " return None\n"
1129
+ " return None\n"),
1130
+ "cases": [(({}, 'classify', None, 5), 'high'),
1131
+ (({}, 'classify', None, 1), 'low'),
1132
+ (({}, 'enqueue', 'f1', 5), 'high'),
1133
+ (({'high': ['f1']}, 'dequeue', None, None), 'f1'),
1134
+ (({}, 'dequeue', None, None), None)],
1135
+ "params": [],
1136
+ "calibration": "对照:网络 QoS——流量分类+优先级队列(高优先先出)",
1137
+ },
1138
+ "网络-链路聚合": {
1139
+ "task": "链路聚合",
1140
+ "pattern": (
1141
+ "def link_aggregation(links, op, link_id=None, data=None):\n"
1142
+ " # 生效条件:op ∈ {add, fail, send}\n"
1143
+ " # 子功能:① op 分支处理\n"
1144
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1145
+ " # 不适用条件:up 为空/非法时;op 非 {add, fail, send} 时\n"
1146
+ " # 链路聚合:add 加链路 / send 选最少链路分发(负载均衡)/ fail 故障切换\n"
1147
+ " if op == 'add':\n"
1148
+ " links.append({'id': link_id, 'up': True, 'sent': 0})\n"
1149
+ " return len(links) - 1\n"
1150
+ " if op == 'send':\n"
1151
+ " up = [l for l in links if l['up']]\n"
1152
+ " if not up:\n"
1153
+ " return 'no_link'\n"
1154
+ " best = min(up, key=lambda l: l['sent'])\n"
1155
+ " best['sent'] += 1\n"
1156
+ " return best['id']\n"
1157
+ " if op == 'fail':\n"
1158
+ " for l in links:\n"
1159
+ " if l['id'] == link_id:\n"
1160
+ " l['up'] = False\n"
1161
+ " return 'failed'\n"
1162
+ " return 'missing'\n"
1163
+ " return None\n"),
1164
+ "cases": [(([], 'add', 1), 0),
1165
+ (([{'id': 1, 'up': True, 'sent': 0}], 'send'), 1),
1166
+ (([{'id': 1, 'up': False}], 'send'), 'no_link'),
1167
+ (([{'id': 1, 'up': True, 'sent': 2},
1168
+ {'id': 2, 'up': True, 'sent': 0}], 'send'), 2),
1169
+ (([{'id': 1, 'up': True, 'sent': 0}], 'fail', 1), 'failed')],
1170
+ "params": [],
1171
+ "calibration": "对照:链路聚合 bonding——多链路负载均衡+故障切换",
1172
+ },
1173
+ "网络-滑动窗口限流": {
1174
+ "task": "滑动窗口限流",
1175
+ "pattern": (
1176
+ "def rate_limit(requests, window, limit):\n"
1177
+ " # 生效条件:参数 requests/window/limit 合法\n"
1178
+ " # 子功能:① 调用 enumerate;② 调用 sum\n"
1179
+ " # 执行:循环迭代;顺序调用\n"
1180
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1181
+ " # 滑动窗口限流:窗口内请求数 ≤ 上限(时间戳窗口滑动)\n"
1182
+ " out = []\n"
1183
+ " for i, ts in enumerate(requests):\n"
1184
+ " window_start = ts - window\n"
1185
+ " cnt = sum(1 for t in requests[:i + 1] if t >= window_start)\n"
1186
+ " out.append('allow' if cnt <= limit else 'deny')\n"
1187
+ " return out\n"),
1188
+ "cases": [(([1, 2, 3], 10, 2), ['allow', 'allow', 'deny']),
1189
+ (([1, 2, 3], 10, 3), ['allow', 'allow', 'allow']),
1190
+ (([], 10, 2), []),
1191
+ (([1, 11], 10, 1), ['allow', 'deny'])],
1192
+ "params": [],
1193
+ "calibration": "对照:滑动窗口限流——窗口内请求计数(超限拒绝)",
1194
+ },
1195
+ "网络-反向代理": {
1196
+ "task": "反向代理",
1197
+ "pattern": (
1198
+ "def reverse_proxy(backends, op, backend_id=None):\n"
1199
+ " # 生效条件:op ∈ {fail, recover, route}\n"
1200
+ " # 子功能:① op 分支处理\n"
1201
+ " # 执行:按 op 分派;顺序调用\n"
1202
+ " # 不适用条件:healthy 为空/非法时;op 非 {fail, recover, route} 时\n"
1203
+ " # 反向代理:route 轮询转发(客户端不知后端)/ fail 摘除 / recover 恢复\n"
1204
+ " if op == 'route':\n"
1205
+ " healthy = [i for i, b in enumerate(backends) if b.get('up', True)]\n"
1206
+ " if not healthy:\n"
1207
+ " return 'no_backend'\n"
1208
+ " hits = [b.get('hits', 0) for b in backends]\n"
1209
+ " total = sum(hits[i] for i in healthy)\n"
1210
+ " idx = healthy[total % len(healthy)]\n"
1211
+ " backends[idx]['hits'] = hits[idx] + 1\n"
1212
+ " return idx\n"
1213
+ " if op == 'fail':\n"
1214
+ " backends[backend_id]['up'] = False\n"
1215
+ " return 'failed'\n"
1216
+ " if op == 'recover':\n"
1217
+ " backends[backend_id]['up'] = True\n"
1218
+ " return 'recovered'\n"
1219
+ " return None\n"),
1220
+ "cases": [(([{'up': True, 'hits': 0}], 'route'), 0),
1221
+ (([{'up': False}], 'route'), 'no_backend'),
1222
+ (([{'up': True, 'hits': 0}, {'up': True, 'hits': 1}],
1223
+ 'route'), 1),
1224
+ (([{'up': True, 'hits': 0}], 'fail', 0), 'failed')],
1225
+ "params": [],
1226
+ "calibration": "对照:反向代理——轮询转发/健康摘除(后端对客户端透明)",
1227
+ },
1228
+ "网络-组播": {
1229
+ "task": "组播",
1230
+ "pattern": (
1231
+ "def multicast_group(groups, op, group=None, member=None, msg=None):\n"
1232
+ " # 生效条件:op ∈ {join, leave, send}\n"
1233
+ " # 子功能:① op 分支处理\n"
1234
+ " # 执行:按 op 分派\n"
1235
+ " # 不适用条件:op 非 {join, leave, send} 时\n"
1236
+ " # 组播:join 加入组 / leave 离开 / send 组内广播(成员管理)\n"
1237
+ " if op == 'join':\n"
1238
+ " groups.setdefault(group, []).append(member)\n"
1239
+ " return groups[group]\n"
1240
+ " if op == 'leave':\n"
1241
+ " g = groups.get(group, [])\n"
1242
+ " if member in g:\n"
1243
+ " g.remove(member)\n"
1244
+ " return g\n"
1245
+ " if op == 'send':\n"
1246
+ " return [(m, msg) for m in groups.get(group, [])]\n"
1247
+ " return None\n"),
1248
+ "cases": [(({}, 'join', 'g1', 'a'), ['a']),
1249
+ (({'g1': ['a', 'b']}, 'leave', 'g1', 'a'), ['b']),
1250
+ (({'g1': ['a', 'b']}, 'send', 'g1', None, 'hi'),
1251
+ [('a', 'hi'), ('b', 'hi')]),
1252
+ (({}, 'send', 'g1', None, 'hi'), [])],
1253
+ "params": [],
1254
+ "calibration": "对照:IP 组播——组成员加入/离开/组内广播(成员管理)",
1255
+ },
1256
+ "网络-Reno拥塞控制": {
1257
+ "task": "Reno拥塞控制",
1258
+ "pattern": (
1259
+ "def reno_phase(state, event, cwnd=None):\n"
1260
+ " # 生效条件:event ∈ {ack, loss}\n"
1261
+ " # 子功能:1 event 分支处理\n"
1262
+ " # 执行:按 op 分派;顺序调用\n"
1263
+ " # 不适用条件:event 非 {ack, loss} 时\n"
1264
+ " # Reno 拥塞控制:ack 慢启动翻倍/拥塞避免线性,loss 快速恢复(阈值减半)\n"
1265
+ " if event == 'loss':\n"
1266
+ " state['ssthresh'] = max((cwnd or state.get('cwnd', 1)) // 2, 1)\n"
1267
+ " state['phase'] = 'fast_recovery'\n"
1268
+ " return state['ssthresh']\n"
1269
+ " if event == 'ack':\n"
1270
+ " if state.get('cwnd', 1) < state.get('ssthresh', 16):\n"
1271
+ " state['cwnd'] = state.get('cwnd', 1) * 2\n"
1272
+ " state['phase'] = 'slow_start'\n"
1273
+ " else:\n"
1274
+ " state['cwnd'] = state.get('cwnd', 1) + 1\n"
1275
+ " state['phase'] = 'congestion_avoidance'\n"
1276
+ " return state['cwnd']\n"
1277
+ " return None\n"),
1278
+ "cases": [(({'cwnd': 1, 'ssthresh': 16}, 'ack'), 2),
1279
+ (({'cwnd': 16, 'ssthresh': 16}, 'ack'), 17),
1280
+ (({'cwnd': 16, 'ssthresh': 16}, 'loss', 16), 8)],
1281
+ "params": [],
1282
+ "calibration": "对照:TCP Reno——慢启动指数/拥塞避免线性/丢包阈值减半快速恢复",
1283
+ },
1284
+ "网络-RTO退避": {
1285
+ "task": "RTO退避",
1286
+ "pattern": (
1287
+ "def rto_backoff(rto, losses):\n"
1288
+ " # 生效条件:参数 rto/losses 合法\n"
1289
+ " # 子功能:① 主体逻辑执行\n"
1290
+ " # 执行:顺序执行\n"
1291
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1292
+ " # RTO 重传超时:指数退避(每次超时翻倍——避免拥塞加剧)\n"
1293
+ " return rto * (2 ** losses)\n"),
1294
+ "cases": [((1.0, 0), 1.0),
1295
+ ((1.0, 2), 4.0),
1296
+ ((2.0, 1), 4.0)],
1297
+ "params": [],
1298
+ "calibration": "对照:TCP RTO——指数退避(重传超时翻倍)",
1299
+ },
1300
+ "网络-吞吐量测量": {
1301
+ "task": "吞吐量测量",
1302
+ "pattern": (
1303
+ "def throughput(data_bytes, seconds):\n"
1304
+ " # 生效条件:参数 data_bytes/seconds 合法\n"
1305
+ " # 子功能:① 调用 round\n"
1306
+ " # 执行:顺序调用\n"
1307
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1308
+ " # 吞吐量测量:字节数 / 时间(单位 KB/s)\n"
1309
+ " return round(data_bytes / 1024 / seconds, 3) if seconds else 0.0\n"),
1310
+ "cases": [((10240, 10), 1.0),
1311
+ ((2048, 1), 2.0),
1312
+ ((1024, 0), 0.0)],
1313
+ "params": [],
1314
+ "calibration": "对照:网络吞吐量——字节数/时间(KB/s)",
1315
+ },
1316
+ "网络-链路状态路由": {
1317
+ "task": "链路状态路由",
1318
+ "pattern": (
1319
+ "def link_state_routing(graph, source):\n"
1320
+ " # 生效条件:unvisited.discard 可用\n"
1321
+ " # 子功能:① 调用 set;② 调用 min;③ 调用 float\n"
1322
+ " # 执行:循环迭代;顺序调用\n"
1323
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1324
+ " # 链路状态路由:Dijkstra 最短路径树(OSPF 全拓扑计算)\n"
1325
+ " dist = {source: 0}\n"
1326
+ " prev = {}\n"
1327
+ " unvisited = set(graph)\n"
1328
+ " while unvisited:\n"
1329
+ " u = min(unvisited, key=lambda n: dist.get(n, float('inf')))\n"
1330
+ " unvisited.discard(u)\n"
1331
+ " for v, w in graph.get(u, {}).items():\n"
1332
+ " nd = dist.get(u, float('inf')) + w\n"
1333
+ " if nd < dist.get(v, float('inf')):\n"
1334
+ " dist[v] = nd\n"
1335
+ " prev[v] = u\n"
1336
+ " return dist, prev\n"),
1337
+ "cases": [(({'a': {'b': 1, 'c': 4}, 'b': {'c': 2, 'd': 5},
1338
+ 'c': {'d': 1}, 'd': {}}, 'a'),
1339
+ ({'a': 0, 'b': 1, 'c': 3, 'd': 4},
1340
+ {'b': 'a', 'c': 'b', 'd': 'c'})),
1341
+ (({'a': {'b': 1}, 'b': {}}, 'a'),
1342
+ ({'a': 0, 'b': 1}, {'b': 'a'})),
1343
+ (({'a': {}}, 'a'), ({'a': 0}, {}))],
1344
+ "params": [],
1345
+ "calibration": "对照:OSPF 链路状态路由——Dijkstra 全拓扑最短路径树",
1346
+ },
1347
+ "网络-策略路由": {
1348
+ "task": "策略路由",
1349
+ "pattern": (
1350
+ "def policy_routing(policies, op, flow=None, policy_name=None):\n"
1351
+ " # 生效条件:op ∈ {add, match}\n"
1352
+ " # 子功能:① op 分支处理\n"
1353
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1354
+ " # 不适用条件:op 非 {add, match} 时\n"
1355
+ " # 策略路由:add 注册策略 / match 按流量特征匹配(源地址/类型)\n"
1356
+ " if op == 'add':\n"
1357
+ " policies[policy_name] = flow\n"
1358
+ " return policy_name\n"
1359
+ " if op == 'match':\n"
1360
+ " for name, cond in policies.items():\n"
1361
+ " if all(k in flow and flow[k] == v for k, v in cond.items()):\n"
1362
+ " return name\n"
1363
+ " return None\n"
1364
+ " return None\n"),
1365
+ "cases": [(({}, 'add', {'类型': '视频'}, '视频走专线'), '视频走专线'),
1366
+ (({'视频走专线': {'类型': '视频'}}, 'match',
1367
+ {'类型': '视频', '大小': 100}), '视频走专线'),
1368
+ (({'视频走专线': {'类型': '视频'}}, 'match',
1369
+ {'类型': '文本'}), None)],
1370
+ "params": [],
1371
+ "calibration": "对照:策略路由——按流量特征匹配策略(条件路由)",
1372
+ },
1373
+ "网络-多径传输": {
1374
+ "task": "多径传输",
1375
+ "pattern": (
1376
+ "def multipath_send(paths, op, subflow=None, data=None):\n"
1377
+ " # 生效条件:op ∈ {add, send, stats}\n"
1378
+ " # 子功能:① op 分支处理\n"
1379
+ " # 执行:按 op 分派;顺序调用\n"
1380
+ " # 不适用条件:paths 为空/非法时;op 非 {add, send, stats} 时\n"
1381
+ " # 多径传输:MPTCP 多子流并行(add 加子流 / send 选最少 / stats 汇总)\n"
1382
+ " if op == 'add':\n"
1383
+ " paths[subflow] = {'sent': 0}\n"
1384
+ " return subflow\n"
1385
+ " if op == 'send':\n"
1386
+ " if not paths:\n"
1387
+ " return 'no_path'\n"
1388
+ " best = min(paths, key=lambda p: paths[p]['sent'])\n"
1389
+ " paths[best]['sent'] += len(data)\n"
1390
+ " return best\n"
1391
+ " if op == 'stats':\n"
1392
+ " return {p: paths[p]['sent'] for p in paths}\n"
1393
+ " return None\n"),
1394
+ "cases": [(({}, 'add', 'wifi'), 'wifi'),
1395
+ (({'wifi': {'sent': 0}}, 'send', None, 'hello'), 'wifi'),
1396
+ (({'wifi': {'sent': 5}, '5g': {'sent': 0}},
1397
+ 'send', None, 'ab'), '5g'),
1398
+ (({}, 'send', None, 'x'), 'no_path'),
1399
+ (({'wifi': {'sent': 3}}, 'stats'), {'wifi': 3})],
1400
+ "params": [],
1401
+ "calibration": "对照:MPTCP 多径传输——多子流并行,选最少发送",
1402
+ },
1403
+ "网络-访问令牌": {
1404
+ "task": "访问令牌",
1405
+ "pattern": (
1406
+ "def token_ops(tokens, op, token=None, user=None, ttl=0, now=0):\n"
1407
+ " # 生效条件:op ∈ {issue, revoke, verify}\n"
1408
+ " # 子功能:① op 分支处理\n"
1409
+ " # 执行:按 op 分派\n"
1410
+ " # 不适用条件:op 非 {issue, revoke, verify} 时\n"
1411
+ " # 访问令牌:issue 签发 / verify 校验(未过期且有效)/ revoke 吊销\n"
1412
+ " if op == 'issue':\n"
1413
+ " tokens[token] = {'user': user, 'expire': now + ttl,\n"
1414
+ " 'revoked': False}\n"
1415
+ " return 'issued'\n"
1416
+ " if op == 'verify':\n"
1417
+ " t = tokens.get(token)\n"
1418
+ " if t is None or t.get('revoked'):\n"
1419
+ " return 'invalid'\n"
1420
+ " return 'valid' if t['expire'] >= now else 'expired'\n"
1421
+ " if op == 'revoke':\n"
1422
+ " if token in tokens:\n"
1423
+ " tokens[token]['revoked'] = True\n"
1424
+ " return 'revoked'\n"
1425
+ " return 'missing'\n"
1426
+ " return None\n"),
1427
+ "cases": [(({}, 'issue', 'tk1', 'u1', 60, 100), 'issued'),
1428
+ (({'tk1': {'user': 'u1', 'expire': 160, 'revoked': False}},
1429
+ 'verify', 'tk1', None, 0, 100), 'valid'),
1430
+ (({'tk1': {'user': 'u1', 'expire': 150, 'revoked': False}},
1431
+ 'verify', 'tk1', None, 0, 160), 'expired'),
1432
+ (({'tk1': {'user': 'u1', 'expire': 160, 'revoked': False}},
1433
+ 'revoke', 'tk1'), 'revoked'),
1434
+ (({}, 'verify', 'tk1', None, 0, 100), 'invalid')],
1435
+ "params": [],
1436
+ "calibration": "对照:OAuth 访问令牌——签发/校验(过期与吊销)/吊销",
1437
+ },
1438
+ "网络-压缩传输": {
1439
+ "task": "压缩传输",
1440
+ "pattern": (
1441
+ "def compress_transfer(data, mode):\n"
1442
+ " # 生效条件:mode ∈ {compress, decompress}\n"
1443
+ " # 子功能:1 mode 分支处理\n"
1444
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1445
+ " # 不适用条件:mode 非 {compress, decompress} 时\n"
1446
+ " # 压缩传输:compress 行程编码(RLE 重复段)/ decompress 还原\n"
1447
+ " if mode == 'compress':\n"
1448
+ " out = []\n"
1449
+ " i = 0\n"
1450
+ " while i < len(data):\n"
1451
+ " j = i\n"
1452
+ " while j < len(data) and data[j] == data[i]:\n"
1453
+ " j += 1\n"
1454
+ " out.append((data[i], j - i))\n"
1455
+ " i = j\n"
1456
+ " return out\n"
1457
+ " if mode == 'decompress':\n"
1458
+ " return ''.join(c * n for c, n in data)\n"
1459
+ " return None\n"),
1460
+ "cases": [(('aaabbc', 'compress'), [('a', 3), ('b', 2), ('c', 1)]),
1461
+ (([('a', 3), ('b', 2)], 'decompress'), 'aaabb'),
1462
+ (('', 'compress'), [])],
1463
+ "params": [],
1464
+ "calibration": "对照:压缩传输——RLE 行程编码(重复段压缩/还原)",
1465
+ },
1466
+ "网络-会话亲和": {
1467
+ "task": "会话亲和",
1468
+ "pattern": (
1469
+ "def sticky_session(backends, op, session=None, backend_id=None):\n"
1470
+ " # 生效条件:op ∈ {bind, route}\n"
1471
+ " # 子功能:① op 分支处理\n"
1472
+ " # 执行:按 op 分派\n"
1473
+ " # 不适用条件:op 非 {bind, route} 时\n"
1474
+ " # 会话亲和:bind 绑定会话到后端 / route 同会话同后端(sticky session)\n"
1475
+ " if op == 'bind':\n"
1476
+ " backends[session] = backend_id\n"
1477
+ " return backend_id\n"
1478
+ " if op == 'route':\n"
1479
+ " return backends.get(session)\n"
1480
+ " return None\n"),
1481
+ "cases": [(({}, 'bind', 's1', 0), 0),
1482
+ (({'s1': 0}, 'route', 's1'), 0),
1483
+ (({}, 'route', 's1'), None)],
1484
+ "params": [],
1485
+ "calibration": "对照:负载均衡——会话亲和(sticky session 同会话同后端)",
1486
+ },
1487
+ "网络-链路加密": {
1488
+ "task": "链路加密",
1489
+ "pattern": (
1490
+ "def link_encrypt(frames, op, frame=None, key=7):\n"
1491
+ " # 生效条件:op ∈ {decrypt, encrypt}\n"
1492
+ " # 子功能:① op 分支处理\n"
1493
+ " # 执行:按 op 分派;顺序调用\n"
1494
+ " # 不适用条件:op 非 {decrypt, encrypt} 时\n"
1495
+ " # 链路加密:encrypt 帧加密(异或密钥)/ decrypt 解密(MACsec 链路层)\n"
1496
+ " if op == 'encrypt':\n"
1497
+ " frames[frame] = ''.join(chr(ord(c) ^ key) for c in frame)\n"
1498
+ " return frames[frame]\n"
1499
+ " if op == 'decrypt':\n"
1500
+ " raw = frames.get(frame)\n"
1501
+ " if raw is None:\n"
1502
+ " return None\n"
1503
+ " return ''.join(chr(ord(c) ^ key) for c in raw)\n"
1504
+ " return None\n"),
1505
+ "cases": [(({}, 'encrypt', 'hello', 7), 'obkkh'),
1506
+ (({'hello': 'obkkh'}, 'decrypt', 'hello', 7), 'hello'),
1507
+ (({}, 'decrypt', 'x', 7), None)],
1508
+ "params": [],
1509
+ "calibration": "对照:MACsec 链路加密——帧级加密/解密(链路层保护)",
1510
+ },
1511
+ "网络-流量镜像": {
1512
+ "task": "流量镜像",
1513
+ "pattern": (
1514
+ "def port_mirror(monitor, op, src_port=None, dst_port=None, packet=None):\n"
1515
+ " # 生效条件:op ∈ {capture, mirror, route}\n"
1516
+ " # 子功能:① op 分支处理\n"
1517
+ " # 执行:按 op 分派\n"
1518
+ " # 不适用条件:op 非 {capture, mirror, route} 时\n"
1519
+ " # 流量镜像:mirror 镜像源到目标 / capture 采集 / route 转发(SPAN)\n"
1520
+ " if op == 'mirror':\n"
1521
+ " monitor[src_port] = dst_port\n"
1522
+ " return dst_port\n"
1523
+ " if op == 'capture':\n"
1524
+ " return {'src': src_port, 'packet': packet}\n"
1525
+ " if op == 'route':\n"
1526
+ " dst = monitor.get(src_port)\n"
1527
+ " return dst if dst else 'no_mirror'\n"
1528
+ " return None\n"),
1529
+ "cases": [(({}, 'mirror', 1, 2), 2),
1530
+ (({1: 2}, 'route', 1), 2),
1531
+ (({}, 'route', 1), 'no_mirror'),
1532
+ (({}, 'capture', 1, None, 'pkt'), {'src': 1, 'packet': 'pkt'})],
1533
+ "params": [],
1534
+ "calibration": "对照:SPAN 端口镜像——流量复制到监控口(抓包)",
1535
+ },
1536
+ "网络-网络切片": {
1537
+ "task": "网络切片",
1538
+ "pattern": (
1539
+ "def network_slice(slices, op, name=None, bw=None, flow=None):\n"
1540
+ " # 生效条件:op ∈ {admit, create}\n"
1541
+ " # 子功能:① op 分支处理\n"
1542
+ " # 执行:按 op 分派\n"
1543
+ " # 不适用条件:op 非 {admit, create} 时\n"
1544
+ " # 网络切片:create 创建 / admit 带宽准入(按服务隔离网络资源)\n"
1545
+ " if op == 'create':\n"
1546
+ " slices[name] = {'bw': bw, 'used': 0}\n"
1547
+ " return name\n"
1548
+ " if op == 'admit':\n"
1549
+ " s = slices.get(name)\n"
1550
+ " if s is None:\n"
1551
+ " return 'missing'\n"
1552
+ " if s['used'] + flow > s['bw']:\n"
1553
+ " return 'rejected'\n"
1554
+ " s['used'] += flow\n"
1555
+ " return 'admitted'\n"
1556
+ " return None\n"),
1557
+ "cases": [(({}, 'create', '视频', 100), '视频'),
1558
+ (({'视频': {'bw': 100, 'used': 0}}, 'admit', '视频', None, 60),
1559
+ 'admitted'),
1560
+ (({'视频': {'bw': 100, 'used': 80}}, 'admit', '视频', None, 30),
1561
+ 'rejected'),
1562
+ (({}, 'admit', 'x', None, 10), 'missing')],
1563
+ "params": [],
1564
+ "calibration": "对照:5G 网络切片——按服务隔离带宽资源(准入控制)",
1565
+ },
1566
+ "网络-分块传输": {
1567
+ "task": "分块传输",
1568
+ "pattern": (
1569
+ "def chunked_transfer(op, data=None, chunk_size=0):\n"
1570
+ " # 生效条件:op ∈ {decode, encode};data.index 可用\n"
1571
+ " # 子功能:① op 分支处理\n"
1572
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1573
+ " # 不适用条件:op 非 {decode, encode} 时\n"
1574
+ " # 分块传输:encode 分块编码(每块十六进制长度)/ decode 还原\n"
1575
+ " if op == 'encode':\n"
1576
+ " chunks = [data[i:i + chunk_size]\n"
1577
+ " for i in range(0, len(data), chunk_size)]\n"
1578
+ " return ''.join(f'{len(c):x}\\\\r\\\\n{c}\\\\r\\\\n' for c in chunks) \\\n"
1579
+ " + '0\\\\r\\\\n\\\\r\\\\n'\n"
1580
+ " if op == 'decode':\n"
1581
+ " out = []\n"
1582
+ " i = 0\n"
1583
+ " while i < len(data):\n"
1584
+ " j = data.index('\\\\r\\\\n', i)\n"
1585
+ " size = int(data[i:j], 16)\n"
1586
+ " if size == 0:\n"
1587
+ " break\n"
1588
+ " out.append(data[j + 4:j + 4 + size])\n"
1589
+ " i = j + 4 + size + 4\n"
1590
+ " return ''.join(out)\n"
1591
+ " return None\n"),
1592
+ "cases": [
1593
+ (('encode', 'hello', 3), '3\\r\\nhel\\r\\n2\\r\\nlo\\r\\n0\\r\\n\\r\\n'),
1594
+ (('decode', '3\\r\\nhel\\r\\n2\\r\\nlo\\r\\n0\\r\\n\\r\\n'), 'hello'),
1595
+ (('encode', '', 4), '0\\r\\n\\r\\n')],
1596
+ "params": [],
1597
+ "calibration": "对照:HTTP 分块传输——每块十六进制长度(chunked 编码)",
1598
+ },
1599
+ "网络-HTTP重定向": {
1600
+ "task": "HTTP重定向",
1601
+ "pattern": (
1602
+ "def http_redirect(op, status=None, location=None, max_hops=5):\n"
1603
+ " # 生效条件:op ∈ {follow}\n"
1604
+ " # 子功能:① op 分支处理\n"
1605
+ " # 执行:按 op 分派;循环迭代\n"
1606
+ " # 不适用条件:op 非 {follow} 时\n"
1607
+ " # HTTP 重定向:follow 跟随 3xx(location 链,超跳数返回 None)\n"
1608
+ " if op == 'follow':\n"
1609
+ " hops = 0\n"
1610
+ " while (status >= 300 and status < 400 and hops < max_hops\n"
1611
+ " and location):\n"
1612
+ " status = location.pop(0)\n"
1613
+ " hops += 1\n"
1614
+ " return status if status < 300 or status >= 400 else None\n"
1615
+ " return None\n"),
1616
+ "cases": [(('follow', 200, []), 200),
1617
+ (('follow', 301, [200]), 200),
1618
+ (('follow', 301, [302, 200]), 200),
1619
+ (('follow', 301, []), None)],
1620
+ "params": [],
1621
+ "calibration": "对照:HTTP 重定向——3xx 跟随 location(跳数限制)",
1622
+ },
1623
+ "网络-内容协商": {
1624
+ "task": "内容协商",
1625
+ "pattern": (
1626
+ "def content_negotiation(accept, available, op='match'):\n"
1627
+ " # 生效条件:op ∈ {match};a.strip 可用\n"
1628
+ " # 子功能:① op 分支处理\n"
1629
+ " # 执行:按 op 分派;循环迭代\n"
1630
+ " # 不适用条件:op 非 {match} 时\n"
1631
+ " # 内容协商:Accept 头匹配可用类型(按序——最佳匹配)\n"
1632
+ " if op == 'match':\n"
1633
+ " for a in accept.split(','):\n"
1634
+ " a = a.strip().split(';')[0].strip()\n"
1635
+ " if a in available:\n"
1636
+ " return a\n"
1637
+ " return None\n"
1638
+ " return None\n"),
1639
+ "cases": [(('application/json', ['text/html', 'application/json']),
1640
+ 'application/json'),
1641
+ (('text/html, application/json', ['application/json']),
1642
+ 'application/json'),
1643
+ (('application/xml', ['application/json']), None)],
1644
+ "params": [],
1645
+ "calibration": "对照:HTTP 内容协商——Accept 头匹配可用类型(q 剥离)",
1646
+ },
1647
+ "网络-路径MTU发现": {
1648
+ "task": "路径MTU发现",
1649
+ "pattern": (
1650
+ "def pmtu_discover(state, op, size=None, too_large=None):\n"
1651
+ " # 生效条件:op ∈ {current, probe, result}\n"
1652
+ " # 子功能:① op 分支处理\n"
1653
+ " # 执行:按 op 分派\n"
1654
+ " # 不适用条件:op 非 {current, probe, result} 时\n"
1655
+ " # 路径 MTU 发现:probe 探测 / result 过大减 8 / current 当前值(PMTUD)\n"
1656
+ " if op == 'probe':\n"
1657
+ " state['mtu'] = size\n"
1658
+ " return size\n"
1659
+ " if op == 'result':\n"
1660
+ " if too_large:\n"
1661
+ " state['mtu'] -= 8\n"
1662
+ " return 'reduced'\n"
1663
+ " return 'confirmed'\n"
1664
+ " if op == 'current':\n"
1665
+ " return state.get('mtu')\n"
1666
+ " return None\n"),
1667
+ "cases": [(({}, 'probe', 1500), 1500),
1668
+ (({'mtu': 1500}, 'result', None, True), 'reduced'),
1669
+ (({'mtu': 1492}, 'result', None, False), 'confirmed'),
1670
+ (({'mtu': 1492}, 'current'), 1492)],
1671
+ "params": [],
1672
+ "calibration": "对照:PMTUD——路径最大传输单元发现(过大减 8 重探)",
1673
+ },
1674
+ "网络-端口扫描检测": {
1675
+ "task": "端口扫描检测",
1676
+ "pattern": (
1677
+ "def scan_detect(conns, op, src=None, dst=None):\n"
1678
+ " # 生效条件:op ∈ {check, record}\n"
1679
+ " # 子功能:① op 分支处理\n"
1680
+ " # 执行:按 op 分派;顺序调用\n"
1681
+ " # 不适用条件:op 非 {check, record} 时\n"
1682
+ " # 端口扫描检测:record 记录连接 / check 检测(多端口快速尝试→扫描)\n"
1683
+ " if op == 'record':\n"
1684
+ " conns.setdefault(src, []).append(dst)\n"
1685
+ " return len(conns[src])\n"
1686
+ " if op == 'check':\n"
1687
+ " ports = conns.get(src, [])\n"
1688
+ " return ('scan' if len(ports) >= 5 and len(set(ports)) >= 5\n"
1689
+ " else 'normal')\n"
1690
+ " return None\n"),
1691
+ "cases": [(({}, 'record', '1.2.3.4', 22), 1),
1692
+ (({'1.2.3.4': [22, 80, 443, 8080]}, 'record',
1693
+ '1.2.3.4', 3306), 5),
1694
+ (({'1.2.3.4': [22, 80, 443, 8080, 3306]}, 'check',
1695
+ '1.2.3.4'), 'scan'),
1696
+ (({'1.2.3.4': [22]}, 'check', '1.2.3.4'), 'normal')],
1697
+ "params": [],
1698
+ "calibration": "对照:入侵检测——端口扫描模式(多端口快速尝试识别)",
1699
+ },
1700
+ "网络-会话超时": {
1701
+ "task": "会话超时",
1702
+ "pattern": (
1703
+ "def session_timeout(sessions, op, session=None, now=None, timeout=30):\n"
1704
+ " # 生效条件:op ∈ {activity, check}\n"
1705
+ " # 子功能:① op 分支处理\n"
1706
+ " # 执行:按 op 分派\n"
1707
+ " # 不适用条件:op 非 {activity, check} 时\n"
1708
+ " # 会话超时:activity 更新活跃 / check 检查(空闲超时断开)\n"
1709
+ " if op == 'activity':\n"
1710
+ " sessions[session] = now\n"
1711
+ " return now\n"
1712
+ " if op == 'check':\n"
1713
+ " last = sessions.get(session)\n"
1714
+ " if last is None:\n"
1715
+ " return 'missing'\n"
1716
+ " return 'timeout' if (now - last) > timeout else 'active'\n"
1717
+ " return None\n"),
1718
+ "cases": [(({}, 'activity', 's1', 10), 10),
1719
+ (({'s1': 10}, 'check', 's1', 20), 'active'),
1720
+ (({'s1': 10}, 'check', 's1', 50), 'timeout'),
1721
+ (({}, 'check', 's1', 50), 'missing')],
1722
+ "params": [],
1723
+ "calibration": "对照:会话管理——空闲超时断开(保活续期)",
1724
+ },
1725
+ "网络-消息路由": {
1726
+ "task": "消息路由",
1727
+ "pattern": (
1728
+ "def msg_routing(routes, op, topic=None, queue=None):\n"
1729
+ " # 生效条件:op ∈ {bind, route}\n"
1730
+ " # 子功能:① op 分支处理\n"
1731
+ " # 执行:按 op 分派;顺序调用\n"
1732
+ " # 不适用条件:op 非 {bind, route} 时\n"
1733
+ " # 消息路由:bind 绑定主题到队列 / route 路由(主题→队列)\n"
1734
+ " if op == 'bind':\n"
1735
+ " routes.setdefault(topic, []).append(queue)\n"
1736
+ " return routes[topic]\n"
1737
+ " if op == 'route':\n"
1738
+ " return list(routes.get(topic, []))\n"
1739
+ " return None\n"),
1740
+ "cases": [(({}, 'bind', '设备', 'q1'), ['q1']),
1741
+ (({'设备': ['q1']}, 'bind', '设备', 'q2'), ['q1', 'q2']),
1742
+ (({'设备': ['q1']}, 'route', '设备'), ['q1']),
1743
+ (({}, 'route', '未知'), [])],
1744
+ "params": [],
1745
+ "calibration": "对照:消息中间件——主题绑定队列路由(发布订阅)",
1746
+ },
1747
+ "网络-API限流": {
1748
+ "task": "API限流",
1749
+ "pattern": (
1750
+ "def api_rate_limit(state, op, user=None, quota=0):\n"
1751
+ " # 生效条件:op ∈ {check, use}\n"
1752
+ " # 子功能:① op 分支处理\n"
1753
+ " # 执行:按 op 分派\n"
1754
+ " # 不适用条件:op 非 {check, use} 时\n"
1755
+ " # API 限流:use 消耗配额 / check 检查(每用户配额)\n"
1756
+ " if op == 'use':\n"
1757
+ " state[user] = state.get(user, quota) - 1\n"
1758
+ " return 'ok' if state[user] >= 0 else 'exceeded'\n"
1759
+ " if op == 'check':\n"
1760
+ " return state.get(user, quota)\n"
1761
+ " return None\n"),
1762
+ "cases": [(({}, 'use', 'u1', 3), 'ok'),
1763
+ (({'u1': 0}, 'use', 'u1', 3), 'exceeded'),
1764
+ (({}, 'check', 'u1', 3), 3),
1765
+ (({'u1': 2}, 'check', 'u1', 3), 2)],
1766
+ "params": [],
1767
+ "calibration": "对照:API 网关——每用户配额限流(超额拒绝)",
1768
+ },
1769
+ "网络-数据序列化": {
1770
+ "task": "数据序列化",
1771
+ "pattern": (
1772
+ "def proto_encode(fields, values):\n"
1773
+ " # 生效条件:参数 fields/values 合法\n"
1774
+ " # 子功能:① 调用 enumerate\n"
1775
+ " # 执行:循环迭代;顺序调用\n"
1776
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
1777
+ " # 数据序列化:字段表+值 → 紧凑编码(protobuf 简化——字段序号+类型+值)\n"
1778
+ " out = []\n"
1779
+ " for i, (name, typ) in enumerate(fields):\n"
1780
+ " v = values.get(name)\n"
1781
+ " if v is not None:\n"
1782
+ " out.append((i, typ, v))\n"
1783
+ " return out\n"),
1784
+ "cases": [(([('名', 'str'), ('值', 'int')], {'名': '甲', '值': 3}),
1785
+ [(0, 'str', '甲'), (1, 'int', 3)]),
1786
+ (([('名', 'str')], {}), []),
1787
+ (([('名', 'str'), ('值', 'int')], {'值': 5}),
1788
+ [(1, 'int', 5)])],
1789
+ "params": [],
1790
+ "calibration": "对照:protobuf 序列化——字段序号+类型+值紧凑编码",
1791
+ },
1792
+ "网络-DHCP租约": {
1793
+ "task": "DHCP租约",
1794
+ "pattern": (
1795
+ "def dhcp_lease(pool, op, mac=None, ttl=3600):\n"
1796
+ " # 生效条件:op ∈ {offer, release, renew};state ∈ {free}\n"
1797
+ " # 子功能:① op 分支处理;2 state 分支处理\n"
1798
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1799
+ " # 不适用条件:op 非 {offer, release, renew} 时;state 非 {free} 时\n"
1800
+ " # DHCP:offer 分配/释放 / renew 续租(IP 地址租约管理)\n"
1801
+ " if op == 'offer':\n"
1802
+ " for ip, state in pool.items():\n"
1803
+ " if state == 'free':\n"
1804
+ " pool[ip] = {'mac': mac, 'ttl': ttl}\n"
1805
+ " return ip\n"
1806
+ " return None\n"
1807
+ " if op == 'renew':\n"
1808
+ " for ip, state in pool.items():\n"
1809
+ " if isinstance(state, dict) and state.get('mac') == mac:\n"
1810
+ " state['ttl'] = ttl\n"
1811
+ " return ip\n"
1812
+ " return None\n"
1813
+ " if op == 'release':\n"
1814
+ " for ip, state in pool.items():\n"
1815
+ " if isinstance(state, dict) and state.get('mac') == mac:\n"
1816
+ " pool[ip] = 'free'\n"
1817
+ " return 'released'\n"
1818
+ " return None\n"
1819
+ " return None\n"),
1820
+ "cases": [
1821
+ (({'10.0.0.1': 'free', '10.0.0.2': 'free'}, 'offer', 'aa:bb'), '10.0.0.1'),
1822
+ (({'10.0.0.1': {'mac': 'aa:bb', 'ttl': 3600}}, 'renew', 'aa:bb', 7200), '10.0.0.1'),
1823
+ (({'10.0.0.1': {'mac': 'aa:bb', 'ttl': 3600}}, 'release', 'aa:bb'), 'released'),
1824
+ (({'10.0.0.1': {'mac': 'cc', 'ttl': 3600}}, 'offer', 'aa:bb'), None)],
1825
+ "params": [],
1826
+ "calibration": "对照:DHCP 协议——地址租约 offer/renew/release 生命周期",
1827
+ },
1828
+ "网络-ARP解析": {
1829
+ "task": "ARP解析",
1830
+ "pattern": (
1831
+ "def arp_resolve(table, op, ip=None, mac=None):\n"
1832
+ " # 生效条件:op ∈ {flush, learn, lookup};table.clear 可用\n"
1833
+ " # 子功能:① op 分支处理\n"
1834
+ " # 执行:按 op 分派\n"
1835
+ " # 不适用条件:op 非 {flush, learn, lookup} 时\n"
1836
+ " # ARP:lookup IP→MAC / learn 学习缓存 / flush 清空(地址解析)\n"
1837
+ " if op == 'lookup':\n"
1838
+ " return table.get(ip)\n"
1839
+ " if op == 'learn':\n"
1840
+ " table[ip] = mac\n"
1841
+ " return mac\n"
1842
+ " if op == 'flush':\n"
1843
+ " table.clear()\n"
1844
+ " return 'flushed'\n"
1845
+ " return None\n"),
1846
+ "cases": [(({'10.0.0.1': 'aa:bb', '10.0.0.2': 'cc:dd'}, 'lookup', '10.0.0.1'), 'aa:bb'),
1847
+ (({}, 'learn', '10.0.0.5', 'ee:ff'), 'ee:ff'),
1848
+ (({}, 'lookup', '10.0.0.9'), None),
1849
+ (({'10.0.0.1': 'aa:bb'}, 'flush'), 'flushed')],
1850
+ "params": [],
1851
+ "calibration": "对照:ARP 协议——IP→MAC 地址解析(查询/学习/清空缓存)",
1852
+ },
1853
+ "网络-ICMP探测": {
1854
+ "task": "ICMP探测",
1855
+ "pattern": (
1856
+ "def icmp_probe(results, op, target=None, rtt=None):\n"
1857
+ " # 生效条件:op ∈ {ping, reply, stats}\n"
1858
+ " # 子功能:① op 分支处理\n"
1859
+ " # 执行:按 op 分派;顺序调用\n"
1860
+ " # 不适用条件:op 非 {ping, reply, stats} 时\n"
1861
+ " # ICMP:ping 记录往返 / reply 可达判定 / stats 汇总(探测协议)\n"
1862
+ " if op == 'ping':\n"
1863
+ " results.append({'target': target, 'rtt': rtt})\n"
1864
+ " return 'sent'\n"
1865
+ " if op == 'reply':\n"
1866
+ " return target if rtt is not None and rtt < 1000 else None\n"
1867
+ " if op == 'stats':\n"
1868
+ " return len(results)\n"
1869
+ " return None\n"),
1870
+ "cases": [(([], 'ping', '10.0.0.1', 42), 'sent'),
1871
+ (([], 'reply', '10.0.0.1', 50), '10.0.0.1'),
1872
+ (([], 'reply', '10.0.0.1', 1500), None),
1873
+ ((['x'], 'stats'), 1)],
1874
+ "params": [],
1875
+ "calibration": "对照:ICMP Echo——ping 往返测量与可达性判定(RTT 阈值)",
1876
+ },
1877
+ "网络-广播风暴": {
1878
+ "task": "广播风暴",
1879
+ "pattern": (
1880
+ "def storm_control(state, op, port=None):\n"
1881
+ " # 生效条件:op ∈ {block, count, rate}\n"
1882
+ " # 子功能:① op 分支处理\n"
1883
+ " # 执行:按 op 分派\n"
1884
+ " # 不适用条件:op 非 {block, count, rate} 时\n"
1885
+ " # 广播风暴:count 计数 / rate 速率 / block 超阈阻塞(风暴抑制)\n"
1886
+ " if op == 'count':\n"
1887
+ " state[port] = state.get(port, 0) + 1\n"
1888
+ " return state[port]\n"
1889
+ " if op == 'rate':\n"
1890
+ " return state.get(port, 0)\n"
1891
+ " if op == 'block':\n"
1892
+ " return state.get(port, 0) > state.get('limit', 100)\n"
1893
+ " return None\n"),
1894
+ "cases": [
1895
+ (({}, 'count', 'p1'), 1),
1896
+ (({'p1': 5}, 'rate', 'p1'), 5),
1897
+ (({'p1': 150, 'limit': 100}, 'block', 'p1'), True),
1898
+ (({'p1': 50, 'limit': 100}, 'block', 'p1'), False)],
1899
+ "params": [],
1900
+ "calibration": "对照:广播风暴抑制——计数/速率/超阈阻塞(环路风暴防护)",
1901
+ },
1902
+ "网络-心跳保活": {
1903
+ "task": "心跳保活",
1904
+ "pattern": (
1905
+ "def keepalive(state, op, now=None):\n"
1906
+ " # 生效条件:op ∈ {alive, beat, reset}\n"
1907
+ " # 子功能:① op 分支处理\n"
1908
+ " # 执行:按 op 分派\n"
1909
+ " # 不适用条件:op 非 {alive, beat, reset} 时\n"
1910
+ " # 心跳保活:beat 记录心跳 / alive 超时判定 / reset 重置(连接保活)\n"
1911
+ " if op == 'beat':\n"
1912
+ " state['last'] = now\n"
1913
+ " return now\n"
1914
+ " if op == 'alive':\n"
1915
+ " return now - state.get('last', now) <= state.get('timeout', 30)\n"
1916
+ " if op == 'reset':\n"
1917
+ " state['last'] = None\n"
1918
+ " return 'reset'\n"
1919
+ " return None\n"),
1920
+ "cases": [
1921
+ (({}, 'beat', 100), 100),
1922
+ (({'last': 100}, 'alive', 120), True),
1923
+ (({'last': 100}, 'alive', 200), False),
1924
+ (({}, 'reset'), 'reset')],
1925
+ "params": [],
1926
+ "calibration": "对照:TCP keepalive——心跳记录/超时判定(连接保活)",
1927
+ },
1928
+ "网络-报文重排序": {
1929
+ "task": "报文重排序",
1930
+ "pattern": (
1931
+ "def reorder_buffer(state, op, seq=None, data=None):\n"
1932
+ " # 生效条件:op ∈ {flush, put}\n"
1933
+ " # 子功能:① op 分支处理\n"
1934
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
1935
+ " # 不适用条件:op 非 {flush, put} 时\n"
1936
+ " # 报文重排序:put 乱序存入 / flush 按序取出(重排缓冲)\n"
1937
+ " if op == 'put':\n"
1938
+ " state.setdefault('buf', {})[seq] = data\n"
1939
+ " return len(state['buf'])\n"
1940
+ " if op == 'flush':\n"
1941
+ " out = []\n"
1942
+ " nxt = state.get('next', 0)\n"
1943
+ " while nxt in state.get('buf', {}):\n"
1944
+ " out.append(state['buf'].pop(nxt))\n"
1945
+ " nxt += 1\n"
1946
+ " state['next'] = nxt\n"
1947
+ " return out\n"
1948
+ " return None\n"),
1949
+ "cases": [
1950
+ (({}, 'put', 3, 'c'), 1),
1951
+ (({'buf': {1: 'a', 2: 'b'}, 'next': 1}, 'flush'), ['a', 'b']),
1952
+ (({'buf': {}, 'next': 0}, 'flush'), []),
1953
+ (({'buf': {5: 'e'}, 'next': 1}, 'flush'), [])],
1954
+ "params": [],
1955
+ "calibration": "对照:TCP 乱序重排——按序号缓冲并按序递交(reordering)",
1956
+ },
1957
+ "网络-CSMA退避": {
1958
+ "task": "CSMA退避",
1959
+ "pattern": (
1960
+ "def csma_backoff(state, op, attempt=None):\n"
1961
+ " # 生效条件:op ∈ {collision, reset, wait}\n"
1962
+ " # 子功能:① op 分支处理\n"
1963
+ " # 执行:按 op 分派;顺序调用\n"
1964
+ " # 不适用条件:op 非 {collision, reset, wait} 时\n"
1965
+ " # CSMA 退避:collision 碰撞计数 / wait 指数退避等待 / reset 重传成功清零(以太网)\n"
1966
+ " if op == 'collision':\n"
1967
+ " state['n'] = state.get('n', 0) + 1\n"
1968
+ " return state['n']\n"
1969
+ " if op == 'wait':\n"
1970
+ " n = state.get('n', 0)\n"
1971
+ " return min(2 ** n, 1024)\n"
1972
+ " if op == 'reset':\n"
1973
+ " state['n'] = 0\n"
1974
+ " return 0\n"
1975
+ " return None\n"),
1976
+ "cases": [
1977
+ (({}, 'collision'), 1),
1978
+ (({'n': 3}, 'wait'), 8),
1979
+ (({'n': 12}, 'wait'), 1024),
1980
+ (({'n': 5}, 'reset'), 0)],
1981
+ "params": [],
1982
+ "calibration": "对照:CSMA/CD——碰撞指数退避(2^n 上限 1024,重传清零)",
1983
+ },
1984
+ "网络-路由收敛": {
1985
+ "task": "路由收敛",
1986
+ "pattern": (
1987
+ "def route_converge(routes, op, src=None, change=None):\n"
1988
+ " # 生效条件:op ∈ {converge, stable, update}\n"
1989
+ " # 子功能:① op 分支处理\n"
1990
+ " # 执行:按 op 分派\n"
1991
+ " # 不适用条件:op 非 {converge, stable, update} 时\n"
1992
+ " # 路由收敛:update 链路变化 / converge 传播收敛 / stable 是否稳定(路由协议收敛)\n"
1993
+ " if op == 'update':\n"
1994
+ " routes['dirty'] = True\n"
1995
+ " routes.setdefault('changes', []).append((src, change))\n"
1996
+ " return 'updated'\n"
1997
+ " if op == 'converge':\n"
1998
+ " routes['dirty'] = False\n"
1999
+ " return 'converged'\n"
2000
+ " if op == 'stable':\n"
2001
+ " return not routes.get('dirty', False)\n"
2002
+ " return None\n"),
2003
+ "cases": [
2004
+ (({}, 'update', 'A', 'down'), 'updated'),
2005
+ (({}, 'converge'), 'converged'),
2006
+ (({'dirty': True}, 'stable'), False),
2007
+ (({'dirty': False}, 'stable'), True)],
2008
+ "params": [],
2009
+ "calibration": "对照:路由协议收敛——链路变化传播至全网稳定(收敛判定)",
2010
+ },
2011
+ "网络-链路预算": {
2012
+ "task": "链路预算",
2013
+ "pattern": (
2014
+ "def link_budget(state, op, rssi=None):\n"
2015
+ " # 生效条件:op ∈ {distance, measure, quality}\n"
2016
+ " # 子功能:① op 分支处理\n"
2017
+ " # 执行:按 op 分派;顺序调用\n"
2018
+ " # 不适用条件:op 非 {distance, measure, quality} 时\n"
2019
+ " # 链路预算:measure 记录 RSSI / quality 信号质量分级 / distance 距离估算(蓝牙)\n"
2020
+ " if op == 'measure':\n"
2021
+ " state['rssi'] = rssi\n"
2022
+ " return rssi\n"
2023
+ " if op == 'quality':\n"
2024
+ " r = state.get('rssi', -100)\n"
2025
+ " if r >= -50:\n"
2026
+ " return 'excellent'\n"
2027
+ " if r >= -70:\n"
2028
+ " return 'good'\n"
2029
+ " if r >= -85:\n"
2030
+ " return 'fair'\n"
2031
+ " return 'poor'\n"
2032
+ " if op == 'distance':\n"
2033
+ " r = state.get('rssi', -100)\n"
2034
+ " return round(10 ** ((r - -40) / -20), 1)\n"
2035
+ " return None\n"),
2036
+ "cases": [
2037
+ (({}, 'measure', -55), -55),
2038
+ (({'rssi': -45}, 'quality'), 'excellent'),
2039
+ (({'rssi': -75}, 'quality'), 'fair'),
2040
+ (({'rssi': -60}, 'distance'), 10.0)],
2041
+ "params": [],
2042
+ "calibration": "对照:蓝牙 RSSI——信号质量分级与距离估算(链路预算)",
2043
+ },
2044
+ "网络-NTP同步": {
2045
+ "task": "NTP同步",
2046
+ "pattern": (
2047
+ "def ntp_sync(state, op, t1=None, t2=None, t3=None):\n"
2048
+ " # 生效条件:op ∈ {offset, roundtrip}\n"
2049
+ " # 子功能:① op 分支处理\n"
2050
+ " # 执行:按 op 分派;顺序调用\n"
2051
+ " # 不适用条件:op 非 {offset, roundtrip} 时\n"
2052
+ " # NTP 同步:offset 时间偏移 / roundtrip 往返时延(时间同步协议)\n"
2053
+ " if op == 'offset':\n"
2054
+ " # 客户端 t1 发送,服务器 t2 收到 t3 回,客户端 t4 接收——简化两戳\n"
2055
+ " return round(((t2 - t1) + (t3 - t2)) / 2, 2)\n"
2056
+ " if op == 'roundtrip':\n"
2057
+ " return round((t3 - t1) - (t2 - t1), 2)\n"
2058
+ " return None\n"),
2059
+ "cases": [
2060
+ (({}, 'offset', 100, 110, 130), 15.0),
2061
+ (({}, 'roundtrip', 100, 110, 130), 20.0),
2062
+ (({}, 'offset', 100, 100, 100), 0.0)],
2063
+ "params": [],
2064
+ "calibration": "对照:NTP——时间偏移与往返时延计算(时间同步)",
2065
+ },
2066
+ "网络-报文分片": {
2067
+ "task": "报文分片",
2068
+ "pattern": (
2069
+ "def packet_frag(state, op, data=None, mtu=None):\n"
2070
+ " # 生效条件:op ∈ {fragment, reassemble}\n"
2071
+ " # 子功能:① op 分支处理\n"
2072
+ " # 执行:按 op 分派;顺序调用\n"
2073
+ " # 不适用条件:op 非 {fragment, reassemble} 时\n"
2074
+ " # 报文分片:fragment 按 MTU 切分 / reassemble 按序号重组(IPv4 分片)\n"
2075
+ " if op == 'fragment':\n"
2076
+ " return [data[i:i + mtu] for i in range(0, len(data), mtu)]\n"
2077
+ " if op == 'reassemble':\n"
2078
+ " return ''.join(frag[1] for frag in sorted(data, key=lambda f: f[0]))\n"
2079
+ " return None\n"),
2080
+ "cases": [
2081
+ (({}, 'fragment', 'abcdef', 3), ['abc', 'def']),
2082
+ (({}, 'fragment', 'abcd', 2), ['ab', 'cd']),
2083
+ (({}, 'reassemble', [(1, 'b'), (0, 'a')]), 'ab')],
2084
+ "params": [],
2085
+ "calibration": "对照:IPv4 分片——按 MTU 切分与按偏移重组",
2086
+ },
2087
+ "网络-前向纠错": {
2088
+ "task": "前向纠错",
2089
+ "pattern": (
2090
+ "def fec_recover(blocks, op, idx=None):\n"
2091
+ " # 生效条件:op ∈ {parity, recover}\n"
2092
+ " # 子功能:① op 分支处理\n"
2093
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
2094
+ " # 不适用条件:op 非 {parity, recover} 时\n"
2095
+ " # 前向纠错:parity 异或校验块 / recover 缺块恢复(FEC 奇偶恢复)\n"
2096
+ " if op == 'parity':\n"
2097
+ " out = 0\n"
2098
+ " for b in blocks:\n"
2099
+ " out ^= b\n"
2100
+ " return out\n"
2101
+ " if op == 'recover':\n"
2102
+ " # blocks 含校验块于末尾;缺 idx 块用其余异或恢复\n"
2103
+ " out = 0\n"
2104
+ " for i, b in enumerate(blocks):\n"
2105
+ " if i != idx:\n"
2106
+ " out ^= b\n"
2107
+ " return out\n"
2108
+ " return None\n"),
2109
+ "cases": [
2110
+ (([1, 2, 3], 'parity'), 0),
2111
+ (([1, 2, 0], 'recover', 2), 3),
2112
+ (([5, 0], 'recover', 1), 5)],
2113
+ "params": [],
2114
+ "calibration": "对照:FEC 异或奇偶——校验块生成与缺块恢复",
2115
+ },
2116
+ "网络-尽力交付": {
2117
+ "task": "尽力交付",
2118
+ "pattern": (
2119
+ "def best_effort(state, op, seq=None):\n"
2120
+ " # 生效条件:op ∈ {delivered, drop, send}\n"
2121
+ " # 子功能:① op 分支处理\n"
2122
+ " # 执行:按 op 分派;顺序调用\n"
2123
+ " # 不适用条件:op 非 {delivered, drop, send} 时\n"
2124
+ " # 尽力交付:send 发送(无确认)/ drop 随机丢包模拟 / delivered 统计(UDP 语义)\n"
2125
+ " if op == 'send':\n"
2126
+ " state.setdefault('sent', []).append(seq)\n"
2127
+ " return 'sent'\n"
2128
+ " if op == 'drop':\n"
2129
+ " if seq in state.get('sent', []):\n"
2130
+ " state['sent'].remove(seq)\n"
2131
+ " return 'dropped'\n"
2132
+ " return None\n"
2133
+ " if op == 'delivered':\n"
2134
+ " return len(state.get('sent', []))\n"
2135
+ " return None\n"),
2136
+ "cases": [
2137
+ (({}, 'send', 1), 'sent'),
2138
+ (({'sent': [1]}, 'drop', 1), 'dropped'),
2139
+ (({'sent': [1, 2]}, 'delivered'), 2),
2140
+ (({'sent': [1]}, 'drop', 9), None)],
2141
+ "params": [],
2142
+ "calibration": "对照:UDP 尽力交付——无确认/可丢包(不可靠传输语义)",
2143
+ },
2144
+ "网络-带宽时延积": {
2145
+ "task": "带宽时延积",
2146
+ "pattern": (
2147
+ "def bdp_calc(bandwidth, rtt):\n"
2148
+ " # 生效条件:参数 bandwidth/rtt 合法\n"
2149
+ " # 子功能:① 调用 round\n"
2150
+ " # 执行:顺序调用\n"
2151
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2152
+ " # 带宽时延积:带宽×RTT = 在途数据量(管道容量)\n"
2153
+ " return round(bandwidth * rtt, 2)\n"),
2154
+ "cases": [
2155
+ ((10.0, 0.1), 1.0),
2156
+ ((100.0, 0.05), 5.0),
2157
+ ((0.0, 1.0), 0.0)],
2158
+ "params": [],
2159
+ "calibration": "对照:BDP——带宽×RTT(TCP 窗口大小依据)",
2160
+ },
2161
+ "网络-多宿主": {
2162
+ "task": "多宿主",
2163
+ "pattern": (
2164
+ "def multihoming(state, op, iface=None):\n"
2165
+ " # 生效条件:op ∈ {add, failover, select}\n"
2166
+ " # 子功能:① op 分支处理\n"
2167
+ " # 执行:按 op 分派;顺序调用\n"
2168
+ " # 不适用条件:ifaces 为空/非法时;op 非 {add, failover, select} 时\n"
2169
+ " # 多宿主:add 添加接口 / select 按序选择 / failover 故障切换(多接口主机)\n"
2170
+ " if op == 'add':\n"
2171
+ " state.setdefault('ifaces', []).append(iface)\n"
2172
+ " return iface\n"
2173
+ " if op == 'select':\n"
2174
+ " ifaces = state.get('ifaces', [])\n"
2175
+ " if not ifaces:\n"
2176
+ " return None\n"
2177
+ " idx = state.get('idx', 0) % len(ifaces)\n"
2178
+ " state['idx'] = idx + 1\n"
2179
+ " return ifaces[idx]\n"
2180
+ " if op == 'failover':\n"
2181
+ " ifaces = state.get('ifaces', [])\n"
2182
+ " return ifaces[0] if ifaces else None\n"
2183
+ " return None\n"),
2184
+ "cases": [
2185
+ (({}, 'add', 'wlan0'), 'wlan0'),
2186
+ (({'ifaces': ['eth0', 'wlan0']}, 'select'), 'eth0'),
2187
+ (({'ifaces': ['eth0', 'wlan0'], 'idx': 1}, 'select'), 'wlan0'),
2188
+ (({}, 'select'), None)],
2189
+ "params": [],
2190
+ "calibration": "对照:多宿主——多接口轮询选择与故障切换(multihoming)",
2191
+ },
2192
+ "网络-RTT平滑": {
2193
+ "task": "RTT平滑",
2194
+ "pattern": (
2195
+ "def rtt_smooth(state, op, sample=None, alpha=0.125):\n"
2196
+ " # 生效条件:op ∈ {get, sample}\n"
2197
+ " # 子功能:① op 分支处理\n"
2198
+ " # 执行:按 op 分派;顺序调用\n"
2199
+ " # 不适用条件:op 非 {get, sample} 时\n"
2200
+ " # RTT 平滑:sample 加权更新 / get 当前估值(EWMA 指数加权)\n"
2201
+ " if op == 'sample':\n"
2202
+ " prev = state.get('rtt', sample)\n"
2203
+ " state['rtt'] = round((1 - alpha) * prev + alpha * sample, 2)\n"
2204
+ " return state['rtt']\n"
2205
+ " if op == 'get':\n"
2206
+ " return state.get('rtt', 0.0)\n"
2207
+ " return None\n"),
2208
+ "cases": [
2209
+ (({}, 'sample', 100.0), 100.0),
2210
+ (({'rtt': 100.0}, 'sample', 200.0), 112.5),
2211
+ (({}, 'get'), 0.0),
2212
+ (({'rtt': 80.0}, 'get'), 80.0)],
2213
+ "params": [],
2214
+ "calibration": "对照:TCP RTT——EWMA 加权平滑估值(α=0.125)",
2215
+ },
2216
+ "网络-路由汇聚": {
2217
+ "task": "路由汇聚",
2218
+ "pattern": (
2219
+ "def route_summary(routes):\n"
2220
+ " # 生效条件:参数 routes 合法\n"
2221
+ " # 子功能:① 调用 len\n"
2222
+ " # 执行:顺序调用\n"
2223
+ " # 不适用条件:routes 为空/非法时(隐式盲区:返回默认值 [] = 未知行为——不适用)\n"
2224
+ " # 路由汇聚:同网段路由合成 CIDR 汇总(前两段公共)\n"
2225
+ " if not routes:\n"
2226
+ " return []\n"
2227
+ " segs = [r.split('.') for r in routes]\n"
2228
+ " if not segs or len(segs[0]) < 2:\n"
2229
+ " return []\n"
2230
+ " return [segs[0][0] + '.' + segs[0][1] + '.0.0/16']\n"),
2231
+ "cases": [
2232
+ ((['192.168.1.0/24', '192.168.2.0/24'],), ['192.168.0.0/16']),
2233
+ ((['10.1.0.0/16', '10.1.1.0/24'],), ['10.1.0.0/16']),
2234
+ (([],), [])],
2235
+ "params": [],
2236
+ "calibration": "对照:路由汇聚——CIDR 汇总(最长公共前缀合成)",
2237
+ },
2238
+ "网络-序列号回绕": {
2239
+ "task": "序列号回绕",
2240
+ "pattern": (
2241
+ "def seq_wrap(state, op, seq=None, space=2 ** 32):\n"
2242
+ " # 生效条件:op ∈ {compare, next, wrap}\n"
2243
+ " # 子功能:① op 分支处理\n"
2244
+ " # 执行:按 op 分派\n"
2245
+ " # 不适用条件:op 非 {compare, next, wrap} 时\n"
2246
+ " # 序列号回绕:next 推进 / compare 回绕比较 / wrap 是否已回绕(TCP seq)\n"
2247
+ " if op == 'next':\n"
2248
+ " cur = state.get('seq', 0)\n"
2249
+ " nxt = (cur + 1) % space\n"
2250
+ " state['seq'] = nxt\n"
2251
+ " if nxt < cur:\n"
2252
+ " state['wrapped'] = True\n"
2253
+ " return nxt\n"
2254
+ " if op == 'compare':\n"
2255
+ " a, b = seq\n"
2256
+ " return (a - b) % space < space // 2\n"
2257
+ " if op == 'wrap':\n"
2258
+ " return state.get('wrapped', False)\n"
2259
+ " return None\n"),
2260
+ "cases": [
2261
+ (({}, 'next', None, 4), 1),
2262
+ (({'seq': 3}, 'next', None, 4), 0),
2263
+ (({}, 'compare', (1, 6), 8), True),
2264
+ (({}, 'compare', (6, 1), 8), False),
2265
+ (({'wrapped': True}, 'wrap'), True)],
2266
+ "params": [],
2267
+ "calibration": "对照:TCP 序列号——回绕推进/回绕比较(2^32 空间)",
2268
+ },
2269
+ "网络-漏桶限流": {
2270
+ "task": "漏桶限流",
2271
+ "pattern": (
2272
+ "def leaky_bucket(state, op, size=None, rate=None):\n"
2273
+ " # 生效条件:op ∈ {accept, fill, leak}\n"
2274
+ " # 子功能:① op 分支处理\n"
2275
+ " # 执行:按 op 分派;顺序调用\n"
2276
+ " # 不适用条件:op 非 {accept, fill, leak} 时\n"
2277
+ " # 漏桶限流:fill 灌桶 / leak 匀速漏 / accept 是否接受(平滑流量)\n"
2278
+ " if op == 'fill':\n"
2279
+ " cur = state.get('level', 0)\n"
2280
+ " if cur + 1 <= state.get('size', size):\n"
2281
+ " state['level'] = cur + 1\n"
2282
+ " return True\n"
2283
+ " return False\n"
2284
+ " if op == 'leak':\n"
2285
+ " cur = state.get('level', 0)\n"
2286
+ " state['level'] = max(0, cur - state.get('rate', rate))\n"
2287
+ " return state['level']\n"
2288
+ " if op == 'accept':\n"
2289
+ " return state.get('level', 0) < state.get('size', size)\n"
2290
+ " return None\n"),
2291
+ "cases": [
2292
+ (({'size': 2}, 'fill'), True),
2293
+ (({'size': 1, 'level': 1}, 'fill'), False),
2294
+ (({'level': 5, 'rate': 2}, 'leak'), 3),
2295
+ (({'size': 2, 'level': 1}, 'accept'), True)],
2296
+ "params": [],
2297
+ "calibration": "对照:漏桶——匀速漏出平滑流量(灌桶/漏/接受判定)",
2298
+ },
2299
+ "网络-报文调度": {
2300
+ "task": "报文调度",
2301
+ "pattern": (
2302
+ "def wfq_schedule(queues, op, weights=None):\n"
2303
+ " # 生效条件:op ∈ {dequeue, enqueue}\n"
2304
+ " # 子功能:① op 分支处理\n"
2305
+ " # 执行:按 op 分派;顺序调用\n"
2306
+ " # 不适用条件:op 非 {dequeue, enqueue} 时\n"
2307
+ " # 报文调度:dequeue 按权重选队列 / enqueue 入队 / weights 查询(WFQ 加权公平)\n"
2308
+ " if op == 'enqueue':\n"
2309
+ " return queues\n"
2310
+ " if op == 'dequeue':\n"
2311
+ " w = weights or {k: 1 for k in queues}\n"
2312
+ " best = max(queues, key=lambda k: w.get(k, 1) if queues[k] else -1)\n"
2313
+ " if queues[best]:\n"
2314
+ " return best, queues[best].pop(0)\n"
2315
+ " return None\n"
2316
+ " return None\n"),
2317
+ "cases": [
2318
+ (({'a': [1], 'b': [2]}, 'enqueue'), {'a': [1], 'b': [2]}),
2319
+ (({'a': [1], 'b': [2]}, 'dequeue', {'a': 3, 'b': 1}), ('a', 1)),
2320
+ (({'a': [], 'b': [2]}, 'dequeue', {'a': 3, 'b': 1}), ('b', 2)),
2321
+ (({'a': []}, 'dequeue', {'a': 1}), None)],
2322
+ "params": [],
2323
+ "calibration": "对照:WFQ——加权公平队列调度(按权重选队出队)",
2324
+ },
2325
+ "网络-链路利用率": {
2326
+ "task": "链路利用率",
2327
+ "pattern": (
2328
+ "def link_util(state, op, used=None, capacity=None):\n"
2329
+ " # 生效条件:op ∈ {peak, sample, util}\n"
2330
+ " # 子功能:① op 分支处理\n"
2331
+ " # 执行:按 op 分派;顺序调用\n"
2332
+ " # 不适用条件:op 非 {peak, sample, util} 时\n"
2333
+ " # 链路利用率:sample 记录 / util 当前利用率 / peak 峰值(链路占用)\n"
2334
+ " if op == 'sample':\n"
2335
+ " u = used / capacity if capacity else 0.0\n"
2336
+ " state.setdefault('samples', []).append(round(u, 2))\n"
2337
+ " return round(u, 2)\n"
2338
+ " if op == 'util':\n"
2339
+ " s = state.get('samples', [])\n"
2340
+ " return round(sum(s) / len(s), 2) if s else 0.0\n"
2341
+ " if op == 'peak':\n"
2342
+ " s = state.get('samples', [])\n"
2343
+ " return max(s) if s else 0.0\n"
2344
+ " return None\n"),
2345
+ "cases": [
2346
+ (({}, 'sample', 50, 100), 0.5),
2347
+ (({}, 'sample', 0, 100), 0.0),
2348
+ (({'samples': [0.5, 0.7]}, 'util'), 0.6),
2349
+ (({'samples': [0.5, 0.9]}, 'peak'), 0.9)],
2350
+ "params": [],
2351
+ "calibration": "对照:链路利用率——已用/容量采样(平均与峰值)",
2352
+ },
2353
+ "网络-带宽分配": {
2354
+ "task": "带宽分配",
2355
+ "pattern": (
2356
+ "def bw_alloc(total, weights):\n"
2357
+ " # 生效条件:参数 total/weights 合法\n"
2358
+ " # 子功能:① 调用 sum;② 调用 round\n"
2359
+ " # 执行:循环迭代;顺序调用\n"
2360
+ " # 不适用条件:s 越界(LtE)时\n"
2361
+ " # 带宽分配:按权重比例分总带宽(公平分配)\n"
2362
+ " s = sum(weights.values())\n"
2363
+ " if s <= 0:\n"
2364
+ " return {k: 0 for k in weights}\n"
2365
+ " out = {}\n"
2366
+ " used = 0\n"
2367
+ " for k, w in weights.items():\n"
2368
+ " v = total * w / s\n"
2369
+ " out[k] = round(v, 2)\n"
2370
+ " used += v\n"
2371
+ " return out\n"),
2372
+ "cases": [
2373
+ ((100, {'a': 1, 'b': 1}), {'a': 50.0, 'b': 50.0}),
2374
+ ((100, {'a': 3, 'b': 1}), {'a': 75.0, 'b': 25.0}),
2375
+ ((100, {}), {}),
2376
+ ((100, {'a': 0}), {'a': 0.0})],
2377
+ "params": [],
2378
+ "calibration": "对照:带宽分配——按权重比例公平分配(weighted sharing)",
2379
+ },
2380
+ "网络-连接迁移": {
2381
+ "task": "连接迁移",
2382
+ "pattern": (
2383
+ "def conn_migrate(state, op, ep=None):\n"
2384
+ " # 生效条件:op ∈ {count, current, migrate}\n"
2385
+ " # 子功能:① op 分支处理\n"
2386
+ " # 执行:按 op 分派\n"
2387
+ " # 不适用条件:op 非 {count, current, migrate} 时\n"
2388
+ " # 连接迁移:migrate 换端点 / current 当前端点 / count 迁移次数(QUIC migration)\n"
2389
+ " if op == 'migrate':\n"
2390
+ " state['ep'] = ep\n"
2391
+ " state['count'] = state.get('count', 0) + 1\n"
2392
+ " return ep\n"
2393
+ " if op == 'current':\n"
2394
+ " return state.get('ep')\n"
2395
+ " if op == 'count':\n"
2396
+ " return state.get('count', 0)\n"
2397
+ " return None\n"),
2398
+ "cases": [
2399
+ (({}, 'migrate', '10.0.0.2'), '10.0.0.2'),
2400
+ (({}, 'current'), None),
2401
+ (({'ep': '10.0.0.2', 'count': 1}, 'count'), 1),
2402
+ (({'ep': '10.0.0.1'}, 'migrate', '10.0.0.3'), '10.0.0.3')],
2403
+ "params": [],
2404
+ "calibration": "对照:QUIC——连接迁移(端点切换不断连)",
2405
+ },
2406
+ "网络-重传统计": {
2407
+ "task": "重传统计",
2408
+ "pattern": (
2409
+ "def retrans_stats(state, op, seq=None):\n"
2410
+ " # 生效条件:op ∈ {count, rate, record}\n"
2411
+ " # 子功能:① op 分支处理\n"
2412
+ " # 执行:按 op 分派;顺序调用\n"
2413
+ " # 不适用条件:op 非 {count, rate, record} 时\n"
2414
+ " # 重传统计:record 记录 / count 总数 / rate 重传率(可靠传输统计)\n"
2415
+ " if op == 'record':\n"
2416
+ " state.setdefault('retx', set()).add(seq)\n"
2417
+ " state['sent'] = state.get('sent', 0) + 1\n"
2418
+ " return 'recorded'\n"
2419
+ " if op == 'count':\n"
2420
+ " return len(state.get('retx', set()))\n"
2421
+ " if op == 'rate':\n"
2422
+ " sent = state.get('sent', 0)\n"
2423
+ " retx = len(state.get('retx', set()))\n"
2424
+ " return round(retx / sent, 2) if sent else 0.0\n"
2425
+ " return None\n"),
2426
+ "cases": [
2427
+ (({}, 'record', 1), 'recorded'),
2428
+ (({'retx': {1, 2}}, 'count'), 2),
2429
+ (({'sent': 10, 'retx': {1, 2}}, 'rate'), 0.2),
2430
+ (({}, 'rate'), 0.0)],
2431
+ "params": [],
2432
+ "calibration": "对照:TCP 统计——重传统计与重传率(可靠传输)",
2433
+ },
2434
+ "网络-路由衰减": {
2435
+ "task": "路由衰减",
2436
+ "pattern": (
2437
+ "def route_damp(state, op, route=None, flappy=None):\n"
2438
+ " # 生效条件:op ∈ {damped, record, reset}\n"
2439
+ " # 子功能:① op 分支处理\n"
2440
+ " # 执行:按 op 分派\n"
2441
+ " # 不适用条件:op 非 {damped, record, reset} 时\n"
2442
+ " # 路由衰减:record 记录抖动 / damped 是否抑制 / reset 重置(BGP damping)\n"
2443
+ " if op == 'record':\n"
2444
+ " state.setdefault('flaps', {})[route] = state.get('flaps', {}).get(route, 0) + 1\n"
2445
+ " return state['flaps'][route]\n"
2446
+ " if op == 'damped':\n"
2447
+ " return state.get('flaps', {}).get(route, 0) >= flappy\n"
2448
+ " if op == 'reset':\n"
2449
+ " state.setdefault('flaps', {})[route] = 0\n"
2450
+ " return 'reset'\n"
2451
+ " return None\n"),
2452
+ "cases": [
2453
+ (({}, 'record', 'r1'), 1),
2454
+ (({'flaps': {'r1': 5}}, 'damped', 'r1', 4), True),
2455
+ (({'flaps': {'r1': 2}}, 'damped', 'r1', 4), False),
2456
+ (({'flaps': {'r1': 5}}, 'reset', 'r1'), 'reset')],
2457
+ "params": [],
2458
+ "calibration": "对照:BGP damping——路由抖动抑制(阈值衰减)",
2459
+ },
2460
+ "网络-流分类": {
2461
+ "task": "流分类",
2462
+ "pattern": (
2463
+ "def flow_class(state, op, pkt=None):\n"
2464
+ " # 生效条件:op ∈ {classify, reset, stats}\n"
2465
+ " # 子功能:① op 分支处理\n"
2466
+ " # 执行:按 op 分派;顺序调用\n"
2467
+ " # 不适用条件:op 非 {classify, reset, stats} 时\n"
2468
+ " # 流分类:classify 分类 / stats 统计 / reset 清空(流量识别)\n"
2469
+ " if op == 'classify':\n"
2470
+ " port = pkt.get('port', 0)\n"
2471
+ " cls = 'web' if port == 80 else 'mail' if port == 25 else 'other'\n"
2472
+ " state.setdefault('counts', {})[cls] = state.get('counts', {}).get(cls, 0) + 1\n"
2473
+ " return cls\n"
2474
+ " if op == 'stats':\n"
2475
+ " return dict(state.get('counts', {}))\n"
2476
+ " if op == 'reset':\n"
2477
+ " state['counts'] = {}\n"
2478
+ " return 'reset'\n"
2479
+ " return None\n"),
2480
+ "cases": [
2481
+ (({}, 'classify', {'port': 80}), 'web'),
2482
+ (({}, 'classify', {'port': 25}), 'mail'),
2483
+ (({'counts': {'web': 2}}, 'stats'), {'web': 2}),
2484
+ (({'counts': {'web': 1}}, 'reset'), 'reset')],
2485
+ "params": [],
2486
+ "calibration": "对照:流量识别——按端口分类(web/mail/other)",
2487
+ },
2488
+ "网络-数据包采样": {
2489
+ "task": "数据包采样",
2490
+ "pattern": (
2491
+ "def pkt_sampling(state, op, pkt=None):\n"
2492
+ " # 生效条件:op ∈ {count, rate, sample}\n"
2493
+ " # 子功能:① op 分支处理\n"
2494
+ " # 执行:按 op 分派\n"
2495
+ " # 不适用条件:op 非 {count, rate, sample} 时\n"
2496
+ " # 数据包采样:sample 按率采样 / rate 采样率 / count 已采(流量采样)\n"
2497
+ " if op == 'sample':\n"
2498
+ " rate = state.get('rate', 1)\n"
2499
+ " if pkt % rate == 0:\n"
2500
+ " state['count'] = state.get('count', 0) + 1\n"
2501
+ " return True\n"
2502
+ " return False\n"
2503
+ " if op == 'rate':\n"
2504
+ " return state.get('rate', 1)\n"
2505
+ " if op == 'count':\n"
2506
+ " return state.get('count', 0)\n"
2507
+ " return None\n"),
2508
+ "cases": [
2509
+ (({}, 'sample', 1), True),
2510
+ (({'rate': 2}, 'sample', 3), False),
2511
+ (({'rate': 2}, 'rate'), 2),
2512
+ (({'count': 5}, 'count'), 5)],
2513
+ "params": [],
2514
+ "calibration": "对照:NetFlow——按采样率抽取数据包(sFlow/NetFlow)",
2515
+ },
2516
+ "网络-时隙": {
2517
+ "task": "时隙",
2518
+ "pattern": (
2519
+ "def tdma_slot(state, op, node=None, slot=None):\n"
2520
+ " # 生效条件:op ∈ {assign, next, owner}\n"
2521
+ " # 子功能:① op 分支处理\n"
2522
+ " # 执行:按 op 分派;循环迭代\n"
2523
+ " # 不适用条件:op 非 {assign, next, owner} 时\n"
2524
+ " # 时隙:assign 分配 / next 下一时隙 / owner 归属(TDMA 分时)\n"
2525
+ " if op == 'assign':\n"
2526
+ " state.setdefault('slots', {})[node] = slot\n"
2527
+ " return slot\n"
2528
+ " if op == 'next':\n"
2529
+ " n = state.get('n', 4)\n"
2530
+ " state['cur'] = (state.get('cur', 0) + 1) % n\n"
2531
+ " return state['cur']\n"
2532
+ " if op == 'owner':\n"
2533
+ " for k, v in state.get('slots', {}).items():\n"
2534
+ " if v == slot:\n"
2535
+ " return k\n"
2536
+ " return None\n"
2537
+ " return None\n"),
2538
+ "cases": [
2539
+ (({}, 'assign', 'n1', 0), 0),
2540
+ (({}, 'next'), 1),
2541
+ (({'slots': {'n1': 0}}, 'owner', None, 0), 'n1'),
2542
+ (({'slots': {}}, 'owner', None, 3), None)],
2543
+ "params": [],
2544
+ "calibration": "对照:TDMA——时分多址时隙分配/轮转/归属",
2545
+ },
2546
+ "网络-跳频": {
2547
+ "task": "跳频",
2548
+ "pattern": (
2549
+ "def freq_hop(state, op, seq=None):\n"
2550
+ " # 生效条件:op ∈ {current, hop, pattern}\n"
2551
+ " # 子功能:① op 分支处理\n"
2552
+ " # 执行:按 op 分派;顺序调用\n"
2553
+ " # 不适用条件:op 非 {current, hop, pattern} 时\n"
2554
+ " # 跳频:hop 下一频率 / current 当前 / pattern 序列(FHSS 抗干扰)\n"
2555
+ " if op == 'hop':\n"
2556
+ " pat = state.get('pattern', [2400, 2410, 2420])\n"
2557
+ " i = state.get('idx', 0)\n"
2558
+ " state['idx'] = (i + 1) % len(pat)\n"
2559
+ " state['freq'] = pat[state['idx']]\n"
2560
+ " return state['freq']\n"
2561
+ " if op == 'current':\n"
2562
+ " return state.get('freq', 2400)\n"
2563
+ " if op == 'pattern':\n"
2564
+ " return list(state.get('pattern', [2400, 2410, 2420]))\n"
2565
+ " return None\n"),
2566
+ "cases": [
2567
+ (({}, 'hop'), 2410),
2568
+ (({}, 'current'), 2400),
2569
+ (({'freq': 2420}, 'current'), 2420),
2570
+ (({}, 'pattern'), [2400, 2410, 2420])],
2571
+ "params": [],
2572
+ "calibration": "对照:FHSS——跳频序列(抗干扰/保密)",
2573
+ },
2574
+ "网络-误码率": {
2575
+ "task": "误码率",
2576
+ "pattern": (
2577
+ "def ber_calc(state, op, errors=None, total=None):\n"
2578
+ " # 生效条件:op ∈ {ber, sample, snr}\n"
2579
+ " # 子功能:① op 分支处理\n"
2580
+ " # 执行:按 op 分派;顺序调用\n"
2581
+ " # 不适用条件:op 非 {ber, sample, snr} 时\n"
2582
+ " # 误码率:sample 采样 / ber 误码率 / snr 信噪比映射(链路质量)\n"
2583
+ " if op == 'sample':\n"
2584
+ " state['errors'] = errors\n"
2585
+ " state['total'] = total\n"
2586
+ " return round(errors / total, 6) if total else 0.0\n"
2587
+ " if op == 'ber':\n"
2588
+ " e = state.get('errors', 0)\n"
2589
+ " t = state.get('total', 1)\n"
2590
+ " return round(e / t, 6) if t else 0.0\n"
2591
+ " if op == 'snr':\n"
2592
+ " return round(10 * (1 - state.get('errors', 0) / max(state.get('total', 1), 1)), 1)\n"
2593
+ " return None\n"),
2594
+ "cases": [
2595
+ (({}, 'sample', 1, 100), 0.01),
2596
+ (({'errors': 2, 'total': 100}, 'ber'), 0.02),
2597
+ (({}, 'ber'), 0.0),
2598
+ (({'errors': 0, 'total': 10}, 'snr'), 10.0)],
2599
+ "params": [],
2600
+ "calibration": "对照:误码率——错误/总数与信噪比映射(链路质量)",
2601
+ },
2602
+ "网络-拓扑发现": {
2603
+ "task": "拓扑发现",
2604
+ "pattern": (
2605
+ "def topo_discover(state, op, node=None, neighbor=None):\n"
2606
+ " # 生效条件:op ∈ {link, neighbors, probe}\n"
2607
+ " # 子功能:① op 分支处理\n"
2608
+ " # 执行:按 op 分派;顺序调用\n"
2609
+ " # 不适用条件:op 非 {link, neighbors, probe} 时\n"
2610
+ " # 拓扑发现:probe 探测 / link 记录 / neighbors 邻居表(LLDP/拓扑感知)\n"
2611
+ " if op == 'probe':\n"
2612
+ " state.setdefault('links', set()).add((node, neighbor))\n"
2613
+ " return 'found'\n"
2614
+ " if op == 'link':\n"
2615
+ " return sorted(state.get('links', set()))\n"
2616
+ " if op == 'neighbors':\n"
2617
+ " return sorted(b for a, b in state.get('links', set()) if a == node)\n"
2618
+ " return None\n"),
2619
+ "cases": [
2620
+ (({}, 'probe', 'n1', 'n2'), 'found'),
2621
+ (({'links': {('n1', 'n2')}}, 'link'), [('n1', 'n2')]),
2622
+ (({}, 'link'), []),
2623
+ (({'links': {('n1', 'n2')}}, 'neighbors', 'n1'), ['n2'])],
2624
+ "params": [],
2625
+ "calibration": "对照:拓扑发现——链路探测与邻居表(LLDP)",
2626
+ },
2627
+ "网络-路径备份": {
2628
+ "task": "路径备份",
2629
+ "pattern": (
2630
+ "def path_backup(state, op, route=None, backup=None):\n"
2631
+ " # 生效条件:op ∈ {active, assign, failover}\n"
2632
+ " # 子功能:① op 分支处理\n"
2633
+ " # 执行:按 op 分派\n"
2634
+ " # 不适用条件:op 非 {active, assign, failover} 时\n"
2635
+ " # 路径备份:assign 指定 / active 激活 / failover 主路故障切换(FRR)\n"
2636
+ " if op == 'assign':\n"
2637
+ " state['primary'] = route\n"
2638
+ " state['backup'] = backup\n"
2639
+ " state['active'] = route\n"
2640
+ " return 'assigned'\n"
2641
+ " if op == 'active':\n"
2642
+ " return state.get('active')\n"
2643
+ " if op == 'failover':\n"
2644
+ " if state.get('active') == state.get('primary'):\n"
2645
+ " state['active'] = state.get('backup')\n"
2646
+ " return 'switched'\n"
2647
+ " return 'noop'\n"
2648
+ " return None\n"),
2649
+ "cases": [
2650
+ (({}, 'assign', 'r1', 'r2'), 'assigned'),
2651
+ (({'active': 'r1'}, 'active'), 'r1'),
2652
+ (({'primary': 'r1', 'backup': 'r2', 'active': 'r1'}, 'failover'), 'switched'),
2653
+ (({'primary': 'r1', 'backup': 'r2', 'active': 'r2'}, 'failover'), 'noop')],
2654
+ "params": [],
2655
+ "calibration": "对照:FRR——主备路径故障切换(快速重路由)",
2656
+ },
2657
+ "网络-数据去重": {
2658
+ "task": "数据去重",
2659
+ "pattern": (
2660
+ "def payload_dedup(state, op, data=None):\n"
2661
+ " # 生效条件:op ∈ {dedup, hash, store}\n"
2662
+ " # 子功能:① op 分支处理\n"
2663
+ " # 执行:按 op 分派;顺序调用\n"
2664
+ " # 不适用条件:op 非 {dedup, hash, store} 时\n"
2665
+ " # 数据去重:hash 指纹 / store 存储 / dedup 是否重复(网络级去重)\n"
2666
+ " if op == 'hash':\n"
2667
+ " return sum(ord(c) for c in data) % 997\n"
2668
+ " if op == 'store':\n"
2669
+ " h = sum(ord(c) for c in data) % 997\n"
2670
+ " state.setdefault('seen', set()).add(h)\n"
2671
+ " return 'stored'\n"
2672
+ " if op == 'dedup':\n"
2673
+ " h = sum(ord(c) for c in data) % 997\n"
2674
+ " return h in state.get('seen', set())\n"
2675
+ " return None\n"),
2676
+ "cases": [
2677
+ (({}, 'hash', 'abc'), 294),
2678
+ (({}, 'store', 'abc'), 'stored'),
2679
+ (({'seen': {294}}, 'dedup', 'abc'), True),
2680
+ (({}, 'dedup', 'abc'), False)],
2681
+ "params": [],
2682
+ "calibration": "对照:网络去重——指纹识别重复载荷(dedup)",
2683
+ },
2684
+ "网络-网关": {
2685
+ "task": "网关",
2686
+ "pattern": (
2687
+ "def gateway(state, op, dest=None):\n"
2688
+ " # 生效条件:op ∈ {default, route, table}\n"
2689
+ " # 子功能:① op 分支处理\n"
2690
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
2691
+ " # 不适用条件:op 非 {default, route, table} 时\n"
2692
+ " # 网关:route 转发 / default 默认网关 / table 路由表(网络出口)\n"
2693
+ " if op == 'route':\n"
2694
+ " table = state.get('table', {})\n"
2695
+ " if dest in table:\n"
2696
+ " return table[dest]\n"
2697
+ " for prefix, gw in table.items():\n"
2698
+ " mask = int(prefix.split('/')[1]) if '/' in prefix else 32\n"
2699
+ " p = prefix.split('/')[0]\n"
2700
+ " d = dest\n"
2701
+ " if mask <= 8 and d.split('.')[0] == p.split('.')[0]:\n"
2702
+ " return gw\n"
2703
+ " if mask <= 16 and d.split('.')[:2] == p.split('.')[:2]:\n"
2704
+ " return gw\n"
2705
+ " return state.get('default')\n"
2706
+ " if op == 'default':\n"
2707
+ " return state.get('default')\n"
2708
+ " if op == 'table':\n"
2709
+ " return dict(state.get('table', {}))\n"
2710
+ " return None\n"),
2711
+ "cases": [
2712
+ (({'table': {'10.0.0.0/8': 'gw1'}}, 'route', '10.1.0.5'), 'gw1'),
2713
+ (({'default': 'gw0'}, 'route', '8.8.8.8'), 'gw0'),
2714
+ (({}, 'default'), None),
2715
+ (({'table': {'a': 'b'}}, 'table'), {'a': 'b'})],
2716
+ "params": [],
2717
+ "calibration": "对照:网关——路由转发/默认出口/路由表",
2718
+ },
2719
+ "网络-端口镜像": {
2720
+ "task": "端口镜像",
2721
+ "pattern": (
2722
+ "def port_mirror(state, op, src=None, dst=None):\n"
2723
+ " # 生效条件:op ∈ {active, enable, mirror}\n"
2724
+ " # 子功能:① op 分支处理\n"
2725
+ " # 执行:按 op 分派\n"
2726
+ " # 不适用条件:op 非 {active, enable, mirror} 时\n"
2727
+ " # 端口镜像:enable 启用 / mirror 复制 / active 状态(SPAN 监控)\n"
2728
+ " if op == 'enable':\n"
2729
+ " state['src'] = src\n"
2730
+ " state['dst'] = dst\n"
2731
+ " state['active'] = True\n"
2732
+ " return 'enabled'\n"
2733
+ " if op == 'mirror':\n"
2734
+ " return (state.get('src'), state.get('dst')) if state.get('active') else None\n"
2735
+ " if op == 'active':\n"
2736
+ " return state.get('active', False)\n"
2737
+ " return None\n"),
2738
+ "cases": [
2739
+ (({}, 'enable', 'p1', 'p9'), 'enabled'),
2740
+ (({'active': True, 'src': 'p1', 'dst': 'p9'}, 'mirror'), ('p1', 'p9')),
2741
+ (({}, 'mirror'), None),
2742
+ (({}, 'active'), False)],
2743
+ "params": [],
2744
+ "calibration": "对照:SPAN——端口流量镜像到监控口(抓包)",
2745
+ },
2746
+ "网络-包过滤": {
2747
+ "task": "包过滤",
2748
+ "pattern": (
2749
+ "def packet_filter(state, op, pkt=None):\n"
2750
+ " # 生效条件:op ∈ {filter, rules, stats}\n"
2751
+ " # 子功能:① op 分支处理\n"
2752
+ " # 执行:按 op 分派;循环迭代;顺序调用\n"
2753
+ " # 不适用条件:op 非 {filter, rules, stats} 时\n"
2754
+ " # 包过滤:rules 规则 / filter 过滤 / stats 统计(ACL 包过滤)\n"
2755
+ " if op == 'rules':\n"
2756
+ " state.setdefault('rules', []).append(pkt)\n"
2757
+ " return len(state['rules'])\n"
2758
+ " if op == 'filter':\n"
2759
+ " for r in state.get('rules', []):\n"
2760
+ " if r[0] == pkt[0] and r[1] == pkt[1]:\n"
2761
+ " return r[2]\n"
2762
+ " return 'allow'\n"
2763
+ " if op == 'stats':\n"
2764
+ " return len(state.get('rules', []))\n"
2765
+ " return None\n"),
2766
+ "cases": [
2767
+ (({}, 'rules', ('1.1.1.1', 80, 'block')), 1),
2768
+ (({'rules': [('1.1.1.1', 80, 'block')]}, 'filter', ('1.1.1.1', 80)), 'block'),
2769
+ (({}, 'filter', ('2.2.2.2', 80)), 'allow'),
2770
+ (({'rules': [('a', 1, 'b')]}, 'stats'), 1)],
2771
+ "params": [],
2772
+ "calibration": "对照:ACL——按五元组规则过滤(允许/拒绝)",
2773
+ },
2774
+ "网络-帧解析": {
2775
+ "task": "帧解析",
2776
+ "pattern": (
2777
+ "def ws_frame_parse(frame):\n"
2778
+ " # WebSocket 帧解析(帧解析):FIN/opcode/长度/载荷(RFC 6455 解码——帧封装的逆)\n"
2779
+ " # 生效条件:frame 为 RFC 6455 帧字节(首字节 FIN+opcode,次字节长度)\n"
2780
+ " # 子功能:① 解析 FIN/opcode ② 解析长度(含 126/127 扩展)③ 截取载荷解码\n"
2781
+ " # 执行:位运算取首字节 + 定长/扩展长度读法 + utf-8 解码\n"
2782
+ " # 不适用条件:frame 非法(长度不足 2 字节)时越界抛错;掩码帧未处理\n"
2783
+ " fin = (frame[0] >> 7) & 1\n"
2784
+ " opcode = frame[0] & 0x0F\n"
2785
+ " n = frame[1] & 0x7F\n"
2786
+ " off = 2\n"
2787
+ " if n == 126:\n"
2788
+ " n = int.from_bytes(frame[2:4], 'big')\n"
2789
+ " off = 4\n"
2790
+ " elif n == 127:\n"
2791
+ " n = int.from_bytes(frame[4:12], 'big')\n"
2792
+ " off = 10\n"
2793
+ " return (fin, opcode, n, frame[off:off + n].decode('utf-8', 'replace'))\n"),
2794
+ "cases": [
2795
+ ((bytes([0x81, 0x02]) + b'hi',), (1, 1, 2, 'hi')),
2796
+ ((bytes([0x89, 0x00]),), (1, 9, 0, '')),
2797
+ ((bytes([0x81, 126]) + (300).to_bytes(2, 'big') + b'a' * 300,),
2798
+ (1, 1, 300, 'a' * 300)),
2799
+ ((bytes([0x82, 0x01]) + b'\x00',), (1, 2, 1, '\x00'))],
2800
+ "params": [],
2801
+ "calibration": "对照:RFC 6455——WebSocket 帧解码(FIN/opcode/长度/载荷,与帧封装 ws_frame 互逆)",
2802
+ },
2803
+ "网络-MAC学习": {
2804
+ "task": "MAC学习",
2805
+ "pattern": (
2806
+ "def mac_learn(table, port, mac, action):\n"
2807
+ " # MAC 学习(MAC地址学习):交换机按源 MAC 记录端口,未知目标泛洪(转发决策基础)\n"
2808
+ " # 生效条件:action ∈ {learn, lookup};table 为 MAC→端口 映射\n"
2809
+ " # 子功能:① learn 记录源 MAC 端口 ② lookup 查询转发端口 ③ 未知泛洪\n"
2810
+ " # 执行:learn 写表;lookup 命中返端口、未命中返 flood\n"
2811
+ " # 不适用条件:action 非 {learn, lookup} 时\n"
2812
+ " if action == 'learn':\n"
2813
+ " table[mac] = port\n"
2814
+ " return 'learned'\n"
2815
+ " if action == 'lookup':\n"
2816
+ " return table.get(mac, 'flood')\n"
2817
+ " return None\n"),
2818
+ "cases": [
2819
+ (({}, 'p1', 'aa', 'learn'), 'learned'),
2820
+ (({'aa': 'p1'}, 'p1', 'aa', 'lookup'), 'p1'),
2821
+ (({'aa': 'p1'}, 'p1', 'bb', 'lookup'), 'flood'),
2822
+ (({'aa': 'p1'}, 'p2', 'aa', 'learn'), 'learned'),
2823
+ (({}, 'p1', 'aa', 'unknown'), None)],
2824
+ "params": [],
2825
+ "calibration": "对照:交换机 MAC 学习——源 MAC 记端口,未知目标泛洪,学习可更新端口",
2826
+ },
2827
+ "网络-证书校验": {
2828
+ "task": "证书校验",
2829
+ "pattern": (
2830
+ "def cert_verify(cert, now):\n"
2831
+ " # 证书校验(证书有效期校验):有效期时间窗检查(TLS 信任链第一步)\n"
2832
+ " # 生效条件:cert 含 not_before/not_after;now 为当前时间戳\n"
2833
+ " # 子功能:① 时间窗边界比较 ② 越界判过期 ③ 窗内判有效\n"
2834
+ " # 执行:now < not_before 或 now > not_after → expired(fail-closed)\n"
2835
+ " # 不适用条件:输入不满足生效条件时返回 None/不执行\n"
2836
+ " if now < cert.get('not_before', 0) or now > cert.get('not_after', 0):\n"
2837
+ " return 'expired'\n"
2838
+ " return 'valid'\n"),
2839
+ "cases": [
2840
+ (({'not_before': 100, 'not_after': 200}, 150), 'valid'),
2841
+ (({'not_before': 100, 'not_after': 200}, 50), 'expired'),
2842
+ (({'not_before': 100, 'not_after': 200}, 250), 'expired'),
2843
+ (({}, 150), 'expired')],
2844
+ "params": [],
2845
+ "calibration": "对照:X.509 证书有效期校验——not_before/not_after 时间窗判定",
2846
+ },
2847
+
2848
+ "蜂群-配对信任": {
2849
+ "task": "配对信任",
2850
+ "pattern": (
2851
+ "def swarm_pair(devices, op, device_id=None):\n"
2852
+ " # 生效条件:devices 为设备 dict(id → {'paired': bool, 'trust': int});\n"
2853
+ " # op ∈ {pair, unpair, check};device_id 配对/解对时必填\n"
2854
+ " # 子功能:① pair 信任建立(trust=1)② unpair 撤销 ③ check 查询\n"
2855
+ " # 执行:状态机分派(配对信任链:未配对→已配对,撤销反向)\n"
2856
+ " # 不适用条件:重复配对已配对设备返回原状态(幂等)\n"
2857
+ " devices.setdefault(device_id, {'paired': False, 'trust': 0})\n"
2858
+ " dev = devices[device_id]\n"
2859
+ " if op == 'pair':\n"
2860
+ " dev['paired'] = True\n"
2861
+ " dev['trust'] = 1\n"
2862
+ " elif op == 'unpair':\n"
2863
+ " dev['paired'] = False\n"
2864
+ " dev['trust'] = 0\n"
2865
+ " return dev['paired']\n"
2866
+ ),
2867
+ "cases": [
2868
+ [({1: {'paired': False, 'trust': 0}}, 'pair', 1), True],
2869
+ [({1: {'paired': True, 'trust': 1}}, 'unpair', 1), False],
2870
+ [({1: {'paired': False, 'trust': 0}}, 'check', 1), False],
2871
+ ],
2872
+ "params": ["devices", "op", "device_id"],
2873
+ "calibration": "对照:蓝牙配对——信任建立/撤销/查询三操作,配对即信任=1(蜂群信任链基例)",
2874
+ },
2875
+
2876
+ }
2877
+
2878
+
2879
+ def route_net_unit(question):
2880
+ """任务识别(问题 → 网络单元)"""
2881
+ best, best_len = None, 0
2882
+ for uid, u in NET_UNITS.items():
2883
+ for kw in (u["task"], uid):
2884
+ if kw in question and len(kw) > best_len:
2885
+ best, best_len = uid, len(kw)
2886
+ return best
2887
+
2888
+
2889
+ if __name__ == "__main__":
2890
+ print("=== 蓝牙和互联网白箱单元库(目标7 · 蜂群网络初级复现)===\n")
2891
+ for uid, u in NET_UNITS.items():
2892
+ print(f"[{uid}] 任务={u['task']} 样例数={len(u['cases'])}")
2893
+ print(f" 校准: {u['calibration']}")
2894
+ print(f"\n=== 判定 ===\n网络单元库: "
2895
+ f"{'✔ 5 单元就绪(IP/TCP/UDP/发现/蜂群中继)' if len(NET_UNITS) >= 4 else '✘'}")