@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
|
@@ -37,7 +37,7 @@ export interface OpenSideQuestionOverlayOptions {
|
|
|
37
37
|
const SIDE_QUESTION_OVERLAY_MIN_WIDTH = 44;
|
|
38
38
|
const SIDE_QUESTION_OVERLAY_MAX_WIDTH = 100;
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
function sideQuestionOverlayWidth(columns: number): number {
|
|
41
41
|
return Math.max(SIDE_QUESTION_OVERLAY_MIN_WIDTH, Math.min(SIDE_QUESTION_OVERLAY_MAX_WIDTH, columns - 4));
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -46,7 +46,7 @@ export function sideQuestionOverlayWidth(columns: number): number {
|
|
|
46
46
|
* the question in dim above a rule, then the answer, then one status line that
|
|
47
47
|
* says whether the round is still running, cancelled, or failed.
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
function formatSideQuestionBody(
|
|
50
50
|
question: string,
|
|
51
51
|
phase: SideQuestionOverlayPhase,
|
|
52
52
|
width: number,
|
|
@@ -113,7 +113,7 @@ interface LibraryTabContext {
|
|
|
113
113
|
* approval preview instead, so this returns null for one and the caller routes
|
|
114
114
|
* it there.
|
|
115
115
|
*/
|
|
116
|
-
|
|
116
|
+
function libraryUseInvocation(entry: Pick<LibraryEntry, "kind" | "name">): string | null {
|
|
117
117
|
if (entry.kind === "fleet") return null;
|
|
118
118
|
if (entry.kind === "agent") return `/run ${entry.name} `;
|
|
119
119
|
if (entry.kind === "prompt") return `/${entry.name} `;
|
|
@@ -148,7 +148,7 @@ function skillBody(content: string): string {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/** @internal exported for contract tests */
|
|
151
|
-
|
|
151
|
+
function buildInstalledItems(list: ResourceList<Skill>): ListOverlayItem[] {
|
|
152
152
|
return list.items.map((skill) => {
|
|
153
153
|
const theme = clioTheme();
|
|
154
154
|
const flagged = list.diagnostics.some((diag) => diagnosticTouchesSkill(diag.path, skill));
|
|
@@ -182,7 +182,7 @@ export function buildInstalledItems(list: ResourceList<Skill>): ListOverlayItem[
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
/** @internal exported for contract tests */
|
|
185
|
-
|
|
185
|
+
function buildMarketplaceItems(
|
|
186
186
|
skills: ReadonlyArray<MarketplaceSkill>,
|
|
187
187
|
installed: ReadonlySet<string>,
|
|
188
188
|
): ListOverlayItem[] {
|
|
@@ -215,7 +215,7 @@ export function buildMarketplaceItems(
|
|
|
215
215
|
}
|
|
216
216
|
|
|
217
217
|
/** @internal exported for contract tests */
|
|
218
|
-
|
|
218
|
+
function buildDiagnosticItems(
|
|
219
219
|
list: ResourceList<Skill>,
|
|
220
220
|
marketplaceDiagnostics: ReadonlyArray<string> = [],
|
|
221
221
|
): ListOverlayItem[] {
|
|
@@ -252,7 +252,7 @@ export function buildDiagnosticItems(
|
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
/** @internal exported for contract tests */
|
|
255
|
-
|
|
255
|
+
function libraryRowId(entry: Pick<LibraryEntry, "kind" | "name">): string {
|
|
256
256
|
return `${LIBRARY_ROW_PREFIX}${libraryEntryRef(entry)}`;
|
|
257
257
|
}
|
|
258
258
|
|
|
@@ -267,7 +267,7 @@ export function libraryRowId(entry: Pick<LibraryEntry, "kind" | "name">): string
|
|
|
267
267
|
*
|
|
268
268
|
* @internal exported for contract tests
|
|
269
269
|
*/
|
|
270
|
-
|
|
270
|
+
function buildLibraryItems(kind: LibraryEntryKind, context: LibraryTabContext): ListOverlayItem[] {
|
|
271
271
|
const theme = clioTheme();
|
|
272
272
|
return context.discovery.entries
|
|
273
273
|
.filter((entry) => entry.kind === kind)
|
|
@@ -318,7 +318,7 @@ export function buildLibraryItems(kind: LibraryEntryKind, context: LibraryTabCon
|
|
|
318
318
|
*
|
|
319
319
|
* @internal exported for contract tests
|
|
320
320
|
*/
|
|
321
|
-
|
|
321
|
+
function buildLibraryDiagnosticItems(discovery: LibraryDiscoveryResult): ListOverlayItem[] {
|
|
322
322
|
const theme = clioTheme();
|
|
323
323
|
return discovery.diagnostics
|
|
324
324
|
.filter((message) => message !== MARKETPLACE_UNCONFIGURED)
|
|
@@ -360,7 +360,7 @@ export interface LibraryInstallRunner {
|
|
|
360
360
|
*
|
|
361
361
|
* @internal exported for contract tests
|
|
362
362
|
*/
|
|
363
|
-
|
|
363
|
+
async function runLibraryInstall(
|
|
364
364
|
entry: LibraryEntry,
|
|
365
365
|
runner: LibraryInstallRunner,
|
|
366
366
|
options: { withRequirements: boolean },
|
|
@@ -100,7 +100,7 @@ function fallbackPreview(node: TreeSnapshotNode): string {
|
|
|
100
100
|
* of turns and the discarded branch had no route back. Returns null for a
|
|
101
101
|
* session that was not forked.
|
|
102
102
|
*/
|
|
103
|
-
|
|
103
|
+
function forkParentLine(snapshot: TreeSnapshot, theme: ClioTheme): string | null {
|
|
104
104
|
const parentSessionId = snapshot.meta.parentSessionId;
|
|
105
105
|
if (typeof parentSessionId !== "string" || parentSessionId.length === 0) return null;
|
|
106
106
|
const parentTurnId = snapshot.meta.parentTurnId;
|
|
@@ -155,7 +155,7 @@ function flattenTreeSnapshot(snapshot: TreeSnapshot): TreeRow[] {
|
|
|
155
155
|
const ROW_PREVIEW_BUDGET = 55;
|
|
156
156
|
|
|
157
157
|
/** @internal */
|
|
158
|
-
|
|
158
|
+
function formatTreeRow(row: TreeRow, opts: { showTimestamps: boolean; width: number }): string {
|
|
159
159
|
const theme = clioTheme();
|
|
160
160
|
const indent = " ".repeat(row.depth);
|
|
161
161
|
// The active tip is where the next message lands; it gets its own glyph so
|
|
@@ -27,6 +27,7 @@ import type { MuxContract, MuxPaneRecord } from "../domains/mux/index.js";
|
|
|
27
27
|
import {
|
|
28
28
|
PANES_PRESETS,
|
|
29
29
|
type PanesCloseResult,
|
|
30
|
+
type PanesFilesResult,
|
|
30
31
|
type PanesInventoryEntry,
|
|
31
32
|
type PanesOpenResult,
|
|
32
33
|
type PanesOperations,
|
|
@@ -35,6 +36,8 @@ import {
|
|
|
35
36
|
type PanesWatchController,
|
|
36
37
|
type PanesYaziController,
|
|
37
38
|
type PanesYaziStatus,
|
|
39
|
+
type PanesZoomResult,
|
|
40
|
+
resolvePanesPresetId,
|
|
38
41
|
} from "../domains/mux/operations.js";
|
|
39
42
|
import { resolveBinary } from "../tools/executables.js";
|
|
40
43
|
import { type PaneWatchSource, paneWatchDecision } from "./pane-policy.js";
|
|
@@ -53,7 +56,28 @@ export interface PanesRuntimeDeps {
|
|
|
53
56
|
newestJournalRunId?: () => string | null;
|
|
54
57
|
}
|
|
55
58
|
|
|
56
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Why there is no pane layer, in the operator's terms. Detection already
|
|
61
|
+
* knows (no `HERDR_ENV`, no socket, a refused rung); repeating that reason
|
|
62
|
+
* beside the refusal is what turns "unavailable" into a next step, and the
|
|
63
|
+
* `--with-panes` hint covers the session that never asked for panes.
|
|
64
|
+
*/
|
|
65
|
+
function unavailableReason(mux: MuxContract): string {
|
|
66
|
+
const reason = mux.detection().reason;
|
|
67
|
+
return `the pane layer is not available in this session: ${reason}. Start Clio inside a herdr session with \`clio-coder --with-panes\` to get panes`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Fuzzy operator addressing shared by `close` and `zoom`: id, label, purpose; newest first. */
|
|
71
|
+
function matchOwnedPane(owned: ReadonlyArray<MuxPaneRecord>, target: string): MuxPaneRecord | null {
|
|
72
|
+
const needle = target.trim().toLowerCase();
|
|
73
|
+
const newestFirst = [...owned].reverse();
|
|
74
|
+
return (
|
|
75
|
+
newestFirst.find((record) => record.ref.paneId.toLowerCase() === needle) ??
|
|
76
|
+
newestFirst.find((record) => record.label.toLowerCase().includes(needle)) ??
|
|
77
|
+
newestFirst.find((record) => record.purpose === needle) ??
|
|
78
|
+
null
|
|
79
|
+
);
|
|
80
|
+
}
|
|
57
81
|
|
|
58
82
|
function inventory(records: ReadonlyArray<MuxPaneRecord>): ReadonlyArray<PanesInventoryEntry> {
|
|
59
83
|
return records.map((record) => ({
|
|
@@ -65,6 +89,27 @@ function inventory(records: ReadonlyArray<MuxPaneRecord>): ReadonlyArray<PanesIn
|
|
|
65
89
|
}));
|
|
66
90
|
}
|
|
67
91
|
|
|
92
|
+
/**
|
|
93
|
+
* The sentence `/quit` prints about the panes it did not close, or null when
|
|
94
|
+
* there are none.
|
|
95
|
+
*
|
|
96
|
+
* Policy (#272): docks close with the session and utility panes stay. A dock
|
|
97
|
+
* is a Clio surface (the files pane, the workers watch pane), so it goes the
|
|
98
|
+
* way a native application's windows go. A pane opened with `/panes open
|
|
99
|
+
* shell|logs|<argv>` is a terminal the operator may be typing in, and killing
|
|
100
|
+
* it on quit is the one thing a pane host must never do behind the operator's
|
|
101
|
+
* back. The next session does not adopt it either, so without this line the
|
|
102
|
+
* pane simply sat there with nothing naming it. Computed before the mux
|
|
103
|
+
* domain stops, because shutdown forgets its registry.
|
|
104
|
+
*/
|
|
105
|
+
export function describePanesLeftBehind(mux: Pick<MuxContract, "list" | "docks">): string | null {
|
|
106
|
+
const dockIds = new Set(mux.docks().map((dock) => dock.paneId));
|
|
107
|
+
const left = mux.list().filter((record) => !dockIds.has(record.ref.paneId));
|
|
108
|
+
if (left.length === 0) return null;
|
|
109
|
+
const named = left.map((record) => `${record.label} (${record.ref.paneId})`).join(", ");
|
|
110
|
+
return `Clio left ${left.length} ${left.length === 1 ? "pane" : "panes"} open in herdr: ${named}. Utility panes stay when a session ends; the docks closed with it. Next time run \`/panes close all\` before \`/quit\` to take them with you, or close ${left.length === 1 ? "it" : "them"} now with \`herdr pane close <paneId>\`.`;
|
|
111
|
+
}
|
|
112
|
+
|
|
68
113
|
export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
69
114
|
const probe = deps.resolveBinaryPath ?? resolveBinary;
|
|
70
115
|
const journalRoot = deps.journalRoot ?? runEventJournalRoot;
|
|
@@ -130,7 +175,7 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
130
175
|
};
|
|
131
176
|
|
|
132
177
|
const show = async (target: string, source: PaneWatchSource): Promise<PanesShowResult> => {
|
|
133
|
-
if (!deps.mux.available()) return { status: "unavailable", reason:
|
|
178
|
+
if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
|
|
134
179
|
const match = matchRun(target);
|
|
135
180
|
if (match === null) {
|
|
136
181
|
// The candidate list is what turns a miss into a next step: it names
|
|
@@ -151,10 +196,62 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
151
196
|
return { status: "watching", runId: match.runId, agentId: match.agentId, opened: watched.opened };
|
|
152
197
|
};
|
|
153
198
|
|
|
199
|
+
/**
|
|
200
|
+
* The files pane's open half, shared by `/files`, `/panes open files`, the
|
|
201
|
+
* keybinding, and the model tool. The settings gate and the missing-engine
|
|
202
|
+
* message live here so every door says the same thing.
|
|
203
|
+
*/
|
|
204
|
+
const openFiles = async (once: boolean): Promise<Exclude<PanesFilesResult, { status: "closed" }>> => {
|
|
205
|
+
const preset = PANES_PRESETS[0];
|
|
206
|
+
if (!deps.getSettings().interface.panes.files.enabled) {
|
|
207
|
+
return { status: "refused", reason: "the files pane is disabled by interface.panes.files.enabled" };
|
|
208
|
+
}
|
|
209
|
+
if (!yaziController) {
|
|
210
|
+
return { status: "unavailable", reason: "the files pane return path is not ready" };
|
|
211
|
+
}
|
|
212
|
+
const pendingId = beginPendingOpen(preset.id);
|
|
213
|
+
try {
|
|
214
|
+
const result = await yaziController.open(once ? { once: true } : undefined);
|
|
215
|
+
if (result.status === "opened") {
|
|
216
|
+
return { status: "opened", paneId: result.paneId, existing: result.existing };
|
|
217
|
+
}
|
|
218
|
+
if (result.status === "missing-binary") {
|
|
219
|
+
return {
|
|
220
|
+
status: "missing-binary",
|
|
221
|
+
binary: result.binary,
|
|
222
|
+
installHint: preset.installHint,
|
|
223
|
+
// The engine's own resolution sentence, prefixed with the surface it
|
|
224
|
+
// serves: an operator who typed `/files` should not have to know the
|
|
225
|
+
// name of the program to read the answer.
|
|
226
|
+
detail: `the files pane engine is not available: ${result.detail}`,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
status: result.status === "profile-error" ? "refused" : "unavailable",
|
|
231
|
+
reason: result.reason,
|
|
232
|
+
};
|
|
233
|
+
} finally {
|
|
234
|
+
pendingOpens.delete(pendingId);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
|
|
154
238
|
return {
|
|
239
|
+
async files(action): Promise<PanesFilesResult> {
|
|
240
|
+
if (action === "close") {
|
|
241
|
+
await yaziController?.close();
|
|
242
|
+
return { status: "closed" };
|
|
243
|
+
}
|
|
244
|
+
if (action === "toggle" && yaziController?.isOpen()) {
|
|
245
|
+
await yaziController.close();
|
|
246
|
+
return { status: "closed" };
|
|
247
|
+
}
|
|
248
|
+
return openFiles(action === "pick");
|
|
249
|
+
},
|
|
250
|
+
|
|
155
251
|
status(): PanesStatus {
|
|
156
252
|
const detection = deps.mux.detection();
|
|
157
|
-
const
|
|
253
|
+
const settings = deps.getSettings();
|
|
254
|
+
const panes = settings.interface.panes;
|
|
158
255
|
return {
|
|
159
256
|
mode: deps.mux.mode,
|
|
160
257
|
available: deps.mux.available(),
|
|
@@ -164,10 +261,16 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
164
261
|
settings: {
|
|
165
262
|
enabled: panes.enabled,
|
|
166
263
|
notifications: panes.notifications,
|
|
167
|
-
|
|
168
|
-
|
|
264
|
+
layout: panes.layout,
|
|
265
|
+
journal: settings.fleet.history.journal,
|
|
266
|
+
yazi: { ...panes.files },
|
|
169
267
|
},
|
|
170
268
|
yazi: yaziController?.status() ?? closedYaziStatus(),
|
|
269
|
+
docks: deps.mux.docks().map((dock) => ({
|
|
270
|
+
slot: dock.slot,
|
|
271
|
+
paneId: dock.paneId,
|
|
272
|
+
targetShare: dock.targetShare,
|
|
273
|
+
})),
|
|
171
274
|
panes: [...inventory(deps.mux.list()), ...pendingOpens.values()],
|
|
172
275
|
};
|
|
173
276
|
},
|
|
@@ -181,41 +284,31 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
181
284
|
async open(request: { preset?: string; argv?: ReadonlyArray<string>; once?: boolean }): Promise<PanesOpenResult> {
|
|
182
285
|
const cwd = deps.getCwd();
|
|
183
286
|
if (request.preset !== undefined) {
|
|
184
|
-
const
|
|
287
|
+
const presetId = resolvePanesPresetId(request.preset);
|
|
288
|
+
const preset = presetId === null ? undefined : PANES_PRESETS.find((entry) => entry.id === presetId);
|
|
185
289
|
if (!preset) {
|
|
186
290
|
return { status: "refused", reason: `unknown preset: ${request.preset}` };
|
|
187
291
|
}
|
|
188
|
-
if (preset.id === "
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (!yaziController) {
|
|
193
|
-
return { status: "unavailable", reason: "the files-pane return path is not ready" };
|
|
292
|
+
if (preset.id === "files") {
|
|
293
|
+
const result = await openFiles(request.once === true);
|
|
294
|
+
if (result.status === "opened") {
|
|
295
|
+
return { status: "opened", label: preset.id, paneId: result.paneId, existing: result.existing };
|
|
194
296
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const result = await yaziController.open(request.once ? { once: true } : undefined);
|
|
198
|
-
if (result.status === "opened") {
|
|
199
|
-
return { status: "opened", label: preset.id, paneId: result.paneId };
|
|
200
|
-
}
|
|
201
|
-
if (result.status === "missing-binary") {
|
|
202
|
-
return {
|
|
203
|
-
status: "missing-binary",
|
|
204
|
-
preset: preset.id,
|
|
205
|
-
binary: result.binary,
|
|
206
|
-
installHint: preset.installHint,
|
|
207
|
-
detail: result.detail,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
return {
|
|
211
|
-
status: result.status === "profile-error" ? "refused" : "unavailable",
|
|
212
|
-
reason: result.reason,
|
|
213
|
-
};
|
|
214
|
-
} finally {
|
|
215
|
-
pendingOpens.delete(pendingId);
|
|
297
|
+
if (result.status === "missing-binary") {
|
|
298
|
+
return { ...result, preset: preset.id };
|
|
216
299
|
}
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
|
|
303
|
+
// One pane per preset. A second `/panes open shell` is a request to
|
|
304
|
+
// see the shell that is already there, not to split the screen again;
|
|
305
|
+
// the pane host is asked for focus so the operator lands in it.
|
|
306
|
+
const live = deps.mux.list().find((record) => record.purpose === "utility" && record.label === preset.id);
|
|
307
|
+
if (live) {
|
|
308
|
+
await deps.mux.unzoomSelf();
|
|
309
|
+
await deps.mux.focusPane(live.ref.paneId);
|
|
310
|
+
return { status: "opened", label: preset.id, paneId: live.ref.paneId, existing: true };
|
|
217
311
|
}
|
|
218
|
-
if (!deps.mux.available()) return { status: "unavailable", reason: UNAVAILABLE };
|
|
219
312
|
const binaryPath = probe(preset.binary);
|
|
220
313
|
if (binaryPath === null) {
|
|
221
314
|
return {
|
|
@@ -228,7 +321,10 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
228
321
|
}
|
|
229
322
|
const argv = presetArgv(preset.id, binaryPath);
|
|
230
323
|
if (argv === null) {
|
|
231
|
-
return {
|
|
324
|
+
return {
|
|
325
|
+
status: "refused",
|
|
326
|
+
reason: `no dispatched run has written a journal under ${journalRoot()} yet; the logs pane follows the newest run once one starts`,
|
|
327
|
+
};
|
|
232
328
|
}
|
|
233
329
|
const pendingId = beginPendingOpen(preset.id);
|
|
234
330
|
try {
|
|
@@ -239,7 +335,7 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
239
335
|
pendingOpens.delete(pendingId);
|
|
240
336
|
}
|
|
241
337
|
}
|
|
242
|
-
if (!deps.mux.available()) return { status: "unavailable", reason:
|
|
338
|
+
if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
|
|
243
339
|
const argv = request.argv ?? [];
|
|
244
340
|
if (argv.length === 0) return { status: "refused", reason: "nothing to run" };
|
|
245
341
|
const label = argv[0] ?? "pane";
|
|
@@ -253,8 +349,19 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
253
349
|
}
|
|
254
350
|
},
|
|
255
351
|
|
|
352
|
+
async zoom(target: string): Promise<PanesZoomResult> {
|
|
353
|
+
if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
|
|
354
|
+
const match = matchOwnedPane(deps.mux.list(), target.trim().length === 0 ? "watch" : target);
|
|
355
|
+
if (!match) return { status: "not-found", target: target.trim().length === 0 ? "watch" : target };
|
|
356
|
+
const changed = await deps.mux.zoomPane(match.ref.paneId, "toggle");
|
|
357
|
+
if (!changed) {
|
|
358
|
+
return { status: "unavailable", reason: "the pane host does not support zoom (protocol below pane.zoom)" };
|
|
359
|
+
}
|
|
360
|
+
return { status: "zoomed", paneId: match.ref.paneId, label: match.label };
|
|
361
|
+
},
|
|
362
|
+
|
|
256
363
|
async close(target: string): Promise<PanesCloseResult> {
|
|
257
|
-
if (!deps.mux.available()) return { status: "unavailable", reason:
|
|
364
|
+
if (!deps.mux.available()) return { status: "unavailable", reason: unavailableReason(deps.mux) };
|
|
258
365
|
const owned = deps.mux.list();
|
|
259
366
|
if (target === "all") {
|
|
260
367
|
const labels: string[] = [];
|
|
@@ -264,12 +371,7 @@ export function createPanesRuntime(deps: PanesRuntimeDeps): PanesOperations {
|
|
|
264
371
|
}
|
|
265
372
|
return { status: "closed", closed: labels.length, labels };
|
|
266
373
|
}
|
|
267
|
-
const
|
|
268
|
-
const newestFirst = [...owned].reverse();
|
|
269
|
-
const match =
|
|
270
|
-
newestFirst.find((record) => record.ref.paneId.toLowerCase() === needle) ??
|
|
271
|
-
newestFirst.find((record) => record.label.toLowerCase().includes(needle)) ??
|
|
272
|
-
newestFirst.find((record) => record.purpose === needle);
|
|
374
|
+
const match = matchOwnedPane(owned, target);
|
|
273
375
|
if (!match) return { status: "not-found", target };
|
|
274
376
|
const closed = await deps.mux.closePane(match.ref.paneId);
|
|
275
377
|
return closed ? { status: "closed", closed: 1, labels: [match.label] } : { status: "not-found", target };
|
|
@@ -203,7 +203,7 @@ function wrapArtifactLine(value: string, max: number): string[] {
|
|
|
203
203
|
return lines;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
|
|
206
|
+
function permissionDecisionPresentation(view: ApprovalRequestView): DecisionPresentation {
|
|
207
207
|
return classifyDecisionPresentation(
|
|
208
208
|
decisionFactsForPermission({
|
|
209
209
|
tool: view.tool,
|
|
@@ -307,7 +307,7 @@ function permissionInspectionLines(
|
|
|
307
307
|
* 80-column one saw the command being authorized end mid-argument, both with
|
|
308
308
|
* nothing marking the cut.
|
|
309
309
|
*/
|
|
310
|
-
|
|
310
|
+
function permissionOverlayLines(view: ApprovalRequestView, width: number): string[] {
|
|
311
311
|
const content = Math.max(8, Math.floor(width));
|
|
312
312
|
const presentation = permissionDecisionPresentation(view);
|
|
313
313
|
// The parked call is awaiting a decision, not blocked: the raw rejection
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { SessionPromptInputs } from "../domains/prompts/compiler.js";
|
|
2
|
+
import { canonicalJson, sha256 } from "../domains/prompts/hash.js";
|
|
3
|
+
import type { ContextWindowSource } from "../domains/providers/index.js";
|
|
4
|
+
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
5
|
+
|
|
6
|
+
/** The exact schema bytes pi attaches to a provider request for one tool. */
|
|
7
|
+
export interface AttachedToolSchema {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
parameters: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Project the live agent tools onto the schema fields sent to the provider.
|
|
15
|
+
* Array order is preserved because providers serialize the attached tools in
|
|
16
|
+
* that order, so reordering them changes prompt-prefix bytes too.
|
|
17
|
+
*/
|
|
18
|
+
export function attachedToolSchemasFromState(tools: ReadonlyArray<unknown>): AttachedToolSchema[] {
|
|
19
|
+
const schemas: AttachedToolSchema[] = [];
|
|
20
|
+
for (const tool of tools) {
|
|
21
|
+
if (!tool || typeof tool !== "object" || Array.isArray(tool)) continue;
|
|
22
|
+
const record = tool as Record<string, unknown>;
|
|
23
|
+
schemas.push({
|
|
24
|
+
name: typeof record.name === "string" ? record.name : "",
|
|
25
|
+
description: typeof record.description === "string" ? record.description : "",
|
|
26
|
+
parameters: record.parameters ?? null,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return schemas;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Serialize the exact ordered schema sequence attached to a provider request.
|
|
34
|
+
*
|
|
35
|
+
* `canonicalJson` is deliberately not used here: provider JSON preserves tool
|
|
36
|
+
* array order and nested object insertion order, so canonicalizing parameters
|
|
37
|
+
* can alias two byte-distinct request prefixes. Standard `JSON.stringify`
|
|
38
|
+
* matches the request serialization boundary and throws for unsupported
|
|
39
|
+
* values such as circular references and bigint.
|
|
40
|
+
*/
|
|
41
|
+
export function attachedToolSchemaBytes(schemas: ReadonlyArray<AttachedToolSchema>): string {
|
|
42
|
+
try {
|
|
43
|
+
const bytes = JSON.stringify(schemas);
|
|
44
|
+
if (bytes === undefined) throw new Error("JSON.stringify returned undefined");
|
|
45
|
+
return bytes;
|
|
46
|
+
} catch (err) {
|
|
47
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
48
|
+
throw new Error(`attached tool schemas are not JSON-serializable: ${reason}`, { cause: err });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface MainPromptCacheIdentityInput {
|
|
53
|
+
targetId: string;
|
|
54
|
+
runtimeId: string;
|
|
55
|
+
wireModelId: string;
|
|
56
|
+
autonomy: AutonomyLevel;
|
|
57
|
+
sessionId: string;
|
|
58
|
+
cwd: string;
|
|
59
|
+
workingContextPaths: ReadonlyArray<string>;
|
|
60
|
+
contextWindowSource: ContextWindowSource | null;
|
|
61
|
+
promptInputEpoch: string;
|
|
62
|
+
sessionInputs: SessionPromptInputs;
|
|
63
|
+
attachedToolSchemas: ReadonlyArray<AttachedToolSchema>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Canonical identity for the interactive session-prompt compile cache.
|
|
68
|
+
* Config hot reload explicitly invalidates compiler-owned fragments and
|
|
69
|
+
* rosters; this identity covers every live/caller input resolved per turn.
|
|
70
|
+
*/
|
|
71
|
+
export function mainPromptCacheIdentity(input: MainPromptCacheIdentityInput): string {
|
|
72
|
+
return sha256(
|
|
73
|
+
canonicalJson({
|
|
74
|
+
version: 2,
|
|
75
|
+
targetId: input.targetId,
|
|
76
|
+
runtimeId: input.runtimeId,
|
|
77
|
+
wireModelId: input.wireModelId,
|
|
78
|
+
autonomy: input.autonomy,
|
|
79
|
+
sessionId: input.sessionId,
|
|
80
|
+
cwd: input.cwd,
|
|
81
|
+
workingContextPaths: [...input.workingContextPaths].sort((a, b) => a.localeCompare(b)),
|
|
82
|
+
contextWindowSource: input.contextWindowSource,
|
|
83
|
+
promptInputEpoch: input.promptInputEpoch,
|
|
84
|
+
sessionInputs: input.sessionInputs,
|
|
85
|
+
attachedToolSchemaBytes: attachedToolSchemaBytes(input.attachedToolSchemas),
|
|
86
|
+
}),
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import type { RetryStatusPayload } from "../chat-loop.js";
|
|
2
2
|
import { styleTaggedNotice } from "./notice.js";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const RETRY_ERROR_MAX_CHARS = 2_000;
|
|
5
|
+
const RETRY_ERROR_TRUNCATION_MARKER = "… [retry error truncated]";
|
|
6
|
+
|
|
7
|
+
function boundedRetryError(value: string): string {
|
|
8
|
+
const characters = Array.from(value);
|
|
9
|
+
if (characters.length <= RETRY_ERROR_MAX_CHARS) return value;
|
|
10
|
+
return `${characters.slice(0, RETRY_ERROR_MAX_CHARS).join("").trimEnd()}${RETRY_ERROR_TRUNCATION_MARKER}`;
|
|
7
11
|
}
|
|
8
12
|
|
|
9
13
|
function rawRetryStatus(status: RetryStatusPayload): string {
|
|
10
|
-
|
|
14
|
+
// Both live and replay renderers wrap this notice to their terminal width, so
|
|
15
|
+
// ordinary errors keep their complete remedy. Raw provider failures can also
|
|
16
|
+
// be an HTML proxy page, though; keep a generous ceiling so one retry does not
|
|
17
|
+
// turn that page into hundreds of transcript rows.
|
|
18
|
+
const suffix = status.errorMessage ? `: ${boundedRetryError(status.errorMessage)}` : "";
|
|
11
19
|
if (status.phase === "waiting") {
|
|
12
20
|
return `[retry] attempt ${status.attempt}/${status.maxAttempts} in ${status.seconds ?? 0}s${suffix}`;
|
|
13
21
|
}
|
|
@@ -426,7 +426,7 @@ function ledgerTail(finished: ToolExecutionFinished): { facts: string; offload:
|
|
|
426
426
|
if (details?.timedOut === true) parts.push("timed out");
|
|
427
427
|
if (details?.outputCapped === true) parts.push("output capped");
|
|
428
428
|
}
|
|
429
|
-
if (finished.excludeFromContext === true) parts.push("
|
|
429
|
+
if (finished.excludeFromContext === true) parts.push("not sent to model");
|
|
430
430
|
if (finished.evictedReason !== undefined) parts.push("evicted", finished.evictedReason);
|
|
431
431
|
const offloadPath = executed ? offloadPathOf(finished) : null;
|
|
432
432
|
return {
|
|
@@ -994,7 +994,7 @@ function toolUsageFact(result: unknown): string | null {
|
|
|
994
994
|
function outputFacts(finished: ToolExecutionFinished): string[] {
|
|
995
995
|
const parts: string[] = [];
|
|
996
996
|
if (isNonExecutedOutcome(finished.outcome)) {
|
|
997
|
-
if (finished.excludeFromContext === true) parts.push("
|
|
997
|
+
if (finished.excludeFromContext === true) parts.push("not sent to model");
|
|
998
998
|
return parts;
|
|
999
999
|
}
|
|
1000
1000
|
const exitCode = structuredExitCode(finished) ?? (finished.toolName === "bash" && !finished.isError ? "0" : null);
|
|
@@ -1024,7 +1024,7 @@ function outputFacts(finished: ToolExecutionFinished): string[] {
|
|
|
1024
1024
|
if (added.length > 0) parts.push(`added ${added.join(", ")}`);
|
|
1025
1025
|
}
|
|
1026
1026
|
if (isPlainObject(finished.result) && finished.result.terminate === true) parts.push("terminal result");
|
|
1027
|
-
if (finished.excludeFromContext === true) parts.push("
|
|
1027
|
+
if (finished.excludeFromContext === true) parts.push("not sent to model");
|
|
1028
1028
|
if (finished.evictedReason !== undefined) parts.push("evicted", finished.evictedReason);
|
|
1029
1029
|
return parts;
|
|
1030
1030
|
}
|
|
@@ -1379,7 +1379,7 @@ export function renderBashTranscriptExecution(
|
|
|
1379
1379
|
const shownBytes = Buffer.byteLength(execution.output, "utf8");
|
|
1380
1380
|
const totalBytes = execution.totalBytes ?? shownBytes;
|
|
1381
1381
|
const args: Record<string, unknown> = { command: execution.command };
|
|
1382
|
-
if (execution.excludeFromContext === true) args.context = "
|
|
1382
|
+
if (execution.excludeFromContext === true) args.context = "not sent to model";
|
|
1383
1383
|
const details = {
|
|
1384
1384
|
resultSize: {
|
|
1385
1385
|
bytes: totalBytes,
|
|
@@ -7,7 +7,7 @@ import { buildModelReplayAgentMessagesFromTurns } from "./model-session-replay.j
|
|
|
7
7
|
|
|
8
8
|
type SessionOwner = Pick<SessionContract, "create" | "current">;
|
|
9
9
|
type SessionChat = Pick<ChatLoop, "resetForSession">;
|
|
10
|
-
type RoutingSettings = Pick<ClioSettings, "
|
|
10
|
+
type RoutingSettings = Pick<ClioSettings, "chat">;
|
|
11
11
|
|
|
12
12
|
export interface SessionTranscriptDeps {
|
|
13
13
|
session?: SessionOwner;
|
|
@@ -74,8 +74,8 @@ export function createSessionTranscript(deps: SessionTranscriptDeps): SessionTra
|
|
|
74
74
|
const input: { cwd: string; target?: string; model?: string } = {
|
|
75
75
|
cwd: deps.getCwd?.() ?? process.cwd(),
|
|
76
76
|
};
|
|
77
|
-
if (settings?.
|
|
78
|
-
if (settings?.
|
|
77
|
+
if (settings?.chat.target) input.target = settings.chat.target;
|
|
78
|
+
if (settings?.chat.model) input.model = settings.chat.model;
|
|
79
79
|
deps.session.create(input);
|
|
80
80
|
};
|
|
81
81
|
|