@iowarp/clio-coder 0.4.0 → 0.4.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 +131 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +407 -375
- package/SECURITY.md +2 -1
- package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
- package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
- package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/chunk-34BHNEE3.js +1846 -0
- package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/chunk-3KIPBMUA.js +308 -0
- package/dist/chunk-3M6DQK6S.js +362 -0
- package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
- package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
- package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
- package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
- package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
- package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
- package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
- package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
- package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-F2I26BDK.js +66 -0
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
- package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
- package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
- package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
- package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
- package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
- package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/chunk-NMJXSHBJ.js +283 -0
- package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
- package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
- package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
- package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
- package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
- package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
- package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
- package/dist/chunk-UXCU4E3T.js +303 -0
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
- package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
- package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
- package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
- package/dist/chunk-XQRY4DTA.js +657 -0
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
- package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
- package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +38 -37
- package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
- package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
- package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
- package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
- package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
- package/dist/doctor-LHBD36VU.js +773 -0
- package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
- package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
- package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
- package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
- package/dist/fleet-view-TWHJKCN6.js +96 -0
- package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
- package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
- package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
- package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
- package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
- package/dist/panes-IXKLOKA2.js +75 -0
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
- package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
- package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
- package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
- package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
- package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
- package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
- package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
- package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
- package/dist/worker/entry.js +83 -63
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
- package/docs/history/release-cut-checklist.md +207 -0
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- 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 +13 -21
- package/skills/README.md +51 -42
- package/skills/coding/ast-grep/SKILL.md +9 -3
- package/skills/coding/coding-standards/SKILL.md +9 -3
- package/skills/coding/prototype/SKILL.md +9 -3
- package/skills/coding/tdd/SKILL.md +9 -3
- package/skills/context/context-handoff/SKILL.md +13 -4
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +9 -3
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +10 -5
- 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 +9 -3
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +10 -4
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +8 -3
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +8 -3
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
- package/skills/meta/clio-coder-test/SKILL.md +146 -0
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
- package/skills/meta/clio-coder-test/references/harness.md +102 -0
- package/skills/meta/clio-coder-test/references/test-map.md +96 -0
- package/skills/meta/credentials/SKILL.md +10 -3
- package/skills/meta/find-skills/SKILL.md +9 -3
- package/skills/meta/herdr/SKILL.md +9 -3
- package/skills/meta/skill-craft/SKILL.md +39 -16
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +9 -3
- package/skills/planning/prd/SKILL.md +9 -3
- package/skills/planning/product-intent/SKILL.md +9 -3
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +9 -3
- package/skills/research/experiment-protocol/SKILL.md +10 -3
- package/skills/research/scientific-debugging/SKILL.md +10 -3
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +10 -3
- package/skills/skill-marketplace.json +285 -66
- package/skills/workflow/cut-it/SKILL.md +11 -3
- package/skills/workflow/design-council/SKILL.md +12 -3
- package/skills/workflow/grill-me/SKILL.md +9 -3
- package/skills/workflow/workflow-distiller/SKILL.md +9 -3
- package/src/cli/acp.ts +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +6 -6
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +68 -15
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -31
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +28 -20
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +31 -10
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/eval.ts +1 -2
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +9 -6
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +13 -17
- package/src/cli/share.ts +6 -2
- package/src/cli/skills-eval.ts +14 -14
- package/src/cli/targets.ts +25 -30
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +96 -4
- 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 +1 -1
- package/src/cli/wiki-generate.ts +6 -6
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +132 -87
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +51 -6
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1066 -886
- package/src/core/defaults.ts +326 -530
- package/src/core/dispatch-outcome.ts +16 -0
- 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 +33 -52
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/prompt-hint.ts +9 -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/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- 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 +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +14 -26
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +26 -4
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +56 -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 -6
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- 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/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/capability-match.ts +10 -0
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +169 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +220 -70
- 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 +0 -23
- 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.ts +9 -19
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +47 -40
- package/src/domains/dispatch/types.ts +58 -6
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +10 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- 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/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 +20 -3
- 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/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- 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-extension-install-digests.ts +27 -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 +22 -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 +276 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +86 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +35 -4
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +30 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +195 -25
- package/src/domains/mux/detect.ts +23 -6
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +21 -1
- package/src/domains/mux/operations.ts +72 -5
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +79 -7
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +12 -4
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +15 -91
- package/src/domains/observability/trace-store.ts +65 -19
- package/src/domains/prompts/compiler.ts +75 -55
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +100 -12
- package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +11 -18
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +99 -23
- 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} +671 -106
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtime-resolution.ts +31 -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 +9 -4
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +87 -39
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- 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 +41 -18
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- 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/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +249 -43
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +89 -35
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- 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 +4 -23
- package/src/engine/apis/lmstudio.ts +4 -9
- package/src/engine/apis/ollama-native.ts +9 -9
- package/src/engine/apis/openai-completions.ts +30 -27
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +10 -35
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -17
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +54 -24
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +163 -120
- package/src/interactive/application-controller.ts +23 -22
- package/src/interactive/bus-notices.ts +10 -3
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +18 -9
- package/src/interactive/chat-panel.ts +37 -14
- package/src/interactive/chat-renderer.ts +71 -7
- 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 +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +36 -44
- 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 +15 -44
- package/src/interactive/interactive-application.ts +116 -61
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +6 -2
- package/src/interactive/interactive-presentation.ts +22 -17
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +65 -17
- 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 +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +360 -303
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +145 -43
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +401 -190
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -24
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +41 -26
- 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 +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +72 -11
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +6 -6
- package/src/tools/bash.ts +2 -2
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +44 -13
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +6 -2
- package/src/tools/dispatch-plan.ts +48 -15
- package/src/tools/dispatch-run-events.ts +13 -11
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/find.ts +1 -6
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +4 -5
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- 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-36EJLSQQ.js +0 -814
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUCTJL45.js +0 -45
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-TZ3SGWZZ.js +0 -48
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/dist/fleet-view-ZCON35AG.js +0 -102
- package/dist/panes-HMABYVO4.js +0 -58
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/release-cut-checklist.md +0 -193
- package/docs/time-conventions.md +0 -101
- package/skills/meta/clio-test/SKILL.md +0 -133
- package/skills/meta/clio-test/references/harness.md +0 -126
- package/skills/meta/clio-test/references/test-map.md +0 -69
- package/src/engine/apis/degraded-inference.ts +0 -95
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
-
import { basename, join, resolve } from "node:path";
|
|
2
|
+
import { basename, join, relative, resolve } from "node:path";
|
|
3
3
|
import { resolvePackageRoot } from "../../core/package-root.js";
|
|
4
4
|
|
|
5
5
|
// Deterministic, dependency-free retrieval over Clio's bundled human docs,
|
|
@@ -298,14 +298,27 @@ function indexSection(section: RawSection): IndexedSection {
|
|
|
298
298
|
|
|
299
299
|
function candidateDocFiles(root: string): string[] {
|
|
300
300
|
const docsDir = join(root, "docs");
|
|
301
|
+
const htmlDir = join(docsDir, "html");
|
|
301
302
|
const files: string[] = [];
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
303
|
+
const walk = (dir: string): void => {
|
|
304
|
+
let entries: import("node:fs").Dirent[];
|
|
305
|
+
try {
|
|
306
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
307
|
+
} catch {
|
|
308
|
+
return;
|
|
305
309
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
310
|
+
for (const entry of entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))) {
|
|
311
|
+
const absolute = join(dir, entry.name);
|
|
312
|
+
if (entry.isDirectory()) {
|
|
313
|
+
if (absolute !== htmlDir) walk(absolute);
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (entry.isFile() && entry.name.toLowerCase().endsWith(".md")) {
|
|
317
|
+
files.push(relative(root, absolute).replaceAll("\\", "/"));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
walk(docsDir);
|
|
309
322
|
for (const name of ["README.md", "CHANGELOG.md", "CLIO-CODER.md"]) {
|
|
310
323
|
if (existsSync(join(root, name))) files.push(name);
|
|
311
324
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { type Dirent, readdirSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import type { ContextRecalledPayload } from "../../core/bus-events.js";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
SKILL_INSTALL_OFFER_OPTION_NEVER,
|
|
6
|
+
SKILL_INSTALL_OFFER_OPTION_NOT_NOW,
|
|
7
|
+
SKILL_INSTALL_OFFER_OPTION_PROJECT,
|
|
8
|
+
SKILL_INSTALL_OFFER_OPTION_USER,
|
|
9
|
+
SKILL_SUGGESTION_ANCHOR,
|
|
10
|
+
} from "../../core/skill-activation.js";
|
|
5
11
|
import { ToolNames } from "../../core/tool-names.js";
|
|
6
12
|
import { foldWorkingSet } from "../../domains/context/working-set/fold.js";
|
|
7
13
|
import {
|
|
@@ -197,6 +203,23 @@ function pendingSkillRequestFor(name: string, options: ToolInvokeOptions | undef
|
|
|
197
203
|
return options?.pendingSkillPolicy?.requests.find((request) => request.name === name) ?? null;
|
|
198
204
|
}
|
|
199
205
|
|
|
206
|
+
/**
|
|
207
|
+
* A hidden skill is intentionally absent from model discovery, but
|
|
208
|
+
* `disable-model-invocation` still promises that the operator may activate it
|
|
209
|
+
* by hand. Slash-command and selector requests are the two authenticated
|
|
210
|
+
* interactive paths for that choice. Recipe and marketplace requests do not
|
|
211
|
+
* widen visibility: neither proves that the operator selected an installed
|
|
212
|
+
* manual-only skill for this turn.
|
|
213
|
+
*/
|
|
214
|
+
function operatorRequestedManualSkill(skill: Skill, request: ReturnType<typeof pendingSkillRequestFor>): boolean {
|
|
215
|
+
return (
|
|
216
|
+
skill.trusted &&
|
|
217
|
+
skill.disableModelInvocation &&
|
|
218
|
+
request?.installed === true &&
|
|
219
|
+
(request.source === "slash-command" || request.source === "selector")
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
200
223
|
function renderPendingSkillTask(name: string, options: ToolInvokeOptions | undefined): string[] {
|
|
201
224
|
const request = pendingSkillRequestFor(name, options);
|
|
202
225
|
if (!request) return [];
|
|
@@ -257,10 +280,11 @@ function renderSkillsList(
|
|
|
257
280
|
// claim none is configured; it simply has nothing to list.
|
|
258
281
|
return marketplaceOffered ? "No skills are installed and no marketplace is configured." : "No skills are installed.";
|
|
259
282
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
283
|
+
// The header names the listing and nothing more. The reply protocol is
|
|
284
|
+
// stated once, as the recency anchor at the bottom, because that is the
|
|
285
|
+
// line literal models act on; a second copy up here cost every listing
|
|
286
|
+
// call the same sentences again.
|
|
287
|
+
const lines = ["Available skills.", ""];
|
|
264
288
|
if (skills.length > 0) {
|
|
265
289
|
lines.push("Installed:");
|
|
266
290
|
for (const skill of skills) {
|
|
@@ -274,10 +298,7 @@ function renderSkillsList(
|
|
|
274
298
|
// operator's /skill <name> prompts to install before it runs, so the
|
|
275
299
|
// model's move is the same suggest-and-wait. Only the body is out of
|
|
276
300
|
// reach until then, which is why the description is all that appears.
|
|
277
|
-
lines.push(
|
|
278
|
-
"",
|
|
279
|
-
"Marketplace (not installed; /skill <name> offers to install, or `clio-coder skills install <name>`). Suggest these the same way when one matches; their bodies cannot be loaded until the operator installs them:",
|
|
280
|
-
);
|
|
301
|
+
lines.push("", "Marketplace (not installed; /skill <name> offers to install):");
|
|
281
302
|
for (const entry of marketplace) {
|
|
282
303
|
const category = entry.category ? ` [${entry.category}]` : "";
|
|
283
304
|
lines.push(`- ${entry.name}${category}: ${entry.description}`);
|
|
@@ -289,6 +310,14 @@ function renderSkillsList(
|
|
|
289
310
|
"",
|
|
290
311
|
`If one skill above matches the current task, begin your reply with the line \`${SKILL_SUGGESTION_ANCHOR}\` (a comma-separated sequence, in order, when several compose), then continue the task in the same turn without it; only the operator can run it. If none match, do not mention skills.`,
|
|
291
312
|
);
|
|
313
|
+
if (marketplace.length > 0) {
|
|
314
|
+
// The offer protocol mirrors the marketplace-offer middleware: fixed
|
|
315
|
+
// option labels so the harness recognizes the answer, and the model
|
|
316
|
+
// never performs an install itself.
|
|
317
|
+
lines.push(
|
|
318
|
+
`When no installed skill serves the task but a marketplace skill above genuinely does, you may instead ask the operator with ask_user (mode=single_question, header "Install skill") whether to install it, offering exactly: "${SKILL_INSTALL_OFFER_OPTION_PROJECT}", "${SKILL_INSTALL_OFFER_OPTION_USER}", "${SKILL_INSTALL_OFFER_OPTION_NOT_NOW}", "${SKILL_INSTALL_OFFER_OPTION_NEVER}". The harness handles the answer and any install; never install or load a skill yourself.`,
|
|
319
|
+
);
|
|
320
|
+
}
|
|
292
321
|
return lines.join("\n");
|
|
293
322
|
}
|
|
294
323
|
|
|
@@ -393,7 +422,7 @@ function runSkillsScope(
|
|
|
393
422
|
if (name.length === 0) {
|
|
394
423
|
const list = loadSkills({ cwd: cwdFromDeps(deps), ...(deps.getSkillLoaderOptions?.() ?? {}) });
|
|
395
424
|
const visible = modelVisibleSkills(list.items);
|
|
396
|
-
const marketplace = marketplaceRowsFor(deps,
|
|
425
|
+
const marketplace = marketplaceRowsFor(deps, list.items, options);
|
|
397
426
|
const rendered = renderSkillsList(visible, marketplace, deps.skillMarketplace !== false);
|
|
398
427
|
// The catalog is bounded but not small: the whole listing must fit the
|
|
399
428
|
// per-call cap like any observation, and a cut list says so instead of
|
|
@@ -423,12 +452,15 @@ function runSkillsScope(
|
|
|
423
452
|
if (policyError) return { kind: "error", message: policyError };
|
|
424
453
|
const list = loadSkills({ cwd: cwdFromDeps(deps), ...(deps.getSkillLoaderOptions?.() ?? {}) });
|
|
425
454
|
const visible = modelVisibleSkills(list.items);
|
|
426
|
-
const
|
|
455
|
+
const pendingRequest = pendingSkillRequestFor(name, options);
|
|
456
|
+
const skill =
|
|
457
|
+
visible.find((item) => item.name === name) ??
|
|
458
|
+
list.items.find((item) => item.name === name && operatorRequestedManualSkill(item, pendingRequest));
|
|
427
459
|
if (!skill) {
|
|
428
460
|
// A marketplace entry is a skill that exists and is not installed. Saying
|
|
429
461
|
// "unknown skill" about it denies the operator a thing the listing just
|
|
430
462
|
// offered; name the state and the one move that changes it.
|
|
431
|
-
const installable = marketplaceRowsFor(deps,
|
|
463
|
+
const installable = marketplaceRowsFor(deps, list.items, options).some((entry) => entry.name === name);
|
|
432
464
|
if (installable) {
|
|
433
465
|
return {
|
|
434
466
|
kind: "error",
|
|
@@ -441,7 +473,6 @@ function runSkillsScope(
|
|
|
441
473
|
}
|
|
442
474
|
const includeTree = args.include_tree === true;
|
|
443
475
|
const tree = includeTree ? buildResourceTree(skill.baseDir, DEFAULT_TREE_ENTRIES) : null;
|
|
444
|
-
const pendingRequest = pendingSkillRequestFor(name, options);
|
|
445
476
|
const pendingTask = pendingRequest?.args.trim() ?? "";
|
|
446
477
|
// Provenance: the activated content is compared against whatever recorded
|
|
447
478
|
// hash can speak for it, the audited catalog's pinned manifest or the
|
|
@@ -38,6 +38,16 @@ export interface CoreToolBootstrapDeps {
|
|
|
38
38
|
taskBoard?: TaskBoardStore;
|
|
39
39
|
userTasks?: UserTasksStore;
|
|
40
40
|
agentLedger?: AgentLedgerPort;
|
|
41
|
+
/**
|
|
42
|
+
* Register the ledger tool even without a port. A worker registry needs
|
|
43
|
+
* this: `attestedToolSignature` signs the names a bare worker registry
|
|
44
|
+
* produces, and the orchestrator admits `ledger` for every batch member,
|
|
45
|
+
* so a registry that dropped the tool for want of a port drifted the
|
|
46
|
+
* signature and admission refused every batch worker. The session never
|
|
47
|
+
* sets it: it has no peers, and the schema was 444 tokens of every first
|
|
48
|
+
* turn for a tool that could only answer "no ledger".
|
|
49
|
+
*/
|
|
50
|
+
includeLedgerTools?: boolean;
|
|
41
51
|
getSkillLoaderOptions?: () => Pick<
|
|
42
52
|
LoadSkillsInput,
|
|
43
53
|
"trustProjectCompatRoots" | "disableDiscovery" | "explicitSkillPaths"
|
|
@@ -49,6 +59,8 @@ export interface CoreToolRegistration {
|
|
|
49
59
|
includeNetworkTools: boolean;
|
|
50
60
|
includeSessionTools: boolean;
|
|
51
61
|
includeInteractiveTools: boolean;
|
|
62
|
+
/** True only when a worker bound its dispatch's agent-ledger port; the session never does. */
|
|
63
|
+
includeLedgerTools: boolean;
|
|
52
64
|
}
|
|
53
65
|
|
|
54
66
|
export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstrapDeps = {}): CoreToolRegistration {
|
|
@@ -154,12 +166,21 @@ export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstra
|
|
|
154
166
|
registry.register({
|
|
155
167
|
...builtin(createArtifactTool({ getCwd: skillToolDeps.getCwd }), { path: "src/tools/artifact.ts", scope: "core" }),
|
|
156
168
|
});
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
169
|
+
// The coordination board exists only inside a dispatch: a worker process
|
|
170
|
+
// binds the port, the session never does, and without a port the tool can
|
|
171
|
+
// only answer "no ledger". Registering it on the session put its schema on
|
|
172
|
+
// every first turn, so the session registers it with a port or not at all;
|
|
173
|
+
// a worker registry asks for it explicitly, port or no port, because its
|
|
174
|
+
// attested surface must not depend on whether this run bound one.
|
|
175
|
+
const includeLedgerTools = deps.includeLedgerTools === true || deps.agentLedger !== undefined;
|
|
176
|
+
if (includeLedgerTools) {
|
|
177
|
+
registry.register({
|
|
178
|
+
...builtin(createLedgerTool(deps.agentLedger ? { agentLedger: deps.agentLedger } : {}), {
|
|
179
|
+
path: "src/tools/ledger.ts",
|
|
180
|
+
scope: "core",
|
|
181
|
+
}),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
163
184
|
registry.register({
|
|
164
185
|
...builtin(
|
|
165
186
|
createTasksTool({
|
|
@@ -177,6 +198,7 @@ export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstra
|
|
|
177
198
|
includeNetworkTools,
|
|
178
199
|
includeSessionTools: Boolean(session),
|
|
179
200
|
includeInteractiveTools: Boolean(deps.askUser),
|
|
201
|
+
includeLedgerTools,
|
|
180
202
|
};
|
|
181
203
|
}
|
|
182
204
|
|
|
@@ -92,8 +92,7 @@ export const credentialPresentTool: ToolSpec = {
|
|
|
92
92
|
name: Type.String({ description: "Credential key name, e.g. OPENAI_API_KEY." }),
|
|
93
93
|
source: Type.Optional(
|
|
94
94
|
StringEnum(["auto", "environment", "env", "file"], {
|
|
95
|
-
description:
|
|
96
|
-
"auto checks the environment and the file when file is supplied; environment/env checks only the process environment; file checks only the file.",
|
|
95
|
+
description: "auto (default) checks the environment, then file when given; the others check one source.",
|
|
97
96
|
}),
|
|
98
97
|
),
|
|
99
98
|
file: Type.Optional(Type.String({ description: "Env-style file to check for NAME=, e.g. .env." })),
|
|
@@ -456,10 +456,12 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
456
456
|
return shapeRejection(args, "dispatch: apply_winner must be an options object");
|
|
457
457
|
}
|
|
458
458
|
const branch = stringArg(args.apply_winner, "branch");
|
|
459
|
-
const match = branch
|
|
459
|
+
const match = branch
|
|
460
|
+
? /^(?:clio-coder|clio)\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch)
|
|
461
|
+
: null;
|
|
460
462
|
if (branch === undefined) return shapeRejection(args, "dispatch: apply_winner.branch is required");
|
|
461
463
|
if (match === null) {
|
|
462
|
-
return shapeRejection(args, "dispatch: apply_winner.branch must be a clio/compete/<group>/<n> branch");
|
|
464
|
+
return shapeRejection(args, "dispatch: apply_winner.branch must be a clio-coder/compete/<group>/<n> branch");
|
|
463
465
|
}
|
|
464
466
|
try {
|
|
465
467
|
const cwd = resolve(stringArg(args.apply_winner, "cwd") ?? process.cwd());
|
|
@@ -62,7 +62,7 @@ const AUTO_BASELINE_FALLBACK_AGENT_ID = "scout";
|
|
|
62
62
|
* the mapped recipe is not present in this install, so a trimmed recipe set
|
|
63
63
|
* can never produce a dispatch against an agent id that does not resolve.
|
|
64
64
|
*/
|
|
65
|
-
|
|
65
|
+
function autoBaselineAgentId(task: string, hasAgent?: (id: string) => boolean): string {
|
|
66
66
|
const mapped = AUTO_BASELINE_BY_TASK_TYPE[classifyAgentTask(task).taskType] ?? AUTO_BASELINE_FALLBACK_AGENT_ID;
|
|
67
67
|
if (hasAgent === undefined) return mapped;
|
|
68
68
|
if (hasAgent(mapped)) return mapped;
|
|
@@ -186,7 +186,11 @@ function dispatchRequestFromArgs(
|
|
|
186
186
|
let rawIntent = args.intent;
|
|
187
187
|
if (Object.hasOwn(args, "gate")) {
|
|
188
188
|
if (typeof args.gate !== "string" || args.gate.trim().length === 0) {
|
|
189
|
-
return {
|
|
189
|
+
return {
|
|
190
|
+
ok: false,
|
|
191
|
+
message:
|
|
192
|
+
"gate must be a non-empty declared check id: a check verify() lists, never a shell command; omit gate and run the check yourself after the receipt",
|
|
193
|
+
};
|
|
190
194
|
}
|
|
191
195
|
rawIntent = { ...(isRecord(rawIntent) ? rawIntent : {}), verification: [{ check: args.gate.trim() }] };
|
|
192
196
|
}
|
|
@@ -103,7 +103,14 @@ export interface DispatchPlanView {
|
|
|
103
103
|
/** True when this call requires plan approval at supervised autonomy levels. */
|
|
104
104
|
planScale: boolean;
|
|
105
105
|
tasks: DispatchPlanTaskView[];
|
|
106
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* Rendered plan artifact, deterministic for identical arguments against an
|
|
108
|
+
* unchanged working tree. The tree is an input because a legacy task's scope
|
|
109
|
+
* lines resolve a "../"-leading prose token by probing the dispatch root, so
|
|
110
|
+
* creating or deleting the probed file between two renders of the same call
|
|
111
|
+
* changes this text and the hash below. Nothing re-derives the hash to compare
|
|
112
|
+
* it; both renders of one call happen in the same synchronous admission pass.
|
|
113
|
+
*/
|
|
107
114
|
text: string;
|
|
108
115
|
/** sha256 of the rendered artifact. */
|
|
109
116
|
hash: string;
|
|
@@ -251,12 +258,24 @@ function safeField(value: string, bindChangedValue = true): string {
|
|
|
251
258
|
return `${result}{sha256=${createHash("sha256").update(value, "utf8").digest("hex")}}`;
|
|
252
259
|
}
|
|
253
260
|
|
|
254
|
-
|
|
261
|
+
/**
|
|
262
|
+
* The scope lines of the approval artifact, for a task with no typed intent.
|
|
263
|
+
*
|
|
264
|
+
* `cwd` is the dispatch's own working directory, not this process's: prose
|
|
265
|
+
* inference probes a "../"-leading token against the dispatch root, so a plan
|
|
266
|
+
* rendered against `process.cwd()` would show the operator a working context
|
|
267
|
+
* the run does not resolve whenever the call carries an explicit `cwd` (a
|
|
268
|
+
* worktree, most often). Passing it makes this render and admission read the
|
|
269
|
+
* same tree, which is also the sense in which the artifact is deterministic:
|
|
270
|
+
* identical arguments against an unchanged tree, not against any tree.
|
|
271
|
+
*/
|
|
272
|
+
function renderLegacyPathScope(task: DispatchPlanTaskView, cwd: string | undefined): string[] {
|
|
255
273
|
if (task.intent !== undefined) return [];
|
|
256
274
|
const scope = resolveDispatchPathScope({
|
|
257
275
|
agentId: task.agent,
|
|
258
276
|
executionRole: task.executionRole,
|
|
259
277
|
task: task.task,
|
|
278
|
+
...(cwd !== undefined ? { cwd } : {}),
|
|
260
279
|
...(task.briefing !== undefined ? { briefing: task.briefing } : {}),
|
|
261
280
|
});
|
|
262
281
|
const lines = [" scope mode=legacy-inferred"];
|
|
@@ -275,6 +294,17 @@ function renderLegacyPathScope(task: DispatchPlanTaskView): string[] {
|
|
|
275
294
|
if (scope.provenance.workingContextPaths.length === 0 && scope.provenance.writeBoundaries.length === 0) {
|
|
276
295
|
lines.push(" scope policy_paths=none");
|
|
277
296
|
}
|
|
297
|
+
// Named here as well as on the dispatch-time notice, because this artifact is
|
|
298
|
+
// the surface an operator approves: a token the run anchored somewhere the
|
|
299
|
+
// prose did not spell, or discarded outright, would otherwise be visible in
|
|
300
|
+
// the plan only as a scope line that has no counterpart in the task text.
|
|
301
|
+
for (const entry of scope.parentTokens) {
|
|
302
|
+
lines.push(
|
|
303
|
+
` scope parent_token raw=${JSON.stringify(safeField(entry.token))} resolved=${
|
|
304
|
+
entry.resolved === null ? "dropped" : JSON.stringify(safeField(entry.resolved))
|
|
305
|
+
} source=${entry.source}`,
|
|
306
|
+
);
|
|
307
|
+
}
|
|
278
308
|
return lines;
|
|
279
309
|
}
|
|
280
310
|
|
|
@@ -365,6 +395,7 @@ function renderPlanText(
|
|
|
365
395
|
source: DispatchPlanSource,
|
|
366
396
|
maxWorkers: number | null,
|
|
367
397
|
onFailure: ResolvedDispatchPlanArtifact["onFailure"],
|
|
398
|
+
cwd: string | undefined,
|
|
368
399
|
confirmation?: ResolvedDispatchPlanArtifact["confirmation"],
|
|
369
400
|
): string {
|
|
370
401
|
const lines = [
|
|
@@ -453,7 +484,7 @@ function renderPlanText(
|
|
|
453
484
|
const serialized = JSON.stringify(task.intent);
|
|
454
485
|
lines.push(` intent_sha256=${createHash("sha256").update(serialized, "utf8").digest("hex")}`);
|
|
455
486
|
}
|
|
456
|
-
lines.push(...renderLegacyPathScope(task));
|
|
487
|
+
lines.push(...renderLegacyPathScope(task, cwd));
|
|
457
488
|
for (const check of task.resolvedVerification ?? []) {
|
|
458
489
|
lines.push(
|
|
459
490
|
` verification check=${safeField(check.check)} argv=${JSON.stringify(check.argv)} cwd=${JSON.stringify(check.cwd)} timeout_ms=${check.timeoutMs}`,
|
|
@@ -887,7 +918,20 @@ export function describeDispatchPlan(rawArgs: Record<string, unknown> | undefine
|
|
|
887
918
|
tasks.some((task) => task.failover === "approved") ||
|
|
888
919
|
confirmation !== undefined ||
|
|
889
920
|
isRecord(args.apply_winner));
|
|
890
|
-
const text = renderPlanText(
|
|
921
|
+
const text = renderPlanText(
|
|
922
|
+
topology,
|
|
923
|
+
tasks,
|
|
924
|
+
costCeilingUsd,
|
|
925
|
+
deadlineMs,
|
|
926
|
+
source,
|
|
927
|
+
maxWorkers,
|
|
928
|
+
onFailure,
|
|
929
|
+
// Read off the whole call rather than a task view: `cwd` is one top-level
|
|
930
|
+
// dispatch argument, so it survives on both the freshly parsed path and
|
|
931
|
+
// the resolved-artifact path, where the sealed task shape carries no cwd.
|
|
932
|
+
str(args.cwd),
|
|
933
|
+
confirmation,
|
|
934
|
+
);
|
|
891
935
|
return {
|
|
892
936
|
topology,
|
|
893
937
|
taskCount: Math.max(1, tasks.length),
|
|
@@ -900,14 +944,3 @@ export function describeDispatchPlan(rawArgs: Record<string, unknown> | undefine
|
|
|
900
944
|
...(confirmation !== undefined ? { confirmation } : {}),
|
|
901
945
|
};
|
|
902
946
|
}
|
|
903
|
-
|
|
904
|
-
/** Registry-side predicate: does this dispatch call require plan approval at supervised levels? */
|
|
905
|
-
export function isPlanScaleDispatchArgs(rawArgs: Record<string, unknown> | undefined): boolean {
|
|
906
|
-
try {
|
|
907
|
-
return describeDispatchPlan(rawArgs).planScale;
|
|
908
|
-
} catch {
|
|
909
|
-
// A malformed call fails closed as NOT plan-scale; the dispatch tool's
|
|
910
|
-
// own validation rejects it with a real error message.
|
|
911
|
-
return false;
|
|
912
|
-
}
|
|
913
|
-
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BusChannels } from "../core/bus-events.js";
|
|
2
2
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
3
|
+
import { normalizeClioCoderEventRecord, normalizeClioCoderEventType } from "../core/naming-events.js";
|
|
3
4
|
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
4
5
|
import { durableAssistantTextFromEvent } from "../domains/dispatch/event-pump.js";
|
|
5
6
|
import { defaultRunEventJournal, type RunEventJournalSink } from "../domains/dispatch/run-event-journal.js";
|
|
@@ -61,18 +62,19 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
function eventDetail(event: unknown): string | undefined {
|
|
64
|
-
const
|
|
65
|
+
const normalized = isRecord(event) ? normalizeClioCoderEventRecord(event) : event;
|
|
66
|
+
const text = assistantTextFromEvent(normalized);
|
|
65
67
|
if (text.length > 0) return truncateUtf8(text, RUN_TAIL_TEXT_LIMIT, "...");
|
|
66
|
-
if (!isRecord(
|
|
67
|
-
if (
|
|
68
|
-
const tool = typeof
|
|
69
|
-
const outcome = typeof
|
|
68
|
+
if (!isRecord(normalized)) return undefined;
|
|
69
|
+
if (normalized.type === "clio_coder_tool_finish" && isRecord(normalized.payload)) {
|
|
70
|
+
const tool = typeof normalized.payload.tool === "string" ? normalized.payload.tool : "tool";
|
|
71
|
+
const outcome = typeof normalized.payload.outcome === "string" ? normalized.payload.outcome : "";
|
|
70
72
|
return `${tool} ${outcome}`.trim();
|
|
71
73
|
}
|
|
72
|
-
if (
|
|
73
|
-
const attempt = typeof
|
|
74
|
-
const runId = typeof
|
|
75
|
-
const reason = typeof
|
|
74
|
+
if (normalized.type === "attempt_start") {
|
|
75
|
+
const attempt = typeof normalized.attempt === "number" ? normalized.attempt : "?";
|
|
76
|
+
const runId = typeof normalized.runId === "string" ? normalized.runId : "?";
|
|
77
|
+
const reason = typeof normalized.reason === "string" ? normalized.reason : "retry";
|
|
76
78
|
return truncateUtf8(`attempt ${attempt} -> ${runId}: ${reason}`, RUN_TAIL_TEXT_LIMIT, "...");
|
|
77
79
|
}
|
|
78
80
|
return undefined;
|
|
@@ -89,7 +91,7 @@ function eventDetail(event: unknown): string | undefined {
|
|
|
89
91
|
* (src/domains/dispatch/run-event-journal-bridge.ts) call it.
|
|
90
92
|
*/
|
|
91
93
|
export function runTailEntryFromEvent(event: unknown, at: string = new Date().toISOString()): RunTailEntry | null {
|
|
92
|
-
const type = isRecord(event) && typeof event.type === "string" ? event.type : "unknown";
|
|
94
|
+
const type = isRecord(event) && typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : "unknown";
|
|
93
95
|
if (type === "heartbeat" || type === "message_update") return null;
|
|
94
96
|
const entry: RunTailEntry = { at, type };
|
|
95
97
|
const detail = eventDetail(event);
|
|
@@ -100,7 +102,7 @@ export function runTailEntryFromEvent(event: unknown, at: string = new Date().to
|
|
|
100
102
|
export interface DispatchRunEventRegistryOptions {
|
|
101
103
|
/**
|
|
102
104
|
* Durable tee for the display tail. Omitted takes the process-wide default
|
|
103
|
-
* journal (settings-gated by `
|
|
105
|
+
* journal (settings-gated by `fleet.history.journal`); `null` turns it off for this
|
|
104
106
|
* registry. This is the one wiring choke point: every registry in the
|
|
105
107
|
* process is built by this factory, so the sink attaches here rather than at
|
|
106
108
|
* each of the three construction sites that call it.
|
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
claimCompeteGroup,
|
|
58
58
|
cleanupCompeteGroup,
|
|
59
59
|
commitCandidateWork,
|
|
60
|
+
competeBranchForCandidate,
|
|
60
61
|
createCandidateWorktreeMapped,
|
|
61
62
|
isGitRepository,
|
|
62
63
|
loadCompeteGroup,
|
|
@@ -964,6 +965,8 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
964
965
|
const pick = judged?.ok ? judged.result.winner : null;
|
|
965
966
|
const pickedSubject = pick === null ? undefined : record.subjects[pick - 1];
|
|
966
967
|
const candidateReceipt = pickedSubject === undefined ? null : readVerifiedGateReceipt(deps, pickedSubject.runId);
|
|
968
|
+
const root = record.resourceRoot ?? process.cwd();
|
|
969
|
+
const pickedBranch = pick === null ? null : competeBranchForCandidate(root, record.group, pick);
|
|
967
970
|
if (pickedSubject !== undefined && candidateReceipt === null) {
|
|
968
971
|
throw new Error(
|
|
969
972
|
`pending compete decision ${record.id} has no verified candidate receipt for ${pickedSubject.runId}`,
|
|
@@ -971,11 +974,10 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
971
974
|
}
|
|
972
975
|
let blockedProtected: string[] = [];
|
|
973
976
|
if (pick !== null && pickedSubject !== undefined && candidateReceipt !== null) {
|
|
974
|
-
const root = record.resourceRoot ?? process.cwd();
|
|
975
977
|
const protectedPaths = deps.dispatch.protectedArtifactState?.().artifacts.map((artifact) => artifact.path) ?? [];
|
|
976
978
|
blockedProtected = protectedPathsChangedByCompeteBranch(
|
|
977
979
|
root,
|
|
978
|
-
`clio/compete/${record.group}/${pick}`,
|
|
980
|
+
pickedBranch ?? `clio-coder/compete/${record.group}/${pick}`,
|
|
979
981
|
protectedPaths,
|
|
980
982
|
);
|
|
981
983
|
}
|
|
@@ -985,7 +987,7 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
985
987
|
candidateReceipt !== null &&
|
|
986
988
|
!isPipelineStepFailure(candidateReceipt) &&
|
|
987
989
|
blockedProtected.length === 0;
|
|
988
|
-
if (validWinner && pick !== null && pickedSubject !== undefined) {
|
|
990
|
+
if (validWinner && pick !== null && pickedSubject !== undefined && pickedBranch !== null) {
|
|
989
991
|
draft = {
|
|
990
992
|
group: record.group,
|
|
991
993
|
topology: "compete",
|
|
@@ -997,7 +999,7 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
997
999
|
winner: {
|
|
998
1000
|
index: pick,
|
|
999
1001
|
subject: pickedSubject,
|
|
1000
|
-
branch:
|
|
1002
|
+
branch: pickedBranch,
|
|
1001
1003
|
},
|
|
1002
1004
|
};
|
|
1003
1005
|
} else {
|
|
@@ -1599,9 +1601,12 @@ function runApplyWinner(
|
|
|
1599
1601
|
};
|
|
1600
1602
|
}
|
|
1601
1603
|
const branch = input.branch;
|
|
1602
|
-
const match = /^clio\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch);
|
|
1604
|
+
const match = /^(?:clio-coder|clio)\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch);
|
|
1603
1605
|
if (!match) {
|
|
1604
|
-
return {
|
|
1606
|
+
return {
|
|
1607
|
+
kind: "error",
|
|
1608
|
+
message: "dispatch: apply_winner.branch must be a clio-coder/compete/<group>/<n> branch",
|
|
1609
|
+
};
|
|
1605
1610
|
}
|
|
1606
1611
|
const group = match[1] ?? "";
|
|
1607
1612
|
const winnerIndex = Number.parseInt(match[2] ?? "", 10);
|