@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
package/src/engine/acp/server.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { realpathSync } from "node:fs";
|
|
3
3
|
import { isAbsolute, resolve as resolvePath } from "node:path";
|
|
4
4
|
import {
|
|
5
|
+
type AccountabilityEvidenceReadyPayload,
|
|
5
6
|
BusChannels,
|
|
6
7
|
type DispatchCompletedPayload,
|
|
7
8
|
type DispatchEnqueuedPayload,
|
|
@@ -77,10 +78,10 @@ export interface AcpSafeSettingsSnapshot extends AcpRoutingSnapshot {
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
export type AcpSafeSettingsPatch = Partial<{
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
autonomy: AutonomyLevel;
|
|
81
|
+
"chat.target": string | null;
|
|
82
|
+
"chat.model": string | null;
|
|
83
|
+
"chat.thinkingLevel": AcpThinkingLevel;
|
|
84
|
+
"safety.autonomy": AutonomyLevel;
|
|
84
85
|
}>;
|
|
85
86
|
|
|
86
87
|
export interface AcpSettingsControl {
|
|
@@ -209,6 +210,8 @@ interface AcpServerUsage {
|
|
|
209
210
|
cacheRead: number;
|
|
210
211
|
cacheWrite: number;
|
|
211
212
|
reasoning: number;
|
|
213
|
+
totalTokens: number;
|
|
214
|
+
costUsd: number;
|
|
212
215
|
}
|
|
213
216
|
|
|
214
217
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
@@ -333,7 +336,10 @@ const ACP_MAX_REPLAY_TOOL_CALLS = 8192;
|
|
|
333
336
|
* the list is the allowlist, and a client's requested kinds are intersected
|
|
334
337
|
* with it rather than trusted. `safety.loopBlocked` was the first member; the
|
|
335
338
|
* dispatch lifecycle joined it so a client can draw a live fleet board from
|
|
336
|
-
* reported facts instead of inferring one from tool titles or timing
|
|
339
|
+
* reported facts instead of inferring one from tool titles or timing;
|
|
340
|
+
* `accountability.evidenceReady` follows a run's terminal event once its
|
|
341
|
+
* evidence bundle has landed, so the board can show first-pass success and a
|
|
342
|
+
* finding count without reading Clio's state tree.
|
|
337
343
|
*/
|
|
338
344
|
const ACP_FORWARDABLE_EVENT_KINDS = [
|
|
339
345
|
"safety.loopBlocked",
|
|
@@ -342,6 +348,7 @@ const ACP_FORWARDABLE_EVENT_KINDS = [
|
|
|
342
348
|
"dispatch.progress",
|
|
343
349
|
"dispatch.completed",
|
|
344
350
|
"dispatch.failed",
|
|
351
|
+
"accountability.evidenceReady",
|
|
345
352
|
] as const;
|
|
346
353
|
|
|
347
354
|
type AcpForwardableEventKind = (typeof ACP_FORWARDABLE_EVENT_KINDS)[number];
|
|
@@ -359,6 +366,9 @@ const ACP_MAX_DISPATCH_TASK_PREVIEW_BYTES = 160;
|
|
|
359
366
|
|
|
360
367
|
/** Wire bound for the short identifiers a dispatch event carries. */
|
|
361
368
|
const ACP_MAX_DISPATCH_ID_BYTES = 128;
|
|
369
|
+
/** Evidence tags are a closed vocabulary of short identifiers; anything wider is not a tag. */
|
|
370
|
+
const ACP_MAX_EVIDENCE_TAGS = 32;
|
|
371
|
+
const ACP_MAX_EVIDENCE_TAG_BYTES = 64;
|
|
362
372
|
|
|
363
373
|
/**
|
|
364
374
|
* Progress events forwarded per run before the stream is capped. One run
|
|
@@ -521,8 +531,8 @@ function utf8Bytes(value: string): number {
|
|
|
521
531
|
return Buffer.byteLength(value, "utf8");
|
|
522
532
|
}
|
|
523
533
|
|
|
524
|
-
function emptyUsage(): AcpServerUsage {
|
|
525
|
-
return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, reasoning: 0 };
|
|
534
|
+
export function emptyUsage(): AcpServerUsage {
|
|
535
|
+
return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, reasoning: 0, totalTokens: 0, costUsd: 0 };
|
|
526
536
|
}
|
|
527
537
|
|
|
528
538
|
function createActivePromptState(): ActivePrompt {
|
|
@@ -552,15 +562,33 @@ function finite(value: unknown): number {
|
|
|
552
562
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
553
563
|
}
|
|
554
564
|
|
|
555
|
-
|
|
565
|
+
/** Only field `sumRunUsage` (chat-loop-messages.ts) reads for a dollar figure; matched here so ACP never re-derives cost through a separate path. */
|
|
566
|
+
function costTotal(usage: Record<string, unknown>): number {
|
|
567
|
+
const cost = usage.cost;
|
|
568
|
+
return isRecord(cost) ? finite(cost.total) : 0;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
export function mergeUsage(into: AcpServerUsage, usage: unknown): void {
|
|
556
572
|
if (!isRecord(usage)) return;
|
|
557
|
-
|
|
573
|
+
const input =
|
|
558
574
|
finite(usage.input) + finite(usage.inputTokens) + finite(usage.input_tokens) + finite(usage.prompt_tokens);
|
|
559
|
-
|
|
575
|
+
const output =
|
|
560
576
|
finite(usage.output) + finite(usage.outputTokens) + finite(usage.output_tokens) + finite(usage.completion_tokens);
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
577
|
+
const cacheRead = finite(usage.cacheRead) + finite(usage.cacheReadTokens) + finite(usage.cache_read_tokens);
|
|
578
|
+
const cacheWrite = finite(usage.cacheWrite) + finite(usage.cacheWriteTokens) + finite(usage.cache_write_tokens);
|
|
579
|
+
const reasoning = finite(usage.reasoning) + finite(usage.reasoningTokens) + finite(usage.reasoning_tokens);
|
|
580
|
+
into.input += input;
|
|
581
|
+
into.output += output;
|
|
582
|
+
into.cacheRead += cacheRead;
|
|
583
|
+
into.cacheWrite += cacheWrite;
|
|
584
|
+
into.reasoning += reasoning;
|
|
585
|
+
// Same fallback sumRunUsage uses: prefer the provider's own total, otherwise
|
|
586
|
+
// sum the four merged categories for this message (reasoning excluded,
|
|
587
|
+
// matching sumRunUsage, since a provider that reports reasoning separately
|
|
588
|
+
// still counts it inside output for billing).
|
|
589
|
+
const explicitTotal = finite(usage.totalTokens) + finite(usage.total_tokens);
|
|
590
|
+
into.totalTokens += explicitTotal > 0 ? explicitTotal : input + output + cacheRead + cacheWrite;
|
|
591
|
+
into.costUsd += costTotal(usage);
|
|
564
592
|
}
|
|
565
593
|
|
|
566
594
|
function mergeMessageUsage(into: AcpServerUsage, message: unknown, seen?: WeakSet<object>): void {
|
|
@@ -676,21 +704,26 @@ function eventTextDelta(event: AcpEventRecord): string {
|
|
|
676
704
|
}
|
|
677
705
|
|
|
678
706
|
/**
|
|
679
|
-
* The next unused `clio-tool-<n>`. The counter alone is not enough: an engine
|
|
680
|
-
* that names its own calls `clio-tool-1` would otherwise collide with an alias
|
|
707
|
+
* The next unused `clio-coder-tool-<n>`. The counter alone is not enough: an engine
|
|
708
|
+
* that names its own calls `clio-coder-tool-1` would otherwise collide with an alias
|
|
681
709
|
* this server minted, and two different calls sharing one wire id is the exact
|
|
682
710
|
* failure aliasing exists to prevent.
|
|
683
711
|
*/
|
|
684
712
|
function nextAliasToolCallId(active: ActivePrompt): string {
|
|
685
713
|
for (;;) {
|
|
686
714
|
active.toolCallSequence += 1;
|
|
687
|
-
const alias = `clio-tool-${active.toolCallSequence}`;
|
|
715
|
+
const alias = `clio-coder-tool-${active.toolCallSequence}`;
|
|
688
716
|
if (active.usedWireIds.has(alias)) continue;
|
|
689
717
|
active.usedWireIds.add(alias);
|
|
690
718
|
return alias;
|
|
691
719
|
}
|
|
692
720
|
}
|
|
693
721
|
|
|
722
|
+
function normalizeReleasedAliasToolCallId(engineId: string): string {
|
|
723
|
+
const legacy = /^clio-tool-([1-9]\d*)$/u.exec(engineId);
|
|
724
|
+
return legacy === null ? engineId : `clio-coder-tool-${legacy[1]}`;
|
|
725
|
+
}
|
|
726
|
+
|
|
694
727
|
/** Records `wireId` as the newest wire id this engine id speaks under. */
|
|
695
728
|
function pushWireId(active: ActivePrompt, engineId: string, wireId: string): string {
|
|
696
729
|
const existing = active.toolCallWireIds.get(engineId);
|
|
@@ -705,9 +738,10 @@ function pushWireId(active: ActivePrompt, engineId: string, wireId: string): str
|
|
|
705
738
|
* call travels under a per-prompt alias.
|
|
706
739
|
*/
|
|
707
740
|
function mintWireId(active: ActivePrompt, engineId: string): string {
|
|
708
|
-
const
|
|
709
|
-
|
|
710
|
-
|
|
741
|
+
const candidate = normalizeReleasedAliasToolCallId(engineId);
|
|
742
|
+
const usable = utf8Bytes(candidate) <= ACP_MAX_TOOL_CALL_ID_BYTES && !active.usedWireIds.has(candidate);
|
|
743
|
+
if (usable) active.usedWireIds.add(candidate);
|
|
744
|
+
return pushWireId(active, engineId, usable ? candidate : nextAliasToolCallId(active));
|
|
711
745
|
}
|
|
712
746
|
|
|
713
747
|
/**
|
|
@@ -975,14 +1009,14 @@ function handleChatEvent(
|
|
|
975
1009
|
if (last !== undefined) applyStopReason(active, last);
|
|
976
1010
|
return;
|
|
977
1011
|
}
|
|
978
|
-
// Clio lifecycle events (agent_start, retry_status,
|
|
1012
|
+
// Clio lifecycle events (agent_start, retry_status, clio_coder_plan_update) have
|
|
979
1013
|
// no ACP v1 SessionUpdate equivalent. The prompt turn is bounded by the
|
|
980
1014
|
// session/prompt response, so emitting non-spec `progress` updates would
|
|
981
1015
|
// break strict clients. They are intentionally dropped. The same protocol
|
|
982
1016
|
// gap applies to routing advisories (external settings divergence, active
|
|
983
1017
|
// target removed): ACP v1 has no agent-initiated advisory channel, so the
|
|
984
1018
|
// orchestrator records those as `custom` session-ledger entries
|
|
985
|
-
// (customType "clio.routing-notice") instead of inventing update kinds.
|
|
1019
|
+
// (customType "clio-coder.routing-notice") instead of inventing update kinds.
|
|
986
1020
|
}
|
|
987
1021
|
|
|
988
1022
|
const ACP_MAX_SESSION_ID_BYTES = 128;
|
|
@@ -1259,12 +1293,7 @@ function sessionResultMeta(
|
|
|
1259
1293
|
};
|
|
1260
1294
|
}
|
|
1261
1295
|
|
|
1262
|
-
const ACP_SAFE_SETTINGS_KEYS = [
|
|
1263
|
-
"orchestrator.target",
|
|
1264
|
-
"orchestrator.model",
|
|
1265
|
-
"orchestrator.thinkingLevel",
|
|
1266
|
-
"autonomy",
|
|
1267
|
-
] as const;
|
|
1296
|
+
const ACP_SAFE_SETTINGS_KEYS = ["chat.target", "chat.model", "chat.thinkingLevel", "safety.autonomy"] as const;
|
|
1268
1297
|
const ACP_THINKING_LEVELS = new Set<AcpThinkingLevel>(["off", "minimal", "low", "medium", "high", "xhigh", "max"]);
|
|
1269
1298
|
const ACP_AUTONOMY_LEVELS = new Set<AutonomyLevel>(["read-only", "suggest", "auto-edit", "full-auto"]);
|
|
1270
1299
|
const ACP_MAX_TARGETS = 64;
|
|
@@ -1288,12 +1317,12 @@ function safeSettingsProjection(snapshot: AcpSafeSettingsSnapshot): Record<strin
|
|
|
1288
1317
|
const autonomy = ACP_AUTONOMY_LEVELS.has(snapshot.autonomy) ? snapshot.autonomy : DEFAULT_AUTONOMY_LEVEL;
|
|
1289
1318
|
return {
|
|
1290
1319
|
settings: {
|
|
1291
|
-
|
|
1320
|
+
chat: {
|
|
1292
1321
|
target: safeConfiguredIdentifier(snapshot.target, ACP_MAX_TARGET_ID_BYTES),
|
|
1293
1322
|
model: safeConfiguredIdentifier(snapshot.model, ACP_MAX_MODEL_ID_BYTES),
|
|
1294
1323
|
thinkingLevel,
|
|
1295
1324
|
},
|
|
1296
|
-
autonomy,
|
|
1325
|
+
safety: { autonomy },
|
|
1297
1326
|
},
|
|
1298
1327
|
editable: [...ACP_SAFE_SETTINGS_KEYS],
|
|
1299
1328
|
};
|
|
@@ -1856,6 +1885,29 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
1856
1885
|
});
|
|
1857
1886
|
}),
|
|
1858
1887
|
);
|
|
1888
|
+
unsubscribeEvents.push(
|
|
1889
|
+
bus.on(BusChannels.AccountabilityEvidenceReady, (payload: AccountabilityEvidenceReadyPayload) => {
|
|
1890
|
+
// Arrives after dispatch.completed or dispatch.failed for the same run,
|
|
1891
|
+
// so it is terminal too: nothing about that run follows it. The
|
|
1892
|
+
// bundle's prose (findings, overview) stays behind; only the summary
|
|
1893
|
+
// counters the projection itself carries cross, and the tags are
|
|
1894
|
+
// filtered to bounded identifiers rather than truncated into new ones.
|
|
1895
|
+
const runId = safeStoredIdentifier(payload.runId, ACP_MAX_DISPATCH_ID_BYTES);
|
|
1896
|
+
const evidenceId = safeStoredIdentifier(payload.evidenceId, ACP_MAX_DISPATCH_ID_BYTES);
|
|
1897
|
+
if (runId === null || evidenceId === null) return;
|
|
1898
|
+
const tags = (Array.isArray(payload.tags) ? payload.tags : [])
|
|
1899
|
+
.map((tag) => safeStoredIdentifier(tag, ACP_MAX_EVIDENCE_TAG_BYTES))
|
|
1900
|
+
.filter((tag): tag is string => tag !== null)
|
|
1901
|
+
.slice(0, ACP_MAX_EVIDENCE_TAGS);
|
|
1902
|
+
forwardEvent("accountability.evidenceReady", null, true, {
|
|
1903
|
+
runId,
|
|
1904
|
+
evidenceId,
|
|
1905
|
+
firstPassSuccess: payload.firstPassSuccess === true,
|
|
1906
|
+
findingCount: safeCount(payload.findingCount),
|
|
1907
|
+
tags,
|
|
1908
|
+
});
|
|
1909
|
+
}),
|
|
1910
|
+
);
|
|
1859
1911
|
}
|
|
1860
1912
|
const unsubscribeEventStream = (): void => {
|
|
1861
1913
|
for (const unsubscribe of unsubscribeEvents) unsubscribe();
|
|
@@ -2318,7 +2370,7 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2318
2370
|
throw new AcpRequestError(-32602, "patch contains an unknown setting", { code: "invalid_params" });
|
|
2319
2371
|
}
|
|
2320
2372
|
switch (key) {
|
|
2321
|
-
case "
|
|
2373
|
+
case "chat.target": {
|
|
2322
2374
|
if (value === null) {
|
|
2323
2375
|
patch[key] = null;
|
|
2324
2376
|
break;
|
|
@@ -2333,16 +2385,16 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2333
2385
|
patch[key] = target;
|
|
2334
2386
|
break;
|
|
2335
2387
|
}
|
|
2336
|
-
case "
|
|
2388
|
+
case "chat.model":
|
|
2337
2389
|
patch[key] = value === null ? null : requireBoundedClientString(value, key, ACP_MAX_MODEL_ID_BYTES);
|
|
2338
2390
|
break;
|
|
2339
|
-
case "
|
|
2391
|
+
case "chat.thinkingLevel":
|
|
2340
2392
|
if (typeof value !== "string" || !ACP_THINKING_LEVELS.has(value as AcpThinkingLevel)) {
|
|
2341
2393
|
throw new AcpRequestError(-32602, "invalid thinking level", { code: "invalid_params" });
|
|
2342
2394
|
}
|
|
2343
2395
|
patch[key] = value as AcpThinkingLevel;
|
|
2344
2396
|
break;
|
|
2345
|
-
case "autonomy":
|
|
2397
|
+
case "safety.autonomy":
|
|
2346
2398
|
if (typeof value !== "string" || !ACP_AUTONOMY_LEVELS.has(value as AutonomyLevel)) {
|
|
2347
2399
|
throw new AcpRequestError(-32602, "invalid autonomy level", { code: "invalid_params" });
|
|
2348
2400
|
}
|
|
@@ -2351,8 +2403,8 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2351
2403
|
}
|
|
2352
2404
|
}
|
|
2353
2405
|
const current = options.settings.read();
|
|
2354
|
-
const nextTarget = patch["
|
|
2355
|
-
const nextModel = patch["
|
|
2406
|
+
const nextTarget = patch["chat.target"] === undefined ? current.target : patch["chat.target"];
|
|
2407
|
+
const nextModel = patch["chat.model"] === undefined ? current.model : patch["chat.model"];
|
|
2356
2408
|
if (nextTarget === null && nextModel !== null) {
|
|
2357
2409
|
throw new AcpRequestError(-32602, "model requires a configured target", { code: "invalid_params" });
|
|
2358
2410
|
}
|
|
@@ -2606,6 +2658,8 @@ function promptResponse(stopReason: string, active: ActivePrompt): AcpPromptResp
|
|
|
2606
2658
|
cacheRead: active.usage.cacheRead,
|
|
2607
2659
|
cacheWrite: active.usage.cacheWrite,
|
|
2608
2660
|
reasoning: active.usage.reasoning,
|
|
2661
|
+
totalTokens: active.usage.totalTokens,
|
|
2662
|
+
costUsd: active.usage.costUsd,
|
|
2609
2663
|
},
|
|
2610
2664
|
},
|
|
2611
2665
|
};
|
|
@@ -27,7 +27,7 @@ interface MediatorInput {
|
|
|
27
27
|
toolGovernance: DelegationToolGovernance;
|
|
28
28
|
/**
|
|
29
29
|
* Session autonomy level (sd-01 §2.5). Applied after the safety net under
|
|
30
|
-
* clio-policy governance; `ask` dispositions resolve as non-stall denials
|
|
30
|
+
* clio-coder-policy governance; `ask` dispositions resolve as non-stall denials
|
|
31
31
|
* because a delegation has no operator to answer a prompt.
|
|
32
32
|
*/
|
|
33
33
|
autonomy?: AutonomyLevel;
|
|
@@ -579,7 +579,7 @@ export class AcpToolMediator {
|
|
|
579
579
|
let safetyDecision: SafetyDecision | undefined;
|
|
580
580
|
|
|
581
581
|
if (mapped.validationError !== undefined) {
|
|
582
|
-
if (this.input.toolGovernance === "clio-policy") {
|
|
582
|
+
if (this.input.toolGovernance === "clio-coder-policy") {
|
|
583
583
|
const invalidSafetyDecisions = mapped.evaluations.map((evaluation) =>
|
|
584
584
|
this.input.safety.evaluate({ tool: evaluation.tool, args: evaluation.args }),
|
|
585
585
|
);
|
package/src/engine/acp/types.ts
CHANGED
|
@@ -34,7 +34,7 @@ export const ACP_MAX_CHUNK_BYTES = 16384;
|
|
|
34
34
|
* Upper bound on a `toolCallId` this server puts on the wire, in UTF-8 bytes
|
|
35
35
|
* (CONTRACT C001 §3). Identity is one call per id in both directions: an engine
|
|
36
36
|
* id over this bound, missing, or already claimed by another call this turn
|
|
37
|
-
* travels under a `clio-tool-<n>` alias, and an engine id starting a second call
|
|
37
|
+
* travels under a `clio-coder-tool-<n>` alias, and an engine id starting a second call
|
|
38
38
|
* mints a fresh alias rather than reusing the first call's wire id. A permission
|
|
39
39
|
* request binds only to an id the client already received a `tool_call` for and
|
|
40
40
|
* has not yet seen finish; nothing is minted on that path.
|
package/src/engine/alcf-oauth.ts
CHANGED
|
@@ -40,7 +40,7 @@ function randomState(): string {
|
|
|
40
40
|
return base64Url(bytes);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
function buildAuthorizeUrl(params: { challenge: string; state: string }): string {
|
|
44
44
|
const query = new URLSearchParams({
|
|
45
45
|
client_id: AUTH_CLIENT_ID,
|
|
46
46
|
response_type: "code",
|
|
@@ -55,7 +55,7 @@ export function buildAuthorizeUrl(params: { challenge: string; state: string }):
|
|
|
55
55
|
return `${AUTHORIZE_URL}?${query.toString()}`;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
function parseAuthorizationInput(input: string): string {
|
|
59
59
|
const value = input.trim();
|
|
60
60
|
if (!value) return "";
|
|
61
61
|
try {
|
|
@@ -89,7 +89,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
89
89
|
return typeof value === "object" && value !== null;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGrant {
|
|
93
93
|
const grants: GlobusTokenGrant[] = [payload, ...(Array.isArray(payload.other_tokens) ? payload.other_tokens : [])];
|
|
94
94
|
const byResourceServer = grants.find((grant) => grant.resource_server === GATEWAY_CLIENT_ID);
|
|
95
95
|
if (byResourceServer) return byResourceServer;
|
|
@@ -103,7 +103,7 @@ export function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGra
|
|
|
103
103
|
);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
function grantToCredentials(grant: GlobusTokenGrant, previousRefresh?: string): OAuthCredentials {
|
|
107
107
|
const access = grant.access_token;
|
|
108
108
|
if (typeof access !== "string" || access.length === 0) {
|
|
109
109
|
throw new Error("Globus token response is missing an access token for the ALCF gateway.");
|
|
@@ -172,7 +172,7 @@ async function refreshGatewayToken(refreshToken: string, signal: AbortSignal): P
|
|
|
172
172
|
return grantToCredentials(selectGatewayGrant(payload), refreshToken);
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
async function loginAlcf(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials> {
|
|
176
176
|
const { verifier, challenge } = await generatePkce();
|
|
177
177
|
const url = buildAuthorizeUrl({ challenge, state: randomState() });
|
|
178
178
|
callbacks.onAuth({
|
|
@@ -63,7 +63,7 @@ export function antigravitySubprocessConfigForAutonomy(
|
|
|
63
63
|
return { extraArgs: [], dangerousBypass: false, externalMode: "agy-settings-default" };
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
function buildAntigravityPrompt(input: WorkerRunInput): string {
|
|
67
67
|
const parts: string[] = [];
|
|
68
68
|
const systemPrompt = input.systemPrompt.trim();
|
|
69
69
|
if (systemPrompt.length > 0) parts.push(systemPrompt);
|
|
@@ -75,7 +75,7 @@ export function buildAntigravityPrompt(input: WorkerRunInput): string {
|
|
|
75
75
|
return parts.join("\n\n");
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
function buildAgyArgs(input: WorkerRunInput): string[] {
|
|
79
79
|
assertToolProfileEnforceable(input.toolProfile, "antigravity-code");
|
|
80
80
|
const permission = antigravitySubprocessConfigForAutonomy(input.autonomy);
|
|
81
81
|
const args = ["--print", ...permission.extraArgs];
|
|
@@ -78,7 +78,7 @@ function unregisterEngineApiProviders(sourceId: string): void {
|
|
|
78
78
|
compatUniverse?.unregisterApiProviders(sourceId);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
function getEngineApiProvider(api: Api): EngineRegisteredApiProvider | undefined {
|
|
82
82
|
return registry.get(api)?.provider;
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -5,8 +5,6 @@ import {
|
|
|
5
5
|
type ResidencyAdapter,
|
|
6
6
|
ResidencyPreconditionError,
|
|
7
7
|
reconcileResidency,
|
|
8
|
-
resetResidencyState,
|
|
9
|
-
residencyManaged,
|
|
10
8
|
residentTagProtected,
|
|
11
9
|
} from "./residency.js";
|
|
12
10
|
|
|
@@ -28,8 +26,8 @@ export interface LlamaCppResidencyInput {
|
|
|
28
26
|
runtimeId: string;
|
|
29
27
|
keepModelId: string;
|
|
30
28
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
29
|
+
* Target lifecycle verdict from the caller (residencyManagedFor). Defaults
|
|
30
|
+
* to managed for direct adapter callers.
|
|
33
31
|
*/
|
|
34
32
|
managed?: boolean;
|
|
35
33
|
fetchImpl?: typeof fetch;
|
|
@@ -72,11 +70,6 @@ interface LlamaCppRouterProps {
|
|
|
72
70
|
maxInstances?: number;
|
|
73
71
|
}
|
|
74
72
|
|
|
75
|
-
/** Test-only: clear the reconciler's TTL cache and Clio-loaded registry. */
|
|
76
|
-
export function resetLlamaCppResidencyState(): void {
|
|
77
|
-
resetResidencyState();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
73
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
81
74
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
82
75
|
}
|
|
@@ -107,19 +100,7 @@ function residentModel(model: LlamaCppRouterModel): boolean {
|
|
|
107
100
|
return isResidentState(model.state);
|
|
108
101
|
}
|
|
109
102
|
|
|
110
|
-
|
|
111
|
-
export function parseLlamaCppResidentModels(payload: unknown): LlamaCppResidentModel[] {
|
|
112
|
-
return parseRouterModels(payload)
|
|
113
|
-
.filter(residentModel)
|
|
114
|
-
.map((entry) => ({ id: entry.id, tags: entry.tags }));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** Extract resident (loaded or loading) model ids from a /v1/models payload. */
|
|
118
|
-
export function parseLlamaCppResident(payload: unknown): string[] {
|
|
119
|
-
return parseLlamaCppResidentModels(payload).map((entry) => entry.id);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function parseLlamaCppRouterProps(payload: unknown): LlamaCppRouterProps {
|
|
103
|
+
function parseLlamaCppRouterProps(payload: unknown): LlamaCppRouterProps {
|
|
123
104
|
if (!isRecord(payload)) return {};
|
|
124
105
|
const maxInstances = payload.max_instances;
|
|
125
106
|
return typeof maxInstances === "number" && Number.isFinite(maxInstances) && maxInstances > 0
|
|
@@ -302,7 +283,7 @@ export async function ensureLlamaCppResidency(input: LlamaCppResidencyInput): Pr
|
|
|
302
283
|
targetId: input.targetId,
|
|
303
284
|
runtimeId: input.runtimeId,
|
|
304
285
|
keepModelId: input.keepModelId,
|
|
305
|
-
managed: input.managed ??
|
|
286
|
+
managed: input.managed ?? true,
|
|
306
287
|
strategy: "router",
|
|
307
288
|
listResident: async () => {
|
|
308
289
|
const models = await fetchRouterModels(input, fetchImpl);
|
|
@@ -16,10 +16,10 @@ import { emitResidencyMutation, emitResidencyNotice, reconcileResidency, residen
|
|
|
16
16
|
import { withResidencyLock } from "./residency-lock.js";
|
|
17
17
|
|
|
18
18
|
interface LmStudioModelMetadata {
|
|
19
|
-
|
|
19
|
+
clioCoder?: {
|
|
20
20
|
targetId: string;
|
|
21
21
|
runtimeId: string;
|
|
22
|
-
lifecycle?: "user-managed" | "clio-managed";
|
|
22
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
23
23
|
lmstudio?: TargetDescriptor["lmstudio"];
|
|
24
24
|
lmstudioDefaultModel?: string;
|
|
25
25
|
};
|
|
@@ -42,8 +42,8 @@ function responseInstanceId(data: unknown): string | undefined {
|
|
|
42
42
|
return typeof id === "string" && id.trim().length > 0 ? id.trim() : undefined;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
function metadata(model: Model<Api>): NonNullable<LmStudioModelMetadata["
|
|
46
|
-
return (model as Model<Api> & LmStudioModelMetadata).
|
|
45
|
+
function metadata(model: Model<Api>): NonNullable<LmStudioModelMetadata["clioCoder"]> | undefined {
|
|
46
|
+
return (model as Model<Api> & LmStudioModelMetadata).clioCoder;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
function targetForModel(model: Model<"openai-completions">): TargetDescriptor | null {
|
|
@@ -145,11 +145,6 @@ function emitResidencyNoticeOnce(key: string, notice: Parameters<typeof emitResi
|
|
|
145
145
|
emitResidencyNotice(notice);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
/** Test seam: forget which residency facts were announced. */
|
|
149
|
-
export function resetAnnouncedResidencyFacts(): void {
|
|
150
|
-
announcedResidencyFacts.clear();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
148
|
export async function ensureLmStudioResidency(
|
|
154
149
|
model: Model<"openai-completions">,
|
|
155
150
|
options: { apiKey?: string; signal?: AbortSignal } = {},
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
} from "../../domains/providers/index.js";
|
|
33
33
|
import type { LocalModelQuirks, SamplingProfile } from "../../domains/providers/types/local-model-quirks.js";
|
|
34
34
|
import { calculateEngineCost } from "../ai.js";
|
|
35
|
-
import { createGemmaChannelFilter } from "../gemma-channel-filter.js";
|
|
35
|
+
import { createGemmaChannelFilter, usesGemmaChannelMarkers } from "../gemma-channel-filter.js";
|
|
36
36
|
import { createSentinelStripper } from "../strip-tokenizer-sentinels.js";
|
|
37
37
|
import { remainingContextMaxTokens } from "./output-budget.js";
|
|
38
38
|
import { type ResidencyAdapter, reconcileResidency, residencyManagedFor } from "./residency.js";
|
|
@@ -43,11 +43,11 @@ import type { EngineApiProvider } from "./types.js";
|
|
|
43
43
|
const REASONING_CHARS_PER_TOKEN = 4;
|
|
44
44
|
|
|
45
45
|
interface ClioRuntimeMetadata {
|
|
46
|
-
|
|
46
|
+
clioCoder?: {
|
|
47
47
|
targetId: string;
|
|
48
48
|
runtimeId: string;
|
|
49
49
|
/** Present only when settings set the target lifecycle explicitly. */
|
|
50
|
-
lifecycle?: "user-managed" | "clio-managed";
|
|
50
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
51
51
|
gateway?: boolean;
|
|
52
52
|
family?: string;
|
|
53
53
|
quirks?: LocalModelQuirks;
|
|
@@ -55,11 +55,11 @@ interface ClioRuntimeMetadata {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
function clioQuirks(model: Model<"ollama-native">): LocalModelQuirks | undefined {
|
|
58
|
-
return (model as Model<"ollama-native"> & ClioRuntimeMetadata).
|
|
58
|
+
return (model as Model<"ollama-native"> & ClioRuntimeMetadata).clioCoder?.quirks;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
function ollamaTargetId(model: Model<"ollama-native">): string {
|
|
62
|
-
return (model as Model<"ollama-native"> & ClioRuntimeMetadata).
|
|
62
|
+
return (model as Model<"ollama-native"> & ClioRuntimeMetadata).clioCoder?.targetId ?? model.provider;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
/**
|
|
@@ -74,7 +74,7 @@ function ollamaTargetId(model: Model<"ollama-native">): string {
|
|
|
74
74
|
async function reconcileOllamaResidency(model: Model<"ollama-native">, headers: Record<string, string>): Promise<void> {
|
|
75
75
|
const baseUrl = model.baseUrl;
|
|
76
76
|
if (!baseUrl) return;
|
|
77
|
-
const metadata = (model as Model<"ollama-native"> & ClioRuntimeMetadata).
|
|
77
|
+
const metadata = (model as Model<"ollama-native"> & ClioRuntimeMetadata).clioCoder;
|
|
78
78
|
const adapter: ResidencyAdapter = {
|
|
79
79
|
targetKey: residencyTargetKey("ollama-native", baseUrl),
|
|
80
80
|
targetId: ollamaTargetId(model),
|
|
@@ -159,7 +159,7 @@ function userToOllama(content: string | (TextContent | ImageContent)[]): OllamaM
|
|
|
159
159
|
return out;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
function assistantToOllama(content: AssistantMessage["content"]): OllamaMessage {
|
|
163
163
|
const textParts: string[] = [];
|
|
164
164
|
const toolCalls: OllamaToolCall[] = [];
|
|
165
165
|
const thinkingParts: string[] = [];
|
|
@@ -270,7 +270,7 @@ function ollamaEvictClient(baseUrl: string, headers?: Record<string, string>): O
|
|
|
270
270
|
* Map an Ollama `/api/ps` response to the runtime-agnostic resident shape,
|
|
271
271
|
* preserving the GPU/total footprint when the server reports it.
|
|
272
272
|
*/
|
|
273
|
-
|
|
273
|
+
async function listResidentOllamaModels(client: OllamaEvictClient): Promise<ResidentModelInfo[]> {
|
|
274
274
|
const resident = await client.ps();
|
|
275
275
|
return resident.models.map((entry) => {
|
|
276
276
|
const primary = entry.model || entry.name;
|
|
@@ -384,7 +384,7 @@ function runStream(
|
|
|
384
384
|
let doneReason: string | undefined;
|
|
385
385
|
const sentinelStripper = createSentinelStripper();
|
|
386
386
|
const resolved = resolveModelRuntimeCapabilitiesForModel(model, thinkingLevel);
|
|
387
|
-
const channelFilter = resolved.
|
|
387
|
+
const channelFilter = usesGemmaChannelMarkers(resolved.modelId) ? createGemmaChannelFilter() : null;
|
|
388
388
|
const closeActiveThinking = () => {
|
|
389
389
|
if (!activeThinking) return;
|
|
390
390
|
stream.push({
|