@iowarp/clio-coder 0.4.1 → 0.4.3
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 +127 -0
- package/CONTRIBUTING.md +142 -52
- package/README.md +434 -473
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
- package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
- package/dist/builtins-IA7V7FUC.js +22 -0
- package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
- package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/chunk-4UVU7BJ5.js +39 -0
- package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/chunk-5MEZN6CB.js +1334 -0
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/chunk-7DRAWPTZ.js +360 -0
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
- package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
- package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
- package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
- package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
- package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
- package/dist/chunk-JEQ3XTHC.js +42 -0
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
- package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
- package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
- package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
- package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
- package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
- package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
- package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
- package/dist/chunk-XRZT5WY5.js +47 -0
- package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
- package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
- package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
- package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
- package/dist/cli/index.js +41 -39
- package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
- package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
- package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
- package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
- package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
- package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
- package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
- package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
- package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
- package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
- package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
- package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
- package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
- package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
- package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
- package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
- package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
- package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
- package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
- package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
- package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
- package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
- package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
- package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
- package/dist/worker/entry.js +90 -74
- 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} +27 -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} +29 -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} +61 -27
- package/docs/{observability.md → architecture/observability.md} +38 -14
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
- package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
- 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} +13 -5
- 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} +65 -35
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
- package/docs/guide/configuration-reference.md +1163 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/process/development-pipeline.md +152 -0
- 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} +108 -53
- 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} +11 -7
- 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 +2 -2
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +10 -8
- package/skills/README.md +52 -41
- package/skills/coding/ast-grep/SKILL.md +102 -31
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +41 -6
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +88 -29
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +81 -54
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +44 -3
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +46 -16
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +78 -64
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +88 -65
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +62 -13
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +131 -15
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -7
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +58 -3
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +54 -3
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +70 -62
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +77 -19
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +21 -2
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -2
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +27 -2
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +97 -62
- package/skills/workflow/cut-it/SKILL.md +66 -6
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +118 -28
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +87 -11
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +77 -18
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -532
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +3 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +9 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +5 -6
- package/src/cli/trace.ts +55 -4
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +61 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- 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/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +13 -15
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +11 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +237 -49
- 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/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +58 -3
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/artifacts/store.ts +5 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/store.ts +8 -1
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- 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/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +6 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- 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 +28 -5
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +17 -4
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- 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 +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +99 -25
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +23 -19
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +145 -39
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/external-subprocess.ts +114 -6
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +464 -251
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +16 -17
- package/src/interactive/chat-loop.ts +75 -3
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +72 -7
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +153 -20
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +39 -20
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- 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/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +59 -21
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +6 -1
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +49 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-runner.ts +12 -0
- 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/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- 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 +41 -12
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/builtins-UJLMOVOV.js +0 -17
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/dist/chunk-Y45G3AXC.js +0 -1558
- package/dist/reset-EOLM7GVE.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-H7TOM7YL.js +0 -323
- package/docs/artifact-versions.md +0 -67
- package/docs/development-pipeline.md +0 -121
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
package/src/cli/upgrade.ts
CHANGED
|
@@ -2,32 +2,32 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { initializeClioHome } from "../core/init.js";
|
|
3
3
|
import { clioStateDir } from "../core/xdg.js";
|
|
4
4
|
import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
|
|
5
|
-
import { listMigrations, runPending } from "../domains/lifecycle/migrations/index.js";
|
|
5
|
+
import { listMigrations, readMigrationManifest, runPending } from "../domains/lifecycle/migrations/index.js";
|
|
6
6
|
import { readStateInfo } from "../domains/lifecycle/state.js";
|
|
7
7
|
import { getVersionInfo } from "../domains/lifecycle/version.js";
|
|
8
|
-
import {
|
|
8
|
+
import { createLifecyclePresenter, shortenPath } from "./lifecycle-presenter.js";
|
|
9
|
+
import { printError } from "./shared.js";
|
|
9
10
|
|
|
10
11
|
const CHANNELS = ["latest", "beta", "dev"] as const;
|
|
11
12
|
type Channel = (typeof CHANNELS)[number];
|
|
12
13
|
|
|
13
|
-
const HELP = `clio-coder upgrade [--dry-run] [--channel=<latest|beta|dev>] [--skip-migrations]
|
|
14
|
+
const HELP = `clio-coder upgrade [--dry-run] [--channel=<latest|beta|dev>] [--skip-migrations] [--json]
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
binary is
|
|
16
|
+
Upgrade Clio Coder and apply pending state migrations. An npm-installed
|
|
17
|
+
binary is reinstalled via npm; a source-checkout install instead prints
|
|
17
18
|
the git-based update steps and never touches the global npm prefix.
|
|
18
19
|
|
|
19
20
|
Flags:
|
|
20
21
|
--dry-run print planned actions without changing anything
|
|
21
22
|
--channel=<chan> npm dist-tag to install (latest|beta|dev). npm installs only.
|
|
22
23
|
--skip-migrations skip migrations after the install step
|
|
24
|
+
--json emit machine-readable JSON output
|
|
25
|
+
--help, -h show this message
|
|
23
26
|
`;
|
|
24
27
|
|
|
25
28
|
const SOURCE_UPGRADE_STEPS = ["git pull", "npm run install:local", "hash -r"] as const;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
process.stdout.write("[upgrade] source checkout install: update the code with:\n");
|
|
29
|
-
for (const step of SOURCE_UPGRADE_STEPS) process.stdout.write(` ${step}\n`);
|
|
30
|
-
}
|
|
29
|
+
/** One wording for the source-update advice. Three paths print it; they used to disagree. */
|
|
30
|
+
const SOURCE_UPGRADE_LEAD = "To update the checkout itself, run:";
|
|
31
31
|
|
|
32
32
|
interface UpgradeOptions {
|
|
33
33
|
dryRun: boolean;
|
|
@@ -35,108 +35,131 @@ interface UpgradeOptions {
|
|
|
35
35
|
skipMigrations: boolean;
|
|
36
36
|
help: boolean;
|
|
37
37
|
postInstall: boolean;
|
|
38
|
+
json: boolean;
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Positional scan, not `argv.indexOf`. The previous parser looked each token up
|
|
43
|
+
* by value to find its neighbour, so the second `--channel` in a repeated pair
|
|
44
|
+
* read the first one's value, and a value that happened to equal an earlier
|
|
45
|
+
* token was consumed at the wrong index.
|
|
46
|
+
*/
|
|
40
47
|
function parseUpgradeArgs(argv: ReadonlyArray<string>): UpgradeOptions {
|
|
41
48
|
let dryRun = false;
|
|
42
49
|
let channel: Channel = "latest";
|
|
43
50
|
let skipMigrations = false;
|
|
44
51
|
let help = false;
|
|
45
52
|
let postInstall = false;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
if (arg === "--dry-run") {
|
|
53
|
-
dryRun = true;
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
if (arg === "--skip-migrations") {
|
|
57
|
-
skipMigrations = true;
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
if (arg === "--post-install") {
|
|
61
|
-
postInstall = true;
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
if (arg.startsWith("--channel=")) {
|
|
65
|
-
const value = arg.slice("--channel=".length);
|
|
66
|
-
if (!(CHANNELS as ReadonlyArray<string>).includes(value)) {
|
|
67
|
-
throw new Error(`--channel must be one of ${CHANNELS.join("|")}, got '${value}'`);
|
|
68
|
-
}
|
|
69
|
-
channel = value as Channel;
|
|
70
|
-
continue;
|
|
53
|
+
let json = false;
|
|
54
|
+
|
|
55
|
+
const toChannel = (value: string | undefined): Channel => {
|
|
56
|
+
if (value === undefined || !(CHANNELS as ReadonlyArray<string>).includes(value)) {
|
|
57
|
+
throw new Error(`--channel must be one of ${CHANNELS.join("|")}, got '${value ?? ""}'`);
|
|
71
58
|
}
|
|
72
|
-
|
|
59
|
+
return value as Channel;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
63
|
+
const arg = argv[i];
|
|
64
|
+
if (arg === undefined || arg === "upgrade") continue;
|
|
65
|
+
if (arg === "--help" || arg === "-h") help = true;
|
|
66
|
+
else if (arg === "--dry-run") dryRun = true;
|
|
67
|
+
else if (arg === "--skip-migrations") skipMigrations = true;
|
|
68
|
+
else if (arg === "--post-install") postInstall = true;
|
|
69
|
+
else if (arg === "--json") json = true;
|
|
70
|
+
else if (arg.startsWith("--channel=")) channel = toChannel(arg.slice("--channel=".length));
|
|
71
|
+
else if (arg === "--channel") {
|
|
72
|
+
channel = toChannel(argv[i + 1]);
|
|
73
|
+
i += 1;
|
|
74
|
+
} else throw new Error(`unknown upgrade argument: ${arg}`);
|
|
73
75
|
}
|
|
74
|
-
return { dryRun, channel, skipMigrations, help, postInstall };
|
|
76
|
+
return { dryRun, channel, skipMigrations, help, postInstall, json };
|
|
75
77
|
}
|
|
76
78
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
source
|
|
92
|
-
|
|
93
|
-
|
|
79
|
+
/**
|
|
80
|
+
* What the registry said, and whether it was asked at all.
|
|
81
|
+
*
|
|
82
|
+
* "Not asked" and "asked and could not answer" are different facts, and
|
|
83
|
+
* collapsing both into `null` is what let an offline npm install report itself
|
|
84
|
+
* already current: an unanswered lookup compared nothing, so it cannot conclude
|
|
85
|
+
* the installed version is the newest one.
|
|
86
|
+
*/
|
|
87
|
+
type RegistryLookup =
|
|
88
|
+
| { asked: false; reason: "source checkout" | "network checks are disabled" }
|
|
89
|
+
| { asked: true; version: string | null };
|
|
90
|
+
|
|
91
|
+
async function lookUpAvailableVersion(
|
|
92
|
+
channel: Channel,
|
|
93
|
+
method: "source" | "npm",
|
|
94
|
+
noNetwork: boolean,
|
|
95
|
+
): Promise<RegistryLookup> {
|
|
96
|
+
const seam = process.env.CLIO_CODER_TEST_UPGRADE_AVAILABLE;
|
|
97
|
+
// `unreachable` stands in for a registry that answered nothing, which is the
|
|
98
|
+
// only way to reach that branch without a network in the test.
|
|
99
|
+
if (seam) return { asked: true, version: seam === "unreachable" ? null : seam };
|
|
100
|
+
if (noNetwork) return { asked: false, reason: "network checks are disabled" };
|
|
101
|
+
if (method === "source") return { asked: false, reason: "source checkout" };
|
|
102
|
+
try {
|
|
103
|
+
const res = await fetch(`https://registry.npmjs.org/@iowarp/clio-coder/${channel}`, {
|
|
104
|
+
headers: { Accept: "application/json" },
|
|
105
|
+
signal: AbortSignal.timeout(2500),
|
|
106
|
+
});
|
|
107
|
+
if (!res.ok) return { asked: true, version: null };
|
|
108
|
+
const data = (await res.json()) as { version?: unknown };
|
|
109
|
+
return { asked: true, version: typeof data.version === "string" ? data.version : null };
|
|
110
|
+
} catch {
|
|
111
|
+
return { asked: true, version: null };
|
|
112
|
+
}
|
|
94
113
|
}
|
|
95
114
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Run one child to completion, keeping its last output for the failure message.
|
|
117
|
+
*
|
|
118
|
+
* The pipes have to be drained. `npm install -g` writes well past a 64 KB pipe
|
|
119
|
+
* buffer, and a child whose stdout nobody reads blocks on the write and never
|
|
120
|
+
* exits, so the upgrade hung with no output and no way to tell it apart from a
|
|
121
|
+
* slow registry. Draining also gives the failure something to say beyond an
|
|
122
|
+
* exit code.
|
|
123
|
+
*/
|
|
124
|
+
async function runChild(command: string, args: ReadonlyArray<string>, label: string): Promise<void> {
|
|
99
125
|
await new Promise<void>((resolve, reject) => {
|
|
100
|
-
const child = spawn(
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
const child = spawn(command, [...args], { stdio: ["ignore", "pipe", "pipe"] });
|
|
127
|
+
let tail = "";
|
|
128
|
+
const keepTail = (chunk: Buffer): void => {
|
|
129
|
+
tail = `${tail}${chunk.toString("utf8")}`.slice(-2000);
|
|
130
|
+
};
|
|
131
|
+
child.stdout?.on("data", keepTail);
|
|
132
|
+
child.stderr?.on("data", keepTail);
|
|
103
133
|
child.on("error", reject);
|
|
104
|
-
child.on("
|
|
105
|
-
if (code === 0)
|
|
106
|
-
|
|
134
|
+
child.on("close", (code) => {
|
|
135
|
+
if (code === 0) {
|
|
136
|
+
resolve();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const lastLine = tail.trimEnd().split("\n").at(-1) ?? "";
|
|
140
|
+
reject(new Error(`${label} exited with code ${code ?? -1}${lastLine ? `: ${lastLine}` : ""}`));
|
|
107
141
|
});
|
|
108
142
|
});
|
|
109
143
|
}
|
|
110
144
|
|
|
145
|
+
async function runNpmInstall(channel: Channel): Promise<void> {
|
|
146
|
+
if (process.env.CLIO_CODER_TEST_UPGRADE_FAIL === "npm") {
|
|
147
|
+
throw new Error("npm ERR! 404 Not Found (mock failure)");
|
|
148
|
+
}
|
|
149
|
+
await runChild("npm", ["install", "-g", `@iowarp/clio-coder@${channel}`], "npm install");
|
|
150
|
+
}
|
|
151
|
+
|
|
111
152
|
async function runDoctorFixAfterInstall(): Promise<void> {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
streamPrefixed(child.stdout, process.stdout);
|
|
117
|
-
streamPrefixed(child.stderr, process.stderr);
|
|
118
|
-
child.on("error", reject);
|
|
119
|
-
child.on("exit", (code) => {
|
|
120
|
-
if (code === 0) resolve();
|
|
121
|
-
else reject(new Error(`clio-coder doctor --fix exited with code ${code ?? -1}`));
|
|
122
|
-
});
|
|
123
|
-
});
|
|
153
|
+
if (process.env.CLIO_CODER_TEST_UPGRADE_FAIL === "doctor") {
|
|
154
|
+
throw new Error("mock doctor fix failure");
|
|
155
|
+
}
|
|
156
|
+
await runChild("clio-coder", ["doctor", "--fix"], "clio-coder doctor --fix");
|
|
124
157
|
}
|
|
125
158
|
|
|
126
159
|
async function runPostInstallUpgrade(opts: UpgradeOptions): Promise<void> {
|
|
127
160
|
const args = ["upgrade", "--post-install", `--channel=${opts.channel}`];
|
|
128
161
|
if (opts.skipMigrations) args.push("--skip-migrations");
|
|
129
|
-
|
|
130
|
-
await new Promise<void>((resolve, reject) => {
|
|
131
|
-
const child = spawn("clio-coder", args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
132
|
-
streamPrefixed(child.stdout, process.stdout);
|
|
133
|
-
streamPrefixed(child.stderr, process.stderr);
|
|
134
|
-
child.on("error", reject);
|
|
135
|
-
child.on("exit", (code) => {
|
|
136
|
-
if (code === 0) resolve();
|
|
137
|
-
else reject(new Error(`clio-coder upgrade --post-install exited with code ${code ?? -1}`));
|
|
138
|
-
});
|
|
139
|
-
});
|
|
162
|
+
await runChild("clio-coder", args, "clio-coder upgrade --post-install");
|
|
140
163
|
}
|
|
141
164
|
|
|
142
165
|
export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<number> {
|
|
@@ -152,25 +175,36 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
152
175
|
return 0;
|
|
153
176
|
}
|
|
154
177
|
|
|
178
|
+
const presenter = createLifecyclePresenter({ json: opts.json });
|
|
179
|
+
presenter.header("Upgrade", "upgrade");
|
|
180
|
+
|
|
155
181
|
const before = getVersionInfo().clio;
|
|
156
182
|
const stateDir = clioStateDir();
|
|
157
183
|
const method = detectInstallMethod();
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (method === "npm") process.stdout.write(`channel ${opts.channel}\n`);
|
|
161
|
-
process.stdout.write(`current ${before}\n`);
|
|
162
|
-
process.stdout.write(`state dir ${stateDir}\n`);
|
|
184
|
+
const methodLabel = method === "source" ? "source checkout" : "npm global";
|
|
185
|
+
presenter.setMethod(methodLabel);
|
|
163
186
|
|
|
164
187
|
const noNetwork = Boolean(process.env.CLIO_CODER_TEST_UPGRADE_NO_NETWORK);
|
|
188
|
+
const lookup = await lookUpAvailableVersion(opts.channel, method, noNetwork);
|
|
189
|
+
const availableVersion = lookup.asked ? lookup.version : null;
|
|
190
|
+
|
|
191
|
+
presenter.step(`Installation method: ${methodLabel}`);
|
|
192
|
+
presenter.step(`Current version: ${before}`);
|
|
193
|
+
// A source checkout is not upgraded from the registry, so the registry is
|
|
194
|
+
// never asked. Reporting that as "registry check failed" told the operator a
|
|
195
|
+
// lookup had gone wrong when none was owed.
|
|
196
|
+
if (availableVersion !== null) presenter.step(`Available version: ${availableVersion}`);
|
|
197
|
+
else if (!lookup.asked) presenter.step(`Available version: not checked (${lookup.reason})`);
|
|
198
|
+
else presenter.step("Available version: unknown (the registry could not be reached)");
|
|
199
|
+
if (method === "npm") presenter.step(`Channel: ${opts.channel}`);
|
|
200
|
+
presenter.step(`State dir: ${shortenPath(stateDir)}`);
|
|
201
|
+
|
|
165
202
|
const migrations = listMigrations();
|
|
166
203
|
const migrationIds = migrations.map((m) => m.id);
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
204
|
+
const appliedIds = new Set(readMigrationManifest(stateDir).applied);
|
|
205
|
+
const pendingMigrationIds = opts.skipMigrations ? [] : migrationIds.filter((id) => !appliedIds.has(id));
|
|
206
|
+
|
|
170
207
|
const recorded = readStateInfo()?.version ?? null;
|
|
171
|
-
// Both the dry run and the real run print this, so it stays in the mood the
|
|
172
|
-
// call site sets with "would refresh" or "refreshed". The null branch used to
|
|
173
|
-
// bake in "would write it", which a real upgrade printed after writing it.
|
|
174
208
|
const describeRefresh = (): string =>
|
|
175
209
|
recorded === null
|
|
176
210
|
? "state metadata (none recorded)"
|
|
@@ -178,104 +212,125 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
178
212
|
? `state metadata (already ${before})`
|
|
179
213
|
: `state metadata ${recorded} -> ${before}`;
|
|
180
214
|
|
|
215
|
+
// "Already current" is a claim about a version that was compared. A lookup
|
|
216
|
+
// that was made and came back empty has compared nothing, so it does not get
|
|
217
|
+
// to make it: the run falls through and attempts the install, which is what
|
|
218
|
+
// the operator asked for. A lookup that was never owed (a checkout, or the
|
|
219
|
+
// network seam) leaves the recorded state version to decide.
|
|
220
|
+
const versionIsCurrent =
|
|
221
|
+
(lookup.asked ? lookup.version === before : true) && (recorded === null || recorded === before);
|
|
222
|
+
const hasPendingMigrations = pendingMigrationIds.length > 0;
|
|
223
|
+
|
|
224
|
+
if (versionIsCurrent && !hasPendingMigrations) {
|
|
225
|
+
presenter.warn(`Already on ${before}, with no pending migrations. Nothing to do.`);
|
|
226
|
+
if (method === "source") presenter.commandAdvice(SOURCE_UPGRADE_LEAD, SOURCE_UPGRADE_STEPS.join("\n"));
|
|
227
|
+
if (opts.dryRun) presenter.warn("Dry run: no changes made");
|
|
228
|
+
presenter.done("Done");
|
|
229
|
+
return 0;
|
|
230
|
+
}
|
|
231
|
+
|
|
181
232
|
if (opts.dryRun) {
|
|
182
|
-
if (method === "source")
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
for (const id of migrationIds) process.stdout.write(` - ${id}\n`);
|
|
233
|
+
if (method === "source") presenter.commandAdvice(SOURCE_UPGRADE_LEAD, SOURCE_UPGRADE_STEPS.join("\n"));
|
|
234
|
+
else presenter.note(`Would run: npm install -g @iowarp/clio-coder@${opts.channel}`);
|
|
235
|
+
if (opts.skipMigrations) presenter.note("Would skip migrations (--skip-migrations).");
|
|
236
|
+
else if (pendingMigrationIds.length === 0) presenter.note("No pending migrations.");
|
|
237
|
+
else {
|
|
238
|
+
presenter.note(
|
|
239
|
+
`Would apply ${pendingMigrationIds.length} pending migration${pendingMigrationIds.length === 1 ? "" : "s"}:`,
|
|
240
|
+
);
|
|
241
|
+
// As substeps, so a --json consumer sees the plan instead of only the
|
|
242
|
+
// three detected facts the old dry run recorded.
|
|
243
|
+
for (const id of pendingMigrationIds) presenter.substep(id, "–");
|
|
194
244
|
}
|
|
195
|
-
|
|
196
|
-
|
|
245
|
+
presenter.note(`Would refresh ${describeRefresh()}.`);
|
|
246
|
+
presenter.warn("Dry run: no changes made");
|
|
247
|
+
presenter.done("Done");
|
|
197
248
|
return 0;
|
|
198
249
|
}
|
|
199
250
|
|
|
200
251
|
if (opts.postInstall) {
|
|
201
|
-
|
|
252
|
+
presenter.note("Running post-install checks with the active clio-coder binary.");
|
|
202
253
|
} else if (method === "source") {
|
|
203
|
-
|
|
254
|
+
presenter.note("Source checkout: no npm install to run.");
|
|
204
255
|
} else if (noNetwork) {
|
|
205
|
-
|
|
256
|
+
presenter.note("CLIO_CODER_TEST_UPGRADE_NO_NETWORK is set; skipping npm install.");
|
|
206
257
|
} else {
|
|
207
258
|
try {
|
|
208
259
|
await runNpmInstall(opts.channel);
|
|
260
|
+
presenter.completedStep(`Installed @iowarp/clio-coder@${opts.channel}`);
|
|
209
261
|
} catch (err) {
|
|
210
|
-
|
|
262
|
+
presenter.fail("npm install failed", err instanceof Error ? err.message : String(err));
|
|
263
|
+
presenter.commandAdvice(
|
|
264
|
+
"To upgrade by hand, run:",
|
|
265
|
+
`npm install -g @iowarp/clio-coder@${opts.channel}\nclio-coder doctor --fix`,
|
|
266
|
+
);
|
|
267
|
+
presenter.finish();
|
|
211
268
|
return 1;
|
|
212
269
|
}
|
|
213
270
|
try {
|
|
214
271
|
await runPostInstallUpgrade(opts);
|
|
215
|
-
|
|
272
|
+
presenter.done("Done");
|
|
216
273
|
return 0;
|
|
217
274
|
} catch (err) {
|
|
218
|
-
|
|
275
|
+
presenter.fail("post-install checks failed", err instanceof Error ? err.message : String(err));
|
|
276
|
+
presenter.commandAdvice("To finish the upgrade by hand, run:", "clio-coder doctor --fix");
|
|
277
|
+
presenter.finish();
|
|
219
278
|
return 1;
|
|
220
279
|
}
|
|
221
280
|
}
|
|
222
281
|
|
|
223
282
|
let appliedCount = 0;
|
|
224
|
-
let appliedIds: string[] = [];
|
|
225
283
|
if (opts.skipMigrations) {
|
|
226
|
-
|
|
284
|
+
presenter.note("Skipping migrations (--skip-migrations).");
|
|
227
285
|
} else {
|
|
228
|
-
// Migrations run on the state tree directly rather than through the
|
|
229
|
-
// lifecycle domain. Loading that domain pulls in `config`, whose start
|
|
230
|
-
// runs the strict settings reader, and a settings-repairing migration is
|
|
231
|
-
// precisely the one that cannot get past it: `clio-coder upgrade` on a
|
|
232
|
-
// home whose settings.yaml names a retired key failed the domain load and
|
|
233
|
-
// never reached the migration that removes the key. A runner that needs
|
|
234
|
-
// valid config in order to repair invalid config can never run. The
|
|
235
|
-
// domain's `runMigrations` is a passthrough to this same function, so
|
|
236
|
-
// nothing is lost by calling it where the circularity does not exist.
|
|
237
286
|
let result: Awaited<ReturnType<typeof runPending>>;
|
|
238
287
|
try {
|
|
288
|
+
if (process.env.CLIO_CODER_TEST_UPGRADE_FAIL === "migration") {
|
|
289
|
+
throw new Error("mock migration failure in 2026-09-01-settings-v2");
|
|
290
|
+
}
|
|
239
291
|
result = await runPending(stateDir);
|
|
240
292
|
} catch (err) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
printError(
|
|
246
|
-
`migration failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
247
|
-
"the rest of the upgrade does not depend on it; run `clio-coder upgrade --skip-migrations` to continue, then fix the cause and re-run `clio-coder upgrade`.",
|
|
293
|
+
presenter.fail("migration failed", err instanceof Error ? err.message : String(err));
|
|
294
|
+
presenter.commandAdvice(
|
|
295
|
+
"The rest of the upgrade does not depend on it. To continue, run:",
|
|
296
|
+
"clio-coder upgrade --skip-migrations",
|
|
248
297
|
);
|
|
298
|
+
presenter.finish();
|
|
249
299
|
return 1;
|
|
250
300
|
}
|
|
251
|
-
|
|
252
|
-
appliedCount =
|
|
253
|
-
if (appliedCount === 0)
|
|
254
|
-
|
|
255
|
-
} else {
|
|
256
|
-
for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
|
|
257
|
-
}
|
|
301
|
+
const applied = [...result.applied];
|
|
302
|
+
appliedCount = applied.length;
|
|
303
|
+
if (appliedCount === 0) presenter.note("No pending migrations.");
|
|
304
|
+
else for (const id of applied) presenter.completedStep(`Applied migration ${id}`);
|
|
258
305
|
}
|
|
259
306
|
|
|
260
307
|
if (method === "source" || noNetwork) {
|
|
261
308
|
const refresh = describeRefresh();
|
|
262
309
|
initializeClioHome();
|
|
263
|
-
|
|
310
|
+
presenter.completedStep(`Refreshed ${refresh}`);
|
|
264
311
|
} else {
|
|
265
312
|
try {
|
|
266
313
|
await runDoctorFixAfterInstall();
|
|
314
|
+
presenter.completedStep("Checked the install with clio-coder doctor --fix");
|
|
267
315
|
} catch (err) {
|
|
268
|
-
|
|
316
|
+
presenter.fail("doctor fix failed", err instanceof Error ? err.message : String(err));
|
|
317
|
+
presenter.commandAdvice("To resolve the findings by hand, run:", "clio-coder doctor --fix");
|
|
318
|
+
presenter.finish();
|
|
269
319
|
return 1;
|
|
270
320
|
}
|
|
271
321
|
}
|
|
272
322
|
|
|
273
|
-
if (method === "source")
|
|
323
|
+
if (method === "source") presenter.commandAdvice(SOURCE_UPGRADE_LEAD, SOURCE_UPGRADE_STEPS.join("\n"));
|
|
274
324
|
|
|
275
|
-
// `before` is the binary that ran; on the post-install and local paths that
|
|
276
|
-
// is already the new version, and `0.3.1 -> 0.3.1` was a claim about a
|
|
277
|
-
// transition that never happened. The version that moved is the recorded one.
|
|
278
325
|
const after = getVersionInfo().clio;
|
|
279
|
-
|
|
326
|
+
// One closing word on every path, with the outcome above it as steps. The
|
|
327
|
+
// summary used to carry the version arrow, so three exits printed three
|
|
328
|
+
// different shapes of last line.
|
|
329
|
+
if (appliedCount > 0 || (recorded ?? before) !== after) {
|
|
330
|
+
presenter.note(
|
|
331
|
+
`Now on ${after}${appliedCount > 0 ? `, ${appliedCount} migration${appliedCount === 1 ? "" : "s"} applied` : ""}.`,
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
presenter.done("Done");
|
|
280
335
|
return 0;
|
|
281
336
|
}
|