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