@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
|
@@ -11,15 +11,55 @@ export interface CommandFlagSpec {
|
|
|
11
11
|
values?: ReadonlyArray<string>;
|
|
12
12
|
/** Usage placeholder, e.g. "profile" renders as `[--agent-profile <profile>]`. */
|
|
13
13
|
valueName?: string;
|
|
14
|
+
/** Runtime completion source attached by name; providers are wired separately. */
|
|
15
|
+
completionSlot?: CompletionSlotName;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export interface CommandPositionalSpec {
|
|
17
19
|
name: string; // e.g. "agent", "task"
|
|
18
20
|
required: boolean;
|
|
21
|
+
/** Closed values in semantic/manifest order. */
|
|
22
|
+
values?: ReadonlyArray<string>;
|
|
19
23
|
/** Greedy tail: consumes the rest of the line verbatim (task text, compact instructions). */
|
|
20
24
|
rest?: boolean;
|
|
25
|
+
/** Runtime completion source attached by name; providers are wired separately. */
|
|
26
|
+
completionSlot?: CompletionSlotName;
|
|
21
27
|
}
|
|
22
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Stable grammar/provider seam. Slice 10 names every dynamic noun; slice 11
|
|
31
|
+
* supplies read-only implementations for these slots.
|
|
32
|
+
*/
|
|
33
|
+
export const COMPLETION_SLOT_NAMES = [
|
|
34
|
+
"agents",
|
|
35
|
+
"agent-profiles",
|
|
36
|
+
"worker-runtimes",
|
|
37
|
+
"targets",
|
|
38
|
+
"models",
|
|
39
|
+
"capabilities",
|
|
40
|
+
"external-agents",
|
|
41
|
+
"rosters",
|
|
42
|
+
"shareable-runs",
|
|
43
|
+
"skills",
|
|
44
|
+
"fleet-contracts",
|
|
45
|
+
"fleet-vars",
|
|
46
|
+
"fleet-var-values",
|
|
47
|
+
"tasks",
|
|
48
|
+
"context-refs",
|
|
49
|
+
"receipts",
|
|
50
|
+
"pane-runs-agents",
|
|
51
|
+
"pane-presets",
|
|
52
|
+
"pane-targets",
|
|
53
|
+
"library-tabs",
|
|
54
|
+
"thinking-levels",
|
|
55
|
+
"settings-areas",
|
|
56
|
+
"settings-groups",
|
|
57
|
+
"help-queries",
|
|
58
|
+
"paths",
|
|
59
|
+
] as const;
|
|
60
|
+
|
|
61
|
+
export type CompletionSlotName = (typeof COMPLETION_SLOT_NAMES)[number];
|
|
62
|
+
|
|
23
63
|
export interface CommandArgsSpec {
|
|
24
64
|
flags?: ReadonlyArray<CommandFlagSpec>;
|
|
25
65
|
positionals?: ReadonlyArray<CommandPositionalSpec>;
|
|
@@ -299,16 +339,86 @@ export function parseArgs(spec: CommandArgsSpec, argsLine: string): ParsedArgs {
|
|
|
299
339
|
}
|
|
300
340
|
|
|
301
341
|
export interface ArgCompletion {
|
|
302
|
-
/**
|
|
342
|
+
/** Canonical replacement for the token under the cursor. */
|
|
303
343
|
token: string;
|
|
304
344
|
/** Grammar hint rendered beside the suggestion, e.g. a flag's value placeholder. */
|
|
305
345
|
hint?: string;
|
|
346
|
+
completionSlot?: CompletionSlotName;
|
|
347
|
+
description?: string;
|
|
348
|
+
disabledReason?: string;
|
|
349
|
+
/** A completion with another grammatical slot receives a space on Tab. */
|
|
350
|
+
hasNextSlot: boolean;
|
|
306
351
|
}
|
|
307
352
|
|
|
308
353
|
export interface ArgCompletionResult {
|
|
309
354
|
completions: ArgCompletion[];
|
|
310
|
-
/**
|
|
355
|
+
/** Half-open replacement range in argumentText. Quotes are outside the range. */
|
|
311
356
|
tokenStart: number;
|
|
357
|
+
tokenEnd: number;
|
|
358
|
+
quote?: '"' | "'";
|
|
359
|
+
/** Structured second-level list, rather than a flat top-level command row. */
|
|
360
|
+
submenu?: { parent: string; canGoBack: true };
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
interface CompletionToken {
|
|
364
|
+
value: string;
|
|
365
|
+
start: number;
|
|
366
|
+
end: number;
|
|
367
|
+
contentStart: number;
|
|
368
|
+
contentEnd: number;
|
|
369
|
+
quote?: '"' | "'";
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/** Tokenize without losing source ranges; unterminated quotes intentionally run to EOL. */
|
|
373
|
+
function completionTokens(text: string): CompletionToken[] {
|
|
374
|
+
const tokens: CompletionToken[] = [];
|
|
375
|
+
let index = 0;
|
|
376
|
+
while (index < text.length) {
|
|
377
|
+
while (index < text.length && /\s/.test(text[index] ?? "")) index++;
|
|
378
|
+
if (index >= text.length) break;
|
|
379
|
+
const start = index;
|
|
380
|
+
let quote: '"' | "'" | undefined;
|
|
381
|
+
if (text[index] === '"' || text[index] === "'") {
|
|
382
|
+
quote = text[index] as '"' | "'";
|
|
383
|
+
index++;
|
|
384
|
+
}
|
|
385
|
+
const contentStart = index;
|
|
386
|
+
let value = "";
|
|
387
|
+
while (index < text.length) {
|
|
388
|
+
const char = text[index] ?? "";
|
|
389
|
+
if (quote) {
|
|
390
|
+
if (char === quote) break;
|
|
391
|
+
} else if (/\s/.test(char)) {
|
|
392
|
+
break;
|
|
393
|
+
} else if (char === '"' || char === "'") {
|
|
394
|
+
// Quotes embedded in a token group their contents but are not values.
|
|
395
|
+
const embedded = char;
|
|
396
|
+
index++;
|
|
397
|
+
while (index < text.length && text[index] !== embedded) value += text[index++] ?? "";
|
|
398
|
+
if (text[index] === embedded) index++;
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
value += char;
|
|
402
|
+
index++;
|
|
403
|
+
}
|
|
404
|
+
const contentEnd = index;
|
|
405
|
+
if (quote && text[index] === quote) index++;
|
|
406
|
+
tokens.push({ value, start, end: index, contentStart, contentEnd, ...(quote ? { quote } : {}) });
|
|
407
|
+
}
|
|
408
|
+
return tokens;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
function tokenAtCursor(text: string, cursor: number): { current: CompletionToken; completed: CompletionToken[] } {
|
|
412
|
+
const safeCursor = Math.max(0, Math.min(cursor, text.length));
|
|
413
|
+
const tokens = completionTokens(text);
|
|
414
|
+
const containing = tokens.find((token) => safeCursor >= token.start && safeCursor <= token.end);
|
|
415
|
+
if (containing) {
|
|
416
|
+
return { current: containing, completed: tokens.filter((token) => token.end <= containing.start) };
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
current: { value: "", start: safeCursor, end: safeCursor, contentStart: safeCursor, contentEnd: safeCursor },
|
|
420
|
+
completed: tokens.filter((token) => token.end <= safeCursor),
|
|
421
|
+
};
|
|
312
422
|
}
|
|
313
423
|
|
|
314
424
|
/**
|
|
@@ -352,10 +462,14 @@ function walkCompletedTokens(spec: CommandArgsSpec, tokens: ReadonlyArray<string
|
|
|
352
462
|
|
|
353
463
|
function flagCompletions(spec: CommandArgsSpec, walk: CompletionWalk, current: string): ArgCompletion[] {
|
|
354
464
|
const available = (spec.flags ?? []).filter((flag) => flag.repeatable === true || !walk.usedFlags.has(flag.name));
|
|
355
|
-
const
|
|
465
|
+
const lower = current.toLowerCase();
|
|
466
|
+
const rows = available
|
|
467
|
+
.filter((flag) => flag.name.toLowerCase().startsWith(lower))
|
|
468
|
+
.map((flag) => ({ flag, name: flag.name }));
|
|
356
469
|
return rows.map(({ flag, name }) => ({
|
|
357
470
|
token: name,
|
|
358
471
|
...(flag.takesValue ? { hint: `<${getFlagValuePlaceholder(flag)}>` } : {}),
|
|
472
|
+
hasNextSlot: flag.takesValue === true,
|
|
359
473
|
}));
|
|
360
474
|
}
|
|
361
475
|
|
|
@@ -367,27 +481,38 @@ function flagCompletions(spec: CommandArgsSpec, walk: CompletionWalk, current: s
|
|
|
367
481
|
* null closes the suggestion list. The walk mirrors parseArgs so a completion
|
|
368
482
|
* is always a token the parser would accept.
|
|
369
483
|
*/
|
|
370
|
-
export function completeArgs(
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
484
|
+
export function completeArgs(
|
|
485
|
+
spec: CommandArgsSpec,
|
|
486
|
+
argumentText: string,
|
|
487
|
+
cursor = argumentText.length,
|
|
488
|
+
): ArgCompletionResult | null {
|
|
489
|
+
const { current: currentToken, completed: completedTokens } = tokenAtCursor(argumentText, cursor);
|
|
490
|
+
const current = currentToken.value.slice(0, Math.max(0, cursor - currentToken.contentStart));
|
|
491
|
+
const completed = completedTokens.map((token) => token.value);
|
|
492
|
+
const range = {
|
|
493
|
+
tokenStart: currentToken.contentStart,
|
|
494
|
+
tokenEnd: currentToken.contentEnd,
|
|
495
|
+
...(currentToken.quote ? { quote: currentToken.quote } : {}),
|
|
496
|
+
};
|
|
378
497
|
|
|
379
498
|
const completions: ArgCompletion[] = [];
|
|
380
499
|
let active = spec;
|
|
381
500
|
let walkTokens = completed;
|
|
501
|
+
let submenu: ArgCompletionResult["submenu"];
|
|
382
502
|
|
|
383
503
|
if (spec.subcommands) {
|
|
384
504
|
const first = completed[0];
|
|
385
505
|
if (first === undefined) {
|
|
386
506
|
for (const [name, subSpec] of Object.entries(spec.subcommands)) {
|
|
387
|
-
if (!name.startsWith(current)) continue;
|
|
507
|
+
if (!name.toLowerCase().startsWith(current.toLowerCase())) continue;
|
|
388
508
|
const hint = renderArgsSpec(subSpec);
|
|
389
|
-
completions.push({
|
|
509
|
+
completions.push({
|
|
510
|
+
token: name,
|
|
511
|
+
...(hint.length > 0 ? { hint } : {}),
|
|
512
|
+
hasNextSlot: hint.length > 0,
|
|
513
|
+
});
|
|
390
514
|
}
|
|
515
|
+
submenu = { parent: "", canGoBack: true };
|
|
391
516
|
} else if (spec.subcommands[first]) {
|
|
392
517
|
active = spec.subcommands[first];
|
|
393
518
|
walkTokens = completed.slice(1);
|
|
@@ -397,25 +522,43 @@ export function completeArgs(spec: CommandArgsSpec, argumentText: string): ArgCo
|
|
|
397
522
|
const walk = walkCompletedTokens(active, walkTokens);
|
|
398
523
|
|
|
399
524
|
if (walk.restBegun) {
|
|
400
|
-
return completions.length > 0 ? { completions,
|
|
525
|
+
return completions.length > 0 ? { completions, ...range, ...(submenu ? { submenu } : {}) } : null;
|
|
401
526
|
}
|
|
402
527
|
|
|
403
528
|
if (walk.awaitingValue) {
|
|
404
529
|
for (const value of walk.awaitingValue.values ?? []) {
|
|
405
|
-
if (value.startsWith(current)) completions.push({ token: value });
|
|
530
|
+
if (value.toLowerCase().startsWith(current.toLowerCase())) completions.push({ token: value, hasNextSlot: true });
|
|
406
531
|
}
|
|
407
|
-
|
|
532
|
+
if (walk.awaitingValue.completionSlot) {
|
|
533
|
+
completions.push({ token: current, completionSlot: walk.awaitingValue.completionSlot, hasNextSlot: true });
|
|
534
|
+
}
|
|
535
|
+
return completions.length > 0 ? { completions, ...range, ...(submenu ? { submenu } : {}) } : null;
|
|
408
536
|
}
|
|
409
537
|
|
|
410
538
|
const atRest = (active.positionals ?? [])[walk.positionalIndex]?.rest === true;
|
|
539
|
+
const positional = (active.positionals ?? [])[walk.positionalIndex];
|
|
540
|
+
for (const value of positional?.values ?? []) {
|
|
541
|
+
if (value.toLowerCase().startsWith(current.toLowerCase())) {
|
|
542
|
+
completions.push({ token: value, hasNextSlot: walk.positionalIndex + 1 < (active.positionals?.length ?? 0) });
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (positional?.completionSlot && !current.startsWith("-")) {
|
|
546
|
+
completions.push({
|
|
547
|
+
token: current,
|
|
548
|
+
completionSlot: positional.completionSlot,
|
|
549
|
+
hasNextSlot: walk.positionalIndex + 1 < (active.positionals?.length ?? 0),
|
|
550
|
+
});
|
|
551
|
+
}
|
|
411
552
|
const flagsParseable = !atRest || active.parseFlagsBeforeRest === true;
|
|
412
553
|
if (flagsParseable && (current.length === 0 || current.startsWith("-"))) {
|
|
413
554
|
completions.push(...flagCompletions(active, walk, current));
|
|
414
555
|
}
|
|
415
556
|
|
|
416
|
-
return completions.length > 0 ? { completions,
|
|
557
|
+
return completions.length > 0 ? { completions, ...range, ...(submenu ? { submenu } : {}) } : null;
|
|
417
558
|
}
|
|
418
559
|
|
|
560
|
+
export type CompletionAcceptance = "accept" | "accept-remainder" | "submit" | "close" | "none" | "disabled";
|
|
561
|
+
|
|
419
562
|
export function matchFromSpec(
|
|
420
563
|
entry: {
|
|
421
564
|
name: string;
|
|
@@ -92,8 +92,8 @@ export function createStatusController(deps: StatusControllerDeps): StatusContro
|
|
|
92
92
|
const currentTarget = (): { targetId: string; modelId: string } => {
|
|
93
93
|
const settings = deps.getSettings?.();
|
|
94
94
|
return {
|
|
95
|
-
targetId: settings?.
|
|
96
|
-
modelId: settings?.
|
|
95
|
+
targetId: settings?.chat?.target ?? "",
|
|
96
|
+
modelId: settings?.chat?.model ?? "",
|
|
97
97
|
};
|
|
98
98
|
};
|
|
99
99
|
|
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
import type { SmoothStreaming } from "../core/defaults.js";
|
|
2
|
-
|
|
3
|
-
export const SMOOTH_STREAM_ENV = "CLIO_CODER_SMOOTH_STREAM";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* One-process override precedence: a valid environment value wins, while an
|
|
7
|
-
* invalid value can never accidentally enable animation. `0` is the immediate
|
|
8
|
-
* escape hatch; `1` is accepted as the explicit `on` spelling.
|
|
9
|
-
*/
|
|
10
|
-
export function resolveSmoothStreamingMode(
|
|
11
|
-
configured: SmoothStreaming,
|
|
12
|
-
env: NodeJS.ProcessEnv = process.env,
|
|
13
|
-
): SmoothStreaming {
|
|
14
|
-
const raw = env[SMOOTH_STREAM_ENV]?.trim().toLowerCase();
|
|
15
|
-
if (!raw) return configured;
|
|
16
|
-
if (raw === "0" || raw === "off" || raw === "false") return "off";
|
|
17
|
-
if (raw === "auto") return "auto";
|
|
18
|
-
if (raw === "1" || raw === "on" || raw === "true") return "on";
|
|
19
|
-
return "off";
|
|
20
|
-
}
|
|
21
|
-
|
|
22
1
|
export interface AutoPacingEnvironment {
|
|
23
2
|
isTTY: boolean;
|
|
24
3
|
term?: string;
|
|
25
|
-
termProgram?: string;
|
|
26
4
|
sshConnection?: string;
|
|
27
5
|
sshTty?: string;
|
|
28
6
|
tmux?: string;
|
|
@@ -39,7 +17,7 @@ export interface AutoPacingEnvironment {
|
|
|
39
17
|
* accessibility markers always bypass pacing. Remote/multiplexed and already
|
|
40
18
|
* saturated outputs keep the proven coalescer behavior.
|
|
41
19
|
*/
|
|
42
|
-
|
|
20
|
+
function autoPacingAllowed(environment: AutoPacingEnvironment): boolean {
|
|
43
21
|
if (!environment.isTTY || environment.backpressureObserved) return false;
|
|
44
22
|
const term = environment.term?.trim().toLowerCase();
|
|
45
23
|
if (!term || term === "dumb" || term === "unknown") return false;
|
|
@@ -53,7 +31,6 @@ export function processAutoPacingAllowed(backpressureObserved: boolean, env: Nod
|
|
|
53
31
|
return autoPacingAllowed({
|
|
54
32
|
isTTY: process.stdout.isTTY === true,
|
|
55
33
|
...(env.TERM === undefined ? {} : { term: env.TERM }),
|
|
56
|
-
...(env.TERM_PROGRAM === undefined ? {} : { termProgram: env.TERM_PROGRAM }),
|
|
57
34
|
...(env.SSH_CONNECTION === undefined ? {} : { sshConnection: env.SSH_CONNECTION }),
|
|
58
35
|
...(env.SSH_TTY === undefined ? {} : { sshTty: env.SSH_TTY }),
|
|
59
36
|
...(env.TMUX === undefined ? {} : { tmux: env.TMUX }),
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
type OverlayHandle,
|
|
15
15
|
type TUI,
|
|
16
16
|
truncateToWidth,
|
|
17
|
+
visibleWidth,
|
|
17
18
|
wrapTextWithAnsi,
|
|
18
19
|
} from "../engine/tui.js";
|
|
19
20
|
import { buildHint, showClioOverlayFrame } from "./overlay-frame.js";
|
|
@@ -92,23 +93,31 @@ function taskRow(task: TaskBoardTask, width: number, selected?: boolean): string
|
|
|
92
93
|
);
|
|
93
94
|
}
|
|
94
95
|
|
|
95
|
-
function
|
|
96
|
+
function wrapTaskProse(prefix: string, prose: string, width: number): string[] {
|
|
97
|
+
const prefixWidth = visibleWidth(prefix);
|
|
98
|
+
const proseWidth = Math.max(1, width - prefixWidth);
|
|
99
|
+
return wrapTextWithAnsi(prose, proseWidth).map((line, index) =>
|
|
100
|
+
fitContentLine(`${index === 0 ? prefix : " ".repeat(prefixWidth)}${line}`, width),
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function taskReceiptRows(task: TaskBoardTask, width: number): string[] {
|
|
96
105
|
const theme = clioTheme();
|
|
97
106
|
if (task.status === "completed" && task.evidence) {
|
|
98
107
|
// The evidence prose already carries any run id it mentions, so no derived
|
|
99
108
|
// `evidence:<runId>` suffix is appended; it would repeat that id on one line.
|
|
100
|
-
return
|
|
109
|
+
return wrapTaskProse(` ${dim("evidence")} `, muted(task.evidence), width);
|
|
101
110
|
}
|
|
102
111
|
if (task.status === "blocked" && task.reason) {
|
|
103
|
-
return
|
|
112
|
+
return wrapTaskProse(` ${dim("blocked")} `, theme.fg("warning", task.reason), width);
|
|
104
113
|
}
|
|
105
114
|
if (task.status === "cancelled" && task.reason) {
|
|
106
|
-
return
|
|
115
|
+
return wrapTaskProse(` ${dim("dropped")} `, muted(task.reason), width);
|
|
107
116
|
}
|
|
108
|
-
return
|
|
117
|
+
return [];
|
|
109
118
|
}
|
|
110
119
|
|
|
111
|
-
|
|
120
|
+
function formatTasksOverlayBodyLines(
|
|
112
121
|
board: TaskBoardSnapshot | null,
|
|
113
122
|
contentWidth = DEFAULT_CONTENT_WIDTH,
|
|
114
123
|
selectedTaskId?: string | null,
|
|
@@ -151,8 +160,7 @@ export function formatTasksOverlayBodyLines(
|
|
|
151
160
|
}
|
|
152
161
|
for (const task of board.tasks) {
|
|
153
162
|
lines.push(taskRow(task, width, selectedTaskId === undefined ? undefined : selectedTaskId === task.id));
|
|
154
|
-
|
|
155
|
-
if (receipt) lines.push(receipt);
|
|
163
|
+
lines.push(...taskReceiptRows(task, width));
|
|
156
164
|
}
|
|
157
165
|
return lines;
|
|
158
166
|
}
|
|
@@ -235,7 +243,7 @@ const USER_TASK_PRESENTATION: Record<UserTask["status"], { glyph: string; token:
|
|
|
235
243
|
};
|
|
236
244
|
|
|
237
245
|
/** Pure composite renderer; callers provide already-captured history/artifact/user snapshots. */
|
|
238
|
-
|
|
246
|
+
function formatCompositeTasksOverlayBodyLines(
|
|
239
247
|
state: CompositeTasksOverlayState,
|
|
240
248
|
contentWidth = DEFAULT_CONTENT_WIDTH,
|
|
241
249
|
): string[] {
|
|
@@ -259,8 +267,7 @@ export function formatCompositeTasksOverlayBodyLines(
|
|
|
259
267
|
width,
|
|
260
268
|
),
|
|
261
269
|
);
|
|
262
|
-
|
|
263
|
-
if (receipt) lines.push(receipt);
|
|
270
|
+
lines.push(...taskReceiptRows(row.task, width));
|
|
264
271
|
}
|
|
265
272
|
|
|
266
273
|
lines.push("", sectionHeading("Artifacts", width));
|
|
@@ -288,7 +295,7 @@ export function formatCompositeTasksOverlayBodyLines(
|
|
|
288
295
|
width,
|
|
289
296
|
),
|
|
290
297
|
);
|
|
291
|
-
if (task.note) lines.push(
|
|
298
|
+
if (task.note) lines.push(...wrapTaskProse(` ${dim("note")} `, muted(task.note), width));
|
|
292
299
|
}
|
|
293
300
|
return lines;
|
|
294
301
|
}
|
|
@@ -342,7 +349,7 @@ class TasksOverlayBody implements Component {
|
|
|
342
349
|
body.push("", fitContentLine(clioTheme().fg("accent", "New operator task"), width));
|
|
343
350
|
body.push(...this.addInput.render(Math.max(1, width)).map((line) => fitContentLine(line, width)));
|
|
344
351
|
}
|
|
345
|
-
if (this.status) body.push("",
|
|
352
|
+
if (this.status) body.push("", ...wrapTextWithAnsi(clioTheme().fg("warning", this.status), Math.max(1, width)));
|
|
346
353
|
return body;
|
|
347
354
|
}
|
|
348
355
|
|
|
@@ -127,7 +127,7 @@ class BootSubmissionPanel implements Component {
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
function stageZeroRoot(
|
|
130
|
-
mode: Readonly<ClioSettings>["
|
|
130
|
+
mode: Readonly<ClioSettings>["interface"]["mode"],
|
|
131
131
|
editor: ClioEditor,
|
|
132
132
|
pending: Component,
|
|
133
133
|
shutdownArmed: () => boolean,
|
|
@@ -179,9 +179,8 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
|
|
|
179
179
|
const keybindings = createKeybindingManager(settings);
|
|
180
180
|
let editorChrome: EditorChrome = {
|
|
181
181
|
getModelLabel: () =>
|
|
182
|
-
[settings.
|
|
183
|
-
|
|
184
|
-
getThinkingLabel: () => settings.orchestrator.thinkingLevel ?? "off",
|
|
182
|
+
[settings.chat.target, settings.chat.model].filter((part) => part && part.length > 0).join("·") || "starting",
|
|
183
|
+
getThinkingLabel: () => settings.chat.thinkingLevel ?? "off",
|
|
185
184
|
getSubmitKeyLabel: () => keybindings.getKeys("tui.input.submit")[0] ?? "Enter",
|
|
186
185
|
getNewlineKeyLabel: () => keybindings.getKeys("tui.input.newLine")[0] ?? "Shift+Enter",
|
|
187
186
|
};
|
|
@@ -199,7 +198,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
|
|
|
199
198
|
const shell =
|
|
200
199
|
options.testing?.shell ??
|
|
201
200
|
createProcessInteractiveShell({
|
|
202
|
-
tuiMode: settings.
|
|
201
|
+
tuiMode: settings.interface.mode,
|
|
203
202
|
...(options.onStage0Commit ? { onFirstFrameCommit: options.onStage0Commit } : {}),
|
|
204
203
|
});
|
|
205
204
|
const tui = shell.tui as TUI;
|
|
@@ -207,7 +206,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
|
|
|
207
206
|
editor.focused = true;
|
|
208
207
|
const pendingPanel = new BootSubmissionPanel();
|
|
209
208
|
let shutdownArmed = false;
|
|
210
|
-
const stage0 = stageZeroRoot(settings.
|
|
209
|
+
const stage0 = stageZeroRoot(settings.interface.mode, editor, pendingPanel, () => shutdownArmed);
|
|
211
210
|
const host = new RootHost(stage0);
|
|
212
211
|
|
|
213
212
|
let state: TerminalLeaseState = "created";
|
|
@@ -288,7 +287,7 @@ export function createProcessTerminalLease(options: CreateProcessTerminalLeaseOp
|
|
|
288
287
|
handleStage0CtrlC();
|
|
289
288
|
return { consume: true };
|
|
290
289
|
}
|
|
291
|
-
if (keybindings.matches(data, "clio.exit") && editor.getText().length === 0) {
|
|
290
|
+
if (keybindings.matches(data, "clio-coder.exit") && editor.getText().length === 0) {
|
|
292
291
|
requestShutdown();
|
|
293
292
|
return { consume: true };
|
|
294
293
|
}
|
|
@@ -81,7 +81,7 @@ import {
|
|
|
81
81
|
type SessionPromptCompileRecord,
|
|
82
82
|
} from "../domains/session/prompt-manifest.js";
|
|
83
83
|
import type { AgentMessage, Usage } from "../engine/types.js";
|
|
84
|
-
import type
|
|
84
|
+
import { resolveToolPromptHint, type ToolRegistry } from "../tools/registry.js";
|
|
85
85
|
import {
|
|
86
86
|
backendCacheVerdict,
|
|
87
87
|
extractUserText,
|
|
@@ -90,6 +90,7 @@ import {
|
|
|
90
90
|
toolNamesFromAgentState,
|
|
91
91
|
} from "./chat-loop-messages.js";
|
|
92
92
|
import { buildModelReplayAgentMessagesFromTurns } from "./model-session-replay.js";
|
|
93
|
+
import { attachedToolSchemasFromState, mainPromptCacheIdentity } from "./prompt-cache-identity.js";
|
|
93
94
|
import { renderCompactionSummaryLine, renderEvictionSkipLine } from "./renderers/compaction-summary.js";
|
|
94
95
|
import type { TurnMiddleware } from "./turn-middleware.js";
|
|
95
96
|
import type { AgentRuntime, ChatTurnState } from "./turn-state.js";
|
|
@@ -270,8 +271,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
270
271
|
// before the operator did.
|
|
271
272
|
let lastPrewarm: PrewarmStats | null = null;
|
|
272
273
|
// The session system prompt, compiled once per session. Recompiles happen
|
|
273
|
-
// only
|
|
274
|
-
//
|
|
274
|
+
// only when the canonical identity of every live compile input changes, or
|
|
275
|
+
// a config hot-reload invalidates compiler-owned inputs. A
|
|
275
276
|
// recompile that changes the prompt text appends a "promptRecompiled"
|
|
276
277
|
// ledger entry so a cold provider cache is always explainable.
|
|
277
278
|
let sessionPrompt: CompiledSessionPrompt | null = null;
|
|
@@ -488,13 +489,13 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
488
489
|
|
|
489
490
|
const resolveWindowWithoutRuntime = (): ContextWindowDetails | null => {
|
|
490
491
|
const settings = deps.getSettings();
|
|
491
|
-
const targetId = settings.
|
|
492
|
-
const wireModelId = settings.
|
|
492
|
+
const targetId = settings.chat?.target?.trim();
|
|
493
|
+
const wireModelId = settings.chat?.model?.trim();
|
|
493
494
|
if (!targetId || !wireModelId) return null;
|
|
494
495
|
const resolved = resolveRuntimeTarget(deps.providers, {
|
|
495
496
|
targetId,
|
|
496
497
|
wireModelId,
|
|
497
|
-
requestedThinkingLevel: settings.
|
|
498
|
+
requestedThinkingLevel: settings.chat?.thinkingLevel ?? "off",
|
|
498
499
|
use: "orchestrator",
|
|
499
500
|
requireTools: false,
|
|
500
501
|
requireOutputBudget: true,
|
|
@@ -679,7 +680,7 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
679
680
|
const activeAutoTurnId = force ? null : state.activeUserTurnId;
|
|
680
681
|
if (activeAutoTurnId && emptyAutoCompactTurnId === activeAutoTurnId) return false;
|
|
681
682
|
const settings = deps.getSettings();
|
|
682
|
-
const cfg = settings.compaction;
|
|
683
|
+
const cfg = settings.context.compaction;
|
|
683
684
|
const autoEnabled = cfg?.auto !== false;
|
|
684
685
|
if (!force && !autoEnabled) return false;
|
|
685
686
|
let preSummaryStageActed = false;
|
|
@@ -709,7 +710,7 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
709
710
|
if (process.env.CLIO_CODER_LEGACY_MASK === "1") {
|
|
710
711
|
let masked: ReturnType<typeof maskStaleObservations>;
|
|
711
712
|
try {
|
|
712
|
-
masked = maskStaleObservations(deps.readSessionEntries() ?? [],
|
|
713
|
+
masked = maskStaleObservations(deps.readSessionEntries() ?? [], 6);
|
|
713
714
|
} catch (error) {
|
|
714
715
|
middleware.fireCompactionHook("mask_observations", trigger, estimate.tokens);
|
|
715
716
|
deps.bus?.emit(BusChannels.CompactionBegin, { trigger, at: Date.now() });
|
|
@@ -1021,8 +1022,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1021
1022
|
|
|
1022
1023
|
/**
|
|
1023
1024
|
* Ensure the session system prompt is compiled and applied to the live
|
|
1024
|
-
* agent. Compiles only when the
|
|
1025
|
-
*
|
|
1025
|
+
* agent. Compiles only when the canonical live-input identity changes
|
|
1026
|
+
* or a config hot-reload invalidated compiler-owned inputs in the
|
|
1026
1027
|
* cache; every other submit reuses the cached prompt byte-for-byte. A
|
|
1027
1028
|
* compile whose text differs from the previous prompt queues a
|
|
1028
1029
|
* "promptRecompiled" ledger entry (written once the session exists).
|
|
@@ -1030,16 +1031,11 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1030
1031
|
async ensureSessionPrompt(agentRuntime: AgentRuntime): Promise<CompiledSessionPrompt | null> {
|
|
1031
1032
|
if (!deps.prompts) return null;
|
|
1032
1033
|
const settings = deps.getSettings();
|
|
1033
|
-
const autonomy = settings.autonomy ?? "auto-edit";
|
|
1034
|
+
const autonomy = settings.safety.autonomy ?? "auto-edit";
|
|
1034
1035
|
const sessionId = deps.session?.current()?.id ?? "";
|
|
1035
|
-
const
|
|
1036
|
-
const key = `${agentRuntime.targetId}|${agentRuntime.wireModelId}|${autonomy}|${sessionId}|${workingContextKey}`;
|
|
1037
|
-
if (sessionPrompt && sessionPromptKey === key) {
|
|
1038
|
-
lastSystemPromptReused = true;
|
|
1039
|
-
return sessionPrompt;
|
|
1040
|
-
}
|
|
1036
|
+
const cwd = process.cwd();
|
|
1041
1037
|
const modelState = agentRuntime.agent.state.model as
|
|
1042
|
-
| (typeof agentRuntime.agent.state.model & {
|
|
1038
|
+
| (typeof agentRuntime.agent.state.model & { clioCoder?: { quirks?: LocalModelQuirks } })
|
|
1043
1039
|
| undefined;
|
|
1044
1040
|
// `Context window: N` is the window the backend will actually serve
|
|
1045
1041
|
// this session, taken from the resolution the turn already ran rather
|
|
@@ -1057,13 +1053,14 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1057
1053
|
const contextWindow = typeof resolvedWindow === "number" && resolvedWindow > 0 ? resolvedWindow : null;
|
|
1058
1054
|
const contextWindowSource: ContextWindowSource | null =
|
|
1059
1055
|
contextWindow === null ? null : windowDetails.contextWindowSource;
|
|
1060
|
-
const guidance = modelState?.
|
|
1056
|
+
const guidance = modelState?.clioCoder?.quirks?.thinking?.guidance;
|
|
1061
1057
|
// Per-tool prompt hints come from registry metadata, derived once from
|
|
1062
1058
|
// the frozen surface per compile. The compiler renders them sorted by
|
|
1063
1059
|
// tool name, so the compiled text stays byte-stable for a given surface.
|
|
1064
1060
|
const toolNames = toolNamesFromAgentState(agentRuntime.agent.state.tools);
|
|
1061
|
+
const attachedToolSchemas = attachedToolSchemasFromState(agentRuntime.agent.state.tools);
|
|
1065
1062
|
const toolPromptHints = toolNames.flatMap((name) => {
|
|
1066
|
-
const hint = deps.toolRegistry?.get(name as ToolName)?.metadata?.promptHint;
|
|
1063
|
+
const hint = resolveToolPromptHint(deps.toolRegistry?.get(name as ToolName)?.metadata?.promptHint, "session");
|
|
1067
1064
|
return hint ? [{ tool: name, hint }] : [];
|
|
1068
1065
|
});
|
|
1069
1066
|
const sessionInputs: SessionPromptInputs = {
|
|
@@ -1085,11 +1082,29 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1085
1082
|
);
|
|
1086
1083
|
}
|
|
1087
1084
|
}
|
|
1085
|
+
const key = mainPromptCacheIdentity({
|
|
1086
|
+
targetId: agentRuntime.targetId,
|
|
1087
|
+
runtimeId: agentRuntime.runtimeId,
|
|
1088
|
+
wireModelId: agentRuntime.wireModelId,
|
|
1089
|
+
autonomy,
|
|
1090
|
+
sessionId,
|
|
1091
|
+
cwd,
|
|
1092
|
+
workingContextPaths: [...sessionWorkingContextPaths],
|
|
1093
|
+
contextWindowSource,
|
|
1094
|
+
promptInputEpoch: deps.prompts.inputEpoch(),
|
|
1095
|
+
sessionInputs,
|
|
1096
|
+
attachedToolSchemas,
|
|
1097
|
+
});
|
|
1098
|
+
if (sessionPrompt && sessionPromptKey === key) {
|
|
1099
|
+
lastSystemPromptReused = true;
|
|
1100
|
+
return sessionPrompt;
|
|
1101
|
+
}
|
|
1088
1102
|
try {
|
|
1089
1103
|
const result = await deps.prompts.compileSessionPrompt({
|
|
1104
|
+
sessionId,
|
|
1090
1105
|
sessionInputs,
|
|
1091
1106
|
autonomy,
|
|
1092
|
-
cwd
|
|
1107
|
+
cwd,
|
|
1093
1108
|
workingContextPaths: [...sessionWorkingContextPaths],
|
|
1094
1109
|
});
|
|
1095
1110
|
const previousHash = sessionPromptHash ?? lastRecordedPromptHash();
|
|
@@ -1175,7 +1190,7 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1175
1190
|
if (before.contextWindow <= 0 || before.tokens <= 0) return undefined;
|
|
1176
1191
|
|
|
1177
1192
|
const settings = deps.getSettings();
|
|
1178
|
-
const threshold = settings.compaction?.threshold ?? DEFAULT_COMPACTION_THRESHOLD;
|
|
1193
|
+
const threshold = settings.context.compaction?.threshold ?? DEFAULT_COMPACTION_THRESHOLD;
|
|
1179
1194
|
const verdict = shouldCompact(before.tokens, threshold, before.contextWindow);
|
|
1180
1195
|
let compacted = false;
|
|
1181
1196
|
if (verdict.shouldCompact) {
|
|
@@ -1218,8 +1233,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1218
1233
|
|
|
1219
1234
|
contextLedger(): ContextLedger {
|
|
1220
1235
|
const settings = deps.getSettings();
|
|
1221
|
-
const compactionThreshold = settings.compaction?.threshold ?? null;
|
|
1222
|
-
const compactionAuto = settings.compaction?.auto !== false;
|
|
1236
|
+
const compactionThreshold = settings.context.compaction?.threshold ?? null;
|
|
1237
|
+
const compactionAuto = settings.context.compaction?.auto !== false;
|
|
1223
1238
|
// Without a runtime (before the first turn of this process, /resume
|
|
1224
1239
|
// included) the window comes from the live resolution or the resumed
|
|
1225
1240
|
// snapshot, and the token facts from the snapshot: the resumed
|
|
@@ -1231,8 +1246,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1231
1246
|
contextWindowSlots: state.runtime.runtimeResolution.contextWindowDetails.contextWindowSlots,
|
|
1232
1247
|
}
|
|
1233
1248
|
: windowWithoutRuntime();
|
|
1234
|
-
const provider = state.runtime?.targetId ?? settings.
|
|
1235
|
-
const model = state.runtime?.wireModelId ?? settings.
|
|
1249
|
+
const provider = state.runtime?.targetId ?? settings.chat?.target ?? null;
|
|
1250
|
+
const model = state.runtime?.wireModelId ?? settings.chat?.model ?? null;
|
|
1236
1251
|
const liveToolCount = state.runtime?.agent.state.tools.length ?? 0;
|
|
1237
1252
|
|
|
1238
1253
|
if (!currentContextSnapshot) {
|
|
@@ -296,8 +296,8 @@ export function createTurnPersistence(deps: TurnPersistenceDeps): TurnPersistenc
|
|
|
296
296
|
if (!deps.session.current()) {
|
|
297
297
|
const settings = deps.getSettings();
|
|
298
298
|
const input: { cwd: string; target?: string; model?: string } = { cwd: process.cwd() };
|
|
299
|
-
if (settings.
|
|
300
|
-
if (settings.
|
|
299
|
+
if (settings.chat.target) input.target = settings.chat.target;
|
|
300
|
+
if (settings.chat.model) input.model = settings.chat.model;
|
|
301
301
|
deps.session.create(input);
|
|
302
302
|
}
|
|
303
303
|
const userTurn = appendTurn(deps.session, {
|
|
@@ -151,7 +151,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
151
151
|
const dispatchActive = (): boolean => dispatchesInFlight > 0 || deps.hasActiveDispatch();
|
|
152
152
|
|
|
153
153
|
const admissionRefusal = (): PrewarmSkipReason | null => {
|
|
154
|
-
if (deps.getSettings().prewarm
|
|
154
|
+
if (deps.getSettings().chat.prewarm === false) return "disabled";
|
|
155
155
|
if (!deps.isLatencySurface()) return "surface";
|
|
156
156
|
if (deps.state.streaming || deps.isTurnActive()) return "turn-active";
|
|
157
157
|
// Fleet interaction. Without per-endpoint slot accounting a pre-warm cannot
|
|
@@ -165,7 +165,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
165
165
|
// resolved runtime is checked again below, but asking here means a target
|
|
166
166
|
// that was never eligible costs no capability probe, no agent, and no
|
|
167
167
|
// notice from either.
|
|
168
|
-
const targetId = deps.getSettings().
|
|
168
|
+
const targetId = deps.getSettings().chat?.target?.trim();
|
|
169
169
|
const runtimeId = targetId ? deps.providers.getTarget(targetId)?.runtime : undefined;
|
|
170
170
|
if (runtimeId === undefined || deps.providers.getRuntime(runtimeId)?.tier !== "local-native") return "tier";
|
|
171
171
|
return null;
|