@iowarp/clio-coder 0.3.0 → 0.3.2
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/CHANGELOG.md +123 -2
- package/CONTRIBUTING.md +23 -23
- package/README.md +295 -627
- package/dist/acp-BIYHVZIM.js +128 -0
- package/dist/{agents-Q4MYPMUW.js → agents-YT6SSRIT.js} +52 -27
- package/dist/assets/codewiki.json +1 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
- package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
- package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter.wasm +0 -0
- package/dist/{auth-O6HYIJ6J.js → auth-5TWEIYDN.js} +30 -15
- package/dist/chunk-2EHAIA3X.js +481 -0
- package/dist/{chunk-ME6DNWIU.js → chunk-2IR2NMPA.js} +12 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/chunk-3I7MS7N2.js +40 -0
- package/dist/chunk-3R73A4XB.js +69 -0
- package/dist/{chunk-JPOWPFCU.js → chunk-3ZXDFGR5.js} +52 -23
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-26BZQOAD.js → chunk-4BPJXDWC.js} +161 -260
- package/dist/chunk-4KLWL3UC.js +18 -0
- package/dist/{chunk-5LDRNKX2.js → chunk-4VP4KH3K.js} +161 -262
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/chunk-5TSRNF4G.js +510 -0
- package/dist/{chunk-WD6AJM35.js → chunk-5UUP6MWO.js} +48 -69
- package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6EJV5X2W.js +16405 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/{chunk-XNISANGE.js → chunk-77VKQEHF.js} +171 -74
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/{chunk-UWIJNAOB.js → chunk-7EYHLWU7.js} +907 -638
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-JWHCJDCI.js → chunk-A3CYT5EX.js} +257 -79
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/chunk-AO4RKG4M.js +277 -0
- package/dist/chunk-APJ265NV.js +7410 -0
- package/dist/chunk-ARBGF5F7.js +174 -0
- package/dist/{chunk-TFSSEXL6.js → chunk-BMEMKKIT.js} +14 -4
- package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/{chunk-67MTHP2E.js → chunk-ED4KHGC3.js} +13 -5
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/{chunk-O4EJEDHO.js → chunk-EPVUXGXG.js} +50 -35
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G2DE3C7R.js +644 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-7BHLZB3A.js → chunk-GGXXDWE4.js} +190 -1218
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-E3NYWENM.js → chunk-HFSBBKSQ.js} +55 -61
- package/dist/chunk-HKIYEGME.js +30 -0
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/chunk-IGLFWIYI.js +161 -0
- package/dist/chunk-IHXBNWMM.js +137 -0
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
- package/dist/{chunk-VOO7NYPP.js → chunk-J5HN4RYU.js} +27 -9
- package/dist/{chunk-4UQA7NCT.js → chunk-J5Q24KAG.js} +7 -2
- package/dist/{chunk-KBR4MZZR.js → chunk-JVCV3ICN.js} +7 -1
- package/dist/chunk-KJ5LWLOE.js +1077 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-3DANZDGR.js → chunk-LBNRH5WM.js} +100 -161
- package/dist/{chunk-TKHQ4DGZ.js → chunk-LZSJBIVT.js} +7358 -7414
- package/dist/{chunk-UGYAX5YI.js → chunk-M6SHUN7Q.js} +13 -8
- package/dist/chunk-MAW544W2.js +1882 -0
- package/dist/chunk-MBS4V7ZP.js +217 -0
- package/dist/{chunk-2J63S4SF.js → chunk-MFFY33HR.js} +167 -140
- package/dist/chunk-MNA4JGU4.js +255 -0
- package/dist/chunk-MQSRRFWA.js +3428 -0
- package/dist/{chunk-RQDWMVRB.js → chunk-MVVUPGPW.js} +138 -137
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/chunk-OHHN2SO4.js +5135 -0
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-BBUH4VAA.js → chunk-OOJYHWRB.js} +60 -361
- package/dist/{chunk-D5YD55AR.js → chunk-OQ33BKR3.js} +12 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-AMFR5YA3.js → chunk-ORBHGJC5.js} +26 -12
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/{chunk-7RBKDI66.js → chunk-QTYWRVRA.js} +104 -12
- package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
- package/dist/chunk-SRF2PJNW.js +184 -0
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/{chunk-XV4ZJ6ZM.js → chunk-STBPMHSX.js} +473 -1194
- package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TXOTCRLG.js +15 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-527KG6XR.js → chunk-V4RXGQ5Q.js} +72 -185
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
- package/dist/chunk-WMSVI4G2.js +2095 -0
- package/dist/chunk-WVO7V2QY.js +797 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/chunk-X75S7HFS.js +374 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
- package/dist/{chunk-PIDUD6M2.js → chunk-YCWGATWI.js} +12 -5
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-UHTSULZS.js → chunk-ZDOOVTXZ.js} +38 -73
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-CLJ5HLUD.js → chunk-ZWLZP4ZT.js} +25 -6
- package/dist/cli/index.js +70 -56
- package/dist/clio-4LY5K2AC.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-JVHMUBEB.js → components-KELWS457.js} +31 -9
- package/dist/{config-ZFCDBMDC.js → config-GTLUW2PR.js} +104 -56
- package/dist/configure-R6A64DHX.js +42 -0
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-CDXTP2MP.js → context-JFZEJ7W5.js} +21 -13
- package/dist/{context-E3KIFVXI.js → context-RW5HC47S.js} +77 -36
- package/dist/{context-clear-3F4PLXOS.js → context-clear-6ZHBAZZT.js} +64 -30
- package/dist/{context-index-Q7YSYTR3.js → context-index-BZ4UYMTC.js} +36 -24
- package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
- package/dist/{docs-YIETIWZI.js → docs-2C2LTVT2.js} +32 -13
- package/dist/doctor-KI767GSN.js +87 -0
- package/dist/{eval-B3KZZESM.js → eval-XSSNATB4.js} +93 -27
- package/dist/{evidence-V67CHM35.js → evidence-UA6AWDQQ.js} +55 -27
- package/dist/{evolve-YDZSUQYA.js → evolve-QNTFGV6Z.js} +59 -26
- package/dist/{extensions-SRG7XCAH.js → extensions-QVDOHDGJ.js} +23 -8
- package/dist/{fleet-CA2CRTVG.js → fleet-Q7UOMUSG.js} +173 -56
- package/dist/fleet-preflight-DDN536IT.js +26 -0
- package/dist/{init-2OZDJE2D.js → init-WBB65ZHQ.js} +79 -34
- package/dist/{memory-3PIQQAKX.js → memory-MD3O64RI.js} +57 -28
- package/dist/{models-DY35XI7Y.js → models-BZU34YWD.js} +49 -24
- package/dist/monitor-MEQA5C3I.js +661 -0
- package/dist/{chunk-PS4PFJQP.js → orchestrator-CGFKEP27.js} +22837 -18564
- package/dist/{paths-5OMXW7Z4.js → paths-UXLN5YYZ.js} +17 -6
- package/dist/preload-P6DGH2PZ.js +13 -0
- package/dist/{reset-PIFYNOS3.js → reset-L2FQEE3E.js} +25 -13
- package/dist/{run-3VSPP24F.js → run-IV4Q6RLN.js} +115 -63
- package/dist/{share-D36RQCXM.js → share-S5BZQC5I.js} +23 -10
- package/dist/{skills-F2MRLELY.js → skills-LQEKRDTN.js} +42 -15
- package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-3DC4HEWS.js} +90 -45
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-DZMEZAH4.js → targets-C4SSGQOB.js} +78 -60
- package/dist/terminal-lease-IT5JW2NR.js +395 -0
- package/dist/{trace-7NYCUI2J.js → trace-PNCASAXC.js} +48 -17
- package/dist/tree-sitter-HGKH6LG4.js +4673 -0
- package/dist/{uninstall-AD3JWHBB.js → uninstall-FZCQCDKC.js} +19 -8
- package/dist/{upgrade-WYYBKGDY.js → upgrade-7TT7SQ3G.js} +66 -24
- package/dist/{usage-ULIDAGFF.js → usage-GV4PKT3M.js} +71 -32
- package/dist/verify-G6V4D2G7.js +716 -0
- package/dist/version-KGEG7EPO.js +21 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-DQF6Z66B.js} +98 -48
- package/dist/worker/entry.js +297 -54
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +29 -21
- package/docs/acp.md +191 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +157 -7
- package/docs/artifact-placement.md +101 -0
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +4 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +224 -97
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +236 -38
- package/docs/context-engine.md +34 -7
- package/docs/development-pipeline.md +102 -0
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +3 -3
- package/docs/environment-variables.md +15 -6
- package/docs/eval-runner.md +3 -3
- package/docs/evals-internal.md +2 -2
- package/docs/evidence-and-memory.md +10 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +25 -18
- package/docs/fleet-demo-runbook.md +22 -23
- package/docs/fleet-dispatch.md +117 -16
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +107 -15
- package/docs/installation-and-lifecycle.md +75 -17
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +46 -15
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +14 -14
- package/docs/prompt-envelope-and-tools.md +25 -4
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -111
- package/docs/safety-model.md +28 -8
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +101 -0
- package/docs/tool-usage.md +6 -5
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +121 -28
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +33 -36
- package/skills/README.md +5 -6
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/git/file-ticket/SKILL.md +107 -0
- package/skills/git/file-ticket/evals.md +54 -0
- package/skills/git/fix-issue/SKILL.md +106 -0
- package/skills/git/fix-issue/evals.md +71 -0
- package/skills/git/ship/SKILL.md +92 -0
- package/skills/git/ship/evals.md +72 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/skill-marketplace.json +12 -20
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +115 -0
- package/src/cli/agents.ts +60 -0
- package/src/cli/args.ts +280 -0
- package/src/cli/argv.ts +170 -0
- package/src/cli/ask.ts +34 -0
- package/src/cli/auth.ts +468 -0
- package/src/cli/bootstrap-generate.ts +498 -0
- package/src/cli/clio.ts +96 -0
- package/src/cli/components.ts +195 -0
- package/src/cli/config-inspect.ts +336 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/configure-interop.ts +67 -0
- package/src/cli/configure-layout.ts +172 -0
- package/src/cli/configure.ts +1525 -0
- package/src/cli/context-clear.ts +76 -0
- package/src/cli/context-index.ts +100 -0
- package/src/cli/context.ts +321 -0
- package/src/cli/default-target.ts +55 -0
- package/src/cli/docs.ts +346 -0
- package/src/cli/doctor.ts +54 -0
- package/src/cli/eval.ts +315 -0
- package/src/cli/evidence.ts +225 -0
- package/src/cli/evolve.ts +219 -0
- package/src/cli/extensions.ts +214 -0
- package/src/cli/fleet.ts +868 -0
- package/src/cli/index.ts +338 -0
- package/src/cli/init.ts +219 -0
- package/src/cli/initial-message.ts +47 -0
- package/src/cli/internal-dispatch.ts +55 -0
- package/src/cli/memory.ts +182 -0
- package/src/cli/models.ts +257 -0
- package/src/cli/modes/json-stream.ts +121 -0
- package/src/cli/modes/jsonl.ts +9 -0
- package/src/cli/modes/print.ts +604 -0
- package/src/cli/oauth-manual-input.ts +72 -0
- package/src/cli/oauth-select.ts +36 -0
- package/src/cli/output-guard.ts +48 -0
- package/src/cli/paths.ts +44 -0
- package/src/cli/provider-target.ts +113 -0
- package/src/cli/removal.ts +72 -0
- package/src/cli/reset.ts +253 -0
- package/src/cli/run.ts +497 -0
- package/src/cli/share.ts +243 -0
- package/src/cli/shared.ts +60 -0
- package/src/cli/skills-eval.ts +1240 -0
- package/src/cli/skills.ts +485 -0
- package/src/cli/steer-channel.ts +86 -0
- package/src/cli/targets.ts +1154 -0
- package/src/cli/text-layout.ts +112 -0
- package/src/cli/trace.ts +322 -0
- package/src/cli/uninstall.ts +405 -0
- package/src/cli/upgrade.ts +286 -0
- package/src/cli/usage.ts +876 -0
- package/src/cli/validate-model.ts +28 -0
- package/src/cli/version.ts +7 -0
- package/src/cli/wiki-generate.ts +510 -0
- package/src/core/agent-environment.ts +7 -0
- package/src/core/artifact-paths.ts +43 -0
- package/src/core/bash-exec.ts +313 -0
- package/src/core/boot-trace.ts +42 -0
- package/src/core/bus-events.ts +744 -0
- package/src/core/bus-trace.ts +53 -0
- package/src/core/c-header-language.ts +265 -0
- package/src/core/clio-repo.ts +78 -0
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +1722 -0
- package/src/core/context-floor.ts +33 -0
- package/src/core/defaults.ts +659 -0
- package/src/core/domain-loader.ts +177 -0
- package/src/core/event-bus.ts +94 -0
- package/src/core/file-references.ts +282 -0
- package/src/core/git-commit-attribution.ts +362 -0
- package/src/core/guardrails.ts +185 -0
- package/src/core/headless-permission.ts +21 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/init.ts +223 -0
- package/src/core/json-payload.ts +58 -0
- package/src/core/package-root.ts +54 -0
- package/src/core/path-canonical.ts +37 -0
- package/src/core/process-identity.ts +41 -0
- package/src/core/recent-models.ts +91 -0
- package/src/core/residency-protection.ts +56 -0
- package/src/core/resolve-config-value.ts +88 -0
- package/src/core/response-schema.ts +279 -0
- package/src/core/run-overrides.ts +77 -0
- package/src/core/safe-exec.ts +205 -0
- package/src/core/safe-id.ts +37 -0
- package/src/core/safe-resource-write.ts +162 -0
- package/src/core/session-routing.ts +339 -0
- package/src/core/settings-layers.ts +354 -0
- package/src/core/shared-bus.ts +8 -0
- package/src/core/shell-quote.ts +26 -0
- package/src/core/skill-activation.ts +190 -0
- package/src/core/startup-timer.ts +37 -0
- package/src/core/state-file-lock.ts +219 -0
- package/src/core/termination.ts +275 -0
- package/src/core/timers.ts +38 -0
- package/src/core/tool-names.ts +65 -0
- package/src/core/verification-scripts.ts +13 -0
- package/src/core/workspace-files.ts +492 -0
- package/src/core/xdg.ts +177 -0
- package/src/domains/agents/builtins/architect.md +4 -4
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +3 -3
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +1 -1
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +172 -0
- package/src/domains/agents/contract.ts +16 -0
- package/src/domains/agents/extension.ts +110 -0
- package/src/domains/agents/fleet-commands.ts +154 -0
- package/src/domains/agents/fleet-contract.ts +797 -0
- package/src/domains/agents/frontmatter.ts +40 -0
- package/src/domains/agents/index.ts +102 -0
- package/src/domains/agents/manifest.ts +6 -0
- package/src/domains/agents/recipe-schema.ts +202 -0
- package/src/domains/agents/recipe.ts +125 -0
- package/src/domains/agents/registry.ts +111 -0
- package/src/domains/agents/result-contract.ts +1265 -0
- package/src/domains/agents/spec.ts +371 -0
- package/src/domains/agents/write-boundary.ts +109 -0
- package/src/domains/components/diff.ts +99 -0
- package/src/domains/components/hash.ts +21 -0
- package/src/domains/components/index.ts +3 -0
- package/src/domains/components/scan.ts +304 -0
- package/src/domains/components/snapshot.ts +108 -0
- package/src/domains/components/types.ts +82 -0
- package/src/domains/config/agent-namespace.ts +13 -0
- package/src/domains/config/classify.ts +106 -0
- package/src/domains/config/contract.ts +22 -0
- package/src/domains/config/extension.ts +142 -0
- package/src/domains/config/index.ts +23 -0
- package/src/domains/config/keybindings.ts +200 -0
- package/src/domains/config/manifest.ts +6 -0
- package/src/domains/config/watcher.ts +41 -0
- package/src/domains/context/adoption.ts +880 -0
- package/src/domains/context/bootstrap-prompt.ts +273 -0
- package/src/domains/context/bootstrap.ts +1502 -0
- package/src/domains/context/clear.ts +91 -0
- package/src/domains/context/clio-md.ts +429 -0
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/cmake.ts +356 -0
- package/src/domains/context/codewiki/cooperative.ts +46 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/digest.ts +135 -0
- package/src/domains/context/codewiki/grammar-assets.ts +33 -0
- package/src/domains/context/codewiki/indexer.ts +1529 -0
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +771 -0
- package/src/domains/context/contract.ts +68 -0
- package/src/domains/context/excluded-dirs.ts +1 -0
- package/src/domains/context/extension.ts +358 -0
- package/src/domains/context/fingerprint.ts +198 -0
- package/src/domains/context/index.ts +154 -0
- package/src/domains/context/init-options.ts +69 -0
- package/src/domains/context/manifest.ts +6 -0
- package/src/domains/context/operator-profile.ts +157 -0
- package/src/domains/context/project-metadata.ts +529 -0
- package/src/domains/context/project-rules.ts +227 -0
- package/src/domains/context/prompt-context.ts +61 -0
- package/src/domains/context/refresh.ts +178 -0
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/sibling-files.ts +10 -0
- package/src/domains/context/state.ts +237 -0
- package/src/domains/context/wiki/assemble.ts +303 -0
- package/src/domains/context/wiki/frontmatter.ts +210 -0
- package/src/domains/context/wiki/generate.ts +595 -0
- package/src/domains/context/wiki/layout.ts +111 -0
- package/src/domains/context/wiki/meta.ts +221 -0
- package/src/domains/context/wiki/plan-store.ts +217 -0
- package/src/domains/context/wiki/plan.ts +250 -0
- package/src/domains/context/wiki/prompts.ts +283 -0
- package/src/domains/context/wiki/staleness.ts +198 -0
- package/src/domains/dispatch/active-route-planner.ts +168 -0
- package/src/domains/dispatch/admission-queue.ts +150 -0
- package/src/domains/dispatch/admission.ts +334 -0
- package/src/domains/dispatch/agent-candidates.ts +307 -0
- package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
- package/src/domains/dispatch/agent-ledger-store.ts +257 -0
- package/src/domains/dispatch/agent-ledger.ts +212 -0
- package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
- package/src/domains/dispatch/assignment-events.ts +132 -0
- package/src/domains/dispatch/assignment-reconcile.ts +76 -0
- package/src/domains/dispatch/assignment-store.ts +162 -0
- package/src/domains/dispatch/assignment.ts +278 -0
- package/src/domains/dispatch/backoff.ts +59 -0
- package/src/domains/dispatch/batch-store.ts +134 -0
- package/src/domains/dispatch/batch-tracker.ts +66 -0
- package/src/domains/dispatch/capability-match.ts +155 -0
- package/src/domains/dispatch/capacity-lease.ts +413 -0
- package/src/domains/dispatch/code-step-store.ts +52 -0
- package/src/domains/dispatch/code-step.ts +387 -0
- package/src/domains/dispatch/contract.ts +278 -0
- package/src/domains/dispatch/dedup.ts +133 -0
- package/src/domains/dispatch/event-pump.ts +251 -0
- package/src/domains/dispatch/execution-handoff.ts +29 -0
- package/src/domains/dispatch/execution-plan.ts +328 -0
- package/src/domains/dispatch/execution-role.ts +277 -0
- package/src/domains/dispatch/execution-scheduler.ts +583 -0
- package/src/domains/dispatch/extension.ts +6006 -0
- package/src/domains/dispatch/failure-classification.ts +147 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/fleet-plan.ts +225 -0
- package/src/domains/dispatch/fleet-preflight.ts +394 -0
- package/src/domains/dispatch/gate-decisions.ts +1040 -0
- package/src/domains/dispatch/gate-role-prompts.ts +58 -0
- package/src/domains/dispatch/heartbeat.ts +27 -0
- package/src/domains/dispatch/index.ts +137 -0
- package/src/domains/dispatch/joint-route-adapter.ts +114 -0
- package/src/domains/dispatch/joint-route-resolver.ts +283 -0
- package/src/domains/dispatch/manifest.ts +6 -0
- package/src/domains/dispatch/orphan-recovery.ts +266 -0
- package/src/domains/dispatch/outcome.ts +109 -0
- package/src/domains/dispatch/phase-timing.ts +47 -0
- package/src/domains/dispatch/placement.ts +202 -0
- package/src/domains/dispatch/receipt-findings.ts +255 -0
- package/src/domains/dispatch/receipt-integrity.ts +383 -0
- package/src/domains/dispatch/recovery-candidates.ts +74 -0
- package/src/domains/dispatch/reproducibility.ts +48 -0
- package/src/domains/dispatch/reservation-store.ts +501 -0
- package/src/domains/dispatch/route-approval.ts +177 -0
- package/src/domains/dispatch/route-candidates.ts +57 -0
- package/src/domains/dispatch/route-decision.ts +1079 -0
- package/src/domains/dispatch/route-facts.ts +187 -0
- package/src/domains/dispatch/route-history.ts +238 -0
- package/src/domains/dispatch/route-observer.ts +488 -0
- package/src/domains/dispatch/route-policy.ts +327 -0
- package/src/domains/dispatch/route-quality.ts +256 -0
- package/src/domains/dispatch/route-readiness.ts +120 -0
- package/src/domains/dispatch/routing-intent.ts +287 -0
- package/src/domains/dispatch/run-identity.ts +56 -0
- package/src/domains/dispatch/scout-transition.ts +130 -0
- package/src/domains/dispatch/state.ts +302 -0
- package/src/domains/dispatch/tool-stats.ts +132 -0
- package/src/domains/dispatch/transport.ts +210 -0
- package/src/domains/dispatch/types.ts +799 -0
- package/src/domains/dispatch/validation-grounding.ts +154 -0
- package/src/domains/dispatch/validation.ts +721 -0
- package/src/domains/dispatch/worker-protocol.ts +275 -0
- package/src/domains/dispatch/worker-spawn.ts +585 -0
- package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
- package/src/domains/dispatch/write-boundary.ts +426 -0
- package/src/domains/eval/artifacts/redact.ts +42 -0
- package/src/domains/eval/artifacts/store.ts +173 -0
- package/src/domains/eval/compare/compare.ts +33 -0
- package/src/domains/eval/compare/gates.ts +66 -0
- package/src/domains/eval/compare/thresholds.ts +92 -0
- package/src/domains/eval/harness-metrics.ts +62 -0
- package/src/domains/eval/index.ts +66 -0
- package/src/domains/eval/metrics/chaos-stream.ts +93 -0
- package/src/domains/eval/metrics/context.ts +34 -0
- package/src/domains/eval/metrics/coverage.ts +21 -0
- package/src/domains/eval/metrics/evidence.ts +182 -0
- package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
- package/src/domains/eval/metrics/invariants.ts +736 -0
- package/src/domains/eval/metrics/latency.ts +4 -0
- package/src/domains/eval/metrics/token-stream.ts +139 -0
- package/src/domains/eval/metrics/tokens.ts +51 -0
- package/src/domains/eval/metrics/tool-calls.ts +7 -0
- package/src/domains/eval/proactive-memory.ts +279 -0
- package/src/domains/eval/provenance.ts +35 -0
- package/src/domains/eval/report.ts +234 -0
- package/src/domains/eval/reports/json.ts +5 -0
- package/src/domains/eval/reports/junit.ts +23 -0
- package/src/domains/eval/reports/markdown.ts +20 -0
- package/src/domains/eval/reports/swe-jsonl.ts +16 -0
- package/src/domains/eval/reports/text.ts +25 -0
- package/src/domains/eval/run-compare.ts +274 -0
- package/src/domains/eval/runner.ts +244 -0
- package/src/domains/eval/runners/clio-run.ts +148 -0
- package/src/domains/eval/runners/context-index.ts +56 -0
- package/src/domains/eval/runners/context-init.ts +203 -0
- package/src/domains/eval/runners/external-command.ts +350 -0
- package/src/domains/eval/runtime-paths.ts +171 -0
- package/src/domains/eval/schema/artifact.ts +75 -0
- package/src/domains/eval/schema/suite.ts +235 -0
- package/src/domains/eval/schema/validate.ts +339 -0
- package/src/domains/eval/store.ts +392 -0
- package/src/domains/eval/suites/load.ts +74 -0
- package/src/domains/eval/suites/matrix.ts +19 -0
- package/src/domains/eval/suites/resolve.ts +44 -0
- package/src/domains/eval/suites/run.ts +325 -0
- package/src/domains/eval/task-file.ts +186 -0
- package/src/domains/eval/types.ts +140 -0
- package/src/domains/eval/verifiers/command.ts +27 -0
- package/src/domains/eval/verifiers/file-exists.ts +6 -0
- package/src/domains/eval/verifiers/patch.ts +22 -0
- package/src/domains/eval/workspaces/git.ts +41 -0
- package/src/domains/eval/workspaces/local.ts +17 -0
- package/src/domains/eval/workspaces/temp-copy.ts +29 -0
- package/src/domains/evidence/build.ts +1754 -0
- package/src/domains/evidence/eval.ts +605 -0
- package/src/domains/evidence/failure-attribution.ts +54 -0
- package/src/domains/evidence/finish-contract-map.ts +42 -0
- package/src/domains/evidence/index.ts +55 -0
- package/src/domains/evidence/provenance.ts +200 -0
- package/src/domains/evidence/redact.ts +81 -0
- package/src/domains/evidence/store.ts +291 -0
- package/src/domains/evidence/types.ts +325 -0
- package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
- package/src/domains/evolution/index.ts +26 -0
- package/src/domains/evolution/manifest.ts +154 -0
- package/src/domains/evolution/validate.ts +304 -0
- package/src/domains/extensions/contract.ts +22 -0
- package/src/domains/extensions/discovery.ts +193 -0
- package/src/domains/extensions/extension.ts +46 -0
- package/src/domains/extensions/index.ts +34 -0
- package/src/domains/extensions/manager.ts +30 -0
- package/src/domains/extensions/manifest.ts +6 -0
- package/src/domains/extensions/resources.ts +38 -0
- package/src/domains/extensions/state.ts +224 -0
- package/src/domains/extensions/types.ts +83 -0
- package/src/domains/interop/consent.ts +185 -0
- package/src/domains/interop/contract.ts +29 -0
- package/src/domains/interop/detect.ts +173 -0
- package/src/domains/interop/extension.ts +59 -0
- package/src/domains/interop/index.ts +34 -0
- package/src/domains/interop/manifest.ts +6 -0
- package/src/domains/interop/registry.ts +139 -0
- package/src/domains/interop/state.ts +92 -0
- package/src/domains/interop/types.ts +109 -0
- package/src/domains/lifecycle/contract.ts +11 -0
- package/src/domains/lifecycle/doctor.ts +536 -0
- package/src/domains/lifecycle/extension.ts +23 -0
- package/src/domains/lifecycle/index.ts +21 -0
- package/src/domains/lifecycle/install-method.ts +51 -0
- package/src/domains/lifecycle/manifest.ts +6 -0
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +114 -0
- package/src/domains/lifecycle/state.ts +93 -0
- package/src/domains/lifecycle/upgrade-notice.ts +35 -0
- package/src/domains/lifecycle/version.ts +35 -0
- package/src/domains/memory/index.ts +128 -0
- package/src/domains/memory/operations.ts +143 -0
- package/src/domains/memory/prompt-section.ts +86 -0
- package/src/domains/memory/proposal.ts +180 -0
- package/src/domains/memory/store.ts +163 -0
- package/src/domains/memory/task-bank.ts +229 -0
- package/src/domains/memory/task-memory-handoff.ts +222 -0
- package/src/domains/memory/task-memory-policy.ts +602 -0
- package/src/domains/memory/task-memory-status.ts +58 -0
- package/src/domains/memory/task-memory-telemetry.ts +346 -0
- package/src/domains/memory/task-memory-trace.ts +89 -0
- package/src/domains/memory/types.ts +74 -0
- package/src/domains/memory/validate.ts +297 -0
- package/src/domains/middleware/budget.ts +216 -0
- package/src/domains/middleware/contract.ts +35 -0
- package/src/domains/middleware/dispatch-nudge.ts +469 -0
- package/src/domains/middleware/extension.ts +129 -0
- package/src/domains/middleware/hook-receipts.ts +70 -0
- package/src/domains/middleware/hooks-io.ts +186 -0
- package/src/domains/middleware/hooks.ts +432 -0
- package/src/domains/middleware/index.ts +154 -0
- package/src/domains/middleware/manifest.ts +6 -0
- package/src/domains/middleware/memory-intervention.ts +701 -0
- package/src/domains/middleware/rules.ts +42 -0
- package/src/domains/middleware/runtime.ts +333 -0
- package/src/domains/middleware/skills-reminder.ts +202 -0
- package/src/domains/middleware/snapshot.ts +71 -0
- package/src/domains/middleware/stalled-turn.ts +71 -0
- package/src/domains/middleware/task-board-reminder.ts +87 -0
- package/src/domains/middleware/task-nudge.ts +77 -0
- package/src/domains/middleware/tool-choice-control.ts +42 -0
- package/src/domains/middleware/types.ts +131 -0
- package/src/domains/middleware/validate.ts +329 -0
- package/src/domains/observability/accountability.ts +67 -0
- package/src/domains/observability/contract.ts +168 -0
- package/src/domains/observability/cost.ts +206 -0
- package/src/domains/observability/evidence-index.ts +123 -0
- package/src/domains/observability/extension.ts +281 -0
- package/src/domains/observability/index.ts +78 -0
- package/src/domains/observability/manifest.ts +10 -0
- package/src/domains/observability/metrics.ts +37 -0
- package/src/domains/observability/projection.ts +477 -0
- package/src/domains/observability/telemetry.ts +89 -0
- package/src/domains/observability/trace-store.ts +1454 -0
- package/src/domains/prompts/compiler.ts +614 -0
- package/src/domains/prompts/contract.ts +46 -0
- package/src/domains/prompts/extension.ts +336 -0
- package/src/domains/prompts/fragment-loader.ts +138 -0
- package/src/domains/prompts/fragments/identity/clio.md +5 -6
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +19 -0
- package/src/domains/prompts/fragments/operating/contract.md +4 -41
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/hash.ts +73 -0
- package/src/domains/prompts/index.ts +32 -0
- package/src/domains/prompts/manifest.ts +8 -0
- package/src/domains/prompts/memory-intervention.ts +57 -0
- package/src/domains/prompts/preload.ts +82 -0
- package/src/domains/providers/auth/api-key.ts +47 -0
- package/src/domains/providers/auth/backend-file.ts +79 -0
- package/src/domains/providers/auth/backend-memory.ts +72 -0
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/index.ts +37 -0
- package/src/domains/providers/auth/oauth.ts +37 -0
- package/src/domains/providers/auth/storage.ts +726 -0
- package/src/domains/providers/capabilities.ts +58 -0
- package/src/domains/providers/catalog.ts +162 -0
- package/src/domains/providers/contract.ts +162 -0
- package/src/domains/providers/credentials.ts +20 -0
- package/src/domains/providers/eligibility.ts +24 -0
- package/src/domains/providers/errors.ts +64 -0
- package/src/domains/providers/extension.ts +548 -0
- package/src/domains/providers/index.ts +142 -0
- package/src/domains/providers/knowledge-base-path.ts +102 -0
- package/src/domains/providers/manifest.ts +6 -0
- package/src/domains/providers/model-capabilities.ts +136 -0
- package/src/domains/providers/model-discovery.ts +144 -0
- package/src/domains/providers/model-family.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +723 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +120 -37
- package/src/domains/providers/plugins.ts +61 -0
- package/src/domains/providers/probe/fingerprint.ts +64 -0
- package/src/domains/providers/probe/http.ts +114 -0
- package/src/domains/providers/probe/reasoning.ts +111 -0
- package/src/domains/providers/registry.ts +187 -0
- package/src/domains/providers/resolver.ts +156 -0
- package/src/domains/providers/runtime-resolution.ts +720 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +78 -0
- package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
- package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
- package/src/domains/providers/runtimes/claude/common.ts +55 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
- package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
- package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
- package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
- package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
- package/src/domains/providers/runtimes/cloud/google.ts +41 -0
- package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
- package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
- package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +164 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
- package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
- package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
- package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
- package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
- package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
- package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
- package/src/domains/providers/runtimes/protocol/google.ts +27 -0
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
- package/src/domains/providers/support.ts +241 -0
- package/src/domains/providers/thinking-control-policy.ts +85 -0
- package/src/domains/providers/types/capability-flags.ts +114 -0
- package/src/domains/providers/types/cost-provenance.ts +7 -0
- package/src/domains/providers/types/inference.ts +41 -0
- package/src/domains/providers/types/knowledge-base.ts +156 -0
- package/src/domains/providers/types/local-model-quirks.ts +216 -0
- package/src/domains/providers/types/runtime-descriptor.ts +181 -0
- package/src/domains/providers/types/target-descriptor.ts +60 -0
- package/src/domains/resources/collision.ts +92 -0
- package/src/domains/resources/common-loader.ts +140 -0
- package/src/domains/resources/contract.ts +24 -0
- package/src/domains/resources/extension.ts +59 -0
- package/src/domains/resources/index.ts +74 -0
- package/src/domains/resources/loader.ts +85 -0
- package/src/domains/resources/manifest.ts +6 -0
- package/src/domains/resources/prompts/loader.ts +246 -0
- package/src/domains/resources/prompts/substitute.ts +1 -0
- package/src/domains/resources/skills/content-hash.ts +107 -0
- package/src/domains/resources/skills/evals.ts +175 -0
- package/src/domains/resources/skills/install.ts +427 -0
- package/src/domains/resources/skills/loader.ts +985 -0
- package/src/domains/resources/skills/marketplace.ts +301 -0
- package/src/domains/resources/skills/provenance-pin.ts +115 -0
- package/src/domains/safety/action-classifier.ts +270 -0
- package/src/domains/safety/approval-axis.ts +23 -0
- package/src/domains/safety/audit.ts +493 -0
- package/src/domains/safety/autonomy.ts +174 -0
- package/src/domains/safety/call-target.ts +59 -0
- package/src/domains/safety/contract.ts +65 -0
- package/src/domains/safety/damage-control.ts +44 -0
- package/src/domains/safety/default-path-policy.ts +117 -0
- package/src/domains/safety/extension.ts +383 -0
- package/src/domains/safety/finish-contract-registration.ts +128 -0
- package/src/domains/safety/finish-contract.ts +554 -0
- package/src/domains/safety/index.ts +44 -0
- package/src/domains/safety/loop-detector.ts +143 -0
- package/src/domains/safety/manifest.ts +6 -0
- package/src/domains/safety/path-policy.ts +164 -0
- package/src/domains/safety/policy-engine.ts +994 -0
- package/src/domains/safety/project-policy.ts +391 -0
- package/src/domains/safety/protected-artifacts-registration.ts +189 -0
- package/src/domains/safety/protected-artifacts.ts +993 -0
- package/src/domains/safety/rejection-feedback.ts +102 -0
- package/src/domains/safety/rigor.ts +72 -0
- package/src/domains/safety/rule-compiler.ts +48 -0
- package/src/domains/safety/rule-pack-loader.ts +92 -0
- package/src/domains/safety/run-effects.ts +197 -0
- package/src/domains/safety/scope.ts +61 -0
- package/src/domains/scheduling/budget.ts +35 -0
- package/src/domains/scheduling/cluster.ts +175 -0
- package/src/domains/scheduling/contract.ts +30 -0
- package/src/domains/scheduling/extension.ts +91 -0
- package/src/domains/scheduling/index.ts +12 -0
- package/src/domains/scheduling/manifest.ts +6 -0
- package/src/domains/session/archive-readers.ts +208 -0
- package/src/domains/session/checkpoint.ts +38 -0
- package/src/domains/session/compaction/auto.ts +89 -0
- package/src/domains/session/compaction/branch-summary.ts +187 -0
- package/src/domains/session/compaction/compact.ts +493 -0
- package/src/domains/session/compaction/cut-point.ts +172 -0
- package/src/domains/session/compaction/defaults.ts +34 -0
- package/src/domains/session/compaction/mask-observations.ts +265 -0
- package/src/domains/session/compaction/session-entries.ts +18 -0
- package/src/domains/session/compaction/tokens.ts +148 -0
- package/src/domains/session/context-accounting.ts +583 -0
- package/src/domains/session/context-ledger.ts +362 -0
- package/src/domains/session/contract.ts +159 -0
- package/src/domains/session/cwd-fallback.ts +65 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +572 -0
- package/src/domains/session/extension.ts +403 -0
- package/src/domains/session/history.ts +172 -0
- package/src/domains/session/index.ts +84 -0
- package/src/domains/session/manager.ts +128 -0
- package/src/domains/session/manifest.ts +6 -0
- package/src/domains/session/migrations/index.ts +27 -0
- package/src/domains/session/prompt-manifest.ts +173 -0
- package/src/domains/session/protected-artifact-journal.ts +241 -0
- package/src/domains/session/protected-artifacts.ts +90 -0
- package/src/domains/session/retry.ts +230 -0
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +569 -0
- package/src/domains/session/tree/active-path.ts +137 -0
- package/src/domains/session/tree/fork.ts +159 -0
- package/src/domains/session/tree/manager.ts +128 -0
- package/src/domains/session/tree/navigator.ts +177 -0
- package/src/domains/session/tree/preview.ts +259 -0
- package/src/domains/session/usage.ts +148 -0
- package/src/domains/session/workspace/git-probe.ts +167 -0
- package/src/domains/session/workspace/index.ts +4 -0
- package/src/domains/session/workspace/project-type.ts +217 -0
- package/src/domains/session/workspace/snapshot.ts +74 -0
- package/src/domains/share/archive.ts +684 -0
- package/src/domains/share/contract.ts +9 -0
- package/src/domains/share/extension.ts +26 -0
- package/src/domains/share/index.ts +28 -0
- package/src/domains/share/manifest.ts +6 -0
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/adapter.ts +397 -0
- package/src/engine/acp/errors.ts +128 -0
- package/src/engine/acp/event-mapper.ts +154 -0
- package/src/engine/acp/server.ts +2238 -0
- package/src/engine/acp/tool-mediator.ts +686 -0
- package/src/engine/acp/transport.ts +775 -0
- package/src/engine/acp/types.ts +196 -0
- package/src/engine/agent.ts +29 -0
- package/src/engine/ai.ts +207 -0
- package/src/engine/alcf-oauth.ts +205 -0
- package/src/engine/antigravity/subprocess-runtime.ts +205 -0
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/degraded-inference.ts +95 -0
- package/src/engine/apis/index.ts +16 -0
- package/src/engine/apis/llamacpp-residency.ts +292 -0
- package/src/engine/apis/lmstudio-residency.ts +76 -0
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +528 -0
- package/src/engine/apis/openai-completions.ts +795 -0
- package/src/engine/apis/output-budget.ts +99 -0
- package/src/engine/apis/residency-lock.ts +29 -0
- package/src/engine/apis/residency.ts +776 -0
- package/src/engine/apis/resident-models.ts +42 -0
- package/src/engine/apis/sampling-overrides.ts +38 -0
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/claude/sdk-runtime.ts +685 -0
- package/src/engine/claude/session-id.ts +5 -0
- package/src/engine/claude/subprocess-runtime.ts +316 -0
- package/src/engine/claude/tool-safety.ts +400 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/external-subprocess.ts +23 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/harmony-response.ts +165 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/loop-guard.ts +1127 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +196 -0
- package/src/engine/pi-mono-names.ts +13 -0
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +272 -0
- package/src/engine/select-list.ts +53 -0
- package/src/engine/session.ts +834 -0
- package/src/engine/strip-tokenizer-sentinels.ts +125 -0
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +111 -0
- package/src/engine/types.ts +63 -0
- package/src/engine/worker-events.ts +100 -0
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1022 -0
- package/src/engine/worker-tools.ts +208 -0
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +2011 -0
- package/src/interactive/application-controller.ts +433 -0
- package/src/interactive/bus-notices.ts +265 -0
- package/src/interactive/chat-loop-messages.ts +626 -0
- package/src/interactive/chat-loop-policy.ts +18 -0
- package/src/interactive/chat-loop.ts +1090 -0
- package/src/interactive/chat-panel.ts +1820 -0
- package/src/interactive/chat-renderer.ts +1228 -0
- package/src/interactive/clio-editor.ts +161 -0
- package/src/interactive/command-fallbacks.ts +23 -0
- package/src/interactive/command-output.ts +85 -0
- package/src/interactive/context-activity.ts +203 -0
- package/src/interactive/context-meter.ts +223 -0
- package/src/interactive/context-overlay.ts +246 -0
- package/src/interactive/cost-overlay.ts +279 -0
- package/src/interactive/dispatch-board.ts +1319 -0
- package/src/interactive/dispatch-steering.ts +86 -0
- package/src/interactive/editor-bash.ts +46 -0
- package/src/interactive/editor-steer.ts +51 -0
- package/src/interactive/editor-submit.ts +507 -0
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/external-editor.ts +67 -0
- package/src/interactive/follow-up-queue-panel.ts +75 -0
- package/src/interactive/footer/dashboard.ts +538 -0
- package/src/interactive/footer/notifications.ts +275 -0
- package/src/interactive/footer/widgets.ts +1264 -0
- package/src/interactive/footer-panel.ts +187 -0
- package/src/interactive/format-time.ts +97 -0
- package/src/interactive/index.ts +11 -0
- package/src/interactive/interactive-application.ts +939 -0
- package/src/interactive/interactive-event-projection.ts +385 -0
- package/src/interactive/interactive-input-runtime.ts +307 -0
- package/src/interactive/interactive-presentation.ts +584 -0
- package/src/interactive/interactive-shell.ts +388 -0
- package/src/interactive/interactive-slash-runtime.ts +554 -0
- package/src/interactive/interactive-subscriptions.ts +111 -0
- package/src/interactive/interactive-tickers.ts +183 -0
- package/src/interactive/keybinding-manager.ts +496 -0
- package/src/interactive/layout.ts +57 -0
- package/src/interactive/leader-key.ts +143 -0
- package/src/interactive/loop-guard-interrupt.ts +101 -0
- package/src/interactive/memory-overlay.ts +280 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
- package/src/interactive/overlay-auth-lifecycle.ts +308 -0
- package/src/interactive/overlay-frame.ts +502 -0
- package/src/interactive/overlay-general-openers.ts +274 -0
- package/src/interactive/overlay-key-routing.ts +216 -0
- package/src/interactive/overlay-lifecycle.ts +426 -0
- package/src/interactive/overlay-model-selectors.ts +127 -0
- package/src/interactive/overlay-permission-lifecycle.ts +345 -0
- package/src/interactive/overlay-resource-openers.ts +112 -0
- package/src/interactive/overlay-session-lifecycle.ts +327 -0
- package/src/interactive/overlay-transitions.ts +57 -0
- package/src/interactive/overlays/agents.ts +69 -0
- package/src/interactive/overlays/ask-user.ts +921 -0
- package/src/interactive/overlays/auth-dialog.ts +221 -0
- package/src/interactive/overlays/context-reset.ts +108 -0
- package/src/interactive/overlays/cwd-fallback.ts +141 -0
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/extensions.ts +54 -0
- package/src/interactive/overlays/help-reference.ts +145 -0
- package/src/interactive/overlays/interop.ts +139 -0
- package/src/interactive/overlays/keybinding-detail.ts +90 -0
- package/src/interactive/overlays/list-overlay.ts +606 -0
- package/src/interactive/overlays/message-picker.ts +155 -0
- package/src/interactive/overlays/model-selector.ts +1109 -0
- package/src/interactive/overlays/prompts.ts +72 -0
- package/src/interactive/overlays/session-selector-search.ts +31 -0
- package/src/interactive/overlays/session-selector.ts +284 -0
- package/src/interactive/overlays/settings.ts +3451 -0
- package/src/interactive/overlays/skills-hub.ts +237 -0
- package/src/interactive/overlays/tree-selector.ts +422 -0
- package/src/interactive/permission-overlay.ts +170 -0
- package/src/interactive/render-trace.ts +534 -0
- package/src/interactive/renderers/branch-summary.ts +86 -0
- package/src/interactive/renderers/code-ink.ts +420 -0
- package/src/interactive/renderers/compaction-summary.ts +112 -0
- package/src/interactive/renderers/diff.ts +137 -0
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/notice.ts +28 -0
- package/src/interactive/renderers/retry-status.ts +31 -0
- package/src/interactive/renderers/structured.ts +89 -0
- package/src/interactive/renderers/tool-execution.ts +1357 -0
- package/src/interactive/renderers/worker-entry.ts +280 -0
- package/src/interactive/session-last-turn.ts +186 -0
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/session-transcript.ts +105 -0
- package/src/interactive/session-usage-reseed.ts +74 -0
- package/src/interactive/slash-autocomplete.ts +256 -0
- package/src/interactive/slash-commands.ts +1407 -0
- package/src/interactive/slash-spec.ts +424 -0
- package/src/interactive/status/controller.ts +260 -0
- package/src/interactive/status/index.ts +23 -0
- package/src/interactive/status/state-machine.ts +530 -0
- package/src/interactive/status/summary.ts +170 -0
- package/src/interactive/status/types.ts +121 -0
- package/src/interactive/status/verbs.ts +163 -0
- package/src/interactive/status/watchdog.ts +24 -0
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +540 -0
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/components.ts +55 -0
- package/src/interactive/theme/glyphs.ts +70 -0
- package/src/interactive/theme/index.ts +15 -0
- package/src/interactive/theme/labels.ts +88 -0
- package/src/interactive/theme/rules.ts +138 -0
- package/src/interactive/theme/segments.ts +88 -0
- package/src/interactive/theme/tokens.ts +121 -0
- package/src/interactive/thinking-level-policy.ts +6 -0
- package/src/interactive/tool-prose-loop.ts +122 -0
- package/src/interactive/tool-prose-registration.ts +48 -0
- package/src/interactive/turn-context.ts +855 -0
- package/src/interactive/turn-middleware.ts +283 -0
- package/src/interactive/turn-persistence.ts +458 -0
- package/src/interactive/turn-queues.ts +181 -0
- package/src/interactive/turn-recovery.ts +323 -0
- package/src/interactive/turn-runtime.ts +869 -0
- package/src/interactive/turn-state.ts +133 -0
- package/src/interactive/view/artifacts.ts +1452 -0
- package/src/interactive/view/view-overlay.ts +735 -0
- package/src/interactive/welcome-dashboard.ts +537 -0
- package/src/interactive/worker-receipts.ts +143 -0
- package/src/interactive/worker-replay.ts +111 -0
- package/src/interactive/worker-share.ts +100 -0
- package/src/interactive/worker-stream.ts +446 -0
- package/src/interactive/workspace-facts.ts +141 -0
- package/src/tools/agent-tools.ts +402 -0
- package/src/tools/artifact.ts +103 -0
- package/src/tools/ask-user.ts +666 -0
- package/src/tools/bash.ts +204 -0
- package/src/tools/bootstrap.ts +77 -0
- package/src/tools/builtin-tool-catalog.ts +265 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +549 -0
- package/src/tools/codewiki/shared.ts +118 -0
- package/src/tools/compete-worktrees.ts +898 -0
- package/src/tools/context/docs-engine.ts +630 -0
- package/src/tools/context/index.ts +514 -0
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +151 -0
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-arguments.ts +228 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +746 -0
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-scout.ts +461 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +244 -0
- package/src/tools/edit-diff.ts +534 -0
- package/src/tools/edit.ts +128 -0
- package/src/tools/executables.ts +22 -0
- package/src/tools/file-mutation-queue.ts +35 -0
- package/src/tools/find.ts +294 -0
- package/src/tools/grep.ts +495 -0
- package/src/tools/ignore-policy.ts +169 -0
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +206 -0
- package/src/tools/ls.ts +110 -0
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +767 -0
- package/src/tools/network-policy.ts +29 -0
- package/src/tools/observation.ts +421 -0
- package/src/tools/observers.ts +99 -0
- package/src/tools/path-utils.ts +79 -0
- package/src/tools/policy.ts +154 -0
- package/src/tools/profiles.ts +108 -0
- package/src/tools/read.ts +173 -0
- package/src/tools/registry.ts +1169 -0
- package/src/tools/result-shaping.ts +204 -0
- package/src/tools/safe-exec.ts +128 -0
- package/src/tools/spawn-hygiene.ts +182 -0
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +77 -0
- package/src/tools/tasks.ts +265 -0
- package/src/tools/truncate-utf8.ts +17 -0
- package/src/tools/truncate.ts +43 -0
- package/src/tools/verify/frontend.ts +687 -0
- package/src/tools/verify/index.ts +31 -0
- package/src/tools/verify/scripts.ts +108 -0
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +759 -0
- package/src/tools/worker-evidence.ts +215 -0
- package/src/tools/write.ts +57 -0
- package/src/utils/exif-orientation.ts +192 -0
- package/src/utils/git.ts +24 -0
- package/src/utils/image-resize.ts +148 -0
- package/src/utils/photon.ts +103 -0
- package/src/worker/control-lane.ts +22 -0
- package/src/worker/entry.ts +294 -0
- package/src/worker/event-projection.ts +56 -0
- package/src/worker/heartbeat.ts +24 -0
- package/src/worker/ledger-mirror.ts +95 -0
- package/src/worker/ndjson.ts +40 -0
- package/src/worker/protocol.ts +529 -0
- package/src/worker/resource-facts.ts +79 -0
- package/src/worker/runtime-registry.ts +12 -0
- package/src/worker/spec-contract.ts +675 -0
- package/src/worker/stdin-demux.ts +316 -0
- package/dist/acp-UMLFVA3F.js +0 -92
- package/dist/chunk-262G75JS.js +0 -35
- package/dist/chunk-6CWDTGUC.js +0 -20
- package/dist/chunk-BYEU76JP.js +0 -899
- package/dist/chunk-GNGDQYDU.js +0 -34688
- package/dist/chunk-GOTUR54M.js +0 -9
- package/dist/chunk-NI4DEJMC.js +0 -88
- package/dist/chunk-TPOCL34A.js +0 -2876
- package/dist/chunk-UU3R62TT.js +0 -128
- package/dist/clio-KIQ5SNDS.js +0 -53
- package/dist/configure-G4E3A2PG.js +0 -27
- package/dist/doctor-M5HJJZOL.js +0 -61
- package/dist/domains/agents/builtins/architect.md +0 -33
- package/dist/domains/agents/builtins/coder.md +0 -31
- package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
- package/dist/domains/agents/builtins/debugger.md +0 -30
- package/dist/domains/agents/builtins/documenter.md +0 -31
- package/dist/domains/agents/builtins/git-master.md +0 -30
- package/dist/domains/agents/builtins/provenance.md +0 -30
- package/dist/domains/agents/builtins/researcher.md +0 -71
- package/dist/domains/agents/builtins/scout.md +0 -42
- package/dist/domains/agents/builtins/tester.md +0 -31
- package/dist/domains/agents/builtins/verifier.md +0 -30
- package/dist/domains/agents/builtins/wiki-writer.md +0 -41
- package/dist/fleet-preflight-CLIAX7YR.js +0 -21
- package/dist/preload-KZVHET2B.js +0 -11
- package/dist/version-ROZ6CZKH.js +0 -16
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -794
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -314
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/skills/git/commit-crafting/SKILL.md +0 -79
- package/skills/git/commit-crafting/evals.md +0 -92
- package/skills/git/create-pr/SKILL.md +0 -116
- package/skills/git/create-pr/evals.md +0 -114
- package/skills/git/investigate-issue/SKILL.md +0 -139
- package/skills/git/investigate-issue/evals.md +0 -94
- package/skills/git/review-changes/SKILL.md +0 -103
- package/skills/git/review-changes/evals.md +0 -85
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
import { execFile, execFileSync } from "node:child_process";
|
|
2
|
+
import fs, { type Dir } from "node:fs";
|
|
3
|
+
import { join, sep } from "node:path";
|
|
4
|
+
import { performance } from "node:perf_hooks";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Cooperative-yield surface for the async enumeration forms. Structurally
|
|
8
|
+
* compatible with the context domain's CooperativeSlicer, so callers that
|
|
9
|
+
* already hold one pass it straight through; callers without one get a local
|
|
10
|
+
* time-budgeted default. Core cannot import the domain type, by boundary.
|
|
11
|
+
*/
|
|
12
|
+
export interface WorkspaceEnumerationTick {
|
|
13
|
+
tick(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const DEFAULT_YIELD_BUDGET_MS = 8;
|
|
17
|
+
|
|
18
|
+
function createDefaultTick(budgetMs = DEFAULT_YIELD_BUDGET_MS): WorkspaceEnumerationTick {
|
|
19
|
+
let sliceStart = performance.now();
|
|
20
|
+
return {
|
|
21
|
+
async tick(): Promise<void> {
|
|
22
|
+
if (performance.now() - sliceStart < budgetMs) return;
|
|
23
|
+
await new Promise<void>((resolve) => {
|
|
24
|
+
setImmediate(resolve);
|
|
25
|
+
});
|
|
26
|
+
sliceStart = performance.now();
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const GIT_OUTPUT_LIMIT_BYTES = 128 * 1024 * 1024;
|
|
32
|
+
const MAX_ENUMERATION_DIAGNOSTIC_PATH_CHARS = 200;
|
|
33
|
+
|
|
34
|
+
export interface WorkspaceFallbackLimits {
|
|
35
|
+
maxVisitedEntries: number;
|
|
36
|
+
maxDepth: number;
|
|
37
|
+
maxPathBytes: number;
|
|
38
|
+
maxDurationMs: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type WorkspaceFallbackLimitKind = "entries" | "depth" | "path-bytes" | "time";
|
|
42
|
+
export type WorkspaceEnumerationOperation = "open-root" | "read-directory" | "open-directory" | "inspect-entry";
|
|
43
|
+
|
|
44
|
+
const DEFAULT_WORKSPACE_FALLBACK_LIMITS: Readonly<WorkspaceFallbackLimits> = Object.freeze({
|
|
45
|
+
maxVisitedEntries: 100_000,
|
|
46
|
+
maxDepth: 64,
|
|
47
|
+
maxPathBytes: 64 * 1024 * 1024,
|
|
48
|
+
maxDurationMs: 5_000,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Explicit failure for a non-Git scan that cannot prove it saw the whole
|
|
53
|
+
* workspace within its resource contract. Callers must never publish the
|
|
54
|
+
* partial prefix as an authoritative file set.
|
|
55
|
+
*/
|
|
56
|
+
export class WorkspaceEnumerationLimitError extends Error {
|
|
57
|
+
readonly code = "WORKSPACE_ENUMERATION_LIMIT";
|
|
58
|
+
|
|
59
|
+
constructor(
|
|
60
|
+
readonly kind: WorkspaceFallbackLimitKind,
|
|
61
|
+
readonly limit: number,
|
|
62
|
+
) {
|
|
63
|
+
super(`non-Git workspace enumeration exceeded ${kind} limit (${limit})`);
|
|
64
|
+
this.name = "WorkspaceEnumerationLimitError";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function boundedDiagnosticPath(path: string): string {
|
|
69
|
+
const printable = Array.from(path.length > 0 ? path : ".", (character) => {
|
|
70
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
71
|
+
return codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f) ? "?" : character;
|
|
72
|
+
});
|
|
73
|
+
if (printable.length <= MAX_ENUMERATION_DIAGNOSTIC_PATH_CHARS) return printable.join("");
|
|
74
|
+
const side = Math.floor((MAX_ENUMERATION_DIAGNOSTIC_PATH_CHARS - 1) / 2);
|
|
75
|
+
return `${printable.slice(0, side).join("")}\u2026${printable.slice(-side).join("")}`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function boundedSystemErrorCode(cause: unknown): string {
|
|
79
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause)) return "UNKNOWN";
|
|
80
|
+
const code = (cause as { code?: unknown }).code;
|
|
81
|
+
return typeof code === "string" && /^[A-Z][A-Z0-9_]{0,31}$/.test(code) ? code : "UNKNOWN";
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const ENUMERATION_OPERATION_LABELS: Readonly<Record<WorkspaceEnumerationOperation, string>> = Object.freeze({
|
|
85
|
+
"open-root": "open the workspace root",
|
|
86
|
+
"read-directory": "read a workspace directory",
|
|
87
|
+
"open-directory": "open a workspace directory",
|
|
88
|
+
"inspect-entry": "inspect a workspace entry",
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Explicit failure for a non-Git scan whose filesystem view became incomplete.
|
|
93
|
+
* Only a bounded workspace-relative path and a validated system error code are
|
|
94
|
+
* retained; arbitrary filesystem error text is deliberately not propagated.
|
|
95
|
+
*/
|
|
96
|
+
export class WorkspaceEnumerationIncompleteError extends Error {
|
|
97
|
+
readonly code = "WORKSPACE_ENUMERATION_INCOMPLETE";
|
|
98
|
+
readonly operation: WorkspaceEnumerationOperation;
|
|
99
|
+
readonly path: string;
|
|
100
|
+
readonly causeCode: string;
|
|
101
|
+
|
|
102
|
+
constructor(operation: WorkspaceEnumerationOperation, path: string, cause: unknown) {
|
|
103
|
+
const diagnosticPath = boundedDiagnosticPath(path);
|
|
104
|
+
const causeCode = boundedSystemErrorCode(cause);
|
|
105
|
+
super(
|
|
106
|
+
`non-Git workspace enumeration could not ${ENUMERATION_OPERATION_LABELS[operation]} at '${diagnosticPath}' (${causeCode})`,
|
|
107
|
+
);
|
|
108
|
+
this.name = "WorkspaceEnumerationIncompleteError";
|
|
109
|
+
this.operation = operation;
|
|
110
|
+
this.path = diagnosticPath;
|
|
111
|
+
this.causeCode = causeCode;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Directories omitted even when Git tracks files beneath them. Git ignore
|
|
117
|
+
* rules complement this policy; they do not override it.
|
|
118
|
+
*/
|
|
119
|
+
export const WORKSPACE_EXCLUDED_DIRS: ReadonlySet<string> = new Set([
|
|
120
|
+
".git",
|
|
121
|
+
".hg",
|
|
122
|
+
".svn",
|
|
123
|
+
".clio-coder",
|
|
124
|
+
"node_modules",
|
|
125
|
+
"dist",
|
|
126
|
+
"build",
|
|
127
|
+
"coverage",
|
|
128
|
+
".venv",
|
|
129
|
+
"venv",
|
|
130
|
+
"__pycache__",
|
|
131
|
+
"target",
|
|
132
|
+
"vendor",
|
|
133
|
+
".superpowers",
|
|
134
|
+
".codex",
|
|
135
|
+
".claude",
|
|
136
|
+
".clio-coder-benchmark",
|
|
137
|
+
]);
|
|
138
|
+
|
|
139
|
+
function comparePaths(a: string, b: string): number {
|
|
140
|
+
return a === b ? 0 : a < b ? -1 : 1;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function normalizeRelativePath(path: string): string | null {
|
|
144
|
+
const posixPath = sep === "\\" ? path.replaceAll("\\", "/") : path;
|
|
145
|
+
const normalized = posixPath.replace(/^\.\//, "");
|
|
146
|
+
if (normalized.length === 0 || normalized.includes("\0") || normalized.startsWith("/")) return null;
|
|
147
|
+
if (/^[A-Za-z]:\//.test(normalized)) return null;
|
|
148
|
+
const segments = normalized.split("/");
|
|
149
|
+
if (segments.some((segment) => segment.length === 0 || segment === "." || segment === "..")) return null;
|
|
150
|
+
return segments.join("/");
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function isWorkspacePathExcluded(
|
|
154
|
+
relPath: string,
|
|
155
|
+
excludedDirs: ReadonlySet<string> = WORKSPACE_EXCLUDED_DIRS,
|
|
156
|
+
): boolean {
|
|
157
|
+
return relPath.split("/").some((segment) => excludedDirs.has(segment));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function isDisappearedWorkspaceEntry(cause: unknown): boolean {
|
|
161
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause)) return false;
|
|
162
|
+
const code = (cause as { code?: unknown }).code;
|
|
163
|
+
return code === "ENOENT" || code === "ENOTDIR";
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function isRegularWorkspaceFile(cwd: string, relPath: string, requireCompleteSnapshot: boolean): boolean {
|
|
167
|
+
try {
|
|
168
|
+
// lstat deliberately excludes symlinks. Gitlinks resolve to directories,
|
|
169
|
+
// so full scans do not enter submodules either.
|
|
170
|
+
const stat = fs.lstatSync(join(cwd, relPath));
|
|
171
|
+
if (stat.isFile()) return true;
|
|
172
|
+
if (requireCompleteSnapshot && stat.isDirectory()) {
|
|
173
|
+
// The fallback walker observed this path as a file. If it became a
|
|
174
|
+
// directory before validation, that directory may contain entries the
|
|
175
|
+
// completed walk never visited, so the snapshot is no longer complete.
|
|
176
|
+
throw new WorkspaceEnumerationIncompleteError("inspect-entry", relPath, { code: "ENTRY_TYPE_CHANGED" });
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
} catch (cause) {
|
|
180
|
+
if (cause instanceof WorkspaceEnumerationIncompleteError) throw cause;
|
|
181
|
+
if (requireCompleteSnapshot) {
|
|
182
|
+
// A vanished file (or an ancestor replaced by a non-directory) is no
|
|
183
|
+
// longer part of the workspace at validation time and may be omitted.
|
|
184
|
+
// Permission, I/O, and stale-handle errors leave its visibility unknown
|
|
185
|
+
// and must invalidate the complete non-Git snapshot.
|
|
186
|
+
if (isDisappearedWorkspaceEntry(cause)) return false;
|
|
187
|
+
throw new WorkspaceEnumerationIncompleteError("inspect-entry", relPath, cause);
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function gitVisibleFilesArgs(candidates?: ReadonlyArray<string>): string[] {
|
|
194
|
+
const args = ["--literal-pathspecs", "ls-files", "-z", "--cached", "--others", "--exclude-standard"];
|
|
195
|
+
if (candidates) args.push("--", ...candidates);
|
|
196
|
+
return args;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function splitGitPathOutput(output: string): string[] {
|
|
200
|
+
return output.split("\0").filter((path) => path.length > 0);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function gitVisibleFiles(cwd: string, candidates?: ReadonlyArray<string>): string[] | null {
|
|
204
|
+
let output: Buffer;
|
|
205
|
+
try {
|
|
206
|
+
output = execFileSync("git", gitVisibleFilesArgs(candidates), {
|
|
207
|
+
cwd,
|
|
208
|
+
maxBuffer: GIT_OUTPUT_LIMIT_BYTES,
|
|
209
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
210
|
+
});
|
|
211
|
+
} catch {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
return splitGitPathOutput(output.toString("utf8"));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function gitVisibleFilesAsync(cwd: string, candidates?: ReadonlyArray<string>): Promise<string[] | null> {
|
|
218
|
+
return new Promise((resolve) => {
|
|
219
|
+
execFile("git", gitVisibleFilesArgs(candidates), { cwd, maxBuffer: GIT_OUTPUT_LIMIT_BYTES }, (error, stdout) => {
|
|
220
|
+
resolve(error ? null : splitGitPathOutput(stdout));
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function resolveFallbackLimits(overrides: Partial<WorkspaceFallbackLimits> | undefined): WorkspaceFallbackLimits {
|
|
226
|
+
const limits = { ...DEFAULT_WORKSPACE_FALLBACK_LIMITS, ...overrides };
|
|
227
|
+
for (const [name, value] of Object.entries(limits)) {
|
|
228
|
+
if (!Number.isFinite(value) || value < 0 || !Number.isInteger(value)) {
|
|
229
|
+
throw new RangeError(`workspace fallback ${name} must be a non-negative integer`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return limits;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
interface WalkFrame {
|
|
236
|
+
dir: Dir;
|
|
237
|
+
absPath: string;
|
|
238
|
+
prefix: string;
|
|
239
|
+
depth: number;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
type FallbackEntryKind = "directory" | "file" | "other" | "disappeared";
|
|
243
|
+
|
|
244
|
+
function fallbackEntryKind(absPath: string, relPath: string, entry: ReturnType<Dir["readSync"]>): FallbackEntryKind {
|
|
245
|
+
if (!entry) return "disappeared";
|
|
246
|
+
if (entry.isDirectory()) return "directory";
|
|
247
|
+
if (entry.isFile()) return "file";
|
|
248
|
+
try {
|
|
249
|
+
// Some network and facility filesystems report DT_UNKNOWN. Inspect those
|
|
250
|
+
// entries rather than treating a potentially populated directory as a
|
|
251
|
+
// special file and silently omitting its subtree.
|
|
252
|
+
const stat = fs.lstatSync(absPath);
|
|
253
|
+
if (stat.isDirectory()) return "directory";
|
|
254
|
+
if (stat.isFile()) return "file";
|
|
255
|
+
return "other";
|
|
256
|
+
} catch (cause) {
|
|
257
|
+
if (isDisappearedWorkspaceEntry(cause)) return "disappeared";
|
|
258
|
+
throw new WorkspaceEnumerationIncompleteError("inspect-entry", relPath, cause);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function closeFrame(frame: WalkFrame): void {
|
|
263
|
+
try {
|
|
264
|
+
frame.dir.closeSync();
|
|
265
|
+
} catch {
|
|
266
|
+
// Best-effort cleanup after an unreadable directory or bounded failure.
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* The bounded walk as a step generator: one yield per processed entry, so a
|
|
272
|
+
* synchronous driver drains it in place and the async driver interleaves a
|
|
273
|
+
* cooperative tick between steps. One body means the two forms cannot drift on
|
|
274
|
+
* limit enforcement, symlink policy, or failure classification. `elapsedMs`
|
|
275
|
+
* feeds the time limit: the sync driver passes wall time, the async driver
|
|
276
|
+
* passes accumulated walk time so event-loop turns spent elsewhere do not
|
|
277
|
+
* count against the walk's own budget.
|
|
278
|
+
*/
|
|
279
|
+
function* fallbackFilesWalk(
|
|
280
|
+
cwd: string,
|
|
281
|
+
excludedDirs: ReadonlySet<string>,
|
|
282
|
+
limits: WorkspaceFallbackLimits,
|
|
283
|
+
elapsedMs: () => number,
|
|
284
|
+
): Generator<void, string[]> {
|
|
285
|
+
let visitedEntries = 0;
|
|
286
|
+
let pathBytes = 0;
|
|
287
|
+
let root: Dir;
|
|
288
|
+
try {
|
|
289
|
+
root = fs.opendirSync(cwd);
|
|
290
|
+
} catch (cause) {
|
|
291
|
+
throw new WorkspaceEnumerationIncompleteError("open-root", ".", cause);
|
|
292
|
+
}
|
|
293
|
+
const stack: WalkFrame[] = [{ dir: root, absPath: cwd, prefix: "", depth: 0 }];
|
|
294
|
+
const files: string[] = [];
|
|
295
|
+
try {
|
|
296
|
+
while (stack.length > 0) {
|
|
297
|
+
yield;
|
|
298
|
+
if (elapsedMs() >= limits.maxDurationMs) {
|
|
299
|
+
throw new WorkspaceEnumerationLimitError("time", limits.maxDurationMs);
|
|
300
|
+
}
|
|
301
|
+
const frame = stack.at(-1);
|
|
302
|
+
if (!frame) break;
|
|
303
|
+
let entry: ReturnType<Dir["readSync"]>;
|
|
304
|
+
try {
|
|
305
|
+
entry = frame.dir.readSync();
|
|
306
|
+
} catch (cause) {
|
|
307
|
+
throw new WorkspaceEnumerationIncompleteError("read-directory", frame.prefix || ".", cause);
|
|
308
|
+
}
|
|
309
|
+
if (!entry) {
|
|
310
|
+
closeFrame(frame);
|
|
311
|
+
stack.pop();
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
visitedEntries += 1;
|
|
316
|
+
if (visitedEntries > limits.maxVisitedEntries) {
|
|
317
|
+
throw new WorkspaceEnumerationLimitError("entries", limits.maxVisitedEntries);
|
|
318
|
+
}
|
|
319
|
+
const depth = frame.depth + 1;
|
|
320
|
+
if (depth > limits.maxDepth) {
|
|
321
|
+
throw new WorkspaceEnumerationLimitError("depth", limits.maxDepth);
|
|
322
|
+
}
|
|
323
|
+
const relPath = frame.prefix.length > 0 ? `${frame.prefix}/${entry.name}` : entry.name;
|
|
324
|
+
pathBytes += Buffer.byteLength(relPath, "utf8");
|
|
325
|
+
if (pathBytes > limits.maxPathBytes) {
|
|
326
|
+
throw new WorkspaceEnumerationLimitError("path-bytes", limits.maxPathBytes);
|
|
327
|
+
}
|
|
328
|
+
const absPath = join(frame.absPath, entry.name);
|
|
329
|
+
const kind = fallbackEntryKind(absPath, relPath, entry);
|
|
330
|
+
if (kind === "disappeared" || kind === "other") continue;
|
|
331
|
+
if (kind === "directory") {
|
|
332
|
+
if (excludedDirs.has(entry.name)) continue;
|
|
333
|
+
let child: Dir;
|
|
334
|
+
try {
|
|
335
|
+
child = fs.opendirSync(absPath);
|
|
336
|
+
} catch (cause) {
|
|
337
|
+
if (isDisappearedWorkspaceEntry(cause)) continue;
|
|
338
|
+
throw new WorkspaceEnumerationIncompleteError("open-directory", relPath, cause);
|
|
339
|
+
}
|
|
340
|
+
stack.push({ dir: child, absPath, prefix: relPath, depth });
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
// Only direct or lstat-confirmed regular files reach this branch;
|
|
344
|
+
// symlinks and special files remain excluded, matching the Git path.
|
|
345
|
+
files.push(relPath);
|
|
346
|
+
}
|
|
347
|
+
return files;
|
|
348
|
+
} finally {
|
|
349
|
+
for (const frame of stack) closeFrame(frame);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function fallbackFiles(
|
|
354
|
+
cwd: string,
|
|
355
|
+
excludedDirs: ReadonlySet<string>,
|
|
356
|
+
overrides?: Partial<WorkspaceFallbackLimits>,
|
|
357
|
+
): string[] {
|
|
358
|
+
const limits = resolveFallbackLimits(overrides);
|
|
359
|
+
const startedAt = performance.now();
|
|
360
|
+
const walk = fallbackFilesWalk(cwd, excludedDirs, limits, () => performance.now() - startedAt);
|
|
361
|
+
let step = walk.next();
|
|
362
|
+
while (!step.done) step = walk.next();
|
|
363
|
+
return step.value;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
async function fallbackFilesAsync(
|
|
367
|
+
cwd: string,
|
|
368
|
+
excludedDirs: ReadonlySet<string>,
|
|
369
|
+
overrides: Partial<WorkspaceFallbackLimits> | undefined,
|
|
370
|
+
cooperate: WorkspaceEnumerationTick,
|
|
371
|
+
): Promise<string[]> {
|
|
372
|
+
const limits = resolveFallbackLimits(overrides);
|
|
373
|
+
let activeMs = 0;
|
|
374
|
+
let resumedAt = performance.now();
|
|
375
|
+
const walk = fallbackFilesWalk(cwd, excludedDirs, limits, () => activeMs + (performance.now() - resumedAt));
|
|
376
|
+
let step = walk.next();
|
|
377
|
+
while (!step.done) {
|
|
378
|
+
activeMs += performance.now() - resumedAt;
|
|
379
|
+
await cooperate.tick();
|
|
380
|
+
resumedAt = performance.now();
|
|
381
|
+
step = walk.next();
|
|
382
|
+
}
|
|
383
|
+
return step.value;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/** Visibility validation as steps; one yield per path so the async driver can breathe. */
|
|
387
|
+
function* normalizeVisibleFilesSteps(
|
|
388
|
+
cwd: string,
|
|
389
|
+
paths: ReadonlyArray<string>,
|
|
390
|
+
excludedDirs: ReadonlySet<string>,
|
|
391
|
+
requireCompleteSnapshot: boolean,
|
|
392
|
+
): Generator<void, string[]> {
|
|
393
|
+
const visible = new Set<string>();
|
|
394
|
+
for (const path of paths) {
|
|
395
|
+
yield;
|
|
396
|
+
const normalized = normalizeRelativePath(path);
|
|
397
|
+
if (!normalized) {
|
|
398
|
+
if (requireCompleteSnapshot) {
|
|
399
|
+
throw new WorkspaceEnumerationIncompleteError("inspect-entry", path, { code: "INVALID_RELATIVE_PATH" });
|
|
400
|
+
}
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
if (isWorkspacePathExcluded(normalized, excludedDirs)) continue;
|
|
404
|
+
if (isRegularWorkspaceFile(cwd, normalized, requireCompleteSnapshot)) visible.add(normalized);
|
|
405
|
+
}
|
|
406
|
+
return [...visible].sort(comparePaths);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
function normalizeVisibleFiles(
|
|
410
|
+
cwd: string,
|
|
411
|
+
paths: ReadonlyArray<string>,
|
|
412
|
+
excludedDirs: ReadonlySet<string>,
|
|
413
|
+
requireCompleteSnapshot = false,
|
|
414
|
+
): string[] {
|
|
415
|
+
const steps = normalizeVisibleFilesSteps(cwd, paths, excludedDirs, requireCompleteSnapshot);
|
|
416
|
+
let step = steps.next();
|
|
417
|
+
while (!step.done) step = steps.next();
|
|
418
|
+
return step.value;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
async function normalizeVisibleFilesAsync(
|
|
422
|
+
cwd: string,
|
|
423
|
+
paths: ReadonlyArray<string>,
|
|
424
|
+
excludedDirs: ReadonlySet<string>,
|
|
425
|
+
requireCompleteSnapshot: boolean,
|
|
426
|
+
cooperate: WorkspaceEnumerationTick,
|
|
427
|
+
): Promise<string[]> {
|
|
428
|
+
const steps = normalizeVisibleFilesSteps(cwd, paths, excludedDirs, requireCompleteSnapshot);
|
|
429
|
+
let step = steps.next();
|
|
430
|
+
while (!step.done) {
|
|
431
|
+
await cooperate.tick();
|
|
432
|
+
step = steps.next();
|
|
433
|
+
}
|
|
434
|
+
return step.value;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* List tracked files plus untracked, nonignored work in progress. Non-Git
|
|
439
|
+
* workspaces (and hosts without a usable Git binary) retain the filesystem
|
|
440
|
+
* walker behavior.
|
|
441
|
+
*/
|
|
442
|
+
export function enumerateWorkspaceFiles(
|
|
443
|
+
cwd: string,
|
|
444
|
+
excludedDirs: ReadonlySet<string> = WORKSPACE_EXCLUDED_DIRS,
|
|
445
|
+
fallbackLimits?: Partial<WorkspaceFallbackLimits>,
|
|
446
|
+
): string[] {
|
|
447
|
+
const gitFiles = gitVisibleFiles(cwd);
|
|
448
|
+
if (gitFiles) return normalizeVisibleFiles(cwd, gitFiles, excludedDirs);
|
|
449
|
+
return normalizeVisibleFiles(cwd, fallbackFiles(cwd, excludedDirs, fallbackLimits), excludedDirs, true);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* `enumerateWorkspaceFiles` without the synchronous floor: the `git ls-files`
|
|
454
|
+
* subprocess runs async, and both the per-path lstat validation and the
|
|
455
|
+
* non-Git fallback walk yield cooperatively. The bounded-walk contract is
|
|
456
|
+
* unchanged with one deliberate reading: the time limit meters the walk's own
|
|
457
|
+
* accumulated work rather than wall clock, so a busy event loop cannot fail an
|
|
458
|
+
* enumeration that did no more work than its budget allows.
|
|
459
|
+
*/
|
|
460
|
+
export async function enumerateWorkspaceFilesAsync(
|
|
461
|
+
cwd: string,
|
|
462
|
+
excludedDirs: ReadonlySet<string> = WORKSPACE_EXCLUDED_DIRS,
|
|
463
|
+
fallbackLimits?: Partial<WorkspaceFallbackLimits>,
|
|
464
|
+
cooperate: WorkspaceEnumerationTick = createDefaultTick(),
|
|
465
|
+
): Promise<string[]> {
|
|
466
|
+
const gitFiles = await gitVisibleFilesAsync(cwd);
|
|
467
|
+
if (gitFiles) return normalizeVisibleFilesAsync(cwd, gitFiles, excludedDirs, false, cooperate);
|
|
468
|
+
const walked = await fallbackFilesAsync(cwd, excludedDirs, fallbackLimits, cooperate);
|
|
469
|
+
return normalizeVisibleFilesAsync(cwd, walked, excludedDirs, true, cooperate);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/** Apply the same visibility rules to one incremental batch without walking the tree. */
|
|
473
|
+
export function filterWorkspaceFileCandidates(
|
|
474
|
+
cwd: string,
|
|
475
|
+
paths: ReadonlyArray<string>,
|
|
476
|
+
excludedDirs: ReadonlySet<string> = WORKSPACE_EXCLUDED_DIRS,
|
|
477
|
+
fallbackLimits?: Partial<WorkspaceFallbackLimits>,
|
|
478
|
+
): string[] {
|
|
479
|
+
const candidates = paths
|
|
480
|
+
.map(normalizeRelativePath)
|
|
481
|
+
.filter((path): path is string => path !== null && !isWorkspacePathExcluded(path, excludedDirs));
|
|
482
|
+
if (candidates.length === 0) return [];
|
|
483
|
+
const gitFiles = gitVisibleFiles(cwd, candidates);
|
|
484
|
+
if (gitFiles) return normalizeVisibleFiles(cwd, gitFiles, excludedDirs);
|
|
485
|
+
// Outside Git, incremental candidates must be reconciled against the same
|
|
486
|
+
// complete bounded snapshot as a full build. Otherwise a notification can
|
|
487
|
+
// add a path that a bounded full scan could not authoritatively enumerate.
|
|
488
|
+
const fallbackVisible = new Set(
|
|
489
|
+
normalizeVisibleFiles(cwd, fallbackFiles(cwd, excludedDirs, fallbackLimits), excludedDirs, true),
|
|
490
|
+
);
|
|
491
|
+
return candidates.filter((path) => fallbackVisible.has(path)).sort(comparePaths);
|
|
492
|
+
}
|
package/src/core/xdg.ts
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, statSync } from "node:fs";
|
|
2
|
+
import { homedir, platform } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Resolve per-platform config/data/state/cache directories for Clio.
|
|
7
|
+
*
|
|
8
|
+
* This is the single resolution order, documented once:
|
|
9
|
+
* 1. Platform defaults.
|
|
10
|
+
* Linux: XDG Base Directory spec (XDG_CONFIG_HOME, XDG_DATA_HOME,
|
|
11
|
+
* XDG_STATE_HOME, XDG_CACHE_HOME).
|
|
12
|
+
* macOS: ~/Library/Application Support/clio-coder/{config,data,state} and
|
|
13
|
+
* ~/Library/Caches/clio-coder.
|
|
14
|
+
* Windows: %APPDATA%/clio-coder/{config,data} and %LOCALAPPDATA%/clio-coder/{state,cache}.
|
|
15
|
+
* Every root is distinct on every platform; no root nests inside another.
|
|
16
|
+
* 2. CLIO_CODER_HOME replaces all four roots symmetrically with
|
|
17
|
+
* CLIO_CODER_HOME/{config,data,state,cache}.
|
|
18
|
+
* 3. CLIO_CODER_CONFIG_DIR / CLIO_CODER_DATA_DIR / CLIO_CODER_STATE_DIR / CLIO_CODER_CACHE_DIR each
|
|
19
|
+
* override their one root and beat CLIO_CODER_HOME (most specific wins).
|
|
20
|
+
*
|
|
21
|
+
* Role contents: config holds user-authored files (settings, credentials,
|
|
22
|
+
* agents, skills, prompts, extensions, runtimes); data holds durable artifacts
|
|
23
|
+
* (memory, evidence, evals); state holds machine-produced session state
|
|
24
|
+
* (sessions, audit, receipts, runs.json, recent-models.json, install.json,
|
|
25
|
+
* interviews, scratch); cache holds disposable derived files.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
export interface ClioDirs {
|
|
29
|
+
config: string;
|
|
30
|
+
data: string;
|
|
31
|
+
state: string;
|
|
32
|
+
cache: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let cachedConfigDir: string | undefined;
|
|
36
|
+
let cachedDataDir: string | undefined;
|
|
37
|
+
let cachedStateDir: string | undefined;
|
|
38
|
+
let cachedCacheDir: string | undefined;
|
|
39
|
+
|
|
40
|
+
function envOrNull(key: string): string | null {
|
|
41
|
+
const v = process.env[key]?.trim();
|
|
42
|
+
return v && v.length > 0 ? v : null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function platformDefaults(): ClioDirs {
|
|
46
|
+
const p = platform();
|
|
47
|
+
const h = homedir();
|
|
48
|
+
if (p === "win32") {
|
|
49
|
+
const appData = process.env.APPDATA ?? join(h, "AppData", "Roaming");
|
|
50
|
+
const localAppData = process.env.LOCALAPPDATA ?? join(h, "AppData", "Local");
|
|
51
|
+
return {
|
|
52
|
+
config: join(appData, "clio-coder", "config"),
|
|
53
|
+
data: join(appData, "clio-coder", "data"),
|
|
54
|
+
state: join(localAppData, "clio-coder", "state"),
|
|
55
|
+
cache: join(localAppData, "clio-coder", "cache"),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (p === "darwin") {
|
|
59
|
+
const base = join(h, "Library", "Application Support", "clio-coder");
|
|
60
|
+
return {
|
|
61
|
+
config: join(base, "config"),
|
|
62
|
+
data: join(base, "data"),
|
|
63
|
+
state: join(base, "state"),
|
|
64
|
+
cache: join(h, "Library", "Caches", "clio-coder"),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME ?? join(h, ".config");
|
|
68
|
+
const xdgData = process.env.XDG_DATA_HOME ?? join(h, ".local", "share");
|
|
69
|
+
const xdgState = process.env.XDG_STATE_HOME ?? join(h, ".local", "state");
|
|
70
|
+
const xdgCache = process.env.XDG_CACHE_HOME ?? join(h, ".cache");
|
|
71
|
+
return {
|
|
72
|
+
config: join(xdgConfig, "clio-coder"),
|
|
73
|
+
data: join(xdgData, "clio-coder"),
|
|
74
|
+
state: join(xdgState, "clio-coder"),
|
|
75
|
+
cache: join(xdgCache, "clio-coder"),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function ensureDir(dir: string): string {
|
|
80
|
+
try {
|
|
81
|
+
mkdirSync(dir, { recursive: true });
|
|
82
|
+
} catch (err) {
|
|
83
|
+
const e = err as NodeJS.ErrnoException;
|
|
84
|
+
if (e.code !== "EEXIST") throw err;
|
|
85
|
+
}
|
|
86
|
+
const s = statSync(dir);
|
|
87
|
+
if (!s.isDirectory()) throw new Error(`Expected directory at ${dir}`);
|
|
88
|
+
return dir;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function clioHomeOrNull(): string | null {
|
|
92
|
+
return envOrNull("CLIO_CODER_HOME");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function resolveRole(specificVar: string, role: keyof ClioDirs, defaults: ClioDirs): string {
|
|
96
|
+
const specific = envOrNull(specificVar);
|
|
97
|
+
if (specific) return specific;
|
|
98
|
+
const home = clioHomeOrNull();
|
|
99
|
+
if (home) return join(home, role);
|
|
100
|
+
return defaults[role];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function resolveClioDirs(): ClioDirs {
|
|
104
|
+
const defaults = platformDefaults();
|
|
105
|
+
return {
|
|
106
|
+
config: resolveRole("CLIO_CODER_CONFIG_DIR", "config", defaults),
|
|
107
|
+
data: resolveRole("CLIO_CODER_DATA_DIR", "data", defaults),
|
|
108
|
+
state: resolveRole("CLIO_CODER_STATE_DIR", "state", defaults),
|
|
109
|
+
cache: resolveRole("CLIO_CODER_CACHE_DIR", "cache", defaults),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function clioConfigDir(): string {
|
|
114
|
+
if (cachedConfigDir) return cachedConfigDir;
|
|
115
|
+
cachedConfigDir = ensureDir(resolveClioDirs().config);
|
|
116
|
+
return cachedConfigDir;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function clioDataDir(): string {
|
|
120
|
+
if (cachedDataDir) return cachedDataDir;
|
|
121
|
+
cachedDataDir = ensureDir(resolveClioDirs().data);
|
|
122
|
+
return cachedDataDir;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function clioStateDir(): string {
|
|
126
|
+
if (cachedStateDir) return cachedStateDir;
|
|
127
|
+
cachedStateDir = ensureDir(resolveClioDirs().state);
|
|
128
|
+
return cachedStateDir;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function clioCacheDir(): string {
|
|
132
|
+
if (cachedCacheDir) return cachedCacheDir;
|
|
133
|
+
cachedCacheDir = ensureDir(resolveClioDirs().cache);
|
|
134
|
+
return cachedCacheDir;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function clioStatePath(): string {
|
|
138
|
+
return cachedStateDir ?? resolveClioDirs().state;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* True when the state root this process resolved is no longer on disk.
|
|
143
|
+
*
|
|
144
|
+
* `clio-coder uninstall` removes the whole root while processes holding session
|
|
145
|
+
* writers, ledgers and audit files are still running, and every writer under
|
|
146
|
+
* the root mkdirs its parent back: `safeResourceWrite` does it before the temp
|
|
147
|
+
* file, the state file lock does it before the critical section, the audit
|
|
148
|
+
* writer does it before opening the day's file. A write landing after the
|
|
149
|
+
* removal therefore recreated the state home, so an uninstall that reported
|
|
150
|
+
* success left one behind and the next `clio-coder` start read state from a home that
|
|
151
|
+
* was supposed to be gone. The live case was the shutdown checkpoint, roughly
|
|
152
|
+
* two minutes late, rebuilding the root around a meta.json and tree.json that
|
|
153
|
+
* announced `lastCheckpointReason: shutdown`.
|
|
154
|
+
*
|
|
155
|
+
* "Removed" and "never created" are not the same thing, and only the first is a
|
|
156
|
+
* reason to refuse a write. With no cached root this process has not resolved
|
|
157
|
+
* one yet, so a writer creating it is an ordinary first run; the audit writer
|
|
158
|
+
* reaches its first row before anything else has called `clioStateDir()`, and
|
|
159
|
+
* treating that as an uninstall silently disabled audit on a fresh install.
|
|
160
|
+
* Reads the cache directly rather than `clioStateDir()` because the latter
|
|
161
|
+
* creates the directory it is being asked about.
|
|
162
|
+
*
|
|
163
|
+
* Every writer under the state root calls this before it touches disk, and
|
|
164
|
+
* again inside whatever lock it holds, because the removal can land while the
|
|
165
|
+
* call waits for a sibling process to leave its critical section.
|
|
166
|
+
*/
|
|
167
|
+
export function stateRootRemoved(): boolean {
|
|
168
|
+
if (cachedStateDir === undefined) return false;
|
|
169
|
+
return !existsSync(cachedStateDir);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export function resetXdgCache(): void {
|
|
173
|
+
cachedConfigDir = undefined;
|
|
174
|
+
cachedDataDir = undefined;
|
|
175
|
+
cachedStateDir = undefined;
|
|
176
|
+
cachedCacheDir = undefined;
|
|
177
|
+
}
|
|
@@ -4,7 +4,7 @@ name: Architect
|
|
|
4
4
|
description: Designs coding changes across boundaries, contracts, migrations, and validation gates; slices an existing plan into an executable dependency-ordered sprint via its bound cut-it skill.
|
|
5
5
|
tools:
|
|
6
6
|
required: [artifact, context]
|
|
7
|
-
optional: [read, grep, find, ls, code_nav, git]
|
|
7
|
+
optional: [read, grep, find, ls, code_nav, git, ledger]
|
|
8
8
|
skills: [cut-it]
|
|
9
9
|
audience: base
|
|
10
10
|
category: plan
|
|
@@ -12,7 +12,7 @@ capabilityClass: artifact-write
|
|
|
12
12
|
latencyClass: deep
|
|
13
13
|
projectContextTier: bounded
|
|
14
14
|
budget: {toolCalls: 32, readReserve: 5, synthesis: true}
|
|
15
|
-
resultContract: {kind: architect-plan, path: PLAN.md}
|
|
15
|
+
resultContract: {kind: architect-plan, path: .clio-coder/artifacts/PLAN.md}
|
|
16
16
|
tags: [architecture, boundaries, migration]
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -27,7 +27,7 @@ Use codewiki tools only when the assignment is navigation-heavy. Otherwise rely
|
|
|
27
27
|
Prefer extending existing contracts over adding abstractions unless the new surface removes real complexity.
|
|
28
28
|
Separate the required implementation slice from optional follow-up work.
|
|
29
29
|
Call out prompt, safety, persistence, worker-runtime, and test consequences when they apply.
|
|
30
|
-
Use `artifact` (kind="plan") only when the result should become a reviewable
|
|
30
|
+
Use `artifact` (kind="plan") only when the result should become a reviewable plan document.
|
|
31
31
|
When the operator wants an executable sprint rather than a design narrative, load `cut-it` via `context` (scope="skills") and emit dependency-ordered slices with done-when criteria.
|
|
32
32
|
Do not edit source files, tests, configs, or generated artifacts from this role.
|
|
33
|
-
Write the plan with `artifact` (kind="plan") at
|
|
33
|
+
Write the plan with `artifact` (kind="plan") and no path argument, which lands it at `.clio-coder/artifacts/PLAN.md`. That integrity-recorded artifact is this role's result contract; your final response carries no schema, so close with a short pointer at the plan you wrote.
|