@iowarp/clio-coder 0.4.0 → 0.4.1
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 +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- 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-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- 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-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- 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 +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- 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 +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -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 +8 -5
- 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/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- 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 +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- 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 +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -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/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- 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 +48 -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 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- 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/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 +65 -61
- 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/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- 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 +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -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 +12 -2
- 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/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-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 +20 -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 +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- 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/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- 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} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- 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 +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -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/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- 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 +39 -13
- 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/finish-contract.ts +2 -1
- 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/share/archive.ts +85 -36
- 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 +27 -26
- 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 +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- 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/loop-guard.ts +0 -5
- 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 +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- 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 +30 -33
- 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 +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -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/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- 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 +339 -293
- 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 +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- 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 +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- 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 +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- 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-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { type Dirent, readdirSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import type { ContextRecalledPayload } from "../../core/bus-events.js";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
SKILL_INSTALL_OFFER_OPTION_NEVER,
|
|
6
|
+
SKILL_INSTALL_OFFER_OPTION_NOT_NOW,
|
|
7
|
+
SKILL_INSTALL_OFFER_OPTION_PROJECT,
|
|
8
|
+
SKILL_INSTALL_OFFER_OPTION_USER,
|
|
9
|
+
SKILL_SUGGESTION_ANCHOR,
|
|
10
|
+
} from "../../core/skill-activation.js";
|
|
5
11
|
import { ToolNames } from "../../core/tool-names.js";
|
|
6
12
|
import { foldWorkingSet } from "../../domains/context/working-set/fold.js";
|
|
7
13
|
import {
|
|
@@ -289,6 +295,14 @@ function renderSkillsList(
|
|
|
289
295
|
"",
|
|
290
296
|
`If one skill above matches the current task, begin your reply with the line \`${SKILL_SUGGESTION_ANCHOR}\` (a comma-separated sequence, in order, when several compose), then continue the task in the same turn without it; only the operator can run it. If none match, do not mention skills.`,
|
|
291
297
|
);
|
|
298
|
+
if (marketplace.length > 0) {
|
|
299
|
+
// The offer protocol mirrors the marketplace-offer middleware: fixed
|
|
300
|
+
// option labels so the harness recognizes the answer, and the model
|
|
301
|
+
// never performs an install itself.
|
|
302
|
+
lines.push(
|
|
303
|
+
`When no installed skill serves the task but a marketplace skill above genuinely does, you may instead ask the operator with ask_user (mode=single_question, header "Install skill") whether to install it, offering exactly: "${SKILL_INSTALL_OFFER_OPTION_PROJECT}", "${SKILL_INSTALL_OFFER_OPTION_USER}", "${SKILL_INSTALL_OFFER_OPTION_NOT_NOW}", "${SKILL_INSTALL_OFFER_OPTION_NEVER}". The harness handles the answer and any install; never install or load a skill yourself.`,
|
|
304
|
+
);
|
|
305
|
+
}
|
|
292
306
|
return lines.join("\n");
|
|
293
307
|
}
|
|
294
308
|
|
|
@@ -456,10 +456,12 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
456
456
|
return shapeRejection(args, "dispatch: apply_winner must be an options object");
|
|
457
457
|
}
|
|
458
458
|
const branch = stringArg(args.apply_winner, "branch");
|
|
459
|
-
const match = branch
|
|
459
|
+
const match = branch
|
|
460
|
+
? /^(?:clio-coder|clio)\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch)
|
|
461
|
+
: null;
|
|
460
462
|
if (branch === undefined) return shapeRejection(args, "dispatch: apply_winner.branch is required");
|
|
461
463
|
if (match === null) {
|
|
462
|
-
return shapeRejection(args, "dispatch: apply_winner.branch must be a clio/compete/<group>/<n> branch");
|
|
464
|
+
return shapeRejection(args, "dispatch: apply_winner.branch must be a clio-coder/compete/<group>/<n> branch");
|
|
463
465
|
}
|
|
464
466
|
try {
|
|
465
467
|
const cwd = resolve(stringArg(args.apply_winner, "cwd") ?? process.cwd());
|
|
@@ -62,7 +62,7 @@ const AUTO_BASELINE_FALLBACK_AGENT_ID = "scout";
|
|
|
62
62
|
* the mapped recipe is not present in this install, so a trimmed recipe set
|
|
63
63
|
* can never produce a dispatch against an agent id that does not resolve.
|
|
64
64
|
*/
|
|
65
|
-
|
|
65
|
+
function autoBaselineAgentId(task: string, hasAgent?: (id: string) => boolean): string {
|
|
66
66
|
const mapped = AUTO_BASELINE_BY_TASK_TYPE[classifyAgentTask(task).taskType] ?? AUTO_BASELINE_FALLBACK_AGENT_ID;
|
|
67
67
|
if (hasAgent === undefined) return mapped;
|
|
68
68
|
if (hasAgent(mapped)) return mapped;
|
|
@@ -900,14 +900,3 @@ export function describeDispatchPlan(rawArgs: Record<string, unknown> | undefine
|
|
|
900
900
|
...(confirmation !== undefined ? { confirmation } : {}),
|
|
901
901
|
};
|
|
902
902
|
}
|
|
903
|
-
|
|
904
|
-
/** Registry-side predicate: does this dispatch call require plan approval at supervised levels? */
|
|
905
|
-
export function isPlanScaleDispatchArgs(rawArgs: Record<string, unknown> | undefined): boolean {
|
|
906
|
-
try {
|
|
907
|
-
return describeDispatchPlan(rawArgs).planScale;
|
|
908
|
-
} catch {
|
|
909
|
-
// A malformed call fails closed as NOT plan-scale; the dispatch tool's
|
|
910
|
-
// own validation rejects it with a real error message.
|
|
911
|
-
return false;
|
|
912
|
-
}
|
|
913
|
-
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BusChannels } from "../core/bus-events.js";
|
|
2
2
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
3
|
+
import { normalizeClioCoderEventRecord, normalizeClioCoderEventType } from "../core/naming-events.js";
|
|
3
4
|
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
4
5
|
import { durableAssistantTextFromEvent } from "../domains/dispatch/event-pump.js";
|
|
5
6
|
import { defaultRunEventJournal, type RunEventJournalSink } from "../domains/dispatch/run-event-journal.js";
|
|
@@ -61,18 +62,19 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
function eventDetail(event: unknown): string | undefined {
|
|
64
|
-
const
|
|
65
|
+
const normalized = isRecord(event) ? normalizeClioCoderEventRecord(event) : event;
|
|
66
|
+
const text = assistantTextFromEvent(normalized);
|
|
65
67
|
if (text.length > 0) return truncateUtf8(text, RUN_TAIL_TEXT_LIMIT, "...");
|
|
66
|
-
if (!isRecord(
|
|
67
|
-
if (
|
|
68
|
-
const tool = typeof
|
|
69
|
-
const outcome = typeof
|
|
68
|
+
if (!isRecord(normalized)) return undefined;
|
|
69
|
+
if (normalized.type === "clio_coder_tool_finish" && isRecord(normalized.payload)) {
|
|
70
|
+
const tool = typeof normalized.payload.tool === "string" ? normalized.payload.tool : "tool";
|
|
71
|
+
const outcome = typeof normalized.payload.outcome === "string" ? normalized.payload.outcome : "";
|
|
70
72
|
return `${tool} ${outcome}`.trim();
|
|
71
73
|
}
|
|
72
|
-
if (
|
|
73
|
-
const attempt = typeof
|
|
74
|
-
const runId = typeof
|
|
75
|
-
const reason = typeof
|
|
74
|
+
if (normalized.type === "attempt_start") {
|
|
75
|
+
const attempt = typeof normalized.attempt === "number" ? normalized.attempt : "?";
|
|
76
|
+
const runId = typeof normalized.runId === "string" ? normalized.runId : "?";
|
|
77
|
+
const reason = typeof normalized.reason === "string" ? normalized.reason : "retry";
|
|
76
78
|
return truncateUtf8(`attempt ${attempt} -> ${runId}: ${reason}`, RUN_TAIL_TEXT_LIMIT, "...");
|
|
77
79
|
}
|
|
78
80
|
return undefined;
|
|
@@ -89,7 +91,7 @@ function eventDetail(event: unknown): string | undefined {
|
|
|
89
91
|
* (src/domains/dispatch/run-event-journal-bridge.ts) call it.
|
|
90
92
|
*/
|
|
91
93
|
export function runTailEntryFromEvent(event: unknown, at: string = new Date().toISOString()): RunTailEntry | null {
|
|
92
|
-
const type = isRecord(event) && typeof event.type === "string" ? event.type : "unknown";
|
|
94
|
+
const type = isRecord(event) && typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : "unknown";
|
|
93
95
|
if (type === "heartbeat" || type === "message_update") return null;
|
|
94
96
|
const entry: RunTailEntry = { at, type };
|
|
95
97
|
const detail = eventDetail(event);
|
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
claimCompeteGroup,
|
|
58
58
|
cleanupCompeteGroup,
|
|
59
59
|
commitCandidateWork,
|
|
60
|
+
competeBranchForCandidate,
|
|
60
61
|
createCandidateWorktreeMapped,
|
|
61
62
|
isGitRepository,
|
|
62
63
|
loadCompeteGroup,
|
|
@@ -964,6 +965,8 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
964
965
|
const pick = judged?.ok ? judged.result.winner : null;
|
|
965
966
|
const pickedSubject = pick === null ? undefined : record.subjects[pick - 1];
|
|
966
967
|
const candidateReceipt = pickedSubject === undefined ? null : readVerifiedGateReceipt(deps, pickedSubject.runId);
|
|
968
|
+
const root = record.resourceRoot ?? process.cwd();
|
|
969
|
+
const pickedBranch = pick === null ? null : competeBranchForCandidate(root, record.group, pick);
|
|
967
970
|
if (pickedSubject !== undefined && candidateReceipt === null) {
|
|
968
971
|
throw new Error(
|
|
969
972
|
`pending compete decision ${record.id} has no verified candidate receipt for ${pickedSubject.runId}`,
|
|
@@ -971,11 +974,10 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
971
974
|
}
|
|
972
975
|
let blockedProtected: string[] = [];
|
|
973
976
|
if (pick !== null && pickedSubject !== undefined && candidateReceipt !== null) {
|
|
974
|
-
const root = record.resourceRoot ?? process.cwd();
|
|
975
977
|
const protectedPaths = deps.dispatch.protectedArtifactState?.().artifacts.map((artifact) => artifact.path) ?? [];
|
|
976
978
|
blockedProtected = protectedPathsChangedByCompeteBranch(
|
|
977
979
|
root,
|
|
978
|
-
`clio/compete/${record.group}/${pick}`,
|
|
980
|
+
pickedBranch ?? `clio-coder/compete/${record.group}/${pick}`,
|
|
979
981
|
protectedPaths,
|
|
980
982
|
);
|
|
981
983
|
}
|
|
@@ -985,7 +987,7 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
985
987
|
candidateReceipt !== null &&
|
|
986
988
|
!isPipelineStepFailure(candidateReceipt) &&
|
|
987
989
|
blockedProtected.length === 0;
|
|
988
|
-
if (validWinner && pick !== null && pickedSubject !== undefined) {
|
|
990
|
+
if (validWinner && pick !== null && pickedSubject !== undefined && pickedBranch !== null) {
|
|
989
991
|
draft = {
|
|
990
992
|
group: record.group,
|
|
991
993
|
topology: "compete",
|
|
@@ -997,7 +999,7 @@ function recoverPendingGateEvidence(deps: DispatchToolDeps): void {
|
|
|
997
999
|
winner: {
|
|
998
1000
|
index: pick,
|
|
999
1001
|
subject: pickedSubject,
|
|
1000
|
-
branch:
|
|
1002
|
+
branch: pickedBranch,
|
|
1001
1003
|
},
|
|
1002
1004
|
};
|
|
1003
1005
|
} else {
|
|
@@ -1599,9 +1601,12 @@ function runApplyWinner(
|
|
|
1599
1601
|
};
|
|
1600
1602
|
}
|
|
1601
1603
|
const branch = input.branch;
|
|
1602
|
-
const match = /^clio\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch);
|
|
1604
|
+
const match = /^(?:clio-coder|clio)\/compete\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/([1-9]\d*)$/.exec(branch);
|
|
1603
1605
|
if (!match) {
|
|
1604
|
-
return {
|
|
1606
|
+
return {
|
|
1607
|
+
kind: "error",
|
|
1608
|
+
message: "dispatch: apply_winner.branch must be a clio-coder/compete/<group>/<n> branch",
|
|
1609
|
+
};
|
|
1605
1610
|
}
|
|
1606
1611
|
const group = match[1] ?? "";
|
|
1607
1612
|
const winnerIndex = Number.parseInt(match[2] ?? "", 10);
|
package/src/tools/dispatch.ts
CHANGED
|
@@ -252,7 +252,7 @@ export function createDispatchTool(
|
|
|
252
252
|
apply_winner: Type.Optional(
|
|
253
253
|
Type.Object(
|
|
254
254
|
{
|
|
255
|
-
branch: Type.String({ description: "Preserved winner branch: clio/compete/<group>/<n>." }),
|
|
255
|
+
branch: Type.String({ description: "Preserved winner branch: clio-coder/compete/<group>/<n>." }),
|
|
256
256
|
cwd: Type.Optional(Type.String({ description: "Repository root (default: current directory)." })),
|
|
257
257
|
},
|
|
258
258
|
{
|
package/src/tools/find.ts
CHANGED
|
@@ -31,12 +31,7 @@ type FindOrder = "path" | "mtime";
|
|
|
31
31
|
// Build fd's argv. Ignore semantics (hidden files, .gitignore honoring,
|
|
32
32
|
// generated-dir excludes, include_ignored) come entirely from the shared
|
|
33
33
|
// ignore policy so grep and find never disagree about tree visibility.
|
|
34
|
-
|
|
35
|
-
pattern: string,
|
|
36
|
-
searchPath: string,
|
|
37
|
-
maxResults: number,
|
|
38
|
-
includeIgnored: boolean,
|
|
39
|
-
): string[] {
|
|
34
|
+
function buildFdArgs(pattern: string, searchPath: string, maxResults: number, includeIgnored: boolean): string[] {
|
|
40
35
|
const args = ["--glob", "--color=never", ...fdIgnoreArgs(searchPath, includeIgnored)];
|
|
41
36
|
args.push("--max-results", String(maxResults));
|
|
42
37
|
let effectivePattern = pattern;
|
package/src/tools/monitor.ts
CHANGED
|
@@ -214,16 +214,16 @@ const TOOLS_MAX_BYTES = 8 * 1024;
|
|
|
214
214
|
const TOOLS_ARGUMENTS_CHARS = 160;
|
|
215
215
|
|
|
216
216
|
/**
|
|
217
|
-
* Tail event types that describe one tool call. `
|
|
217
|
+
* Tail event types that describe one tool call. `clio_coder_tool_finish` is the
|
|
218
218
|
* authoritative per-call outcome (it distinguishes a permission block from a
|
|
219
219
|
* command that ran and exited nonzero); the engine's own `tool_execution_end`
|
|
220
220
|
* is kept only when the tail recorded a detail for it, since a bare type line
|
|
221
221
|
* says nothing the finish event does not.
|
|
222
222
|
*/
|
|
223
223
|
const TOOL_CALL_EVENT_TYPES: ReadonlySet<string> = new Set([
|
|
224
|
-
"
|
|
225
|
-
"
|
|
226
|
-
"
|
|
224
|
+
"clio_coder_tool_finish",
|
|
225
|
+
"clio_coder_permission_resolved",
|
|
226
|
+
"clio_coder_permission_escalated",
|
|
227
227
|
]);
|
|
228
228
|
|
|
229
229
|
function toolCallLines(entries: ReadonlyArray<{ at: string; type: string; detail?: string }>): string[] {
|
package/src/tools/observers.ts
CHANGED
|
@@ -44,39 +44,6 @@ export interface FileMutationEvent {
|
|
|
44
44
|
toolName: string;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* Defers file-mutation sinks off the after_tool hot path and coalesces rapid
|
|
49
|
-
* events into one best-effort batch. Lifecycle-owned sinks that must drain at
|
|
50
|
-
* shutdown should admit work synchronously instead of using this convenience.
|
|
51
|
-
*/
|
|
52
|
-
export function coalescePathSink(sink: (paths: string[]) => void): (event: FileMutationEvent) => void {
|
|
53
|
-
const pending = new Set<string>();
|
|
54
|
-
let flushScheduled = false;
|
|
55
|
-
|
|
56
|
-
const scheduleFlush = (): void => {
|
|
57
|
-
if (flushScheduled) return;
|
|
58
|
-
flushScheduled = true;
|
|
59
|
-
setImmediate(() => {
|
|
60
|
-
flushScheduled = false;
|
|
61
|
-
if (pending.size === 0) return;
|
|
62
|
-
const paths = [...pending];
|
|
63
|
-
pending.clear();
|
|
64
|
-
try {
|
|
65
|
-
sink(paths);
|
|
66
|
-
} catch {
|
|
67
|
-
// Incremental indexing is best-effort and must not change tool execution.
|
|
68
|
-
}
|
|
69
|
-
if (pending.size > 0) scheduleFlush();
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
return (event) => {
|
|
74
|
-
if (event.paths.length === 0) return;
|
|
75
|
-
for (const path of event.paths) pending.add(path);
|
|
76
|
-
scheduleFlush();
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
47
|
/** Notifies the caller after a successful file-mutating tool, for incremental indexing. */
|
|
81
48
|
export function createFileMutationObserver(sink: (event: FileMutationEvent) => void): MiddlewareHookRegistration {
|
|
82
49
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
2
|
import { createHash, randomBytes } from "node:crypto";
|
|
3
|
-
import { existsSync, mkdirSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
5
5
|
|
|
6
6
|
export type TaskWorktreeApply = "merge" | "preserve";
|
|
@@ -25,7 +25,9 @@ export interface TaskWorktreeReceipt {
|
|
|
25
25
|
|
|
26
26
|
const SAFE_RUN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
|
|
27
27
|
const OWNER_FILE_SUFFIX = ".task-owner.json";
|
|
28
|
-
const
|
|
28
|
+
const TASK_WORKTREE_KIND = "clio-coder-task-worktree";
|
|
29
|
+
const LEGACY_TASK_WORKTREE_KIND = "clio-task-worktree";
|
|
30
|
+
const COMMIT_IDENTITY = "clio-coder-task";
|
|
29
31
|
|
|
30
32
|
function gitBytes(root: string, args: string[]): Buffer {
|
|
31
33
|
return execFileSync("git", ["-C", root, ...args], {
|
|
@@ -160,7 +162,7 @@ export function createTaskWorktree(root: string, runId: string, base?: string):
|
|
|
160
162
|
const resolvedBase = base ?? git(canonical, ["rev-parse", "HEAD"]);
|
|
161
163
|
const parent = join(canonical, ".clio-coder", "worktrees");
|
|
162
164
|
const path = join(parent, runId);
|
|
163
|
-
const branch = `clio/task/${runId}`;
|
|
165
|
+
const branch = `clio-coder/task/${runId}`;
|
|
164
166
|
mkdirSync(parent, { recursive: true });
|
|
165
167
|
if (!isCanonicalWorktreePathInside(parent, path))
|
|
166
168
|
throw new Error(`task worktree path escapes its parent for run ${runId}`);
|
|
@@ -168,7 +170,7 @@ export function createTaskWorktree(root: string, runId: string, base?: string):
|
|
|
168
170
|
const ownerToken = randomBytes(16).toString("hex");
|
|
169
171
|
writeFileSync(
|
|
170
172
|
`${path}${OWNER_FILE_SUFFIX}`,
|
|
171
|
-
`${JSON.stringify({ version: 1, kind:
|
|
173
|
+
`${JSON.stringify({ version: 1, kind: TASK_WORKTREE_KIND, root: canonical, runId, branch, base: resolvedBase, ownerToken }, null, 2)}\n`,
|
|
172
174
|
{ encoding: "utf8", flag: "wx" },
|
|
173
175
|
);
|
|
174
176
|
return { root: canonical, runId, path, branch, base: resolvedBase, ownerToken };
|
|
@@ -182,11 +184,30 @@ function assertOwnership(worktree: TaskWorktree): void {
|
|
|
182
184
|
) {
|
|
183
185
|
throw new Error(`task worktree ${worktree.runId} has an invalid ownership path`);
|
|
184
186
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
+
const ownerPath = `${worktree.path}${OWNER_FILE_SUFFIX}`;
|
|
188
|
+
if (!existsSync(ownerPath)) throw new Error(`task worktree ${worktree.runId} has no ownership file`);
|
|
189
|
+
let marker: Record<string, unknown>;
|
|
190
|
+
try {
|
|
191
|
+
const value = JSON.parse(readFileSync(ownerPath, "utf8")) as unknown;
|
|
192
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error("not an object");
|
|
193
|
+
marker = value as Record<string, unknown>;
|
|
194
|
+
} catch {
|
|
195
|
+
throw new Error(`task worktree ${worktree.runId} has an invalid ownership file`);
|
|
196
|
+
}
|
|
197
|
+
if (
|
|
198
|
+
marker.version !== 1 ||
|
|
199
|
+
(marker.kind !== TASK_WORKTREE_KIND && marker.kind !== LEGACY_TASK_WORKTREE_KIND) ||
|
|
200
|
+
marker.root !== worktree.root ||
|
|
201
|
+
marker.runId !== worktree.runId ||
|
|
202
|
+
marker.branch !== worktree.branch ||
|
|
203
|
+
marker.base !== worktree.base ||
|
|
204
|
+
marker.ownerToken !== worktree.ownerToken
|
|
205
|
+
) {
|
|
206
|
+
throw new Error(`task worktree ${worktree.runId} ownership facts do not match`);
|
|
207
|
+
}
|
|
187
208
|
}
|
|
188
209
|
|
|
189
|
-
function commitTaskWorktree(worktree: TaskWorktree, message = `Clio task ${worktree.runId}`): boolean {
|
|
210
|
+
function commitTaskWorktree(worktree: TaskWorktree, message = `Clio Coder task ${worktree.runId}`): boolean {
|
|
190
211
|
assertOwnership(worktree);
|
|
191
212
|
return commitWorktreePath(worktree.path, COMMIT_IDENTITY, message);
|
|
192
213
|
}
|
|
@@ -234,7 +234,7 @@ function boundedId(base: string, suffix = ""): string {
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
/** Allocate the same stable suffix for the same ordered set of occupied IDs. */
|
|
237
|
-
|
|
237
|
+
function deterministicVerifierId(preferredId: string, occupied: ReadonlySet<string>): string {
|
|
238
238
|
const base = boundedId(slug(preferredId, "check"));
|
|
239
239
|
if (!occupied.has(base) && base !== "frontend") return base;
|
|
240
240
|
for (let index = 2; index <= PROJECT_VERIFIER_CATALOG_CAPS.checks + 2; index += 1) {
|
|
@@ -892,7 +892,7 @@ function serializeVerifierDraft(draft: VerifierDraft): string {
|
|
|
892
892
|
}
|
|
893
893
|
|
|
894
894
|
/** Validate with the same production parser used by verify(). */
|
|
895
|
-
|
|
895
|
+
function validateVerifierDraft(draft: VerifierDraft): VerifierDraftValidation {
|
|
896
896
|
const text = serializeVerifierDraft(draft);
|
|
897
897
|
const parsed = parseProjectVerifierCatalogText(text, draft.workspaceRoot, draft.catalogPath);
|
|
898
898
|
if (!parsed.ok) return { ok: false, reason: parsed.reason, text };
|
|
@@ -944,10 +944,7 @@ function cloneDraft(draft: VerifierDraft): VerifierDraft {
|
|
|
944
944
|
}
|
|
945
945
|
|
|
946
946
|
/** Apply edits to a copy so a collision or schema failure leaves the prior draft intact. */
|
|
947
|
-
|
|
948
|
-
draft: VerifierDraft,
|
|
949
|
-
revisions: ReadonlyArray<VerifierRevision>,
|
|
950
|
-
): VerifierRevisionResult {
|
|
947
|
+
function reviseVerifierDraft(draft: VerifierDraft, revisions: ReadonlyArray<VerifierRevision>): VerifierRevisionResult {
|
|
951
948
|
const next = cloneDraft(draft);
|
|
952
949
|
const diagnostics: string[] = [];
|
|
953
950
|
for (const revision of revisions) {
|
|
@@ -447,7 +447,7 @@ async function checkModuleJavaScript(
|
|
|
447
447
|
label: string,
|
|
448
448
|
options: ValidationOptions,
|
|
449
449
|
): Promise<string | null> {
|
|
450
|
-
const dir = mkdtempSync(path.join(tmpdir(), "clio-frontend-check-"));
|
|
450
|
+
const dir = mkdtempSync(path.join(tmpdir(), "clio-coder-frontend-check-"));
|
|
451
451
|
const file = path.join(dir, "module.mjs");
|
|
452
452
|
try {
|
|
453
453
|
writeFileSync(file, source, "utf8");
|
package/src/tools/web-fetch.ts
CHANGED
package/src/worker/entry.ts
CHANGED
|
@@ -122,7 +122,7 @@ async function main(): Promise<number> {
|
|
|
122
122
|
setResidencyNoticeSink((notice) => {
|
|
123
123
|
process.stderr.write(`[worker] residency ${notice.kind}: ${notice.message}\n`);
|
|
124
124
|
if (notice.kind === "will-not-fit") {
|
|
125
|
-
emitEvent({ type: "
|
|
125
|
+
emitEvent({ type: "clio_coder_run_outcome", payload: { outcomeCode: "vram_capacity_fit_failure" } });
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
const demux = createWorkerStdinDemux();
|
|
@@ -227,12 +227,13 @@ async function main(): Promise<number> {
|
|
|
227
227
|
const handle = startWorkerRun(input, (event) => emitEvent(projectWorkerEventForStdout(event)));
|
|
228
228
|
// The demux buffers lines that landed before the runtime handle existed.
|
|
229
229
|
// Single-shot subprocesses expose no steer method, and an SDK query can race
|
|
230
|
-
// completion. The runtime emits the receipt-bearing
|
|
230
|
+
// completion. The runtime emits the receipt-bearing clio_coder_steer_received event
|
|
231
231
|
// only after it accepts the message; rejected input is diagnostic-only.
|
|
232
232
|
demux.onSteer(
|
|
233
233
|
createOrderedSteerHandler(
|
|
234
234
|
(text) => handle.steer?.(text) ?? false,
|
|
235
|
-
({ text, sequence }) =>
|
|
235
|
+
({ text, sequence }) =>
|
|
236
|
+
emitEvent({ type: "clio_coder_steer_received", payload: { chars: text.trim().length, sequence } }),
|
|
236
237
|
(reason) => process.stderr.write(`[worker] dropped steer: ${reason}\n`),
|
|
237
238
|
),
|
|
238
239
|
);
|
package/src/worker/protocol.ts
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { createHash } from "node:crypto";
|
|
25
|
+
import { normalizeClioCoderEventRecord } from "../core/naming-events.js";
|
|
25
26
|
|
|
26
27
|
/** Current wire protocol. A peer announcing anything else is not executed. */
|
|
27
28
|
export const WORKER_PROTOCOL_VERSION = 1;
|
|
@@ -291,7 +292,7 @@ const HEX_64 = /^[0-9a-f]{64}$/;
|
|
|
291
292
|
* always present and never leaks absence as an empty string.
|
|
292
293
|
*/
|
|
293
294
|
export function endpointIdentityHash(url: string | undefined): string {
|
|
294
|
-
if (url === undefined || url.trim().length === 0) return sha256Hex("clio.endpoint:none");
|
|
295
|
+
if (url === undefined || url.trim().length === 0) return sha256Hex("clio-coder.endpoint:none");
|
|
295
296
|
const raw = url.trim();
|
|
296
297
|
let canonical: string;
|
|
297
298
|
try {
|
|
@@ -301,17 +302,17 @@ export function endpointIdentityHash(url: string | undefined): string {
|
|
|
301
302
|
} catch {
|
|
302
303
|
canonical = raw.replace(/\/+$/u, "");
|
|
303
304
|
}
|
|
304
|
-
return sha256Hex(`clio.endpoint:${canonical}`);
|
|
305
|
+
return sha256Hex(`clio-coder.endpoint:${canonical}`);
|
|
305
306
|
}
|
|
306
307
|
|
|
307
308
|
/** Digest of one WorkerSpec document, computed identically on both ends. */
|
|
308
309
|
export function workerSpecDigest(spec: unknown): string {
|
|
309
|
-
return sha256Hex(`clio.workerSpec:${canonicalJson(spec)}`);
|
|
310
|
+
return sha256Hex(`clio-coder.workerSpec:${canonicalJson(spec)}`);
|
|
310
311
|
}
|
|
311
312
|
|
|
312
313
|
/** Stable signature of the effective tool surface a worker will expose. */
|
|
313
314
|
export function toolSignatureOf(names: ReadonlyArray<string>): string {
|
|
314
|
-
return sha256Hex(`clio.tools:${[...names].sort().join(",")}`);
|
|
315
|
+
return sha256Hex(`clio-coder.tools:${[...names].sort().join(",")}`);
|
|
315
316
|
}
|
|
316
317
|
|
|
317
318
|
/**
|
|
@@ -365,7 +366,8 @@ function parseJsonObject(line: string, maxBytes: number, lane: string): FramePar
|
|
|
365
366
|
|
|
366
367
|
/** Parse one bulk stdout line under the bulk ceiling. */
|
|
367
368
|
export function parseBulkFrame(line: string): FrameParseResult<Record<string, unknown>> {
|
|
368
|
-
|
|
369
|
+
const parsed = parseJsonObject(line, WORKER_BULK_FRAME_MAX_BYTES, "bulk");
|
|
370
|
+
return parsed.ok ? { ok: true, value: normalizeClioCoderEventRecord(parsed.value) } : parsed;
|
|
369
371
|
}
|
|
370
372
|
|
|
371
373
|
/** True when a raw stderr line belongs to the structured control lane. */
|
|
@@ -507,15 +509,15 @@ export function parseControlFrame(line: string): FrameParseResult<WorkerControlF
|
|
|
507
509
|
*/
|
|
508
510
|
const RECEIPT_BEARING_BULK_TYPES = new Set([
|
|
509
511
|
"message_end",
|
|
510
|
-
"
|
|
511
|
-
"
|
|
512
|
-
"
|
|
513
|
-
"
|
|
514
|
-
"
|
|
515
|
-
"
|
|
516
|
-
"
|
|
517
|
-
"
|
|
518
|
-
"
|
|
512
|
+
"clio_coder_run_outcome",
|
|
513
|
+
"clio_coder_permission_escalated",
|
|
514
|
+
"clio_coder_permission_resolved",
|
|
515
|
+
"clio_coder_steer_received",
|
|
516
|
+
"clio_coder_tool_activity",
|
|
517
|
+
"clio_coder_skill_activation",
|
|
518
|
+
"clio_coder_safety_decision",
|
|
519
|
+
"clio_coder_verification",
|
|
520
|
+
"clio_coder_usage",
|
|
519
521
|
"tool_execution_end",
|
|
520
522
|
"spawn_error",
|
|
521
523
|
]);
|
|
@@ -143,7 +143,7 @@ interface WorkerSpecFields {
|
|
|
143
143
|
* Non-stall posture for permission-requiring tool calls. "deny" converts
|
|
144
144
|
* the call into a structured tool denial and the run continues; "fail"
|
|
145
145
|
* aborts the run, which then exits with WORKER_EXIT_PERMISSION_REQUIRED;
|
|
146
|
-
* "escalate" parks the call, emits
|
|
146
|
+
* "escalate" parks the call, emits clio_coder_permission_escalated, and waits for
|
|
147
147
|
* an operator permission_decision on stdin (falling back to the configured
|
|
148
148
|
* deny/fail on timeout). Default "deny".
|
|
149
149
|
*/
|
|
@@ -229,7 +229,7 @@ const TOOL_PROFILE_NAMES = [
|
|
|
229
229
|
"council-read-only",
|
|
230
230
|
] as const satisfies ReadonlyArray<ToolProfileName>;
|
|
231
231
|
const WORKER_PRODUCTS = ["orientation"] as const satisfies ReadonlyArray<AgentProduct>;
|
|
232
|
-
const TARGET_LIFECYCLES = ["user-managed", "clio-managed"] as const;
|
|
232
|
+
const TARGET_LIFECYCLES = ["user-managed", "clio-coder-managed"] as const;
|
|
233
233
|
const RESIDENCY_ROLES = ["chat", "memory", "worker", "target-default"] as const satisfies ReadonlyArray<ResidencyRole>;
|
|
234
234
|
const MIDDLEWARE_HOOKS = ["before_tool", "after_tool", "turn_start", "turn_end", "on_compaction"] as const;
|
|
235
235
|
const MIDDLEWARE_EFFECT_KINDS = [
|
|
@@ -13,7 +13,7 @@ export interface WorkerStdinDemux {
|
|
|
13
13
|
/**
|
|
14
14
|
* Register the handler for post-spec steer lines
|
|
15
15
|
* (`{"type":"steer","text":"...","sequence":1}`). The sequence is assigned by
|
|
16
|
-
* the parent and is what lets `
|
|
16
|
+
* the parent and is what lets `clio_coder_steer_received` acknowledge one exact
|
|
17
17
|
* receipt entry, so a line without a positive integer sequence is dropped
|
|
18
18
|
* rather than delivered unattributed. Steers that arrive before registration
|
|
19
19
|
* are buffered in order and flushed to the handler. Single handler; a second
|
|
@@ -54,7 +54,7 @@ export interface WorkerSteerMessage {
|
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Preserve stdin order while a runtime accepts guidance asynchronously.
|
|
57
|
-
* `
|
|
57
|
+
* `clio_coder_steer_received` echoes the parent-assigned sequence, so an
|
|
58
58
|
* acknowledgement closes out one exact receipt entry. Ordering still matters
|
|
59
59
|
* for the runtime itself: a later steer must never reach it ahead of an earlier
|
|
60
60
|
* pending one, or the guidance arrives out of the order the operator sent it.
|