@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
|
@@ -78,7 +78,7 @@ export type CouncilLayout = { mode: "grid"; columnWidth: number } | { mode: "sta
|
|
|
78
78
|
* moment one column would fall under {@link COUNCIL_COLUMN_MIN_WIDTH}: a grid
|
|
79
79
|
* where only some columns are readable is worse than no grid at all.
|
|
80
80
|
*/
|
|
81
|
-
|
|
81
|
+
function councilGridLayout(memberCount: number, contentWidth: number): CouncilLayout {
|
|
82
82
|
const count = Math.max(1, memberCount);
|
|
83
83
|
const usable = contentWidth - COUNCIL_COLUMN_GUTTER * (count - 1);
|
|
84
84
|
const columnWidth = Math.floor(usable / count);
|
|
@@ -124,7 +124,7 @@ function answerRows(theme: ClioTheme, member: CouncilMemberView, width: number,
|
|
|
124
124
|
* answer. Every line is clipped to the column so a long model id or a long
|
|
125
125
|
* answer line can never push a neighbouring column out of position.
|
|
126
126
|
*/
|
|
127
|
-
|
|
127
|
+
function councilMemberLines(
|
|
128
128
|
theme: ClioTheme,
|
|
129
129
|
member: CouncilMemberView,
|
|
130
130
|
width: number,
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type DispatchProgressPayload,
|
|
7
7
|
type DispatchRunIdentity,
|
|
8
8
|
} from "../core/bus-events.js";
|
|
9
|
+
import { resolveDispatchFailureStatus } from "../core/dispatch-outcome.js";
|
|
9
10
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
10
11
|
import { rawDurationMs } from "../core/timers.js";
|
|
11
12
|
import type { AgentAudience } from "../domains/agents/spec.js";
|
|
@@ -37,7 +38,7 @@ import {
|
|
|
37
38
|
type ObservabilityNotice,
|
|
38
39
|
type ObservabilitySnapshot,
|
|
39
40
|
} from "../domains/observability/index.js";
|
|
40
|
-
import { type CostProvenance, foregroundStreamUsage } from "../domains/providers/index.js";
|
|
41
|
+
import { type CostProvenance, foregroundStreamUsage, resolveCostProvenance } from "../domains/providers/index.js";
|
|
41
42
|
import { sanitizeCallTargetText } from "../domains/safety/call-target.js";
|
|
42
43
|
import { type Component, truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../engine/tui.js";
|
|
43
44
|
import { formatWorkerContextMeter } from "./context-meter.js";
|
|
@@ -121,7 +122,7 @@ export interface DispatchBoardRow {
|
|
|
121
122
|
gate?: { role: string; cycle: number };
|
|
122
123
|
council?: { group: string; label: string; color?: string; round: number };
|
|
123
124
|
/** Orchestrator-executed declared verification status. */
|
|
124
|
-
hostVerification?: "verified" | "rejected" | "skipped";
|
|
125
|
+
hostVerification?: "verified" | "rejected" | "skipped" | "not_implicated";
|
|
125
126
|
/**
|
|
126
127
|
* The canonical trust projection of the sealed receipt, read back from
|
|
127
128
|
* disk and authenticated against the ledger row. Absent while the run is
|
|
@@ -182,10 +183,7 @@ export interface DispatchBoardPhase {
|
|
|
182
183
|
* the column lines up across rows; a long step id is clipped with a marker
|
|
183
184
|
* rather than pushing the row's other facts out of position.
|
|
184
185
|
*/
|
|
185
|
-
|
|
186
|
-
phase: DispatchBoardPhase | undefined,
|
|
187
|
-
width = PHASE_COLUMN_WIDTH,
|
|
188
|
-
): string | null {
|
|
186
|
+
function formatDispatchPhaseCell(phase: DispatchBoardPhase | undefined, width = PHASE_COLUMN_WIDTH): string | null {
|
|
189
187
|
if (phase === undefined) return null;
|
|
190
188
|
return truncateToWidth(`w${phase.wave} ${phase.stepId}`, Math.max(1, width), "…", false);
|
|
191
189
|
}
|
|
@@ -294,9 +292,7 @@ export interface AgentAudiencePresentation {
|
|
|
294
292
|
* machinery. Returns null for base/custom agents, which the operator asked for
|
|
295
293
|
* directly and which therefore render like any other row.
|
|
296
294
|
*/
|
|
297
|
-
|
|
298
|
-
row: Pick<DispatchBoardRow, "agentAudience">,
|
|
299
|
-
): AgentAudiencePresentation | null {
|
|
295
|
+
function agentAudiencePresentation(row: Pick<DispatchBoardRow, "agentAudience">): AgentAudiencePresentation | null {
|
|
300
296
|
if (row.agentAudience === "shadow") return { glyph: GLYPH.subProcess, token: "muted" };
|
|
301
297
|
if (row.agentAudience === "internal") return { glyph: GLYPH.subProcess, token: "dim" };
|
|
302
298
|
return null;
|
|
@@ -439,10 +435,7 @@ function latestEvidenceFailureReason(notices: readonly ObservabilityNotice[], ru
|
|
|
439
435
|
* summary with an evidence bundle is ready; the latest error-level evidence
|
|
440
436
|
* notice for the run marks it failed.
|
|
441
437
|
*/
|
|
442
|
-
|
|
443
|
-
snapshot: ObservabilitySnapshot | undefined,
|
|
444
|
-
runId: string,
|
|
445
|
-
): RunEvidencePresentation {
|
|
438
|
+
function deriveRunEvidenceState(snapshot: ObservabilitySnapshot | undefined, runId: string): RunEvidencePresentation {
|
|
446
439
|
if (!snapshot || runId.length === 0) return { state: "none", viewFilter: `dispatch:${runId}` };
|
|
447
440
|
if (snapshot.pendingEvidenceBuildRunIds.includes(runId)) {
|
|
448
441
|
return { state: "pending", viewFilter: `evidence:${runId}` };
|
|
@@ -497,6 +490,16 @@ function cardUnitsLine(theme: ClioTheme, key: string, units: ReadonlyArray<strin
|
|
|
497
490
|
return visibleWidth(full) <= contentWidth ? full : fitUnits(theme, prefix, units, contentWidth);
|
|
498
491
|
}
|
|
499
492
|
|
|
493
|
+
/** A prose card value, wrapped inside the columns left by its one-time key. */
|
|
494
|
+
function cardWrappedValueLines(theme: ClioTheme, key: string, value: string, contentWidth: number): string[] {
|
|
495
|
+
const prefix = cardKvKey(theme, key);
|
|
496
|
+
const prefixWidth = visibleWidth(prefix);
|
|
497
|
+
const valueWidth = Math.max(1, contentWidth - prefixWidth);
|
|
498
|
+
return wrapTextWithAnsi(value, valueWidth).map(
|
|
499
|
+
(line, index) => `${index === 0 ? prefix : " ".repeat(prefixWidth)}${line}`,
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
|
|
500
503
|
// The `proof` row: the colored state marker, an optional failure reason, then
|
|
501
504
|
// the dim `/view` filter an operator would type.
|
|
502
505
|
function evidenceCardLine(theme: ClioTheme, evidence: RunEvidencePresentation, contentWidth: number): string | null {
|
|
@@ -509,7 +512,7 @@ function evidenceCardLine(theme: ClioTheme, evidence: RunEvidencePresentation, c
|
|
|
509
512
|
}
|
|
510
513
|
|
|
511
514
|
/** Sanitize lifecycle task text at the terminal boundary and collapse it to one bounded line. */
|
|
512
|
-
|
|
515
|
+
function sanitizeDispatchTaskSummary(value: unknown): string | undefined {
|
|
513
516
|
if (typeof value !== "string") return undefined;
|
|
514
517
|
const sanitized = sanitizeCallTargetText(value);
|
|
515
518
|
if (sanitized.length === 0) return undefined;
|
|
@@ -622,7 +625,7 @@ function trustCardLines(theme: ClioTheme, row: DispatchBoardRow, contentWidth: n
|
|
|
622
625
|
);
|
|
623
626
|
}
|
|
624
627
|
|
|
625
|
-
|
|
628
|
+
function renderDispatchCard(
|
|
626
629
|
row: DispatchBoardRow,
|
|
627
630
|
width: number,
|
|
628
631
|
evidence?: RunEvidencePresentation,
|
|
@@ -715,24 +718,22 @@ export function renderDispatchCard(
|
|
|
715
718
|
contentWidth,
|
|
716
719
|
),
|
|
717
720
|
targetLine,
|
|
718
|
-
...(row.taskSummary
|
|
719
|
-
? [truncateToWidth(`${cardKvKey(theme, "task")}${theme.fg("muted", row.taskSummary)}`, contentWidth, "…", false)]
|
|
720
|
-
: []),
|
|
721
|
+
...(row.taskSummary ? cardWrappedValueLines(theme, "task", theme.fg("muted", row.taskSummary), contentWidth) : []),
|
|
721
722
|
cardUnitsLine(theme, "status", statusUnits, contentWidth),
|
|
722
723
|
...trustCardLines(theme, row, contentWidth),
|
|
723
724
|
...(row.budget !== undefined
|
|
724
725
|
? [
|
|
725
|
-
|
|
726
|
-
|
|
726
|
+
...cardWrappedValueLines(
|
|
727
|
+
theme,
|
|
728
|
+
"policy",
|
|
729
|
+
theme.fg("muted", `${formatBudgetPolicy(row.budget)}; requested ${formatBudgetRequest(row.budget)}`),
|
|
727
730
|
contentWidth,
|
|
728
|
-
"…",
|
|
729
|
-
false,
|
|
730
731
|
),
|
|
731
|
-
|
|
732
|
-
|
|
732
|
+
...cardWrappedValueLines(
|
|
733
|
+
theme,
|
|
734
|
+
"budget",
|
|
735
|
+
theme.fg("muted", `${formatEffectiveBudget(row.budget)}; reason ${formatBudgetReasons(row.budget)}`),
|
|
733
736
|
contentWidth,
|
|
734
|
-
"…",
|
|
735
|
-
false,
|
|
736
737
|
),
|
|
737
738
|
]
|
|
738
739
|
: []),
|
|
@@ -797,7 +798,7 @@ export function renderDispatchCard(
|
|
|
797
798
|
const proofLine = evidenceCardLine(theme, evidence, contentWidth);
|
|
798
799
|
if (proofLine !== null) bodyLines.push(proofLine);
|
|
799
800
|
}
|
|
800
|
-
if (detail !== null) bodyLines.push(
|
|
801
|
+
if (detail !== null) bodyLines.push(...cardWrappedValueLines(theme, "detail", theme.fg("dim", detail), contentWidth));
|
|
801
802
|
|
|
802
803
|
return frame(theme, cardTitle, bodyLines, width, { rightMeta: elapsed });
|
|
803
804
|
}
|
|
@@ -956,10 +957,7 @@ export type DispatchBoardItem = { kind: "run"; row: DispatchBoardRow } | { kind:
|
|
|
956
957
|
* its first row and its remaining rows are consumed, so the board never shows a
|
|
957
958
|
* member both inside its group and beside it.
|
|
958
959
|
*/
|
|
959
|
-
|
|
960
|
-
rows: ReadonlyArray<DispatchBoardRow>,
|
|
961
|
-
selectedRunId?: string | null,
|
|
962
|
-
): DispatchBoardItem[] {
|
|
960
|
+
function dispatchBoardItems(rows: ReadonlyArray<DispatchBoardRow>, selectedRunId?: string | null): DispatchBoardItem[] {
|
|
963
961
|
const byGroup = new Map<string, DispatchBoardRow[]>();
|
|
964
962
|
for (const row of rows) {
|
|
965
963
|
const group = row.council?.group;
|
|
@@ -984,14 +982,14 @@ export function dispatchBoardItems(
|
|
|
984
982
|
}
|
|
985
983
|
|
|
986
984
|
/** The framed council card: the member grid or stack, with the synthesis run full width under it. */
|
|
987
|
-
|
|
985
|
+
function renderCouncilCard(group: CouncilGroupView, width: number): string[] {
|
|
988
986
|
const theme = clioTheme();
|
|
989
987
|
const contentWidth = Math.max(0, width - 4);
|
|
990
988
|
const title = `${theme.fg("info", "council")} ${theme.paint(group.group, { bold: true })}`;
|
|
991
989
|
return frame(theme, title, councilGroupBody(theme, group, contentWidth), width, { rightMeta: group.elapsed });
|
|
992
990
|
}
|
|
993
991
|
|
|
994
|
-
|
|
992
|
+
function formatDispatchBoardLines(
|
|
995
993
|
rows: ReadonlyArray<DispatchBoardRow>,
|
|
996
994
|
width = 76,
|
|
997
995
|
observability?: ObservabilitySnapshot,
|
|
@@ -1288,12 +1286,6 @@ function resolveAgentEndStatus(rawMessages: unknown): DispatchBoardStatus | null
|
|
|
1288
1286
|
return null;
|
|
1289
1287
|
}
|
|
1290
1288
|
|
|
1291
|
-
function resolveFailedStatus(reason: unknown): DispatchBoardStatus {
|
|
1292
|
-
if (reason === "dead" || reason === "stalled") return "dead";
|
|
1293
|
-
if (reason === "interrupted" || reason === "canceled") return "aborted";
|
|
1294
|
-
return "failed";
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1297
1289
|
function resolveFailureDetail(
|
|
1298
1290
|
payload: Partial<DispatchFailedPayload>,
|
|
1299
1291
|
fallback: string | null | undefined,
|
|
@@ -1604,7 +1596,7 @@ export function createDispatchBoardStore(
|
|
|
1604
1596
|
entry.durationMs = parseFiniteNumber(payload.durationMs, Math.max(0, rawDurationMs(entry.startedAtMs, now)));
|
|
1605
1597
|
entry.tokenCount = parseFiniteNumber(payload.tokenCount, entry.tokenCount);
|
|
1606
1598
|
entry.costUsd = parseFiniteNumber(payload.costUsd, entry.costUsd);
|
|
1607
|
-
entry.costProvenance = payload.costProvenance ?? "unknown";
|
|
1599
|
+
entry.costProvenance = resolveCostProvenance(payload.costProvenance, entry.costProvenance ?? "unknown");
|
|
1608
1600
|
entry.outcomeDetail = null;
|
|
1609
1601
|
if (payload.hostVerification !== undefined) entry.hostVerification = payload.hostVerification;
|
|
1610
1602
|
settleFromReceipt(entry);
|
|
@@ -1624,7 +1616,7 @@ export function createDispatchBoardStore(
|
|
|
1624
1616
|
const payload: Partial<DispatchFailedPayload> = raw ?? {};
|
|
1625
1617
|
const runId = parseRunId(payload.runId);
|
|
1626
1618
|
const previousStatus = runId !== null ? entries.get(runId)?.status : undefined;
|
|
1627
|
-
const resolvedStatus =
|
|
1619
|
+
const resolvedStatus = resolveDispatchFailureStatus(payload.reason);
|
|
1628
1620
|
const status = previousStatus === "dead" && resolvedStatus === "failed" ? "dead" : resolvedStatus;
|
|
1629
1621
|
const entry = upsertBase(payload, status, now);
|
|
1630
1622
|
if (!entry) return;
|
|
@@ -1633,7 +1625,7 @@ export function createDispatchBoardStore(
|
|
|
1633
1625
|
entry.durationMs = parseFiniteNumber(payload.durationMs, Math.max(0, rawDurationMs(entry.startedAtMs, now)));
|
|
1634
1626
|
entry.tokenCount = parseFiniteNumber(payload.tokenCount, entry.tokenCount);
|
|
1635
1627
|
entry.costUsd = parseFiniteNumber(payload.costUsd, entry.costUsd);
|
|
1636
|
-
entry.costProvenance = payload.costProvenance ?? "unknown";
|
|
1628
|
+
entry.costProvenance = resolveCostProvenance(payload.costProvenance, entry.costProvenance ?? "unknown");
|
|
1637
1629
|
entry.outcomeDetail = resolveFailureDetail(payload, entry.outcomeDetail);
|
|
1638
1630
|
if (payload.hostVerification !== undefined) entry.hostVerification = payload.hostVerification;
|
|
1639
1631
|
settleFromReceipt(entry);
|
|
@@ -1722,7 +1714,7 @@ export function createDispatchBoardStore(
|
|
|
1722
1714
|
entry.ttftMs = Math.round(performance.now() - entry.startedAtClockMs);
|
|
1723
1715
|
}
|
|
1724
1716
|
}
|
|
1725
|
-
if (type === "
|
|
1717
|
+
if (type === "clio_coder_write_record_downgraded") {
|
|
1726
1718
|
const rawPayload = (workerEvent as { payload?: unknown }).payload;
|
|
1727
1719
|
const payload =
|
|
1728
1720
|
typeof rawPayload === "object" && rawPayload !== null ? (rawPayload as Record<string, unknown>) : null;
|
|
@@ -1740,7 +1732,7 @@ export function createDispatchBoardStore(
|
|
|
1740
1732
|
// board says about what a worker is saying or touching comes from here,
|
|
1741
1733
|
// so the board and the transcript block cannot tell two stories.
|
|
1742
1734
|
entry.progress.observe(payload.event);
|
|
1743
|
-
if (type === "
|
|
1735
|
+
if (type === "clio_coder_steer_received") {
|
|
1744
1736
|
const steerPayload = (workerEvent as { payload?: { chars?: unknown } }).payload;
|
|
1745
1737
|
entry.steerAcknowledgement = {
|
|
1746
1738
|
receivedAtMs: Date.now(),
|
|
@@ -6,7 +6,28 @@ export interface EditorBashCommand {
|
|
|
6
6
|
excludeFromContext: boolean;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Invisible one-shot envelope used only between ClioEditor and its submit
|
|
11
|
+
* callback. Pi trims submitted text before invoking that callback, so a
|
|
12
|
+
* whitespace guard would disappear and re-arm a pasted `!` command. The
|
|
13
|
+
* controller removes this envelope before routing the text as an ordinary
|
|
14
|
+
* prompt; it is never persisted or sent to a model.
|
|
15
|
+
*/
|
|
16
|
+
export const PASTED_EDITOR_OPERATOR_GUARD = "\u2063";
|
|
17
|
+
|
|
18
|
+
export function guardPastedEditorOperator(text: string): string {
|
|
19
|
+
return `${PASTED_EDITOR_OPERATOR_GUARD}${text}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function unguardPastedEditorOperator(text: string): string {
|
|
23
|
+
return text.startsWith(PASTED_EDITOR_OPERATOR_GUARD) ? text.slice(PASTED_EDITOR_OPERATOR_GUARD.length) : text;
|
|
24
|
+
}
|
|
25
|
+
|
|
9
26
|
export function parseEditorBashCommand(text: string): EditorBashCommand | null {
|
|
27
|
+
// Commands are an editor-line operator, not a shell-script paste surface.
|
|
28
|
+
// The paste guard also makes a bracketed-pasted one-liner literal until it
|
|
29
|
+
// has crossed the editor submit boundary and been routed as a normal prompt.
|
|
30
|
+
if (text.startsWith(PASTED_EDITOR_OPERATOR_GUARD) || text.includes("\n") || text.includes("\r")) return null;
|
|
10
31
|
if (!text.startsWith("!")) return null;
|
|
11
32
|
const excludeFromContext = text.startsWith("!!");
|
|
12
33
|
const command = (excludeFromContext ? text.slice(2) : text.slice(1)).trim();
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* `!` intercept in the editor submit path.
|
|
5
5
|
*
|
|
6
6
|
* The target token is deliberately a bare word (letters, digits, underscore,
|
|
7
|
-
* hyphen).
|
|
8
|
-
*
|
|
7
|
+
* hyphen). File completion consults the same predicate and quotes an otherwise
|
|
8
|
+
* ambiguous root-level extensionless reference before it reaches this parser.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
export interface EditorSteerMention {
|
|
@@ -23,11 +23,16 @@ export type SteerTargetResolution =
|
|
|
23
23
|
| { kind: "ambiguous"; candidates: RunningDispatchRef[] }
|
|
24
24
|
| { kind: "none" };
|
|
25
25
|
|
|
26
|
-
const
|
|
26
|
+
const STEER_TARGET_TOKEN = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
|
|
27
|
+
const STEER_MENTION = /^@(\S+)\s+(\S[\s\S]*)$/;
|
|
28
|
+
|
|
29
|
+
export function isEditorSteerTargetToken(value: string): boolean {
|
|
30
|
+
return STEER_TARGET_TOKEN.test(value);
|
|
31
|
+
}
|
|
27
32
|
|
|
28
33
|
export function parseEditorSteerMention(text: string): EditorSteerMention | null {
|
|
29
34
|
const match = STEER_MENTION.exec(text.trim());
|
|
30
|
-
if (!match?.[1] || !match[2]) return null;
|
|
35
|
+
if (!match?.[1] || !match[2] || !isEditorSteerTargetToken(match[1])) return null;
|
|
31
36
|
return { target: match[1], text: match[2].trim() };
|
|
32
37
|
}
|
|
33
38
|
|
|
@@ -6,7 +6,7 @@ import type { SessionContract, SessionEntry } from "../domains/session/index.js"
|
|
|
6
6
|
import { toolPresentationPolicy } from "../tools/presentation.js";
|
|
7
7
|
import type { ChatLoop } from "./chat-loop.js";
|
|
8
8
|
import type { ChatPanel } from "./chat-panel.js";
|
|
9
|
-
import { bashExecutionEntryInput, parseEditorBashCommand } from "./editor-bash.js";
|
|
9
|
+
import { bashExecutionEntryInput, parseEditorBashCommand, unguardPastedEditorOperator } from "./editor-bash.js";
|
|
10
10
|
import {
|
|
11
11
|
formatSteerCandidates,
|
|
12
12
|
parseEditorSteerMention,
|
|
@@ -57,6 +57,8 @@ export interface EditorSubmitExpansion {
|
|
|
57
57
|
|
|
58
58
|
export interface EditorSubmitEditor {
|
|
59
59
|
getText(): string;
|
|
60
|
+
/** Draft spelling for an immediate send, including any editor provenance envelope. */
|
|
61
|
+
getTextForSubmit(): string;
|
|
60
62
|
setText(text: string): void;
|
|
61
63
|
addToHistory(text: string): void;
|
|
62
64
|
}
|
|
@@ -318,18 +320,19 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
318
320
|
submitEditorSteerMention(mention) !== "unhandled";
|
|
319
321
|
|
|
320
322
|
const submitEditorText = (text: string): void => {
|
|
321
|
-
const
|
|
323
|
+
const literalText = unguardPastedEditorOperator(text);
|
|
324
|
+
const trimmed = literalText.trim();
|
|
322
325
|
if (trimmed.length === 0) return;
|
|
323
326
|
deps.collapseLaunchpadBeforeSubmit?.();
|
|
324
327
|
if (parseEditorBashCommand(text)) {
|
|
325
328
|
if (!deps.chat.isStreaming() && !activeEditorBash) {
|
|
326
|
-
deps.editor.addToHistory(
|
|
329
|
+
deps.editor.addToHistory(literalText);
|
|
327
330
|
deps.editor.setText("");
|
|
328
331
|
} else {
|
|
329
332
|
// Pi Editor clears the buffer before invoking onSubmit. A command
|
|
330
333
|
// refused by either admission guard is still a draft, so put it back
|
|
331
334
|
// for the operator instead of silently discarding it.
|
|
332
|
-
deps.editor.setText(
|
|
335
|
+
deps.editor.setText(literalText);
|
|
333
336
|
}
|
|
334
337
|
if (runEditorBash(text)) deps.ui.requestRender();
|
|
335
338
|
return;
|
|
@@ -339,12 +342,12 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
339
342
|
const submission = submitEditorSteerMention(steerMention);
|
|
340
343
|
if (submission !== "unhandled") {
|
|
341
344
|
if (submission === "accepted") {
|
|
342
|
-
deps.editor.addToHistory(
|
|
345
|
+
deps.editor.addToHistory(literalText);
|
|
343
346
|
deps.editor.setText("");
|
|
344
347
|
} else {
|
|
345
348
|
// Resolution and dispatch failures are correctable rejections. Pi
|
|
346
349
|
// has already cleared the editor, so explicitly restore the draft.
|
|
347
|
-
deps.editor.setText(
|
|
350
|
+
deps.editor.setText(literalText);
|
|
348
351
|
}
|
|
349
352
|
deps.ui.requestRender();
|
|
350
353
|
return;
|
|
@@ -352,18 +355,18 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
352
355
|
}
|
|
353
356
|
const command = parseSlashCommand(trimmed);
|
|
354
357
|
if (isRejectedCommand(command)) {
|
|
355
|
-
deps.editor.setText(
|
|
358
|
+
deps.editor.setText(literalText);
|
|
356
359
|
deps.dispatchCommand(trimmed);
|
|
357
360
|
} else if (command.kind === "unknown-command") {
|
|
358
361
|
const result = deps.dispatchCommand(trimmed);
|
|
359
362
|
if (result === "rejected") {
|
|
360
|
-
deps.editor.setText(
|
|
363
|
+
deps.editor.setText(literalText);
|
|
361
364
|
} else {
|
|
362
|
-
deps.editor.addToHistory(
|
|
365
|
+
deps.editor.addToHistory(literalText);
|
|
363
366
|
deps.editor.setText("");
|
|
364
367
|
}
|
|
365
368
|
} else {
|
|
366
|
-
deps.editor.addToHistory(
|
|
369
|
+
deps.editor.addToHistory(literalText);
|
|
367
370
|
deps.editor.setText("");
|
|
368
371
|
deps.dispatchCommand(trimmed);
|
|
369
372
|
}
|
|
@@ -388,7 +391,8 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
388
391
|
};
|
|
389
392
|
|
|
390
393
|
const admitCapturedText = async (text: string, signal?: AbortSignal): Promise<void> => {
|
|
391
|
-
const
|
|
394
|
+
const literalText = unguardPastedEditorOperator(text);
|
|
395
|
+
const trimmed = literalText.trim();
|
|
392
396
|
if (trimmed.length === 0) return;
|
|
393
397
|
signal?.throwIfAborted();
|
|
394
398
|
deps.collapseLaunchpadBeforeSubmit?.();
|
|
@@ -396,7 +400,7 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
396
400
|
while (deps.chat.isStreaming()) await awaitWithAbort(deps.chat.whenSettled(), signal);
|
|
397
401
|
while (activeEditorBashSettlement) await awaitWithAbort(activeEditorBashSettlement, signal);
|
|
398
402
|
signal?.throwIfAborted();
|
|
399
|
-
deps.editor.addToHistory(
|
|
403
|
+
deps.editor.addToHistory(literalText);
|
|
400
404
|
runEditorBash(text);
|
|
401
405
|
deps.ui.requestRender();
|
|
402
406
|
return;
|
|
@@ -408,7 +412,7 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
408
412
|
if (submission === "rejected") {
|
|
409
413
|
throw new Error("queued boot steer was not admitted; preserving it for recovery");
|
|
410
414
|
}
|
|
411
|
-
deps.editor.addToHistory(
|
|
415
|
+
deps.editor.addToHistory(literalText);
|
|
412
416
|
deps.ui.requestRender();
|
|
413
417
|
return;
|
|
414
418
|
}
|
|
@@ -421,7 +425,7 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
421
425
|
deps.ui.requestRender();
|
|
422
426
|
throw new Error("queued boot command needs correction; preserving it for recovery");
|
|
423
427
|
}
|
|
424
|
-
deps.editor.addToHistory(
|
|
428
|
+
deps.editor.addToHistory(literalText);
|
|
425
429
|
signal?.throwIfAborted();
|
|
426
430
|
if (deps.dispatchCommandAsync) await deps.dispatchCommandAsync(trimmed, signal);
|
|
427
431
|
else deps.dispatchCommand(trimmed);
|
|
@@ -429,9 +433,10 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
429
433
|
};
|
|
430
434
|
|
|
431
435
|
const queueFollowUpFromEditor = (): void => {
|
|
432
|
-
const
|
|
436
|
+
const streaming = deps.chat.isStreaming();
|
|
437
|
+
const text = (streaming ? deps.editor.getText() : deps.editor.getTextForSubmit()).trim();
|
|
433
438
|
if (text.length === 0) return;
|
|
434
|
-
if (!
|
|
439
|
+
if (!streaming) {
|
|
435
440
|
deps.editor.setText("");
|
|
436
441
|
submitEditorText(text);
|
|
437
442
|
deps.ui.requestRender();
|
|
@@ -458,9 +463,10 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
458
463
|
};
|
|
459
464
|
|
|
460
465
|
const interruptFromEditor = (): void => {
|
|
461
|
-
const
|
|
466
|
+
const streaming = deps.chat.isStreaming();
|
|
467
|
+
const text = (streaming ? deps.editor.getText() : deps.editor.getTextForSubmit()).trim();
|
|
462
468
|
if (text.length === 0) return;
|
|
463
|
-
if (!
|
|
469
|
+
if (!streaming) {
|
|
464
470
|
deps.editor.setText("");
|
|
465
471
|
submitEditorText(text);
|
|
466
472
|
deps.ui.requestRender();
|
|
@@ -50,7 +50,7 @@ export function resolveExternalEditor(
|
|
|
50
50
|
|
|
51
51
|
export function editTextExternally(initialText: string, command: string | null): ExternalEditResult {
|
|
52
52
|
if (!command) return { ok: false, error: "no external editor configured; set VISUAL or EDITOR" };
|
|
53
|
-
const tmpFile = join(tmpdir(), `clio-editor-${process.pid}-${randomUUID()}.md`);
|
|
53
|
+
const tmpFile = join(tmpdir(), `clio-coder-editor-${process.pid}-${randomUUID()}.md`);
|
|
54
54
|
try {
|
|
55
55
|
writeFileSync(tmpFile, initialText, "utf8");
|
|
56
56
|
const result = runEditor(command, tmpFile);
|