@iowarp/clio-coder 0.3.9 → 0.4.1
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 +92 -0
- package/NOTICE +33 -0
- package/README.md +121 -16
- package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
- package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
- package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
- package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
- package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
- package/dist/chunk-5YHDIDBP.js +97 -0
- package/dist/chunk-6CCS4G3W.js +1529 -0
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
- package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/chunk-6NJQITNH.js +1412 -0
- package/dist/chunk-6VC4OV3Z.js +365 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
- package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
- package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
- package/dist/chunk-7RY5VZPH.js +573 -0
- package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
- package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
- package/dist/chunk-BJGUKIG4.js +302 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
- package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/chunk-D4CJV46V.js +462 -0
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GIZNH63R.js +40 -0
- package/dist/chunk-GPPB3JBE.js +688 -0
- package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/chunk-HRQMFLJP.js +75 -0
- package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
- package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
- package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
- package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
- package/dist/chunk-J4HBWF6Y.js +2635 -0
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
- package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
- package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
- package/dist/chunk-K6BF4U2H.js +1785 -0
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
- package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
- package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
- package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
- package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
- package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/chunk-RKSR6VSF.js +132 -0
- package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
- package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
- package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
- package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
- package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
- package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
- package/dist/chunk-WR6U3OVP.js +45 -0
- package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
- package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/chunk-YAKGTXEV.js +17 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
- package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
- package/dist/cli/index.js +48 -37
- package/dist/clio-IT3G3VQH.js +25 -0
- package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
- package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
- package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
- package/dist/configure-FL7Y3KJF.js +54 -0
- package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
- package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
- package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
- package/dist/eval-inventory-HBWSWQOK.js +315 -0
- package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
- package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
- package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
- package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
- package/dist/fleet-decisions-OTHB6KRL.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
- package/dist/fleet-inspect-SS6YMDCK.js +445 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
- package/dist/fleet-verify-QD5M7E7Q.js +178 -0
- package/dist/fleet-view-WAMJYNDT.js +94 -0
- package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
- package/dist/install-NKNG7KD4.js +13 -0
- package/dist/interop-34TVO25M.js +116 -0
- package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
- package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
- package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
- package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
- package/dist/panes-7STHOAUJ.js +103 -0
- package/dist/panes-SHAUIRXY.js +60 -0
- package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
- package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
- package/dist/resources-74GKTLSF.js +115 -0
- package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
- package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
- package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
- package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
- package/dist/skills-inventory-J357J34F.js +129 -0
- package/dist/slash-commands-JZZCQA32.js +79 -0
- package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
- package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
- package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
- package/dist/tools-MKNWVPBH.js +29 -0
- package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
- package/dist/tui-primitives-K5PASC3O.js +17 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
- package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
- package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
- package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
- package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
- package/dist/with-panes-OBOBFIIR.js +818 -0
- package/dist/worker/entry.js +131 -91
- package/docs/README.md +3 -2
- package/docs/acp.md +25 -4
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +39 -4
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +138 -167
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +3 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +30 -7
- package/docs/installation-and-lifecycle.md +16 -3
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +16 -11
- package/docs/troubleshooting.md +2 -2
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +8 -16
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +8 -4
- package/src/cli/argv.ts +25 -0
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +50 -48
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +156 -0
- package/src/cli/doctor-toolchain.ts +78 -0
- package/src/cli/doctor.ts +34 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +827 -0
- package/src/cli/fleet.ts +154 -40
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +6 -3
- package/src/cli/run.ts +67 -13
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +23 -24
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +64 -2
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +4 -0
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1070 -845
- package/src/core/defaults.ts +342 -463
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/response-schema.ts +44 -4
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/timers.ts +2 -12
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +165 -36
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +37 -46
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +23 -6
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +287 -111
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +59 -3
- package/src/domains/dispatch/gate-decisions.ts +36 -15
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +24 -27
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +599 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +16 -3
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/serving.ts +31 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/index.ts +0 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +566 -0
- package/src/domains/mux/detect.ts +182 -0
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +53 -0
- package/src/domains/mux/index.ts +116 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +192 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +62 -0
- package/src/domains/mux/socket-client.ts +964 -0
- package/src/domains/mux/types.ts +265 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +182 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +251 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/index.ts +2 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +63 -11
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +25 -8
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +46 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +72 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +440 -96
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +20 -2
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +87 -0
- package/src/engine/claude/sdk-runtime.ts +25 -17
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +16 -26
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +207 -90
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +2 -1
- package/src/interactive/cost-overlay.ts +3 -1
- package/src/interactive/council-grid.ts +3 -5
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +56 -49
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +229 -62
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +9 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +99 -23
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +3 -2
- package/src/interactive/modal-marker.ts +151 -0
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +62 -14
- package/src/interactive/overlay-general-openers.ts +7 -2
- package/src/interactive/overlay-key-routing.ts +21 -10
- package/src/interactive/overlay-lifecycle.ts +20 -4
- package/src/interactive/overlay-model-selectors.ts +43 -6
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +3 -2
- package/src/interactive/overlays/ask-user.ts +161 -41
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +29 -4
- package/src/interactive/overlays/cwd-fallback.ts +29 -4
- package/src/interactive/overlays/decisions.ts +15 -13
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +4 -3
- package/src/interactive/overlays/handoff-review.ts +3 -2
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +2 -1
- package/src/interactive/overlays/library-install-confirm.ts +2 -1
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +2 -1
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +40 -31
- package/src/interactive/overlays/prompts.ts +11 -4
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +849 -268
- package/src/interactive/overlays/side-question.ts +3 -2
- package/src/interactive/overlays/skills-hub.ts +11 -19
- package/src/interactive/overlays/tree-selector.ts +3 -2
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +318 -0
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +521 -189
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +21 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +58 -13
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +120 -9
- package/src/interactive/view/view-overlay.ts +14 -10
- package/src/interactive/watch-pane.ts +180 -0
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +11 -5
- package/src/interactive/worker-receipts.ts +20 -2
- package/src/interactive/worker-stream.ts +6 -4
- package/src/interactive/yazi-bridge.ts +451 -0
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +16 -1
- package/src/tools/compete-worktrees.ts +108 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +18 -5
- package/src/tools/dispatch-arguments.ts +21 -21
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +145 -28
- package/src/tools/dispatch-runner.ts +40 -13
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +2 -2
- package/src/tools/executables.ts +17 -14
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +54 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-PNY46YEY.js +0 -1581
- package/dist/chunk-XDOQXGFO.js +0 -515
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/clio-LT5V7SSZ.js +0 -26
- package/dist/configure-2WYWSCSD.js +0 -49
- package/dist/doctor-TWBWFK5V.js +0 -165
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
normalizeWriteBoundary,
|
|
5
5
|
normalizeWriteBoundaryEntry,
|
|
6
6
|
writeBoundaryCovers
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CTJ4RNAA.js";
|
|
8
8
|
import {
|
|
9
9
|
asDirectoryPathBoundary,
|
|
10
10
|
pathBoundaryEntryCovers
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HHV2GANA.js";
|
|
12
12
|
import {
|
|
13
13
|
atomicWrite
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-MQXIVJ35.js";
|
|
15
15
|
import {
|
|
16
16
|
clioStateDir
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-BYP5D4HI.js";
|
|
18
18
|
import {
|
|
19
19
|
init_esm_shims
|
|
20
20
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
lstatSync,
|
|
29
29
|
mkdirSync as mkdirSync2,
|
|
30
30
|
readdirSync,
|
|
31
|
-
readFileSync,
|
|
31
|
+
readFileSync as readFileSync2,
|
|
32
32
|
realpathSync as realpathSync2,
|
|
33
33
|
renameSync,
|
|
34
34
|
rmdirSync,
|
|
@@ -43,11 +43,13 @@ import { join as join2, relative as relative2, resolve as resolve2 } from "node:
|
|
|
43
43
|
init_esm_shims();
|
|
44
44
|
import { execFileSync } from "node:child_process";
|
|
45
45
|
import { createHash, randomBytes } from "node:crypto";
|
|
46
|
-
import { existsSync, mkdirSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
46
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
47
47
|
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
48
48
|
var SAFE_RUN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
|
|
49
49
|
var OWNER_FILE_SUFFIX = ".task-owner.json";
|
|
50
|
-
var
|
|
50
|
+
var TASK_WORKTREE_KIND = "clio-coder-task-worktree";
|
|
51
|
+
var LEGACY_TASK_WORKTREE_KIND = "clio-task-worktree";
|
|
52
|
+
var COMMIT_IDENTITY = "clio-coder-task";
|
|
51
53
|
function gitBytes(root, args) {
|
|
52
54
|
return execFileSync("git", ["-C", root, ...args], {
|
|
53
55
|
stdio: ["ignore", "pipe", "pipe"],
|
|
@@ -155,7 +157,7 @@ function createTaskWorktree(root, runId, base) {
|
|
|
155
157
|
const resolvedBase = base ?? git(canonical, ["rev-parse", "HEAD"]);
|
|
156
158
|
const parent = join(canonical, ".clio-coder", "worktrees");
|
|
157
159
|
const path = join(parent, runId);
|
|
158
|
-
const branch = `clio/task/${runId}`;
|
|
160
|
+
const branch = `clio-coder/task/${runId}`;
|
|
159
161
|
mkdirSync(parent, { recursive: true });
|
|
160
162
|
if (!isCanonicalWorktreePathInside(parent, path))
|
|
161
163
|
throw new Error(`task worktree path escapes its parent for run ${runId}`);
|
|
@@ -163,7 +165,7 @@ function createTaskWorktree(root, runId, base) {
|
|
|
163
165
|
const ownerToken = randomBytes(16).toString("hex");
|
|
164
166
|
writeFileSync(
|
|
165
167
|
`${path}${OWNER_FILE_SUFFIX}`,
|
|
166
|
-
`${JSON.stringify({ version: 1, kind:
|
|
168
|
+
`${JSON.stringify({ version: 1, kind: TASK_WORKTREE_KIND, root: canonical, runId, branch, base: resolvedBase, ownerToken }, null, 2)}
|
|
167
169
|
`,
|
|
168
170
|
{ encoding: "utf8", flag: "wx" }
|
|
169
171
|
);
|
|
@@ -174,10 +176,21 @@ function assertOwnership(worktree) {
|
|
|
174
176
|
if (resolve(worktree.path) !== resolve(expected) || !isCanonicalWorktreePathInside(join(worktree.root, ".clio-coder", "worktrees"), worktree.path)) {
|
|
175
177
|
throw new Error(`task worktree ${worktree.runId} has an invalid ownership path`);
|
|
176
178
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
+
const ownerPath = `${worktree.path}${OWNER_FILE_SUFFIX}`;
|
|
180
|
+
if (!existsSync(ownerPath)) throw new Error(`task worktree ${worktree.runId} has no ownership file`);
|
|
181
|
+
let marker;
|
|
182
|
+
try {
|
|
183
|
+
const value = JSON.parse(readFileSync(ownerPath, "utf8"));
|
|
184
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error("not an object");
|
|
185
|
+
marker = value;
|
|
186
|
+
} catch {
|
|
187
|
+
throw new Error(`task worktree ${worktree.runId} has an invalid ownership file`);
|
|
188
|
+
}
|
|
189
|
+
if (marker.version !== 1 || marker.kind !== TASK_WORKTREE_KIND && marker.kind !== LEGACY_TASK_WORKTREE_KIND || marker.root !== worktree.root || marker.runId !== worktree.runId || marker.branch !== worktree.branch || marker.base !== worktree.base || marker.ownerToken !== worktree.ownerToken) {
|
|
190
|
+
throw new Error(`task worktree ${worktree.runId} ownership facts do not match`);
|
|
191
|
+
}
|
|
179
192
|
}
|
|
180
|
-
function commitTaskWorktree(worktree, message = `Clio task ${worktree.runId}`) {
|
|
193
|
+
function commitTaskWorktree(worktree, message = `Clio Coder task ${worktree.runId}`) {
|
|
181
194
|
assertOwnership(worktree);
|
|
182
195
|
return commitWorktreePath(worktree.path, COMMIT_IDENTITY, message);
|
|
183
196
|
}
|
|
@@ -220,8 +233,9 @@ function cleanupTaskWorktree(worktree, deleteBranch) {
|
|
|
220
233
|
// src/tools/compete-worktrees.ts
|
|
221
234
|
var COMPETE_PARENT_SEGMENTS = [".clio-coder", "worktrees"];
|
|
222
235
|
var COMPETE_MANIFEST_FILE = ".clio-coder-compete-owner.json";
|
|
223
|
-
var COMPETE_MANIFEST_KIND = "clio-compete-group";
|
|
224
|
-
var
|
|
236
|
+
var COMPETE_MANIFEST_KIND = "clio-coder-compete-group";
|
|
237
|
+
var LEGACY_COMPETE_MANIFEST_KIND = "clio-compete-group";
|
|
238
|
+
var COMPETE_COMMIT_IDENTITY = "clio-coder-compete";
|
|
225
239
|
var SAFE_GROUP = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
226
240
|
var PROCESS_EXIT_GRACE_MS = 750;
|
|
227
241
|
var PROCESS_POLL_MS = 25;
|
|
@@ -243,7 +257,7 @@ function processSnapshot(pid) {
|
|
|
243
257
|
if (err.code !== "EPERM") return { alive: false, birthToken: null };
|
|
244
258
|
}
|
|
245
259
|
try {
|
|
246
|
-
const stat =
|
|
260
|
+
const stat = readFileSync2(`/proc/${pid}/stat`, "utf8").trim();
|
|
247
261
|
const close = stat.lastIndexOf(")");
|
|
248
262
|
if (close > 0) {
|
|
249
263
|
const fields = stat.slice(close + 1).trim().split(/\s+/u);
|
|
@@ -363,7 +377,7 @@ function isCanonicalPathInside(parent, candidate) {
|
|
|
363
377
|
function manifestFromUnknown(value) {
|
|
364
378
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
365
379
|
const manifest = value;
|
|
366
|
-
if (manifest.version !== 2 || manifest.kind !== COMPETE_MANIFEST_KIND || typeof manifest.root !== "string" || typeof manifest.group !== "string" || typeof manifest.token !== "string" || manifest.token.length === 0 || manifest.state !== "active" && manifest.state !== "cleanup-ready" && manifest.state !== "winner-preserved" || typeof manifest.createdAt !== "string" || typeof manifest.updatedAt !== "string") {
|
|
380
|
+
if (manifest.version !== 2 || manifest.kind !== COMPETE_MANIFEST_KIND && manifest.kind !== LEGACY_COMPETE_MANIFEST_KIND || typeof manifest.root !== "string" || typeof manifest.group !== "string" || typeof manifest.token !== "string" || manifest.token.length === 0 || manifest.state !== "active" && manifest.state !== "cleanup-ready" && manifest.state !== "winner-preserved" || typeof manifest.createdAt !== "string" || typeof manifest.updatedAt !== "string") {
|
|
367
381
|
return null;
|
|
368
382
|
}
|
|
369
383
|
if (!validProcessLease(manifest.owner) || !Array.isArray(manifest.runs) || !manifest.runs.every(validRunLease) || new Set(manifest.runs.map((run) => run.runId)).size !== manifest.runs.length) {
|
|
@@ -379,7 +393,7 @@ function readManifest(root, group) {
|
|
|
379
393
|
const directory = groupDirectory(canonical, group);
|
|
380
394
|
if (!isCanonicalDirectoryAt(directory)) return null;
|
|
381
395
|
try {
|
|
382
|
-
const parsed = JSON.parse(
|
|
396
|
+
const parsed = JSON.parse(readFileSync2(manifestPath(directory), "utf8"));
|
|
383
397
|
const manifest = manifestFromUnknown(parsed);
|
|
384
398
|
if (manifest === null || manifest.root !== canonical || manifest.group !== group) return null;
|
|
385
399
|
return manifest;
|
|
@@ -426,10 +440,13 @@ function isGitRepository(root) {
|
|
|
426
440
|
return false;
|
|
427
441
|
}
|
|
428
442
|
}
|
|
429
|
-
function competeBranch(group, index) {
|
|
443
|
+
function competeBranch(group, index, legacy = false) {
|
|
430
444
|
validateGroup(group);
|
|
431
445
|
if (!Number.isInteger(index) || index < 1) throw new Error(`invalid compete candidate index ${index}`);
|
|
432
|
-
return
|
|
446
|
+
return `${legacy ? "clio" : "clio-coder"}/compete/${group}/${index}`;
|
|
447
|
+
}
|
|
448
|
+
function competeBranchMatches(branch, group, index) {
|
|
449
|
+
return branch === competeBranch(group, index) || branch === competeBranch(group, index, true);
|
|
433
450
|
}
|
|
434
451
|
function claimCompeteGroup(root, group) {
|
|
435
452
|
const canonical = canonicalRoot(root);
|
|
@@ -542,6 +559,39 @@ function createCandidateWorktree(ownership, index, baseline) {
|
|
|
542
559
|
git2(ownership.root, ["worktree", "add", "-b", branch, path, baseline]);
|
|
543
560
|
return { index, branch, path };
|
|
544
561
|
}
|
|
562
|
+
async function createCandidateWorktreeMapped(ownership, index, baseline, mux) {
|
|
563
|
+
assertOwnership2(ownership);
|
|
564
|
+
const branch = competeBranch(ownership.group, index);
|
|
565
|
+
const path = join2(ownership.directory, `candidate-${index}`);
|
|
566
|
+
if (!isCanonicalPathInside(ownership.directory, path)) {
|
|
567
|
+
throw new Error(`candidate ${index} path escapes compete group ${ownership.group}`);
|
|
568
|
+
}
|
|
569
|
+
let fallback = "mux-unavailable";
|
|
570
|
+
if (mux?.available()) {
|
|
571
|
+
const created = await mux.worktreeCreate({
|
|
572
|
+
cwd: ownership.root,
|
|
573
|
+
branch,
|
|
574
|
+
base: baseline,
|
|
575
|
+
path,
|
|
576
|
+
label: `clio-coder compete ${ownership.group} candidate ${index}`,
|
|
577
|
+
focus: false
|
|
578
|
+
}).catch(() => null);
|
|
579
|
+
if (created !== null) {
|
|
580
|
+
if (resolve2(created.worktree.path) !== resolve2(path) || created.worktree.branch !== branch) {
|
|
581
|
+
throw new Error(`herdr created candidate ${index} at an unexpected path or branch`);
|
|
582
|
+
}
|
|
583
|
+
return {
|
|
584
|
+
index,
|
|
585
|
+
branch,
|
|
586
|
+
path,
|
|
587
|
+
provenance: { backend: "herdr", path, branch, workspaceId: created.workspaceId }
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
fallback = "mux-operation-failed";
|
|
591
|
+
}
|
|
592
|
+
const native = createCandidateWorktree(ownership, index, baseline);
|
|
593
|
+
return { ...native, provenance: { backend: "native", path, branch, fallback } };
|
|
594
|
+
}
|
|
545
595
|
function commitCandidateWork(worktree, message) {
|
|
546
596
|
return commitWorktreePath(worktree.path, COMPETE_COMMIT_IDENTITY, message);
|
|
547
597
|
}
|
|
@@ -558,9 +608,13 @@ function registeredWorktreePaths(root) {
|
|
|
558
608
|
function exactGroupBranches(root, group) {
|
|
559
609
|
return git2(root, ["branch", "--list", "--format=%(refname:short)"]).split("\n").filter((branch) => {
|
|
560
610
|
const parts = branch.split("/");
|
|
561
|
-
return parts.length === 4 && parts[0] === "clio" && parts[1] === "compete" && parts[2] === group && /^\d+$/.test(parts[3] ?? "");
|
|
611
|
+
return parts.length === 4 && (parts[0] === "clio-coder" || parts[0] === "clio") && parts[1] === "compete" && parts[2] === group && /^\d+$/.test(parts[3] ?? "");
|
|
562
612
|
});
|
|
563
613
|
}
|
|
614
|
+
function competeBranchForCandidate(root, group, index) {
|
|
615
|
+
const branches = exactGroupBranches(root, group);
|
|
616
|
+
return branches.find((branch) => branch === competeBranch(group, index)) ?? branches.find((branch) => branch === competeBranch(group, index, true)) ?? competeBranch(group, index);
|
|
617
|
+
}
|
|
564
618
|
function removeRegisteredWorktree(root, path) {
|
|
565
619
|
try {
|
|
566
620
|
git2(root, ["worktree", "remove", "--force", path]);
|
|
@@ -572,8 +626,7 @@ function removeRegisteredWorktree(root, path) {
|
|
|
572
626
|
function removeCandidateWorktree(ownership, worktree, deleteBranch) {
|
|
573
627
|
assertOwnership2(ownership);
|
|
574
628
|
const expectedPath = join2(ownership.directory, `candidate-${worktree.index}`);
|
|
575
|
-
|
|
576
|
-
if (resolve2(worktree.path) !== resolve2(expectedPath) || worktree.branch !== expectedBranch || !isCanonicalPathInside(ownership.directory, worktree.path)) {
|
|
629
|
+
if (resolve2(worktree.path) !== resolve2(expectedPath) || !competeBranchMatches(worktree.branch, ownership.group, worktree.index) || !isCanonicalPathInside(ownership.directory, worktree.path)) {
|
|
577
630
|
throw new Error(`candidate ${worktree.index} does not belong to compete group ${ownership.group}`);
|
|
578
631
|
}
|
|
579
632
|
removeRegisteredWorktree(ownership.root, worktree.path);
|
|
@@ -588,6 +641,13 @@ function removeCandidateWorktree(ownership, worktree, deleteBranch) {
|
|
|
588
641
|
throw new Error(`failed to remove candidate ${worktree.index} from compete group ${ownership.group}`);
|
|
589
642
|
}
|
|
590
643
|
}
|
|
644
|
+
async function removeCandidateWorktreeMapped(ownership, worktree, deleteBranch, mux) {
|
|
645
|
+
const workspaceId = worktree.provenance?.backend === "herdr" ? worktree.provenance.workspaceId : void 0;
|
|
646
|
+
if (workspaceId && mux?.available()) {
|
|
647
|
+
await mux.worktreeRemove(workspaceId, { force: true }).catch(() => false);
|
|
648
|
+
}
|
|
649
|
+
removeCandidateWorktree(ownership, worktree, deleteBranch);
|
|
650
|
+
}
|
|
591
651
|
function mergeWinnerBranch(root, branch) {
|
|
592
652
|
return mergeWorktreeBranch(root, branch, COMPETE_COMMIT_IDENTITY);
|
|
593
653
|
}
|
|
@@ -657,8 +717,8 @@ function settleRecoveredCompeteDecision(root, group, winnerIndex) {
|
|
|
657
717
|
cleanupWorktreeGroup(ownership);
|
|
658
718
|
return null;
|
|
659
719
|
}
|
|
660
|
-
const winnerBranch = competeBranch(group, winnerIndex);
|
|
661
720
|
const branches = exactGroupBranches(ownership.root, group);
|
|
721
|
+
const winnerBranch = competeBranchForCandidate(ownership.root, group, winnerIndex);
|
|
662
722
|
const winnerPath = join2(ownership.directory, `candidate-${winnerIndex}`);
|
|
663
723
|
if (!branches.includes(winnerBranch) || !registeredWorktreePaths(ownership.root).some((path) => resolve2(path) === resolve2(winnerPath))) {
|
|
664
724
|
throw new Error(`recovered winner ${winnerBranch} has no intact candidate worktree`);
|
|
@@ -1123,11 +1183,12 @@ export {
|
|
|
1123
1183
|
settleCompeteGroupRun,
|
|
1124
1184
|
markCompeteGroupCleanupReady,
|
|
1125
1185
|
markCompeteGroupWinnerPreserved,
|
|
1126
|
-
|
|
1186
|
+
createCandidateWorktreeMapped,
|
|
1127
1187
|
commitCandidateWork,
|
|
1128
1188
|
candidateDiffStat,
|
|
1129
1189
|
protectedPathsChangedByCompeteBranch,
|
|
1130
|
-
|
|
1190
|
+
competeBranchForCandidate,
|
|
1191
|
+
removeCandidateWorktreeMapped,
|
|
1131
1192
|
mergeWinnerBranch,
|
|
1132
1193
|
cleanupCompeteGroup,
|
|
1133
1194
|
settleRecoveredCompeteDecision,
|
|
@@ -1138,4 +1199,4 @@ export {
|
|
|
1138
1199
|
preflightWriteBoundaries,
|
|
1139
1200
|
createWriteBoundaryEnforcer
|
|
1140
1201
|
};
|
|
1141
|
-
//# sourceMappingURL=chunk-
|
|
1202
|
+
//# sourceMappingURL=chunk-TD3PGPQA.js.map
|
|
@@ -3,7 +3,10 @@ import {
|
|
|
3
3
|
fleetLoopCheckStepId,
|
|
4
4
|
fleetLoopRepairStepId,
|
|
5
5
|
fleetStepWriteBoundary
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CTJ4RNAA.js";
|
|
7
|
+
import {
|
|
8
|
+
resultContractShape
|
|
9
|
+
} from "./chunk-IG7BCQBA.js";
|
|
7
10
|
import {
|
|
8
11
|
init_esm_shims
|
|
9
12
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -212,6 +215,31 @@ function spliceExecutionPlan(plan, parentId, tasks) {
|
|
|
212
215
|
|
|
213
216
|
// src/domains/dispatch/fleet-plan.ts
|
|
214
217
|
init_esm_shims();
|
|
218
|
+
|
|
219
|
+
// src/domains/dispatch/fleet-node-prompt.ts
|
|
220
|
+
init_esm_shims();
|
|
221
|
+
function fleetNodeAnswerDirective(kind) {
|
|
222
|
+
if (kind === "architect-plan") return null;
|
|
223
|
+
return [
|
|
224
|
+
`Your result contract for this step is \`${kind}\`.`,
|
|
225
|
+
"The task above describes the whole chain. Any result shape it states belongs to the step that produces it, and does not apply to you.",
|
|
226
|
+
`End with exactly this shape and nothing else: ${resultContractShape({ kind })}`,
|
|
227
|
+
// The wire example carries literal names and evidence, and a small model
|
|
228
|
+
// handed one on a first attempt copies them: the first run of this
|
|
229
|
+
// directive came back claiming `npm run typecheck` / `exit 0` in the same
|
|
230
|
+
// breath as admitting it could not run a command. The fields are the
|
|
231
|
+
// contract; the values in the example are not.
|
|
232
|
+
"Its field values are an example. Fill them with what this run actually produced or observed, and never report a name or evidence you did not."
|
|
233
|
+
].join("\n");
|
|
234
|
+
}
|
|
235
|
+
function renderFleetNodeTask(task, kind) {
|
|
236
|
+
const directive = fleetNodeAnswerDirective(kind);
|
|
237
|
+
return directive === null ? task : `${task}
|
|
238
|
+
|
|
239
|
+
${directive}`;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// src/domains/dispatch/fleet-plan.ts
|
|
215
243
|
function expandDependencies(dependencies, loopMembers) {
|
|
216
244
|
return dependencies.flatMap((id) => {
|
|
217
245
|
const loop = loopMembers.get(id);
|
|
@@ -260,7 +288,7 @@ function compileFleetExecutionPlan(input) {
|
|
|
260
288
|
agentId: context.agentId,
|
|
261
289
|
scope: context.scope,
|
|
262
290
|
dependencies: [...dependencies],
|
|
263
|
-
task,
|
|
291
|
+
task: renderFleetNodeTask(task, resolved.expectedResultContract),
|
|
264
292
|
expectedResultContract: resolved.expectedResultContract,
|
|
265
293
|
requestedAuthority: resolved.requestedAuthority,
|
|
266
294
|
approvedAuthority: resolved.approvedAuthority,
|
|
@@ -407,4 +435,4 @@ export {
|
|
|
407
435
|
spliceExecutionPlan,
|
|
408
436
|
compileFleetExecutionPlan
|
|
409
437
|
};
|
|
410
|
-
//# sourceMappingURL=chunk-
|
|
438
|
+
//# sourceMappingURL=chunk-THYWACCR.js.map
|
|
@@ -5,19 +5,16 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
probeWorkspace
|
|
7
7
|
} from "./chunk-HVDIIIQW.js";
|
|
8
|
-
import {
|
|
9
|
-
protectArtifact
|
|
10
|
-
} from "./chunk-MV3K5QF2.js";
|
|
11
8
|
import {
|
|
12
9
|
isSessionEntry,
|
|
13
10
|
isSessionHeader
|
|
14
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-FSP7CMNU.js";
|
|
12
|
+
import {
|
|
13
|
+
protectArtifact
|
|
14
|
+
} from "./chunk-GCSMB2KY.js";
|
|
15
15
|
import {
|
|
16
16
|
stripTokenizerSentinels
|
|
17
17
|
} from "./chunk-CFGTUFWB.js";
|
|
18
|
-
import {
|
|
19
|
-
BusChannels
|
|
20
|
-
} from "./chunk-RKRLDWD3.js";
|
|
21
18
|
import {
|
|
22
19
|
CURRENT_SESSION_FORMAT_VERSION,
|
|
23
20
|
appendSessionFileEntry,
|
|
@@ -29,11 +26,14 @@ import {
|
|
|
29
26
|
readSessionMeta,
|
|
30
27
|
resumeSession,
|
|
31
28
|
sessionPaths
|
|
32
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-MQXIVJ35.js";
|
|
30
|
+
import {
|
|
31
|
+
BusChannels
|
|
32
|
+
} from "./chunk-HLW2MRKE.js";
|
|
33
33
|
import {
|
|
34
34
|
clioStateDir,
|
|
35
35
|
stateRootRemoved
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-BYP5D4HI.js";
|
|
37
37
|
import {
|
|
38
38
|
init_esm_shims
|
|
39
39
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -1139,7 +1139,7 @@ function createSessionBundle(context) {
|
|
|
1139
1139
|
await performCheckpoint(state, "shutdown");
|
|
1140
1140
|
} catch (err) {
|
|
1141
1141
|
process.stderr.write(
|
|
1142
|
-
`[clio:session] shutdown checkpoint failed: ${err instanceof Error ? err.message : String(err)}
|
|
1142
|
+
`[clio-coder:session] shutdown checkpoint failed: ${err instanceof Error ? err.message : String(err)}
|
|
1143
1143
|
`
|
|
1144
1144
|
);
|
|
1145
1145
|
}
|
|
@@ -1311,6 +1311,12 @@ var SessionDomainModule = {
|
|
|
1311
1311
|
};
|
|
1312
1312
|
|
|
1313
1313
|
// src/domains/session/archive-readers.ts
|
|
1314
|
+
var ROUTING_NOTICE_CUSTOM_TYPE = "clio-coder.routing-notice";
|
|
1315
|
+
var LEGACY_ROUTING_NOTICE_CUSTOM_TYPE = "clio.routing-notice";
|
|
1316
|
+
function normalizeReleasedCustomType(entry) {
|
|
1317
|
+
if (entry.kind !== "custom" || entry.customType !== LEGACY_ROUTING_NOTICE_CUSTOM_TYPE) return entry;
|
|
1318
|
+
return { ...entry, customType: ROUTING_NOTICE_CUSTOM_TYPE };
|
|
1319
|
+
}
|
|
1314
1320
|
async function readAuditRows(stateDir) {
|
|
1315
1321
|
const root = join3(stateDir, "audit");
|
|
1316
1322
|
let files;
|
|
@@ -1415,7 +1421,7 @@ function parseSessionEntries(raw, source) {
|
|
|
1415
1421
|
}
|
|
1416
1422
|
if (isSessionHeader(parsed)) continue;
|
|
1417
1423
|
if (isSessionEntry(parsed)) {
|
|
1418
|
-
entries.push(parsed);
|
|
1424
|
+
entries.push(normalizeReleasedCustomType(parsed));
|
|
1419
1425
|
continue;
|
|
1420
1426
|
}
|
|
1421
1427
|
errors.push(
|
|
@@ -1475,4 +1481,4 @@ export {
|
|
|
1475
1481
|
ledgerUsageCalls,
|
|
1476
1482
|
SessionDomainModule
|
|
1477
1483
|
};
|
|
1478
|
-
//# sourceMappingURL=chunk-
|
|
1484
|
+
//# sourceMappingURL=chunk-TVH4ONAM.js.map
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-3R73A4XB.js";
|
|
5
|
+
|
|
6
|
+
// src/domains/safety/call-target.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
|
|
9
|
+
// src/domains/safety/redaction.ts
|
|
10
|
+
init_esm_shims();
|
|
11
|
+
function isPlainObject(value) {
|
|
12
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
var SECRET_KEY_RE = /(?:api[-_]?key|access[-_]?key|auth(?:orization)?|credential|password|private[-_]?key|secret|token)/iu;
|
|
15
|
+
var ENV_KEY_RE = /^env(?:ironment)?$/iu;
|
|
16
|
+
var SECRET_STRING_RE = /(https?:\/\/[^\s/@]+:)[^\s/@]+@/giu;
|
|
17
|
+
var SECRET_URL_PARAM_RE = /([?&](?:api[-_]?key|access[-_]?token|auth(?:orization)?|credential|password|secret|token)[^=\s]*=)[^&#\s]+/giu;
|
|
18
|
+
var SECRET_ASSIGNMENT_RE = /(?<![A-Z0-9_])((?:[A-Z0-9_]*(?:ACCESS|API|AUTH|CREDENTIAL|KEY|PASS(?:WORD)?|PRIVATE|SECRET|TOKEN)[A-Z0-9_]*)=)[^\s;&|]+/giu;
|
|
19
|
+
var SECRET_FLAG_RE = /(--?(?:[a-z0-9-]*(?:api[-_]?key|access[-_]?token|auth(?:orization)?|credential|password|secret|token)[a-z0-9-]*))(=|\s+)([^\s;&|]+)/giu;
|
|
20
|
+
function redactSecretString(value) {
|
|
21
|
+
return value.replace(SECRET_STRING_RE, "$1[redacted]@").replace(SECRET_URL_PARAM_RE, "$1[redacted]").replace(SECRET_ASSIGNMENT_RE, "$1[redacted]").replace(SECRET_FLAG_RE, "$1$2[redacted]");
|
|
22
|
+
}
|
|
23
|
+
function isSecretArgKey(key) {
|
|
24
|
+
return SECRET_KEY_RE.test(key);
|
|
25
|
+
}
|
|
26
|
+
function isEnvironmentArgKey(key) {
|
|
27
|
+
return ENV_KEY_RE.test(key);
|
|
28
|
+
}
|
|
29
|
+
function redactEnvironmentValue(value, depth) {
|
|
30
|
+
if (depth > 8) return "[redacted nested values]";
|
|
31
|
+
if (typeof value === "string") return "[redacted]";
|
|
32
|
+
if (Array.isArray(value)) return value.map((item) => redactEnvironmentValue(item, depth + 1));
|
|
33
|
+
if (!isPlainObject(value)) return value;
|
|
34
|
+
const out = {};
|
|
35
|
+
for (const [childKey, childValue] of Object.entries(value)) {
|
|
36
|
+
out[childKey] = redactEnvironmentValue(childValue, depth + 1);
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
function redactToolArgs(value, key = "", depth = 0) {
|
|
41
|
+
if (isSecretArgKey(key)) return "[redacted]";
|
|
42
|
+
if (isEnvironmentArgKey(key)) return redactEnvironmentValue(value, depth);
|
|
43
|
+
if (typeof value === "string") return redactSecretString(value);
|
|
44
|
+
if (depth > 8) return "[redacted nested values]";
|
|
45
|
+
if (Array.isArray(value)) return value.map((item) => redactToolArgs(item, key, depth + 1));
|
|
46
|
+
if (!isPlainObject(value)) return value;
|
|
47
|
+
const out = {};
|
|
48
|
+
for (const [childKey, childValue] of Object.entries(value)) {
|
|
49
|
+
out[childKey] = redactToolArgs(childValue, childKey, depth + 1);
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// src/domains/safety/call-target.ts
|
|
55
|
+
var ESC_CHAR = String.fromCharCode(27);
|
|
56
|
+
var BEL_CHAR = String.fromCharCode(7);
|
|
57
|
+
var OSC_PATTERN = new RegExp(`${ESC_CHAR}\\][\\s\\S]*?(?:${BEL_CHAR}|${ESC_CHAR}\\\\|$)`, "g");
|
|
58
|
+
var CSI_PATTERN = new RegExp(`${ESC_CHAR}\\[[0-9;?]*[0-9A-Za-z]`, "g");
|
|
59
|
+
function sanitizeForDisplay(value) {
|
|
60
|
+
const stripped = value.replace(OSC_PATTERN, "").replace(CSI_PATTERN, "");
|
|
61
|
+
let out = "";
|
|
62
|
+
for (const ch of stripped) {
|
|
63
|
+
const code = ch.codePointAt(0) ?? 0;
|
|
64
|
+
out += code < 32 || code === 127 ? " " : ch;
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
function oneLine(value) {
|
|
69
|
+
return value.replace(/\s+/g, " ").trim();
|
|
70
|
+
}
|
|
71
|
+
var DISPLAY_TAB_WIDTH = 4;
|
|
72
|
+
var CONTROL_BYTE_PLACEHOLDER = "\xB7";
|
|
73
|
+
function sanitizeMultilineDisplayText(value) {
|
|
74
|
+
const escapesStripped = value.replace(OSC_PATTERN, "").replace(CSI_PATTERN, "");
|
|
75
|
+
let neutralized = escapesStripped.length !== value.length;
|
|
76
|
+
const stripped = escapesStripped.replace(/\r\n/g, "\n");
|
|
77
|
+
let tabsExpanded = false;
|
|
78
|
+
let out = "";
|
|
79
|
+
for (const ch of stripped) {
|
|
80
|
+
if (ch === "\n") {
|
|
81
|
+
out += ch;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (ch === " ") {
|
|
85
|
+
out += " ".repeat(DISPLAY_TAB_WIDTH);
|
|
86
|
+
tabsExpanded = true;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const code = ch.codePointAt(0) ?? 0;
|
|
90
|
+
if (code < 32 || code === 127) {
|
|
91
|
+
out += CONTROL_BYTE_PLACEHOLDER;
|
|
92
|
+
neutralized = true;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
out += ch;
|
|
96
|
+
}
|
|
97
|
+
return { text: out, neutralized, tabsExpanded };
|
|
98
|
+
}
|
|
99
|
+
function sanitizeCallTargetText(value) {
|
|
100
|
+
return oneLine(sanitizeForDisplay(value));
|
|
101
|
+
}
|
|
102
|
+
var CALL_ACTION_OBJECT_MAX_CHARS = 64;
|
|
103
|
+
var CALL_TARGET_MAX_CHARS = 120;
|
|
104
|
+
var CALL_ACTION_VOCABULARY = {
|
|
105
|
+
read: { verb: "reading", field: "path" },
|
|
106
|
+
edit: { verb: "editing", field: "path" },
|
|
107
|
+
write: { verb: "writing", field: "path" },
|
|
108
|
+
ls: { verb: "listing", field: "path" },
|
|
109
|
+
bash: { verb: "running", field: "command" },
|
|
110
|
+
grep: { verb: "searching", field: "pattern" },
|
|
111
|
+
find: { verb: "finding", field: "pattern" },
|
|
112
|
+
web_fetch: { verb: "fetching", field: "url" },
|
|
113
|
+
git: { verb: "git", field: "op" },
|
|
114
|
+
verify: { verb: "verifying", field: "check" },
|
|
115
|
+
code_nav: { verb: "navigating", field: "query" },
|
|
116
|
+
context: { verb: "context", field: "scope" },
|
|
117
|
+
artifact: { verb: "writing", field: "kind" },
|
|
118
|
+
monitor: { verb: "monitoring", field: "run_id" },
|
|
119
|
+
steer: { verb: "steering", field: "run_id" },
|
|
120
|
+
tasks: { verb: "tasks", field: "action" },
|
|
121
|
+
dispatch: { verb: "dispatching", field: "agent" },
|
|
122
|
+
// ACP tool kinds. A peer names its own argument fields, so these rely on
|
|
123
|
+
// the shared allowlist below rather than on a field this side can predict.
|
|
124
|
+
execute: { verb: "running", field: "command" },
|
|
125
|
+
search: { verb: "searching", field: "query" },
|
|
126
|
+
fetch: { verb: "fetching", field: "url" },
|
|
127
|
+
delete: { verb: "deleting", field: "path" },
|
|
128
|
+
move: { verb: "moving", field: "path" },
|
|
129
|
+
think: { verb: "thinking", field: "" }
|
|
130
|
+
};
|
|
131
|
+
var CALL_ACTION_OBJECT_FIELDS = ["path", "file_path", "command", "pattern", "query", "url"];
|
|
132
|
+
var CALL_TARGET_FIELDS = {
|
|
133
|
+
read: ["path", "offset", "limit", "tail"],
|
|
134
|
+
grep: ["pattern", "path", "mode", "glob", "ignore_case", "literal", "context", "limit", "include_ignored"],
|
|
135
|
+
find: ["pattern", "path", "order", "limit", "include_ignored"],
|
|
136
|
+
ls: ["path", "limit"],
|
|
137
|
+
code_nav: ["mode", "query", "limit"],
|
|
138
|
+
context: ["scope", "query", "name", "limit", "ref", "include_tree"],
|
|
139
|
+
credential_present: ["name", "source", "file"],
|
|
140
|
+
write: ["path"],
|
|
141
|
+
edit: ["path"],
|
|
142
|
+
bash: ["command", "cwd", "timeout_ms", "output_policy"],
|
|
143
|
+
git: ["op", "path", "cached", "stat", "name_only", "limit", "cwd", "timeout_ms", "max_output_bytes"],
|
|
144
|
+
verify: ["check", "path", "browser", "cwd", "timeout_ms", "max_output_bytes"],
|
|
145
|
+
dispatch: [
|
|
146
|
+
"list",
|
|
147
|
+
"mode",
|
|
148
|
+
"agent",
|
|
149
|
+
"target",
|
|
150
|
+
"model",
|
|
151
|
+
"node",
|
|
152
|
+
"autonomy",
|
|
153
|
+
"tool_profile",
|
|
154
|
+
"thinking_level",
|
|
155
|
+
"detach",
|
|
156
|
+
"timeout_ms"
|
|
157
|
+
],
|
|
158
|
+
monitor: ["run_id", "mode"],
|
|
159
|
+
steer: ["run_id", "action"],
|
|
160
|
+
tasks: ["action", "id"],
|
|
161
|
+
ledger: ["action", "kind", "path", "line", "target", "passed", "since"],
|
|
162
|
+
web_fetch: ["url", "method", "timeout_ms", "max_bytes", "format"],
|
|
163
|
+
ask_user: ["action", "mode", "max_rounds", "exposure"],
|
|
164
|
+
artifact: ["kind", "path", "title"],
|
|
165
|
+
// ACP tool kinds use only fields whose meaning the protocol defines.
|
|
166
|
+
execute: ["command", "cwd"],
|
|
167
|
+
search: ["query", "path"],
|
|
168
|
+
fetch: ["url", "method"],
|
|
169
|
+
delete: ["path"],
|
|
170
|
+
move: ["path", "target"]
|
|
171
|
+
};
|
|
172
|
+
function boundActionObject(value) {
|
|
173
|
+
if (typeof value !== "string") return null;
|
|
174
|
+
const clean = sanitizeCallTargetText(redactSecretString(value));
|
|
175
|
+
if (clean.length === 0) return null;
|
|
176
|
+
if (clean.length <= CALL_ACTION_OBJECT_MAX_CHARS) return { object: clean, truncated: false };
|
|
177
|
+
return { object: clean.slice(0, CALL_ACTION_OBJECT_MAX_CHARS), truncated: true };
|
|
178
|
+
}
|
|
179
|
+
function describeCallAction(tool, args) {
|
|
180
|
+
const known = CALL_ACTION_VOCABULARY[tool];
|
|
181
|
+
const candidates = known?.field ? [known.field, ...CALL_ACTION_OBJECT_FIELDS] : [...CALL_ACTION_OBJECT_FIELDS];
|
|
182
|
+
let bounded = null;
|
|
183
|
+
if (args) {
|
|
184
|
+
for (const field of candidates) {
|
|
185
|
+
if (isSecretArgKey(field)) continue;
|
|
186
|
+
bounded = boundActionObject(args[field]);
|
|
187
|
+
if (bounded !== null) break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (known === void 0 && bounded === null) return null;
|
|
191
|
+
const verb = known?.verb ?? "calling";
|
|
192
|
+
if (bounded === null) return { verb };
|
|
193
|
+
return { verb, object: bounded.object, ...bounded.truncated ? { truncated: true } : {} };
|
|
194
|
+
}
|
|
195
|
+
function renderAllowedTargetValue(value) {
|
|
196
|
+
if (typeof value === "string") {
|
|
197
|
+
const rendered = sanitizeCallTargetText(redactSecretString(value));
|
|
198
|
+
return rendered.length > 0 ? rendered : null;
|
|
199
|
+
}
|
|
200
|
+
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
201
|
+
if (typeof value === "boolean") return String(value);
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
function countLabel(count, singular, plural) {
|
|
205
|
+
return `${count} ${count === 1 ? singular : plural}`;
|
|
206
|
+
}
|
|
207
|
+
function summarizeUnlistedTargetValue(value) {
|
|
208
|
+
if (typeof value === "string") {
|
|
209
|
+
return `<string ${countLabel(Buffer.byteLength(value, "utf8"), "byte", "bytes")}>`;
|
|
210
|
+
}
|
|
211
|
+
if (Array.isArray(value)) return `<array ${countLabel(value.length, "item", "items")}>`;
|
|
212
|
+
if (value !== null && typeof value === "object") {
|
|
213
|
+
return `<object ${countLabel(Object.keys(value).length, "field", "fields")}>`;
|
|
214
|
+
}
|
|
215
|
+
if (value === null) return "<null 0 values>";
|
|
216
|
+
if (typeof value === "undefined") return "<undefined 0 values>";
|
|
217
|
+
return `<${typeof value} 1 value>`;
|
|
218
|
+
}
|
|
219
|
+
function targetFieldName(value) {
|
|
220
|
+
return sanitizeCallTargetText(value).slice(0, 32) || "field";
|
|
221
|
+
}
|
|
222
|
+
function describeCallTarget(tool, args) {
|
|
223
|
+
if (!args) return "";
|
|
224
|
+
const allowedFields = CALL_TARGET_FIELDS[tool] ?? [];
|
|
225
|
+
const allowed = new Set(allowedFields);
|
|
226
|
+
const parts = [];
|
|
227
|
+
for (const field of allowedFields) {
|
|
228
|
+
if (!(field in args)) continue;
|
|
229
|
+
if (isSecretArgKey(field)) {
|
|
230
|
+
parts.push(`${targetFieldName(field)}=${summarizeUnlistedTargetValue(args[field])}`);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const rendered = renderAllowedTargetValue(args[field]);
|
|
234
|
+
if (rendered === null) {
|
|
235
|
+
parts.push(`${targetFieldName(field)}=${summarizeUnlistedTargetValue(args[field])}`);
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
parts.push(parts.length === 0 ? rendered : `${targetFieldName(field)}=${rendered}`);
|
|
239
|
+
}
|
|
240
|
+
for (const [field, value] of Object.entries(args)) {
|
|
241
|
+
if (allowed.has(field)) continue;
|
|
242
|
+
parts.push(`${targetFieldName(field)}=${summarizeUnlistedTargetValue(value)}`);
|
|
243
|
+
}
|
|
244
|
+
return sanitizeCallTargetText(parts.join(" \xB7 ")).slice(0, CALL_TARGET_MAX_CHARS);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export {
|
|
248
|
+
redactSecretString,
|
|
249
|
+
redactToolArgs,
|
|
250
|
+
sanitizeMultilineDisplayText,
|
|
251
|
+
sanitizeCallTargetText,
|
|
252
|
+
describeCallAction,
|
|
253
|
+
describeCallTarget
|
|
254
|
+
};
|
|
255
|
+
//# sourceMappingURL=chunk-TVHHYFHE.js.map
|