@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.
Files changed (416) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/NOTICE +33 -0
  3. package/README.md +7 -2
  4. package/dist/{acp-7LOELQFP.js → acp-G5WJBNCT.js} +13 -12
  5. package/dist/{agents-FIBG2SHA.js → agents-FMV2Q5G4.js} +39 -36
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-OI4LIH2I.js → auth-3IDSJEIK.js} +16 -15
  8. package/dist/{builtins-AD25UL3C.js → builtins-XCZWXSC7.js} +3 -3
  9. package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
  10. package/dist/{chunk-56KB5IJP.js → chunk-2OQE55CK.js} +3 -3
  11. package/dist/{chunk-N3PBVRTZ.js → chunk-32KWKNSF.js} +9 -7
  12. package/dist/{chunk-VKBMFOYV.js → chunk-36EJLSQQ.js} +23 -27
  13. package/dist/{chunk-465CC7FK.js → chunk-3BT2XMV4.js} +16 -13
  14. package/dist/{chunk-NQ6UCCOD.js → chunk-3URVFKWK.js} +7 -7
  15. package/dist/{chunk-WIE7ZOSW.js → chunk-3XML7CDN.js} +2 -2
  16. package/dist/chunk-42FMPA75.js +101 -0
  17. package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
  18. package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
  19. package/dist/{chunk-JEQQR47K.js → chunk-6DB53AJS.js} +168 -9
  20. package/dist/{chunk-KV2AOLDF.js → chunk-76ONBSIA.js} +5 -25
  21. package/dist/{chunk-FALJGAWU.js → chunk-7MCTRUCE.js} +2 -2
  22. package/dist/{chunk-5T7RBWN2.js → chunk-AB44T6BB.js} +5 -5
  23. package/dist/chunk-B7OBL7PK.js +1405 -0
  24. package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
  25. package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
  26. package/dist/{chunk-O6I4CIEU.js → chunk-BKFJHQCA.js} +6 -6
  27. package/dist/chunk-BKFM6EJV.js +462 -0
  28. package/dist/chunk-BMS5RKQY.js +27 -0
  29. package/dist/{chunk-MV2VUEJC.js → chunk-BPKCPIL7.js} +2 -2
  30. package/dist/{chunk-TEO2TLVN.js → chunk-BUMFYQFY.js} +964 -1120
  31. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  32. package/dist/chunk-C2LTL2W6.js +2447 -0
  33. package/dist/{chunk-EBOC7MT3.js → chunk-CODPRO7Q.js} +8 -8
  34. package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
  35. package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
  36. package/dist/{chunk-MIX5N5AC.js → chunk-DQITNCXG.js} +394 -154
  37. package/dist/{chunk-S4COXYBG.js → chunk-DYJP44XW.js} +129 -106
  38. package/dist/{chunk-N5XKWMDW.js → chunk-F4CKPOEQ.js} +6 -6
  39. package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
  40. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  41. package/dist/{chunk-7C6RYZGQ.js → chunk-GKF55TAZ.js} +3 -3
  42. package/dist/{chunk-B5XRQOLB.js → chunk-GR5G2PVF.js} +9 -8
  43. package/dist/{chunk-XDOQXGFO.js → chunk-GXNLGKAB.js} +64 -8
  44. package/dist/chunk-HHV2GANA.js +88 -0
  45. package/dist/{chunk-774ILSRL.js → chunk-HI63TFOG.js} +4 -3
  46. package/dist/{chunk-R7LNVMCS.js → chunk-HJJTYUHX.js} +64 -72
  47. package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
  48. package/dist/{chunk-CA42X6KT.js → chunk-HWHKMHUA.js} +6 -6
  49. package/dist/chunk-HZHHCK24.js +1631 -0
  50. package/dist/{chunk-HJB5IUKP.js → chunk-I5VEOC6I.js} +12 -12
  51. package/dist/chunk-IBEBSCYA.js +564 -0
  52. package/dist/chunk-IQ7KR472.js +362 -0
  53. package/dist/{chunk-4H6ULJ3H.js → chunk-J4W7KFM7.js} +921 -990
  54. package/dist/{chunk-4LJX2PUC.js → chunk-JDG2WCRO.js} +5 -5
  55. package/dist/{chunk-NZU6YDNV.js → chunk-K5C3NCBD.js} +4 -4
  56. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  57. package/dist/{chunk-NNNWO6F2.js → chunk-KFZI4NIL.js} +93 -3
  58. package/dist/chunk-KMVISBZR.js +132 -0
  59. package/dist/{chunk-BVDVID7E.js → chunk-LDQ2ZF2M.js} +2 -2
  60. package/dist/{chunk-OEDBCISO.js → chunk-LQ3DZAMX.js} +2 -2
  61. package/dist/{chunk-PZ4I4JE2.js → chunk-LY4S7GJC.js} +124 -116
  62. package/dist/{chunk-3DUR4WUA.js → chunk-MLKNTWH2.js} +19 -19
  63. package/dist/chunk-NEKRRTYW.js +56 -0
  64. package/dist/{chunk-5DQRIYDZ.js → chunk-NHCZP4K7.js} +2 -2
  65. package/dist/chunk-NHLBIGRH.js +1506 -0
  66. package/dist/chunk-NQQH3YT7.js +302 -0
  67. package/dist/chunk-NYS75XW5.js +15 -0
  68. package/dist/{chunk-TD7UE2L5.js → chunk-O4XIVISU.js} +7 -7
  69. package/dist/{chunk-WXCJ7VME.js → chunk-O6TL7WWY.js} +6 -6
  70. package/dist/chunk-OQBA45DZ.js +97 -0
  71. package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
  72. package/dist/chunk-PMZCIOCJ.js +25 -0
  73. package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
  74. package/dist/{chunk-HKO36JWF.js → chunk-QBJA7R7N.js} +31 -3
  75. package/dist/chunk-QDC3K2U3.js +262 -0
  76. package/dist/{chunk-5HFBWUMU.js → chunk-QLFS5GO2.js} +4 -4
  77. package/dist/{chunk-GAYUJ7LE.js → chunk-QLL7ILRG.js} +41 -32
  78. package/dist/{chunk-LXPJXFM5.js → chunk-QREDIESB.js} +7 -7
  79. package/dist/chunk-QSNYB6ZV.js +195 -0
  80. package/dist/chunk-R346GLFC.js +31 -0
  81. package/dist/{chunk-VPTUJU4P.js → chunk-SJ5ZKQ4S.js} +2 -2
  82. package/dist/{chunk-QQ7EKM72.js → chunk-SP2RXXYO.js} +6 -54
  83. package/dist/chunk-SUCTJL45.js +45 -0
  84. package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
  85. package/dist/chunk-T56WDKA5.js +183 -0
  86. package/dist/chunk-TVHHYFHE.js +255 -0
  87. package/dist/{chunk-IHKBWSXF.js → chunk-TZ3SGWZZ.js} +2 -2
  88. package/dist/{chunk-ECUO3KDP.js → chunk-U77AMWDL.js} +47 -7
  89. package/dist/{chunk-3UUY7R3Z.js → chunk-ULC6OTWO.js} +7 -7
  90. package/dist/{chunk-AEYBF3TB.js → chunk-UM7N4G5A.js} +2 -2
  91. package/dist/{chunk-3V5AYSEQ.js → chunk-UXMFQ54G.js} +43 -36
  92. package/dist/{chunk-YW7UVM5V.js → chunk-V5DHCITQ.js} +34 -1
  93. package/dist/{chunk-47CMYGET.js → chunk-VAZSBTKF.js} +2 -2
  94. package/dist/{chunk-3MRC2YSQ.js → chunk-VEO4AP2K.js} +2 -2
  95. package/dist/{chunk-PNY46YEY.js → chunk-VFA6GDY5.js} +47 -3
  96. package/dist/chunk-VO67MWHC.js +75 -0
  97. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  98. package/dist/{chunk-AD7Y7STJ.js → chunk-VYMXRQI6.js} +36 -22
  99. package/dist/{chunk-T3Z6VAAF.js → chunk-W5VSYASO.js} +19 -17
  100. package/dist/{chunk-5PVQ4SRS.js → chunk-WZR7K7ZX.js} +7 -123
  101. package/dist/{chunk-DG4M6ZUE.js → chunk-X3YGUTOB.js} +4 -4
  102. package/dist/chunk-X75E3D2N.js +686 -0
  103. package/dist/{chunk-P3JGPQFL.js → chunk-YDFRH54B.js} +4 -4
  104. package/dist/chunk-YJX4SHTD.js +40 -0
  105. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  106. package/dist/{chunk-YSEHGPCT.js → chunk-Z2RR6MAK.js} +3 -3
  107. package/dist/{chunk-HCBCAYZU.js → chunk-Z4TXYIEG.js} +5 -5
  108. package/dist/cli/index.js +47 -36
  109. package/dist/{clio-LT5V7SSZ.js → clio-2JXHBBY5.js} +7 -7
  110. package/dist/{code-nav-LMW275PA.js → code-nav-3YYRMYNF.js} +6 -6
  111. package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
  112. package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
  113. package/dist/{config-RXS5T3JT.js → config-QZPCMYSO.js} +58 -50
  114. package/dist/{configure-2WYWSCSD.js → configure-TEGEBYCA.js} +21 -19
  115. package/dist/{context-I3BTOTCS.js → context-AV7OEZ4D.js} +11 -11
  116. package/dist/{context-MVOORGMF.js → context-E6H5RNMC.js} +49 -41
  117. package/dist/{context-PALKKQYL.js → context-GSXUE4CT.js} +25 -23
  118. package/dist/{context-clear-N2WOYZ2K.js → context-clear-SHIBYK6T.js} +48 -40
  119. package/dist/{context-working-set-MIEVECVZ.js → context-working-set-5ZGKPGZQ.js} +11 -10
  120. package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-EFMJT4LD.js} +88 -60
  121. package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
  122. package/dist/doctor-QOA5FNY5.js +313 -0
  123. package/dist/{eval-IJ5VEZDJ.js → eval-TFBYQH4H.js} +66 -64
  124. package/dist/eval-inventory-SXH7PDKX.js +316 -0
  125. package/dist/{evidence-L5APPXNV.js → evidence-ERGESKGN.js} +198 -44
  126. package/dist/{evolve-RGNKFJ52.js → evolve-VDXTSYCJ.js} +46 -38
  127. package/dist/{extensions-7WYWUX5A.js → extensions-7BGBHN57.js} +6 -6
  128. package/dist/{fleet-6CNVBZZP.js → fleet-2RRVDF2V.js} +189 -101
  129. package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-VJ726XIA.js} +10 -10
  130. package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
  131. package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-JF5QOATM.js} +16 -15
  132. package/dist/fleet-inspect-VLY4S7QM.js +442 -0
  133. package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-AIZUEJOY.js} +6 -5
  134. package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-AJRPDMDV.js} +20 -18
  135. package/dist/fleet-verify-JFEL2L3H.js +175 -0
  136. package/dist/fleet-view-ZCON35AG.js +102 -0
  137. package/dist/{init-VBN2ACVA.js → init-DN2WWLFE.js} +64 -56
  138. package/dist/install-XGLBQY5E.js +13 -0
  139. package/dist/interop-OZBKXAYL.js +114 -0
  140. package/dist/{library-JHGUMLY2.js → library-YWZG7IMW.js} +19 -18
  141. package/dist/{memory-K4OQIYWG.js → memory-I4C4HMLW.js} +48 -40
  142. package/dist/{models-2NCZUWDD.js → models-CEYXJBO6.js} +30 -28
  143. package/dist/{monitor-MMVTJABD.js → monitor-NZ6GCI3P.js} +53 -47
  144. package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-GCGQ4N5I.js} +6311 -7145
  145. package/dist/panes-HMABYVO4.js +58 -0
  146. package/dist/panes-KY6W3V2E.js +103 -0
  147. package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
  148. package/dist/{reset-DD5JGOY3.js → reset-DQ6FGCSH.js} +13 -11
  149. package/dist/resources-BB3MVJMD.js +111 -0
  150. package/dist/{run-QEGNX7FL.js → run-H2GQDUER.js} +113 -82
  151. package/dist/{share-JKD3BQMW.js → share-GTJN6A5O.js} +18 -17
  152. package/dist/{skills-LMQIKDOZ.js → skills-L55TEW6R.js} +31 -24
  153. package/dist/{skills-eval-I7X2774U.js → skills-eval-XVXPH2JI.js} +61 -52
  154. package/dist/skills-inventory-S4MXPJFV.js +126 -0
  155. package/dist/slash-commands-ZSGASKJC.js +77 -0
  156. package/dist/{steer-CF5TDANS.js → steer-RZGSCY4R.js} +3 -3
  157. package/dist/{support-I7LOJLIF.js → support-PKEUNNQL.js} +4 -4
  158. package/dist/{targets-RUSR6B5Z.js → targets-NCPZ644J.js} +31 -29
  159. package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-44SV3YCN.js} +4 -4
  160. package/dist/tools-DAF3DI3C.js +27 -0
  161. package/dist/{trace-ODOQIVIW.js → trace-FYVW2MQA.js} +149 -7
  162. package/dist/tui-primitives-2AKXQNZK.js +13 -0
  163. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
  164. package/dist/{upgrade-XANW3FXB.js → upgrade-3XPP6OQL.js} +26 -24
  165. package/dist/{usage-4H7ZRXQT.js → usage-3NLHGTU2.js} +57 -49
  166. package/dist/{verifiers-UZXNBZEB.js → verifiers-SSQONKRT.js} +171 -12
  167. package/dist/{verify-BVKWTNDL.js → verify-3U6J7FZI.js} +9 -9
  168. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
  169. package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-CEHYGPGQ.js} +67 -59
  170. package/dist/with-panes-MKB46MPQ.js +782 -0
  171. package/dist/worker/entry.js +101 -66
  172. package/docs/README.md +3 -2
  173. package/docs/acp.md +24 -3
  174. package/docs/alcf-provider.md +1 -1
  175. package/docs/architecture.md +2 -2
  176. package/docs/artifact-versions.md +4 -1
  177. package/docs/built-in-agents.md +1 -1
  178. package/docs/capacity-and-scheduling.md +43 -5
  179. package/docs/commands-and-modes.md +31 -2
  180. package/docs/configuration-and-targets.md +40 -10
  181. package/docs/context-engine.md +1 -1
  182. package/docs/development-pipeline.md +19 -0
  183. package/docs/dispatch-typed-intent.md +385 -0
  184. package/docs/documentation-coverage.md +2 -2
  185. package/docs/documentation-guide.md +1 -1
  186. package/docs/environment-variables.md +1 -0
  187. package/docs/eval-runner.md +1 -1
  188. package/docs/evals-internal.md +1 -1
  189. package/docs/evidence-and-memory.md +2 -2
  190. package/docs/evolution.md +1 -1
  191. package/docs/exit-codes-and-output.md +1 -1
  192. package/docs/extensions-and-sharing.md +25 -1
  193. package/docs/fleet-dispatch.md +22 -1
  194. package/docs/installation-and-lifecycle.md +15 -2
  195. package/docs/middleware-and-components.md +1 -1
  196. package/docs/model-catalog.md +10 -1
  197. package/docs/observability.md +3 -3
  198. package/docs/proactive-memory.md +1 -1
  199. package/docs/prompt-envelope-and-tools.md +1 -1
  200. package/docs/provider-adapter-cookbook.md +1 -1
  201. package/docs/safety-model.md +2 -2
  202. package/docs/scientific-validation.md +3 -3
  203. package/docs/session-lifecycle.md +1 -1
  204. package/docs/skills-marketplace.md +1 -1
  205. package/docs/tool-usage.md +18 -8
  206. package/docs/trace-store.md +1 -1
  207. package/docs/troubleshooting.md +1 -1
  208. package/docs/tui-design.md +1 -1
  209. package/docs/worker-dispatch-mechanics.md +1 -1
  210. package/package.json +4 -2
  211. package/src/cli/acp.ts +6 -2
  212. package/src/cli/argv.ts +25 -0
  213. package/src/cli/configure.ts +23 -21
  214. package/src/cli/doctor-panes.ts +124 -0
  215. package/src/cli/doctor-toolchain.ts +57 -0
  216. package/src/cli/doctor.ts +20 -1
  217. package/src/cli/eval-inventory.ts +436 -0
  218. package/src/cli/eval.ts +13 -0
  219. package/src/cli/evidence-detail.ts +88 -0
  220. package/src/cli/evidence-inventory.ts +183 -0
  221. package/src/cli/evidence.ts +30 -5
  222. package/src/cli/fleet-decisions.ts +69 -0
  223. package/src/cli/fleet-inspect.ts +334 -0
  224. package/src/cli/fleet-verify.ts +133 -0
  225. package/src/cli/fleet-view.ts +810 -0
  226. package/src/cli/fleet.ts +148 -37
  227. package/src/cli/index.ts +14 -2
  228. package/src/cli/interop-inspect.ts +128 -0
  229. package/src/cli/interop.ts +34 -0
  230. package/src/cli/panes.ts +35 -0
  231. package/src/cli/reset.ts +5 -2
  232. package/src/cli/run.ts +58 -0
  233. package/src/cli/skills-inventory.ts +185 -0
  234. package/src/cli/skills.ts +16 -13
  235. package/src/cli/tools.ts +321 -0
  236. package/src/cli/trace-inspect.ts +252 -0
  237. package/src/cli/trace.ts +23 -2
  238. package/src/cli/verifiers-inspect.ts +347 -0
  239. package/src/cli/verifiers.ts +9 -0
  240. package/src/core/bus-events.ts +4 -0
  241. package/src/core/config.ts +49 -0
  242. package/src/core/defaults.ts +93 -7
  243. package/src/core/response-schema.ts +44 -4
  244. package/src/core/theme-token-hex.ts +43 -0
  245. package/src/core/tool-names.ts +2 -1
  246. package/src/core/xdg.ts +1 -1
  247. package/src/domains/agents/fleets/build-review.md +0 -3
  248. package/src/domains/agents/fleets/build-test.md +0 -3
  249. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  250. package/src/domains/agents/result-contract.ts +164 -35
  251. package/src/domains/config/classify.ts +3 -0
  252. package/src/domains/dispatch/admission-error.ts +9 -0
  253. package/src/domains/dispatch/admission.ts +22 -21
  254. package/src/domains/dispatch/capacity-lease.ts +21 -1
  255. package/src/domains/dispatch/council-topology.ts +398 -0
  256. package/src/domains/dispatch/extension.ts +222 -50
  257. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  258. package/src/domains/dispatch/fleet-plan.ts +7 -2
  259. package/src/domains/dispatch/fleet-run.ts +64 -1
  260. package/src/domains/dispatch/gate-decisions.ts +11 -1
  261. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  262. package/src/domains/dispatch/gate-topology.ts +289 -0
  263. package/src/domains/dispatch/index.ts +19 -0
  264. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  265. package/src/domains/dispatch/intent.ts +85 -1
  266. package/src/domains/dispatch/reservation-store.ts +24 -4
  267. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  268. package/src/domains/dispatch/run-event-journal.ts +598 -0
  269. package/src/domains/dispatch/state.ts +45 -1
  270. package/src/domains/dispatch/types.ts +13 -0
  271. package/src/domains/dispatch/validation.ts +33 -8
  272. package/src/domains/eval/compare/compare.ts +3 -16
  273. package/src/domains/eval/inventory.ts +113 -0
  274. package/src/domains/eval/schema/serving.ts +31 -0
  275. package/src/domains/evidence/store.ts +6 -0
  276. package/src/domains/memory/index.ts +0 -1
  277. package/src/domains/memory/task-memory-policy.ts +6 -10
  278. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  279. package/src/domains/middleware/memory-intervention.ts +33 -21
  280. package/src/domains/mux/contract.ts +434 -0
  281. package/src/domains/mux/detect.ts +158 -0
  282. package/src/domains/mux/extension.ts +47 -0
  283. package/src/domains/mux/index.ts +96 -0
  284. package/src/domains/mux/manifest.ts +6 -0
  285. package/src/domains/mux/operations.ts +164 -0
  286. package/src/domains/mux/pane-registry.ts +90 -0
  287. package/src/domains/mux/protocol.ts +49 -0
  288. package/src/domains/mux/socket-client.ts +816 -0
  289. package/src/domains/mux/types.ts +222 -0
  290. package/src/domains/mux/viewer-command.ts +59 -0
  291. package/src/domains/mux/yazi/assets/init.lua +2 -0
  292. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  293. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  294. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  295. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  296. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  297. package/src/domains/mux/yazi/event-stream.ts +180 -0
  298. package/src/domains/mux/yazi/profile.ts +299 -0
  299. package/src/domains/mux/yazi/session.ts +228 -0
  300. package/src/domains/mux/yazi/theme.ts +30 -0
  301. package/src/domains/observability/cost.ts +21 -0
  302. package/src/domains/observability/index.ts +2 -0
  303. package/src/domains/observability/trace-store.ts +42 -0
  304. package/src/domains/providers/endpoint-capacity.ts +154 -22
  305. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  306. package/src/domains/providers/extension.ts +20 -3
  307. package/src/domains/providers/index.ts +22 -0
  308. package/src/domains/providers/model-runtime-capabilities.ts +32 -0
  309. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  310. package/src/domains/providers/runtimes/builtins.ts +2 -0
  311. package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
  312. package/src/domains/providers/support.ts +1 -0
  313. package/src/domains/providers/target-model-cache.ts +124 -0
  314. package/src/domains/resources/index.ts +3 -0
  315. package/src/domains/resources/skills/loader.ts +33 -0
  316. package/src/domains/safety/action-classifier.ts +6 -0
  317. package/src/domains/toolchain/archive.ts +175 -0
  318. package/src/domains/toolchain/contract.ts +28 -0
  319. package/src/domains/toolchain/extension.ts +47 -0
  320. package/src/domains/toolchain/index.ts +39 -0
  321. package/src/domains/toolchain/install.ts +327 -0
  322. package/src/domains/toolchain/manifest.ts +8 -0
  323. package/src/domains/toolchain/paths.ts +34 -0
  324. package/src/domains/toolchain/registry.ts +265 -0
  325. package/src/domains/toolchain/remove.ts +218 -0
  326. package/src/domains/toolchain/resolve.ts +182 -0
  327. package/src/domains/toolchain/types.ts +113 -0
  328. package/src/domains/toolchain/version.ts +88 -0
  329. package/src/engine/acp/server.ts +413 -70
  330. package/src/engine/acp/types.ts +19 -1
  331. package/src/engine/claude/sdk-module.ts +98 -0
  332. package/src/engine/claude/sdk-runtime.ts +19 -11
  333. package/src/engine/tui-primitives.ts +21 -0
  334. package/src/engine/tui.ts +1 -0
  335. package/src/engine/worker-runtime.ts +2 -13
  336. package/src/entry/boot-options.ts +2 -0
  337. package/src/entry/orchestrator.ts +103 -5
  338. package/src/entry/panes-activation.ts +31 -0
  339. package/src/entry/with-panes.ts +20 -0
  340. package/src/interactive/context-overlay.ts +1 -0
  341. package/src/interactive/cost-overlay.ts +2 -0
  342. package/src/interactive/council-grid.ts +1 -3
  343. package/src/interactive/council.ts +11 -0
  344. package/src/interactive/dispatch-board.ts +26 -16
  345. package/src/interactive/interactive-application.ts +153 -6
  346. package/src/interactive/interactive-input-runtime.ts +7 -0
  347. package/src/interactive/interactive-slash-runtime.ts +36 -6
  348. package/src/interactive/memory-overlay.ts +1 -0
  349. package/src/interactive/modal-marker.ts +170 -0
  350. package/src/interactive/mux-bridge.ts +214 -0
  351. package/src/interactive/overlay-frame.ts +58 -2
  352. package/src/interactive/overlay-general-openers.ts +1 -0
  353. package/src/interactive/overlay-key-routing.ts +14 -3
  354. package/src/interactive/overlay-lifecycle.ts +19 -3
  355. package/src/interactive/overlay-model-selectors.ts +40 -3
  356. package/src/interactive/overlay-permission-lifecycle.ts +90 -22
  357. package/src/interactive/overlay-transitions.ts +18 -4
  358. package/src/interactive/overlays/agents.ts +1 -0
  359. package/src/interactive/overlays/ask-user.ts +136 -30
  360. package/src/interactive/overlays/auth-dialog.ts +1 -0
  361. package/src/interactive/overlays/context-reset.ts +1 -0
  362. package/src/interactive/overlays/cwd-fallback.ts +1 -0
  363. package/src/interactive/overlays/decisions.ts +11 -11
  364. package/src/interactive/overlays/extensions.ts +1 -0
  365. package/src/interactive/overlays/fleet-run-approval.ts +1 -0
  366. package/src/interactive/overlays/handoff-review.ts +1 -0
  367. package/src/interactive/overlays/help-reference.ts +2 -0
  368. package/src/interactive/overlays/interop.ts +1 -0
  369. package/src/interactive/overlays/library-install-confirm.ts +1 -0
  370. package/src/interactive/overlays/library-tabs.ts +28 -0
  371. package/src/interactive/overlays/list-overlay.ts +10 -1
  372. package/src/interactive/overlays/message-picker.ts +1 -0
  373. package/src/interactive/overlays/model-scope.ts +86 -0
  374. package/src/interactive/overlays/model-selector.ts +1 -0
  375. package/src/interactive/overlays/prompts.ts +1 -0
  376. package/src/interactive/overlays/session-selector.ts +1 -0
  377. package/src/interactive/overlays/settings-sections.ts +30 -0
  378. package/src/interactive/overlays/settings.ts +579 -44
  379. package/src/interactive/overlays/side-question.ts +1 -0
  380. package/src/interactive/overlays/skills-hub.ts +3 -11
  381. package/src/interactive/overlays/tree-selector.ts +1 -0
  382. package/src/interactive/pane-policy.ts +46 -0
  383. package/src/interactive/panes-runtime.ts +292 -0
  384. package/src/interactive/renderers/compaction-summary.ts +29 -0
  385. package/src/interactive/renderers/worker-entry.ts +122 -14
  386. package/src/interactive/slash-commands.ts +251 -15
  387. package/src/interactive/tasks-overlay.ts +1 -0
  388. package/src/interactive/theme/tokens.ts +3 -14
  389. package/src/interactive/turn-context.ts +47 -2
  390. package/src/interactive/view/artifacts.ts +109 -1
  391. package/src/interactive/view/view-overlay.ts +1 -0
  392. package/src/interactive/watch-pane.ts +152 -0
  393. package/src/interactive/worker-progress.ts +7 -1
  394. package/src/interactive/worker-receipts.ts +19 -1
  395. package/src/interactive/worker-stream.ts +5 -0
  396. package/src/interactive/yazi-bridge.ts +444 -0
  397. package/src/tools/bootstrap.ts +26 -2
  398. package/src/tools/builtin-tool-catalog.ts +15 -0
  399. package/src/tools/compete-worktrees.ts +83 -2
  400. package/src/tools/core-bootstrap.ts +2 -1
  401. package/src/tools/dispatch-admission.ts +14 -3
  402. package/src/tools/dispatch-arguments.ts +20 -20
  403. package/src/tools/dispatch-run-events.ts +134 -19
  404. package/src/tools/dispatch-runner.ts +29 -7
  405. package/src/tools/dispatch-types.ts +15 -3
  406. package/src/tools/dispatch.ts +1 -1
  407. package/src/tools/executables.ts +17 -14
  408. package/src/tools/observation.ts +54 -4
  409. package/src/tools/panes-surface.ts +38 -0
  410. package/src/tools/panes.ts +112 -0
  411. package/src/tools/policy.ts +10 -1
  412. package/src/tools/presentation.ts +1 -0
  413. package/dist/chunk-D73KXYPF.js +0 -37
  414. package/dist/chunk-MLOK6ZOS.js +0 -2888
  415. package/dist/chunk-YKOFT37S.js +0 -279
  416. 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-BNAZZHFG.js";
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-B5CSFE7B.js.map
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-BNAZZHFG.js";
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-EQ63NRB7.js.map
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-AEYBF3TB.js";
4
+ } from "./chunk-UM7N4G5A.js";
5
5
  import {
6
6
  clioStateDir
7
- } from "./chunk-BNAZZHFG.js";
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 = 3e4;
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: TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS,
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-O6I4CIEU.js.map
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-AEYBF3TB.js";
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-MV2VUEJC.js.map
122
+ //# sourceMappingURL=chunk-BPKCPIL7.js.map