@iowarp/clio-coder 0.3.9 → 0.4.0
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 +53 -0
- package/NOTICE +33 -0
- package/README.md +7 -2
- package/dist/{acp-7LOELQFP.js → acp-G5WJBNCT.js} +13 -12
- package/dist/{agents-FIBG2SHA.js → agents-FMV2Q5G4.js} +39 -36
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-3IDSJEIK.js} +16 -15
- package/dist/{builtins-AD25UL3C.js → builtins-XCZWXSC7.js} +3 -3
- package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
- package/dist/{chunk-56KB5IJP.js → chunk-2OQE55CK.js} +3 -3
- package/dist/{chunk-N3PBVRTZ.js → chunk-32KWKNSF.js} +9 -7
- package/dist/{chunk-VKBMFOYV.js → chunk-36EJLSQQ.js} +23 -27
- package/dist/{chunk-465CC7FK.js → chunk-3BT2XMV4.js} +16 -13
- package/dist/{chunk-NQ6UCCOD.js → chunk-3URVFKWK.js} +7 -7
- package/dist/{chunk-WIE7ZOSW.js → chunk-3XML7CDN.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-JEQQR47K.js → chunk-6DB53AJS.js} +168 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-76ONBSIA.js} +5 -25
- package/dist/{chunk-FALJGAWU.js → chunk-7MCTRUCE.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-AB44T6BB.js} +5 -5
- package/dist/chunk-B7OBL7PK.js +1405 -0
- package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
- package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
- package/dist/{chunk-O6I4CIEU.js → chunk-BKFJHQCA.js} +6 -6
- package/dist/chunk-BKFM6EJV.js +462 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-MV2VUEJC.js → chunk-BPKCPIL7.js} +2 -2
- package/dist/{chunk-TEO2TLVN.js → chunk-BUMFYQFY.js} +964 -1120
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/chunk-C2LTL2W6.js +2447 -0
- package/dist/{chunk-EBOC7MT3.js → chunk-CODPRO7Q.js} +8 -8
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
- package/dist/{chunk-MIX5N5AC.js → chunk-DQITNCXG.js} +394 -154
- package/dist/{chunk-S4COXYBG.js → chunk-DYJP44XW.js} +129 -106
- package/dist/{chunk-N5XKWMDW.js → chunk-F4CKPOEQ.js} +6 -6
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-GKF55TAZ.js} +3 -3
- package/dist/{chunk-B5XRQOLB.js → chunk-GR5G2PVF.js} +9 -8
- package/dist/{chunk-XDOQXGFO.js → chunk-GXNLGKAB.js} +64 -8
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/{chunk-774ILSRL.js → chunk-HI63TFOG.js} +4 -3
- package/dist/{chunk-R7LNVMCS.js → chunk-HJJTYUHX.js} +64 -72
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/{chunk-CA42X6KT.js → chunk-HWHKMHUA.js} +6 -6
- package/dist/chunk-HZHHCK24.js +1631 -0
- package/dist/{chunk-HJB5IUKP.js → chunk-I5VEOC6I.js} +12 -12
- package/dist/chunk-IBEBSCYA.js +564 -0
- package/dist/chunk-IQ7KR472.js +362 -0
- package/dist/{chunk-4H6ULJ3H.js → chunk-J4W7KFM7.js} +921 -990
- package/dist/{chunk-4LJX2PUC.js → chunk-JDG2WCRO.js} +5 -5
- package/dist/{chunk-NZU6YDNV.js → chunk-K5C3NCBD.js} +4 -4
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-NNNWO6F2.js → chunk-KFZI4NIL.js} +93 -3
- package/dist/chunk-KMVISBZR.js +132 -0
- package/dist/{chunk-BVDVID7E.js → chunk-LDQ2ZF2M.js} +2 -2
- package/dist/{chunk-OEDBCISO.js → chunk-LQ3DZAMX.js} +2 -2
- package/dist/{chunk-PZ4I4JE2.js → chunk-LY4S7GJC.js} +124 -116
- package/dist/{chunk-3DUR4WUA.js → chunk-MLKNTWH2.js} +19 -19
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-5DQRIYDZ.js → chunk-NHCZP4K7.js} +2 -2
- package/dist/chunk-NHLBIGRH.js +1506 -0
- package/dist/chunk-NQQH3YT7.js +302 -0
- package/dist/chunk-NYS75XW5.js +15 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-O4XIVISU.js} +7 -7
- package/dist/{chunk-WXCJ7VME.js → chunk-O6TL7WWY.js} +6 -6
- package/dist/chunk-OQBA45DZ.js +97 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
- package/dist/{chunk-HKO36JWF.js → chunk-QBJA7R7N.js} +31 -3
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-5HFBWUMU.js → chunk-QLFS5GO2.js} +4 -4
- package/dist/{chunk-GAYUJ7LE.js → chunk-QLL7ILRG.js} +41 -32
- package/dist/{chunk-LXPJXFM5.js → chunk-QREDIESB.js} +7 -7
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/{chunk-VPTUJU4P.js → chunk-SJ5ZKQ4S.js} +2 -2
- package/dist/{chunk-QQ7EKM72.js → chunk-SP2RXXYO.js} +6 -54
- package/dist/chunk-SUCTJL45.js +45 -0
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/{chunk-IHKBWSXF.js → chunk-TZ3SGWZZ.js} +2 -2
- package/dist/{chunk-ECUO3KDP.js → chunk-U77AMWDL.js} +47 -7
- package/dist/{chunk-3UUY7R3Z.js → chunk-ULC6OTWO.js} +7 -7
- package/dist/{chunk-AEYBF3TB.js → chunk-UM7N4G5A.js} +2 -2
- package/dist/{chunk-3V5AYSEQ.js → chunk-UXMFQ54G.js} +43 -36
- package/dist/{chunk-YW7UVM5V.js → chunk-V5DHCITQ.js} +34 -1
- package/dist/{chunk-47CMYGET.js → chunk-VAZSBTKF.js} +2 -2
- package/dist/{chunk-3MRC2YSQ.js → chunk-VEO4AP2K.js} +2 -2
- package/dist/{chunk-PNY46YEY.js → chunk-VFA6GDY5.js} +47 -3
- package/dist/chunk-VO67MWHC.js +75 -0
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-AD7Y7STJ.js → chunk-VYMXRQI6.js} +36 -22
- package/dist/{chunk-T3Z6VAAF.js → chunk-W5VSYASO.js} +19 -17
- package/dist/{chunk-5PVQ4SRS.js → chunk-WZR7K7ZX.js} +7 -123
- package/dist/{chunk-DG4M6ZUE.js → chunk-X3YGUTOB.js} +4 -4
- package/dist/chunk-X75E3D2N.js +686 -0
- package/dist/{chunk-P3JGPQFL.js → chunk-YDFRH54B.js} +4 -4
- package/dist/chunk-YJX4SHTD.js +40 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YSEHGPCT.js → chunk-Z2RR6MAK.js} +3 -3
- package/dist/{chunk-HCBCAYZU.js → chunk-Z4TXYIEG.js} +5 -5
- package/dist/cli/index.js +47 -36
- package/dist/{clio-LT5V7SSZ.js → clio-2JXHBBY5.js} +7 -7
- package/dist/{code-nav-LMW275PA.js → code-nav-3YYRMYNF.js} +6 -6
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
- package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
- package/dist/{config-RXS5T3JT.js → config-QZPCMYSO.js} +58 -50
- package/dist/{configure-2WYWSCSD.js → configure-TEGEBYCA.js} +21 -19
- package/dist/{context-I3BTOTCS.js → context-AV7OEZ4D.js} +11 -11
- package/dist/{context-MVOORGMF.js → context-E6H5RNMC.js} +49 -41
- package/dist/{context-PALKKQYL.js → context-GSXUE4CT.js} +25 -23
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-SHIBYK6T.js} +48 -40
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-5ZGKPGZQ.js} +11 -10
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-EFMJT4LD.js} +88 -60
- package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
- package/dist/doctor-QOA5FNY5.js +313 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-TFBYQH4H.js} +66 -64
- package/dist/eval-inventory-SXH7PDKX.js +316 -0
- package/dist/{evidence-L5APPXNV.js → evidence-ERGESKGN.js} +198 -44
- package/dist/{evolve-RGNKFJ52.js → evolve-VDXTSYCJ.js} +46 -38
- package/dist/{extensions-7WYWUX5A.js → extensions-7BGBHN57.js} +6 -6
- package/dist/{fleet-6CNVBZZP.js → fleet-2RRVDF2V.js} +189 -101
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-VJ726XIA.js} +10 -10
- package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-JF5QOATM.js} +16 -15
- package/dist/fleet-inspect-VLY4S7QM.js +442 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-AIZUEJOY.js} +6 -5
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-AJRPDMDV.js} +20 -18
- package/dist/fleet-verify-JFEL2L3H.js +175 -0
- package/dist/fleet-view-ZCON35AG.js +102 -0
- package/dist/{init-VBN2ACVA.js → init-DN2WWLFE.js} +64 -56
- package/dist/install-XGLBQY5E.js +13 -0
- package/dist/interop-OZBKXAYL.js +114 -0
- package/dist/{library-JHGUMLY2.js → library-YWZG7IMW.js} +19 -18
- package/dist/{memory-K4OQIYWG.js → memory-I4C4HMLW.js} +48 -40
- package/dist/{models-2NCZUWDD.js → models-CEYXJBO6.js} +30 -28
- package/dist/{monitor-MMVTJABD.js → monitor-NZ6GCI3P.js} +53 -47
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-GCGQ4N5I.js} +6311 -7145
- package/dist/panes-HMABYVO4.js +58 -0
- package/dist/panes-KY6W3V2E.js +103 -0
- package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
- package/dist/{reset-DD5JGOY3.js → reset-DQ6FGCSH.js} +13 -11
- package/dist/resources-BB3MVJMD.js +111 -0
- package/dist/{run-QEGNX7FL.js → run-H2GQDUER.js} +113 -82
- package/dist/{share-JKD3BQMW.js → share-GTJN6A5O.js} +18 -17
- package/dist/{skills-LMQIKDOZ.js → skills-L55TEW6R.js} +31 -24
- package/dist/{skills-eval-I7X2774U.js → skills-eval-XVXPH2JI.js} +61 -52
- package/dist/skills-inventory-S4MXPJFV.js +126 -0
- package/dist/slash-commands-ZSGASKJC.js +77 -0
- package/dist/{steer-CF5TDANS.js → steer-RZGSCY4R.js} +3 -3
- package/dist/{support-I7LOJLIF.js → support-PKEUNNQL.js} +4 -4
- package/dist/{targets-RUSR6B5Z.js → targets-NCPZ644J.js} +31 -29
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-44SV3YCN.js} +4 -4
- package/dist/tools-DAF3DI3C.js +27 -0
- package/dist/{trace-ODOQIVIW.js → trace-FYVW2MQA.js} +149 -7
- package/dist/tui-primitives-2AKXQNZK.js +13 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
- package/dist/{upgrade-XANW3FXB.js → upgrade-3XPP6OQL.js} +26 -24
- package/dist/{usage-4H7ZRXQT.js → usage-3NLHGTU2.js} +57 -49
- package/dist/{verifiers-UZXNBZEB.js → verifiers-SSQONKRT.js} +171 -12
- package/dist/{verify-BVKWTNDL.js → verify-3U6J7FZI.js} +9 -9
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-CEHYGPGQ.js} +67 -59
- package/dist/with-panes-MKB46MPQ.js +782 -0
- package/dist/worker/entry.js +101 -66
- package/docs/README.md +3 -2
- package/docs/acp.md +24 -3
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +31 -2
- package/docs/configuration-and-targets.md +40 -10
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +1 -0
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-dispatch.md +22 -1
- package/docs/installation-and-lifecycle.md +15 -2
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +4 -2
- package/src/cli/acp.ts +6 -2
- package/src/cli/argv.ts +25 -0
- package/src/cli/configure.ts +23 -21
- package/src/cli/doctor-panes.ts +124 -0
- package/src/cli/doctor-toolchain.ts +57 -0
- package/src/cli/doctor.ts +20 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +810 -0
- package/src/cli/fleet.ts +148 -37
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +5 -2
- package/src/cli/run.ts +58 -0
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +23 -2
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/core/bus-events.ts +4 -0
- package/src/core/config.ts +49 -0
- package/src/core/defaults.ts +93 -7
- package/src/core/response-schema.ts +44 -4
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +164 -35
- package/src/domains/config/classify.ts +3 -0
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- package/src/domains/dispatch/capacity-lease.ts +21 -1
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +222 -50
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-run.ts +64 -1
- package/src/domains/dispatch/gate-decisions.ts +11 -1
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/reservation-store.ts +24 -4
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +598 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/types.ts +13 -0
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/schema/serving.ts +31 -0
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/memory/index.ts +0 -1
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/mux/contract.ts +434 -0
- package/src/domains/mux/detect.ts +158 -0
- package/src/domains/mux/extension.ts +47 -0
- package/src/domains/mux/index.ts +96 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +164 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +49 -0
- package/src/domains/mux/socket-client.ts +816 -0
- package/src/domains/mux/types.ts +222 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +180 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +228 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/index.ts +2 -0
- package/src/domains/observability/trace-store.ts +42 -0
- package/src/domains/providers/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +20 -3
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/model-runtime-capabilities.ts +32 -0
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/loader.ts +33 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/server.ts +413 -70
- package/src/engine/acp/types.ts +19 -1
- package/src/engine/claude/sdk-module.ts +98 -0
- package/src/engine/claude/sdk-runtime.ts +19 -11
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-runtime.ts +2 -13
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +103 -5
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/context-overlay.ts +1 -0
- package/src/interactive/cost-overlay.ts +2 -0
- package/src/interactive/council-grid.ts +1 -3
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +26 -16
- package/src/interactive/interactive-application.ts +153 -6
- package/src/interactive/interactive-input-runtime.ts +7 -0
- package/src/interactive/interactive-slash-runtime.ts +36 -6
- package/src/interactive/memory-overlay.ts +1 -0
- package/src/interactive/modal-marker.ts +170 -0
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +58 -2
- package/src/interactive/overlay-general-openers.ts +1 -0
- package/src/interactive/overlay-key-routing.ts +14 -3
- package/src/interactive/overlay-lifecycle.ts +19 -3
- package/src/interactive/overlay-model-selectors.ts +40 -3
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +1 -0
- package/src/interactive/overlays/ask-user.ts +136 -30
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +1 -0
- package/src/interactive/overlays/cwd-fallback.ts +1 -0
- package/src/interactive/overlays/decisions.ts +11 -11
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +1 -0
- package/src/interactive/overlays/handoff-review.ts +1 -0
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +1 -0
- package/src/interactive/overlays/library-install-confirm.ts +1 -0
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +1 -0
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +1 -0
- package/src/interactive/overlays/prompts.ts +1 -0
- package/src/interactive/overlays/session-selector.ts +1 -0
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +579 -44
- package/src/interactive/overlays/side-question.ts +1 -0
- package/src/interactive/overlays/skills-hub.ts +3 -11
- package/src/interactive/overlays/tree-selector.ts +1 -0
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +292 -0
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/slash-commands.ts +251 -15
- package/src/interactive/tasks-overlay.ts +1 -0
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +47 -2
- package/src/interactive/view/artifacts.ts +109 -1
- package/src/interactive/view/view-overlay.ts +1 -0
- package/src/interactive/watch-pane.ts +152 -0
- package/src/interactive/worker-progress.ts +7 -1
- package/src/interactive/worker-receipts.ts +19 -1
- package/src/interactive/worker-stream.ts +5 -0
- package/src/interactive/yazi-bridge.ts +444 -0
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +15 -0
- package/src/tools/compete-worktrees.ts +83 -2
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +14 -3
- package/src/tools/dispatch-arguments.ts +20 -20
- package/src/tools/dispatch-run-events.ts +134 -19
- package/src/tools/dispatch-runner.ts +29 -7
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/executables.ts +17 -14
- package/src/tools/observation.ts +54 -4
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/dist/chunk-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/doctor-TWBWFK5V.js +0 -165
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-6EJMN2Y3.js";
|
|
8
8
|
import {
|
|
9
9
|
clioStateDir
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-BYP5D4HI.js";
|
|
11
11
|
import {
|
|
12
12
|
init_esm_shims
|
|
13
13
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -567,4 +567,4 @@ export {
|
|
|
567
567
|
runCommandVector,
|
|
568
568
|
combineSafeOutput
|
|
569
569
|
};
|
|
570
|
-
//# sourceMappingURL=chunk-
|
|
570
|
+
//# sourceMappingURL=chunk-BBVJUZHB.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-APJ265NV.js";
|
|
12
12
|
import {
|
|
13
13
|
clioConfigDir
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BYP5D4HI.js";
|
|
15
15
|
import {
|
|
16
16
|
safeResourceWrite
|
|
17
17
|
} from "./chunk-WEPFGWHJ.js";
|
|
@@ -959,4 +959,4 @@ export {
|
|
|
959
959
|
authNotRequiredStatus,
|
|
960
960
|
openAuthStorage
|
|
961
961
|
};
|
|
962
|
-
//# sourceMappingURL=chunk-
|
|
962
|
+
//# sourceMappingURL=chunk-BBVYXMFO.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
ceilChars
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UM7N4G5A.js";
|
|
5
5
|
import {
|
|
6
6
|
clioStateDir
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BYP5D4HI.js";
|
|
8
8
|
import {
|
|
9
9
|
init_esm_shims
|
|
10
10
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -305,6 +305,7 @@ var REASONS = /* @__PURE__ */ new Set([
|
|
|
305
305
|
"no_client",
|
|
306
306
|
"no_consumer",
|
|
307
307
|
"step_in_flight",
|
|
308
|
+
"llm_timeout_backoff",
|
|
308
309
|
"no_repeated_failure",
|
|
309
310
|
"bank_empty"
|
|
310
311
|
]);
|
|
@@ -429,8 +430,7 @@ function buildMemoryInterventionUserPrompt(input) {
|
|
|
429
430
|
|
|
430
431
|
// src/domains/memory/task-memory-policy.ts
|
|
431
432
|
var TASK_MEMORY_POLICY_MAX_OPERATIONS = 8;
|
|
432
|
-
var TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS =
|
|
433
|
-
var TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS = 4e3;
|
|
433
|
+
var TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 6e4;
|
|
434
434
|
var TASK_PROMPT_MAX_CHARS = 2e3;
|
|
435
435
|
var TRAJECTORY_PROMPT_MAX_CHARS = 4e3;
|
|
436
436
|
function renderTrajectory(trajectory) {
|
|
@@ -494,7 +494,7 @@ async function runTaskMemoryPolicy(bank, client, input) {
|
|
|
494
494
|
const completion = client.complete({
|
|
495
495
|
systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
496
496
|
userPrompt,
|
|
497
|
-
maxTokens:
|
|
497
|
+
maxTokens: positiveInteger2(input.modelMaxTokens, input.maxTokens),
|
|
498
498
|
signal: controller.signal
|
|
499
499
|
});
|
|
500
500
|
const timeout = new Promise((resolve) => {
|
|
@@ -754,4 +754,4 @@ export {
|
|
|
754
754
|
taskMemoryBankDelta,
|
|
755
755
|
parseTaskMemoryTelemetryRecord
|
|
756
756
|
};
|
|
757
|
-
//# sourceMappingURL=chunk-
|
|
757
|
+
//# sourceMappingURL=chunk-BKFJHQCA.js.map
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
currentToolPlatform,
|
|
4
|
+
ensureToolchainRoot,
|
|
5
|
+
findPinnedTool,
|
|
6
|
+
toolchainRoot
|
|
7
|
+
} from "./chunk-QDC3K2U3.js";
|
|
8
|
+
import {
|
|
9
|
+
init_esm_shims
|
|
10
|
+
} from "./chunk-3R73A4XB.js";
|
|
11
|
+
|
|
12
|
+
// src/domains/toolchain/install.ts
|
|
13
|
+
init_esm_shims();
|
|
14
|
+
import { createHash } from "node:crypto";
|
|
15
|
+
import { chmodSync, existsSync, mkdirSync, renameSync, rmSync as rmSync2, writeFileSync } from "node:fs";
|
|
16
|
+
import { basename, join as join2 } from "node:path";
|
|
17
|
+
|
|
18
|
+
// src/domains/toolchain/archive.ts
|
|
19
|
+
init_esm_shims();
|
|
20
|
+
import { gunzipSync, inflateRawSync } from "node:zlib";
|
|
21
|
+
var MAX_TOTAL_UNCOMPRESSED_BYTES = 512 * 1024 * 1024;
|
|
22
|
+
var ZIP_EOCD_SIGNATURE = 101010256;
|
|
23
|
+
var ZIP_CENTRAL_SIGNATURE = 33639248;
|
|
24
|
+
var ZIP_LOCAL_SIGNATURE = 67324752;
|
|
25
|
+
var ZIP_STORED = 0;
|
|
26
|
+
var ZIP_DEFLATED = 8;
|
|
27
|
+
function readZipEntries(buffer) {
|
|
28
|
+
const eocd = findEndOfCentralDirectory(buffer);
|
|
29
|
+
if (eocd < 0) throw new Error("not a zip archive: end-of-central-directory record not found");
|
|
30
|
+
const entryCount = buffer.readUInt16LE(eocd + 10);
|
|
31
|
+
let cursor = buffer.readUInt32LE(eocd + 16);
|
|
32
|
+
const entries = /* @__PURE__ */ new Map();
|
|
33
|
+
let total = 0;
|
|
34
|
+
for (let i = 0; i < entryCount; i += 1) {
|
|
35
|
+
if (cursor + 46 > buffer.length || buffer.readUInt32LE(cursor) !== ZIP_CENTRAL_SIGNATURE) {
|
|
36
|
+
throw new Error(`zip central directory is malformed at entry ${i}`);
|
|
37
|
+
}
|
|
38
|
+
const method = buffer.readUInt16LE(cursor + 10);
|
|
39
|
+
const compressedSize = buffer.readUInt32LE(cursor + 20);
|
|
40
|
+
const uncompressedSize = buffer.readUInt32LE(cursor + 24);
|
|
41
|
+
const nameLength = buffer.readUInt16LE(cursor + 28);
|
|
42
|
+
const extraLength = buffer.readUInt16LE(cursor + 30);
|
|
43
|
+
const commentLength = buffer.readUInt16LE(cursor + 32);
|
|
44
|
+
const externalAttributes = buffer.readUInt32LE(cursor + 38);
|
|
45
|
+
const localOffset = buffer.readUInt32LE(cursor + 42);
|
|
46
|
+
const name = buffer.toString("utf8", cursor + 46, cursor + 46 + nameLength);
|
|
47
|
+
cursor += 46 + nameLength + extraLength + commentLength;
|
|
48
|
+
if (name.endsWith("/")) continue;
|
|
49
|
+
assertSafeMember(name);
|
|
50
|
+
total += uncompressedSize;
|
|
51
|
+
if (total > MAX_TOTAL_UNCOMPRESSED_BYTES) throw new Error("zip archive expands beyond the size cap");
|
|
52
|
+
if (localOffset + 30 > buffer.length || buffer.readUInt32LE(localOffset) !== ZIP_LOCAL_SIGNATURE) {
|
|
53
|
+
throw new Error(`zip local header is malformed for ${name}`);
|
|
54
|
+
}
|
|
55
|
+
const localNameLength = buffer.readUInt16LE(localOffset + 26);
|
|
56
|
+
const localExtraLength = buffer.readUInt16LE(localOffset + 28);
|
|
57
|
+
const dataStart = localOffset + 30 + localNameLength + localExtraLength;
|
|
58
|
+
const raw = buffer.subarray(dataStart, dataStart + compressedSize);
|
|
59
|
+
const data = method === ZIP_STORED ? Buffer.from(raw) : method === ZIP_DEFLATED ? inflateRawSync(raw) : (() => {
|
|
60
|
+
throw new Error(`unsupported zip compression method ${method} for ${name}`);
|
|
61
|
+
})();
|
|
62
|
+
const unixMode = externalAttributes >>> 16 & 4095;
|
|
63
|
+
entries.set(name, { path: name, data, mode: unixMode === 0 ? null : unixMode });
|
|
64
|
+
}
|
|
65
|
+
return entries;
|
|
66
|
+
}
|
|
67
|
+
function readTarGzEntries(buffer) {
|
|
68
|
+
const tar = gunzipSync(buffer);
|
|
69
|
+
const entries = /* @__PURE__ */ new Map();
|
|
70
|
+
let offset = 0;
|
|
71
|
+
let total = 0;
|
|
72
|
+
let pendingLongName = null;
|
|
73
|
+
while (offset + 512 <= tar.length) {
|
|
74
|
+
const header = tar.subarray(offset, offset + 512);
|
|
75
|
+
if (header.every((byte) => byte === 0)) break;
|
|
76
|
+
const rawName = readTarString(header, 0, 100);
|
|
77
|
+
const prefix = readTarString(header, 345, 155);
|
|
78
|
+
const size = readTarOctal(header, 124, 12);
|
|
79
|
+
const mode = readTarOctal(header, 100, 8);
|
|
80
|
+
const typeFlag = String.fromCharCode(header[156] ?? 0);
|
|
81
|
+
const dataStart = offset + 512;
|
|
82
|
+
const padded = Math.ceil(size / 512) * 512;
|
|
83
|
+
offset = dataStart + padded;
|
|
84
|
+
if (typeFlag === "L") {
|
|
85
|
+
pendingLongName = tar.toString("utf8", dataStart, dataStart + size).replace(/\0+$/, "");
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (typeFlag === "x" || typeFlag === "g" || typeFlag === "5") {
|
|
89
|
+
pendingLongName = null;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (typeFlag !== "0" && typeFlag !== "\0") {
|
|
93
|
+
pendingLongName = null;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const name = pendingLongName ?? (prefix.length > 0 ? `${prefix}/${rawName}` : rawName);
|
|
97
|
+
pendingLongName = null;
|
|
98
|
+
if (name.length === 0 || name.endsWith("/")) continue;
|
|
99
|
+
assertSafeMember(name);
|
|
100
|
+
total += size;
|
|
101
|
+
if (total > MAX_TOTAL_UNCOMPRESSED_BYTES) throw new Error("tar archive expands beyond the size cap");
|
|
102
|
+
entries.set(name, {
|
|
103
|
+
path: name,
|
|
104
|
+
data: Buffer.from(tar.subarray(dataStart, dataStart + size)),
|
|
105
|
+
mode: mode === 0 ? null : mode & 4095
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return entries;
|
|
109
|
+
}
|
|
110
|
+
function findEndOfCentralDirectory(buffer) {
|
|
111
|
+
const start = Math.max(0, buffer.length - (22 + 65535));
|
|
112
|
+
for (let i = buffer.length - 22; i >= start; i -= 1) {
|
|
113
|
+
if (buffer.readUInt32LE(i) === ZIP_EOCD_SIGNATURE) return i;
|
|
114
|
+
}
|
|
115
|
+
return -1;
|
|
116
|
+
}
|
|
117
|
+
function readTarString(header, offset, length) {
|
|
118
|
+
const slice = header.subarray(offset, offset + length);
|
|
119
|
+
const end = slice.indexOf(0);
|
|
120
|
+
return slice.toString("utf8", 0, end === -1 ? slice.length : end);
|
|
121
|
+
}
|
|
122
|
+
function readTarOctal(header, offset, length) {
|
|
123
|
+
const text = readTarString(header, offset, length).trim();
|
|
124
|
+
if (text.length === 0) return 0;
|
|
125
|
+
const value = Number.parseInt(text, 8);
|
|
126
|
+
return Number.isNaN(value) ? 0 : value;
|
|
127
|
+
}
|
|
128
|
+
function assertSafeMember(name) {
|
|
129
|
+
if (name.startsWith("/") || name.startsWith("\\") || /^[A-Za-z]:/.test(name)) {
|
|
130
|
+
throw new Error(`archive member has an absolute path: ${name}`);
|
|
131
|
+
}
|
|
132
|
+
if (name.split(/[/\\]/).includes("..")) {
|
|
133
|
+
throw new Error(`archive member escapes the archive root: ${name}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// src/domains/toolchain/remove.ts
|
|
138
|
+
init_esm_shims();
|
|
139
|
+
import { readdirSync, rmdirSync, rmSync, statSync } from "node:fs";
|
|
140
|
+
import { join } from "node:path";
|
|
141
|
+
var STALE_STAGING_MS = 36e5;
|
|
142
|
+
function installedToolVersions(id, options = {}) {
|
|
143
|
+
const dir = join(options.root ?? toolchainRoot(), id);
|
|
144
|
+
let names;
|
|
145
|
+
try {
|
|
146
|
+
names = readdirSync(dir);
|
|
147
|
+
} catch {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
return names.filter((name) => !name.startsWith(".") && isDirectory(join(dir, name))).sort((a, b) => a.localeCompare(b));
|
|
151
|
+
}
|
|
152
|
+
function removeTool(id, options = {}) {
|
|
153
|
+
if (findPinnedTool(id) === null) {
|
|
154
|
+
const dir = join(options.root ?? toolchainRoot(), id);
|
|
155
|
+
return { ok: false, id, dir, removed: [], failed: [], staleStaging: [], message: `unknown tool: ${id}` };
|
|
156
|
+
}
|
|
157
|
+
return removeVersions(id, null, options);
|
|
158
|
+
}
|
|
159
|
+
function pruneSupersededVersions(id, keep, options = {}) {
|
|
160
|
+
return removeVersions(id, keep, options);
|
|
161
|
+
}
|
|
162
|
+
function removeVersions(id, keep, options) {
|
|
163
|
+
const root = options.root ?? toolchainRoot();
|
|
164
|
+
const dir = join(root, id);
|
|
165
|
+
const versions = installedToolVersions(id, { root }).filter((version) => version !== keep);
|
|
166
|
+
const removed = [];
|
|
167
|
+
const failed = [];
|
|
168
|
+
for (const version of versions) {
|
|
169
|
+
try {
|
|
170
|
+
rmSync(join(dir, version), { recursive: true, force: true });
|
|
171
|
+
removed.push(version);
|
|
172
|
+
} catch (error) {
|
|
173
|
+
failed.push({ version, error: error instanceof Error ? error.message : String(error) });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const staleStaging = sweepStaleStaging(dir, options.staleStagingMs ?? STALE_STAGING_MS);
|
|
177
|
+
if (keep === null && failed.length === 0) {
|
|
178
|
+
try {
|
|
179
|
+
rmdirSync(dir);
|
|
180
|
+
} catch {
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
ok: failed.length === 0,
|
|
185
|
+
id,
|
|
186
|
+
dir,
|
|
187
|
+
removed,
|
|
188
|
+
failed,
|
|
189
|
+
staleStaging,
|
|
190
|
+
message: describeRemoval(id, dir, keep, removed, failed, staleStaging)
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function sweepStaleStaging(dir, staleMs) {
|
|
194
|
+
let names;
|
|
195
|
+
try {
|
|
196
|
+
names = readdirSync(dir);
|
|
197
|
+
} catch {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
const cutoff = Date.now() - staleMs;
|
|
201
|
+
const swept = [];
|
|
202
|
+
for (const name of names.sort((a, b) => a.localeCompare(b))) {
|
|
203
|
+
if (!STAGING_NAME.test(name)) continue;
|
|
204
|
+
const stat = statSync(join(dir, name), { throwIfNoEntry: false });
|
|
205
|
+
if (stat === void 0 || !stat.isDirectory() || stat.mtimeMs > cutoff) continue;
|
|
206
|
+
try {
|
|
207
|
+
rmSync(join(dir, name), { recursive: true, force: true });
|
|
208
|
+
swept.push(name);
|
|
209
|
+
} catch {
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return swept;
|
|
213
|
+
}
|
|
214
|
+
var STAGING_NAME = /^\.[^/]+\.(?:incomplete|replaced)-\d+-[a-z0-9]+$/;
|
|
215
|
+
function describeRemoval(id, dir, keep, removed, failed, staleStaging) {
|
|
216
|
+
const swept = staleStaging.length === 0 ? "" : `; swept ${staleStaging.length} abandoned install ${staleStaging.length === 1 ? "directory" : "directories"}`;
|
|
217
|
+
const trouble = failed.map((entry) => `${entry.version} (${entry.error})`).join(", ");
|
|
218
|
+
if (failed.length > 0) {
|
|
219
|
+
const done = removed.length > 0 ? `removed ${removed.join(", ")}; ` : "";
|
|
220
|
+
return `${done}could not remove ${id} ${trouble} under ${dir}${swept}`;
|
|
221
|
+
}
|
|
222
|
+
if (removed.length === 0) {
|
|
223
|
+
return keep === null ? `${id} is not installed under ${dir}; nothing to remove${swept}` : `${id} has no superseded versions under ${dir}${swept}`;
|
|
224
|
+
}
|
|
225
|
+
const what = `${id} ${removed.join(", ")}`;
|
|
226
|
+
const headline = keep === null ? `removed ${what} from ${dir}` : `pruned ${what} from ${dir}, keeping ${keep}`;
|
|
227
|
+
return `${headline}${swept}`;
|
|
228
|
+
}
|
|
229
|
+
function isDirectory(path) {
|
|
230
|
+
return statSync(path, { throwIfNoEntry: false })?.isDirectory() === true;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// src/domains/toolchain/install.ts
|
|
234
|
+
var DOWNLOAD_TIMEOUT_MS = 3e5;
|
|
235
|
+
async function installTool(id, options = {}) {
|
|
236
|
+
const entry = findPinnedTool(id);
|
|
237
|
+
if (entry === null) {
|
|
238
|
+
return failure(id, "unknown", "", `unknown tool: ${id}`);
|
|
239
|
+
}
|
|
240
|
+
return installPinnedTool(entry, options);
|
|
241
|
+
}
|
|
242
|
+
async function installPinnedTool(entry, options = {}) {
|
|
243
|
+
const root = options.root ?? ensureToolchainRoot();
|
|
244
|
+
const dir = join2(root, entry.id, entry.version);
|
|
245
|
+
const platform = options.platform ?? currentToolPlatform();
|
|
246
|
+
const progress = options.onProgress ?? (() => void 0);
|
|
247
|
+
if (platform === null) {
|
|
248
|
+
return failure(entry.id, entry.version, dir, `no pinned asset for ${process.platform}-${process.arch}`);
|
|
249
|
+
}
|
|
250
|
+
const download = entry.downloads[platform];
|
|
251
|
+
if (download === void 0) {
|
|
252
|
+
return failure(entry.id, entry.version, dir, `no pinned asset for ${platform}`);
|
|
253
|
+
}
|
|
254
|
+
const installedBinaries = Object.keys(download.binaryMembers).map((name) => join2(dir, executableName(name, platform)));
|
|
255
|
+
if (!options.force && installedBinaries.every((path) => existsSync(path))) {
|
|
256
|
+
const swept2 = prune(root, entry);
|
|
257
|
+
return {
|
|
258
|
+
ok: true,
|
|
259
|
+
id: entry.id,
|
|
260
|
+
version: entry.version,
|
|
261
|
+
dir,
|
|
262
|
+
binaries: installedBinaries,
|
|
263
|
+
documents: [],
|
|
264
|
+
skipped: true,
|
|
265
|
+
pruned: swept2.pruned,
|
|
266
|
+
message: `${entry.id} ${entry.version} is already installed at ${dir}${swept2.note}`
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
const fetcher = options.fetch ?? fetchAsset;
|
|
270
|
+
let assetBytes;
|
|
271
|
+
try {
|
|
272
|
+
progress(`downloading ${download.url}`);
|
|
273
|
+
assetBytes = await fetcher(download.url);
|
|
274
|
+
} catch (error) {
|
|
275
|
+
return failure(entry.id, entry.version, dir, `download failed: ${messageOf(error)}`);
|
|
276
|
+
}
|
|
277
|
+
const actual = sha256(assetBytes);
|
|
278
|
+
if (actual !== download.sha256) {
|
|
279
|
+
return failure(
|
|
280
|
+
entry.id,
|
|
281
|
+
entry.version,
|
|
282
|
+
dir,
|
|
283
|
+
`checksum mismatch for ${download.url}: expected ${download.sha256}, got ${actual}. Nothing was written.`
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
progress(`checksum verified (${actual})`);
|
|
287
|
+
const documentBytes = /* @__PURE__ */ new Map();
|
|
288
|
+
for (const doc of entry.documents) {
|
|
289
|
+
let bytes;
|
|
290
|
+
try {
|
|
291
|
+
progress(`downloading ${doc.url}`);
|
|
292
|
+
bytes = await fetcher(doc.url);
|
|
293
|
+
} catch (error) {
|
|
294
|
+
return failure(entry.id, entry.version, dir, `download failed for ${doc.name}: ${messageOf(error)}`);
|
|
295
|
+
}
|
|
296
|
+
const docHash = sha256(bytes);
|
|
297
|
+
if (docHash !== doc.sha256) {
|
|
298
|
+
return failure(
|
|
299
|
+
entry.id,
|
|
300
|
+
entry.version,
|
|
301
|
+
dir,
|
|
302
|
+
`checksum mismatch for ${doc.url}: expected ${doc.sha256}, got ${docHash}. Nothing was written.`
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
documentBytes.set(doc.name, bytes);
|
|
306
|
+
}
|
|
307
|
+
let members;
|
|
308
|
+
try {
|
|
309
|
+
members = unpack(assetBytes, download);
|
|
310
|
+
} catch (error) {
|
|
311
|
+
return failure(entry.id, entry.version, dir, `could not unpack the asset: ${messageOf(error)}`);
|
|
312
|
+
}
|
|
313
|
+
for (const memberPath of Object.values(download.binaryMembers)) {
|
|
314
|
+
if (!members.has(memberPath)) {
|
|
315
|
+
return failure(entry.id, entry.version, dir, `the asset does not contain ${memberPath || entry.primaryBinary}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
for (const memberPath of download.documentMembers) {
|
|
319
|
+
if (!members.has(memberPath)) {
|
|
320
|
+
return failure(entry.id, entry.version, dir, `the asset does not contain ${memberPath}`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
const staging = join2(root, entry.id, `.${entry.version}.incomplete-${process.pid}-${Date.now().toString(36)}`);
|
|
324
|
+
const retired = join2(root, entry.id, `.${entry.version}.replaced-${process.pid}-${Date.now().toString(36)}`);
|
|
325
|
+
let retiredOld = false;
|
|
326
|
+
const binaries = [];
|
|
327
|
+
const documents = [];
|
|
328
|
+
try {
|
|
329
|
+
mkdirSync(staging, { recursive: true });
|
|
330
|
+
for (const [name, memberPath] of Object.entries(download.binaryMembers)) {
|
|
331
|
+
const member = members.get(memberPath);
|
|
332
|
+
if (member === void 0) continue;
|
|
333
|
+
const target = join2(staging, executableName(name, platform));
|
|
334
|
+
writeFileSync(target, member.data);
|
|
335
|
+
chmodSync(target, 493);
|
|
336
|
+
binaries.push(join2(dir, executableName(name, platform)));
|
|
337
|
+
}
|
|
338
|
+
for (const memberPath of download.documentMembers) {
|
|
339
|
+
const member = members.get(memberPath);
|
|
340
|
+
if (member === void 0) continue;
|
|
341
|
+
const target = join2(staging, basename(memberPath));
|
|
342
|
+
writeFileSync(target, member.data, { mode: 420 });
|
|
343
|
+
documents.push(join2(dir, basename(memberPath)));
|
|
344
|
+
}
|
|
345
|
+
for (const [name, bytes] of documentBytes) {
|
|
346
|
+
writeFileSync(join2(staging, name), bytes, { mode: 420 });
|
|
347
|
+
documents.push(join2(dir, name));
|
|
348
|
+
}
|
|
349
|
+
writeFileSync(
|
|
350
|
+
join2(staging, "clio-install.json"),
|
|
351
|
+
`${JSON.stringify(
|
|
352
|
+
{
|
|
353
|
+
id: entry.id,
|
|
354
|
+
version: entry.version,
|
|
355
|
+
platform,
|
|
356
|
+
license: entry.license,
|
|
357
|
+
homepage: entry.homepage,
|
|
358
|
+
url: download.url,
|
|
359
|
+
sha256: download.sha256,
|
|
360
|
+
installedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
361
|
+
},
|
|
362
|
+
null,
|
|
363
|
+
2
|
|
364
|
+
)}
|
|
365
|
+
`,
|
|
366
|
+
{ mode: 420 }
|
|
367
|
+
);
|
|
368
|
+
if (options.force && existsSync(dir)) {
|
|
369
|
+
renameSync(dir, retired);
|
|
370
|
+
retiredOld = true;
|
|
371
|
+
}
|
|
372
|
+
renameSync(staging, dir);
|
|
373
|
+
if (retiredOld) {
|
|
374
|
+
rmSync2(retired, { recursive: true, force: true });
|
|
375
|
+
retiredOld = false;
|
|
376
|
+
}
|
|
377
|
+
} catch (error) {
|
|
378
|
+
rmSync2(staging, { recursive: true, force: true });
|
|
379
|
+
if (retiredOld && !existsSync(dir)) {
|
|
380
|
+
try {
|
|
381
|
+
renameSync(retired, dir);
|
|
382
|
+
retiredOld = false;
|
|
383
|
+
} catch {
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (!options.force && existsSync(dir)) {
|
|
387
|
+
const swept2 = prune(root, entry);
|
|
388
|
+
return {
|
|
389
|
+
ok: true,
|
|
390
|
+
id: entry.id,
|
|
391
|
+
version: entry.version,
|
|
392
|
+
dir,
|
|
393
|
+
binaries: installedBinaries,
|
|
394
|
+
documents: [],
|
|
395
|
+
skipped: true,
|
|
396
|
+
pruned: swept2.pruned,
|
|
397
|
+
message: `${entry.id} ${entry.version} was installed concurrently at ${dir}${swept2.note}`
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
return failure(entry.id, entry.version, dir, `install failed: ${messageOf(error)}`);
|
|
401
|
+
}
|
|
402
|
+
const swept = prune(root, entry);
|
|
403
|
+
return {
|
|
404
|
+
ok: true,
|
|
405
|
+
id: entry.id,
|
|
406
|
+
version: entry.version,
|
|
407
|
+
dir,
|
|
408
|
+
binaries,
|
|
409
|
+
documents,
|
|
410
|
+
skipped: false,
|
|
411
|
+
pruned: swept.pruned,
|
|
412
|
+
message: `installed ${entry.id} ${entry.version} (${entry.license}) at ${dir}${swept.note}`
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
function prune(root, entry) {
|
|
416
|
+
const outcome = pruneSupersededVersions(entry.id, entry.version, { root });
|
|
417
|
+
const parts = [];
|
|
418
|
+
if (outcome.removed.length > 0) parts.push(`pruned ${outcome.removed.join(", ")}`);
|
|
419
|
+
if (outcome.staleStaging.length > 0) {
|
|
420
|
+
const count = outcome.staleStaging.length;
|
|
421
|
+
parts.push(`swept ${count} abandoned install ${count === 1 ? "directory" : "directories"}`);
|
|
422
|
+
}
|
|
423
|
+
if (outcome.failed.length > 0) {
|
|
424
|
+
parts.push(`could not prune ${outcome.failed.map((item) => `${item.version} (${item.error})`).join(", ")}`);
|
|
425
|
+
}
|
|
426
|
+
return { pruned: outcome.removed, note: parts.length === 0 ? "" : `; ${parts.join("; ")}` };
|
|
427
|
+
}
|
|
428
|
+
function unpack(bytes, download) {
|
|
429
|
+
if (download.archive === "raw") {
|
|
430
|
+
return /* @__PURE__ */ new Map([["", { path: "", data: bytes, mode: 493 }]]);
|
|
431
|
+
}
|
|
432
|
+
if (download.archive === "zip") return readZipEntries(bytes);
|
|
433
|
+
return readTarGzEntries(bytes);
|
|
434
|
+
}
|
|
435
|
+
async function fetchAsset(url) {
|
|
436
|
+
const response = await fetch(url, {
|
|
437
|
+
redirect: "follow",
|
|
438
|
+
signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS)
|
|
439
|
+
});
|
|
440
|
+
if (!response.ok) throw new Error(`HTTP ${response.status} ${response.statusText}`);
|
|
441
|
+
return Buffer.from(await response.arrayBuffer());
|
|
442
|
+
}
|
|
443
|
+
function sha256(bytes) {
|
|
444
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
445
|
+
}
|
|
446
|
+
function executableName(name, platform) {
|
|
447
|
+
return platform.startsWith("win32") ? `${name}.exe` : name;
|
|
448
|
+
}
|
|
449
|
+
function failure(id, version, dir, message) {
|
|
450
|
+
return { ok: false, id, version, dir, binaries: [], documents: [], skipped: false, pruned: [], message };
|
|
451
|
+
}
|
|
452
|
+
function messageOf(error) {
|
|
453
|
+
return error instanceof Error ? error.message : String(error);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
export {
|
|
457
|
+
installedToolVersions,
|
|
458
|
+
removeTool,
|
|
459
|
+
installTool,
|
|
460
|
+
installPinnedTool
|
|
461
|
+
};
|
|
462
|
+
//# sourceMappingURL=chunk-BKFM6EJV.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
findExecutableOnPath,
|
|
4
|
+
resolveToolBinary
|
|
5
|
+
} from "./chunk-QSNYB6ZV.js";
|
|
6
|
+
import {
|
|
7
|
+
init_esm_shims
|
|
8
|
+
} from "./chunk-3R73A4XB.js";
|
|
9
|
+
|
|
10
|
+
// src/tools/executables.ts
|
|
11
|
+
init_esm_shims();
|
|
12
|
+
function resolveFdBinary() {
|
|
13
|
+
return findExecutableOnPath("fd") ?? findExecutableOnPath("fdfind");
|
|
14
|
+
}
|
|
15
|
+
function resolveRgBinary() {
|
|
16
|
+
return findExecutableOnPath("rg");
|
|
17
|
+
}
|
|
18
|
+
function resolveBinary(name) {
|
|
19
|
+
return resolveToolBinary(name).binaryPath;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
resolveFdBinary,
|
|
24
|
+
resolveRgBinary,
|
|
25
|
+
resolveBinary
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=chunk-BMS5RKQY.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-W6GROXXM.js";
|
|
15
15
|
import {
|
|
16
16
|
ceilChars
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-UM7N4G5A.js";
|
|
18
18
|
import {
|
|
19
19
|
init_esm_shims
|
|
20
20
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -119,4 +119,4 @@ export {
|
|
|
119
119
|
recallableRefListing,
|
|
120
120
|
recallErrorMessage
|
|
121
121
|
};
|
|
122
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-BPKCPIL7.js.map
|