@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
@@ -3,14 +3,14 @@ import {
3
3
  artifactDefaultPath,
4
4
  extractCommandCdTargets,
5
5
  extractCommandWriteTargets
6
- } from "./chunk-MV3K5QF2.js";
6
+ } from "./chunk-GCSMB2KY.js";
7
7
  import {
8
8
  canonicalizeExistingPath
9
9
  } from "./chunk-ECH6PKUQ.js";
10
10
  import {
11
11
  ToolNames,
12
12
  isBuiltinToolName
13
- } from "./chunk-CGKSTWHD.js";
13
+ } from "./chunk-K6BSR66V.js";
14
14
  import {
15
15
  init_esm_shims
16
16
  } from "./chunk-3R73A4XB.js";
@@ -98,6 +98,12 @@ function baseClassify(tool) {
98
98
  // local mirror. Neither touches the workspace, so it is never gated
99
99
  // behind a confirmation.
100
100
  case ToolNames.Ledger:
101
+ // panes focuses, opens, and closes terminal panes Clio itself created, in
102
+ // a pane host that lives outside the workspace. Nothing it does writes a
103
+ // file, runs a model-supplied command (its schema exposes presets only),
104
+ // or survives the session, so it is reversible, local, and never gated
105
+ // behind a confirmation.
106
+ case ToolNames.Panes:
101
107
  return "read";
102
108
  case ToolNames.Write:
103
109
  case ToolNames.Edit:
@@ -782,13 +788,24 @@ function parseChecks(value) {
782
788
  }
783
789
  return checks;
784
790
  }
791
+ function citationWithinWorkspace(cwd, citedPath) {
792
+ const relative = path2.relative(cwd, citedPath);
793
+ if (relative === "") return true;
794
+ return !(relative === ".." || relative.startsWith(`..${path2.sep}`) || path2.isAbsolute(relative));
795
+ }
796
+ function directoryCitationDigest(cwd, citedPath) {
797
+ const relative = path2.relative(cwd, citedPath);
798
+ return createHash2("sha256").update(`directory:${relative === "" ? "." : relative}`, "utf8").digest("hex");
799
+ }
785
800
  function validateScoutCitation(input, citation) {
786
801
  const cwd = path2.resolve(input.cwd);
787
802
  const citedPath = path2.resolve(cwd, citation.path);
788
- const relative = path2.relative(cwd, citedPath);
789
- if (relative === "" || relative.startsWith(`..${path2.sep}`) || relative === ".." || path2.isAbsolute(relative)) {
803
+ if (!citationWithinWorkspace(cwd, citedPath)) {
790
804
  return { ok: false, reason: `Scout citation path escapes the workspace: ${citation.path}` };
791
805
  }
806
+ if (input.filesystem.isDirectory?.(citedPath) === true) {
807
+ return { ok: true, evidence: { ...citation, contentDigest: directoryCitationDigest(cwd, citedPath) } };
808
+ }
792
809
  const content = input.filesystem.readFile(citedPath);
793
810
  if (content === null) return { ok: false, reason: `Scout citation cannot be read: ${citation.path}` };
794
811
  const lineCount = content.split(/\r\n|\r|\n/u).length;
@@ -844,14 +861,57 @@ function groundDegradedScout(contract, input, scout, degradedReason) {
844
861
  }
845
862
  function validateVerifier(contract, output) {
846
863
  const parsed = parseJson(output);
847
- if (!parsed.ok) return failure(contract, "fail", parsed.reason);
864
+ if (!parsed.ok) return failure(contract, "fail", `Verifier result payload failed: ${parsed.reason}`);
848
865
  const value = parsed.value;
849
- if (!hasOnlyKeys(value, ["verdict", "checks"]) || value.verdict !== "pass" && value.verdict !== "fail") {
850
- return failure(contract, "fail", "Verifier result must carry pass or fail verdict and checks");
866
+ const unknown = Object.keys(value).filter((key) => key !== "verdict" && key !== "checks");
867
+ if (unknown.length > 0) {
868
+ return failure(
869
+ contract,
870
+ "fail",
871
+ `Verifier result field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} ${unknown.length === 1 ? "is" : "are"} not legal; legal top-level fields are verdict and checks`
872
+ );
851
873
  }
852
- const checks = parseChecks(value.checks);
853
- if (checks === null || value.verdict === "pass" !== checks.every((check) => check.passed)) {
854
- return failure(contract, "fail", "Verifier verdict must agree with every typed check");
874
+ if (value.verdict !== "pass" && value.verdict !== "fail") {
875
+ return failure(contract, "fail", 'Verifier field "verdict" must be one of: pass | fail');
876
+ }
877
+ if (!Array.isArray(value.checks) || value.checks.length === 0) {
878
+ return failure(
879
+ contract,
880
+ "fail",
881
+ 'Verifier field "checks" must be a non-empty array of {name, passed, evidence}; each checks[].passed value must be one of: true | false'
882
+ );
883
+ }
884
+ const checks = [];
885
+ for (const [index, raw] of value.checks.entries()) {
886
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
887
+ return failure(contract, "fail", `Verifier field "checks[${index}]" must be an object`);
888
+ }
889
+ const check = raw;
890
+ const checkUnknown = Object.keys(check).filter((key) => key !== "name" && key !== "passed" && key !== "evidence");
891
+ if (checkUnknown.length > 0) {
892
+ return failure(
893
+ contract,
894
+ "fail",
895
+ `Verifier field "checks[${index}].${checkUnknown[0]}" is not legal; legal check fields are name, passed, and evidence`
896
+ );
897
+ }
898
+ if (!string(check.name)) {
899
+ return failure(contract, "fail", `Verifier field "checks[${index}].name" must be a non-empty string`);
900
+ }
901
+ if (typeof check.passed !== "boolean") {
902
+ return failure(contract, "fail", `Verifier field "checks[${index}].passed" must be one of: true | false`);
903
+ }
904
+ if (!string(check.evidence)) {
905
+ return failure(contract, "fail", `Verifier field "checks[${index}].evidence" must be a non-empty string`);
906
+ }
907
+ checks.push({ name: check.name, passed: check.passed, evidence: check.evidence });
908
+ }
909
+ if (value.verdict === "pass" !== checks.every((check) => check.passed)) {
910
+ return failure(
911
+ contract,
912
+ "fail",
913
+ 'Verifier field "verdict" must agree with every checks[].passed value; verdict legal values are pass | fail and checks[].passed legal values are true | false'
914
+ );
855
915
  }
856
916
  const verifier = { verdict: value.verdict, checks };
857
917
  return success(contract, value.verdict, verifier, { verifier });
@@ -944,38 +1004,80 @@ function resultContractAuthorship(contract, output) {
944
1004
  }
945
1005
  function validateDebugger(contract, output) {
946
1006
  const parsed = parseJson(output);
947
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
1007
+ if (!parsed.ok) return failure(contract, "unmeasured", `Debugger result payload failed: ${parsed.reason}`);
948
1008
  const value = parsed.value;
949
- if (!hasOnlyKeys(value, ["diagnosis", "reproduction", "evidence"]) || !string(value.diagnosis) || value.reproduction !== "reproduced" && value.reproduction !== "not-reproduced" && value.reproduction !== "unknown" || !Array.isArray(value.evidence) || value.evidence.some((entry) => !string(entry))) {
1009
+ const unknown = Object.keys(value).filter(
1010
+ (key) => key !== "diagnosis" && key !== "reproduction" && key !== "evidence"
1011
+ );
1012
+ if (unknown.length > 0) {
950
1013
  return failure(
951
1014
  contract,
952
1015
  "unmeasured",
953
- "Debugger result must carry diagnosis, reproduction status, and evidence without a verdict"
1016
+ `Debugger result field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} ${unknown.length === 1 ? "is" : "are"} not legal; legal top-level fields are diagnosis, reproduction, and evidence`
954
1017
  );
955
1018
  }
1019
+ if (!string(value.diagnosis)) {
1020
+ return failure(contract, "unmeasured", 'Debugger field "diagnosis" must be a non-empty string');
1021
+ }
1022
+ if (value.reproduction !== "reproduced" && value.reproduction !== "not-reproduced" && value.reproduction !== "unknown") {
1023
+ return failure(
1024
+ contract,
1025
+ "unmeasured",
1026
+ 'Debugger field "reproduction" must be one of: reproduced | not-reproduced | unknown'
1027
+ );
1028
+ }
1029
+ if (!Array.isArray(value.evidence)) {
1030
+ return failure(contract, "unmeasured", 'Debugger field "evidence" must be an array of strings');
1031
+ }
1032
+ const malformedEvidence = value.evidence.findIndex((entry) => !string(entry));
1033
+ if (malformedEvidence >= 0) {
1034
+ return failure(contract, "unmeasured", `Debugger field "evidence[${malformedEvidence}]" must be a non-empty string`);
1035
+ }
956
1036
  return success(contract, "unmeasured", value);
957
1037
  }
958
1038
  function validateResearch(contract, output, networkAllowed) {
959
1039
  const parsed = parseJson(output);
960
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
1040
+ if (!parsed.ok) return failure(contract, "unmeasured", `Research result payload failed: ${parsed.reason}`);
961
1041
  const value = parsed.value;
962
- if (!hasOnlyKeys(value, ["source", "findings"]) || value.source !== "local" && value.source !== "external" || !Array.isArray(value.findings)) {
1042
+ const unknown = Object.keys(value).filter((key) => key !== "source" && key !== "findings");
1043
+ if (unknown.length > 0) {
963
1044
  return failure(
964
1045
  contract,
965
1046
  "unmeasured",
966
- "Research result must distinguish local or external sources and carry findings"
1047
+ `Research result field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} ${unknown.length === 1 ? "is" : "are"} not legal; legal top-level fields are source and findings`
967
1048
  );
968
1049
  }
1050
+ if (value.source !== "local" && value.source !== "external") {
1051
+ return failure(contract, "unmeasured", 'Research field "source" must be one of: local | external');
1052
+ }
1053
+ if (!Array.isArray(value.findings)) {
1054
+ return failure(contract, "unmeasured", 'Research field "findings" must be an array of {claim, evidence} objects');
1055
+ }
969
1056
  if (value.source === "external" && !networkAllowed) {
970
- return failure(contract, "unmeasured", "external research requires an allowed network posture");
1057
+ return failure(
1058
+ contract,
1059
+ "unmeasured",
1060
+ 'Research field "source" is external but the run has no allowed network posture; legal values are local | external, and use local for workspace-only evidence'
1061
+ );
971
1062
  }
972
- for (const finding of value.findings) {
1063
+ for (const [index, finding] of value.findings.entries()) {
973
1064
  if (finding === null || typeof finding !== "object" || Array.isArray(finding)) {
974
- return failure(contract, "unmeasured", "Research findings must be objects");
1065
+ return failure(contract, "unmeasured", `Research field "findings[${index}]" must be an object`);
975
1066
  }
976
1067
  const record = finding;
977
- if (!hasOnlyKeys(record, ["claim", "evidence"]) || !string(record.claim) || !string(record.evidence)) {
978
- return failure(contract, "unmeasured", "Research findings must carry claim and evidence");
1068
+ const findingUnknown = Object.keys(record).filter((key) => key !== "claim" && key !== "evidence");
1069
+ if (findingUnknown.length > 0) {
1070
+ return failure(
1071
+ contract,
1072
+ "unmeasured",
1073
+ `Research field "findings[${index}].${findingUnknown[0]}" is not legal; legal finding fields are claim and evidence`
1074
+ );
1075
+ }
1076
+ if (!string(record.claim)) {
1077
+ return failure(contract, "unmeasured", `Research field "findings[${index}].claim" must be a non-empty string`);
1078
+ }
1079
+ if (!string(record.evidence)) {
1080
+ return failure(contract, "unmeasured", `Research field "findings[${index}].evidence" must be a non-empty string`);
979
1081
  }
980
1082
  }
981
1083
  return success(contract, "unmeasured", value);
@@ -1166,15 +1268,15 @@ function resultContractShape(contract) {
1166
1268
  case "scout-report":
1167
1269
  return '{"findings":[{"claim":"what you observed","path":"src/file.ts","line":1}],"needsSplit":false,"proposedSubtasks":[]} or {"findings":[],"needsSplit":true,"proposedSubtasks":[{"id":"inspect","task":"Inspect the boundary","dependencies":[],"expectedResultContract":"scout-report","requestedAuthority":"read-only"}]} or, if you cannot produce a citation you are sure of, at least {"findings":[{"claim":"what you observed"}]}, which is accepted as an ungrounded lead rather than losing the run';
1168
1270
  case "verifier-report":
1169
- return '{"verdict":"pass","checks":[{"name":"npm run typecheck","passed":true,"evidence":"exit 0"}]}';
1271
+ return 'one of {"verdict":"pass","checks":[{"name":"npm run typecheck","passed":true,"evidence":"exit 0"}]} or {"verdict":"fail","checks":[{"name":"npm run typecheck","passed":false,"evidence":"exit 1"}]}; verdict legal values are pass | fail and checks[].passed legal values are true | false';
1170
1272
  case "council-report":
1171
1273
  return '{"members":[{"label":"alpha","runId":"run-1","round":1,"answer":"..."}],"synthesis":{"kind":"none"}}';
1172
1274
  case "council-ballot":
1173
1275
  return COUNCIL_BALLOT_SHAPE;
1174
1276
  case "debugger-report":
1175
- return '{"diagnosis":"...","reproduction":"reproduced","evidence":["..."]}';
1277
+ return 'one of {"diagnosis":"...","reproduction":"reproduced","evidence":["..."]}, {"diagnosis":"...","reproduction":"not-reproduced","evidence":["..."]}, or {"diagnosis":"...","reproduction":"unknown","evidence":["..."]}; reproduction legal values are reproduced | not-reproduced | unknown';
1176
1278
  case "research-report":
1177
- return '{"source":"local","findings":[{"claim":"...","evidence":"..."}]}';
1279
+ return 'one of {"source":"local","findings":[{"claim":"...","evidence":"..."}]} or {"source":"external","findings":[{"claim":"...","evidence":"..."}]}; source legal values are local | external';
1178
1280
  case "mutation-report":
1179
1281
  return '{"mutatedPaths":["src/file.ts"],"validations":[{"name":"npm test","passed":true,"evidence":"exit 0"}],"commitMessage":"optional: the commit message for this change","summary":"optional: one line"}';
1180
1282
  case "provenance-report":
@@ -1285,78 +1387,6 @@ function parseWorkerResultContract(value, sourcePath) {
1285
1387
  return parseContract(value, sourcePath, [...RECIPE_DECLARABLE_KINDS, ...COORDINATOR_AUTHORED_KINDS]);
1286
1388
  }
1287
1389
 
1288
- // src/core/path-boundary.ts
1289
- init_esm_shims();
1290
- import path3 from "node:path";
1291
- var PATH_BOUNDARY_MAX_ENTRIES = 32;
1292
- var PathBoundaryError = class extends Error {
1293
- code;
1294
- constructor(code, message) {
1295
- super(message);
1296
- this.name = "PathBoundaryError";
1297
- this.code = code;
1298
- }
1299
- };
1300
- var GLOB_CHARACTERS = /[*?[\]{}]/u;
1301
- function normalizePathBoundaryEntry(entry) {
1302
- const raw = entry.trim();
1303
- if (raw.length === 0) throw new PathBoundaryError("empty", "write boundary: entry must be a non-empty path");
1304
- if (raw.includes("\\")) {
1305
- throw new PathBoundaryError("separator", `write boundary: entry '${entry}' must use '/' separators`);
1306
- }
1307
- if (GLOB_CHARACTERS.test(raw)) {
1308
- throw new PathBoundaryError("glob", `write boundary: entry '${entry}' looks like a glob, which v1 does not support`);
1309
- }
1310
- if (raw.startsWith("/") || /^[A-Za-z]:/u.test(raw)) {
1311
- throw new PathBoundaryError("absolute", `write boundary: entry '${entry}' must be repository-relative, not absolute`);
1312
- }
1313
- const subtree = raw.endsWith("/");
1314
- const segments = raw.split("/").filter((segment) => segment.length > 0);
1315
- if (segments.length === 0) {
1316
- throw new PathBoundaryError("empty", `write boundary: entry '${entry}' must name a path inside the repository`);
1317
- }
1318
- for (const segment of segments) {
1319
- if (segment === "..") {
1320
- throw new PathBoundaryError("parent", `write boundary: entry '${entry}' must not contain '..'`);
1321
- }
1322
- if (segment === ".") {
1323
- throw new PathBoundaryError("dot", `write boundary: entry '${entry}' must not contain '.' segments`);
1324
- }
1325
- }
1326
- const joined = segments.join("/");
1327
- return subtree ? `${joined}/` : joined;
1328
- }
1329
- function normalizePathBoundary(entries) {
1330
- if (entries.length > PATH_BOUNDARY_MAX_ENTRIES) {
1331
- throw new Error(`write boundary: at most ${PATH_BOUNDARY_MAX_ENTRIES} entries may be declared`);
1332
- }
1333
- return [...new Set(entries.map(normalizePathBoundaryEntry))].sort();
1334
- }
1335
- function toPosixBoundaryPath(value) {
1336
- return value.split("\\").join("/");
1337
- }
1338
- function isDirectoryPathBoundary(entry) {
1339
- return toPosixBoundaryPath(entry).endsWith("/");
1340
- }
1341
- function asDirectoryPathBoundary(entry) {
1342
- const normalized = toPosixBoundaryPath(entry);
1343
- return normalized.endsWith("/") ? normalized : `${normalized}/`;
1344
- }
1345
- function resolvePathBoundary(cwd, entry) {
1346
- const directory = isDirectoryPathBoundary(entry);
1347
- const withoutMarker = directory ? entry.slice(0, -1) : entry;
1348
- const resolved = toPosixBoundaryPath(path3.resolve(cwd, withoutMarker));
1349
- return directory ? asDirectoryPathBoundary(resolved) : resolved;
1350
- }
1351
- function pathBoundaryEntryCovers(outer, inner) {
1352
- const normalizedOuter = toPosixBoundaryPath(outer);
1353
- const normalizedInner = toPosixBoundaryPath(inner);
1354
- return normalizedOuter.endsWith("/") ? normalizedInner.startsWith(normalizedOuter) : !normalizedInner.endsWith("/") && normalizedInner === normalizedOuter;
1355
- }
1356
- function pathBoundaryCovers(boundary, candidate) {
1357
- return boundary.some((entry) => pathBoundaryEntryCovers(entry, candidate));
1358
- }
1359
-
1360
1390
  export {
1361
1391
  parseJsonObjectPayload,
1362
1392
  classify,
@@ -1384,16 +1414,9 @@ export {
1384
1414
  validateResultContract,
1385
1415
  validateRecipeResult,
1386
1416
  RESULT_CONTRACT_REPAIR_LIMIT,
1417
+ resultContractShape,
1387
1418
  resultContractRepairMessages,
1388
1419
  parseResultContract,
1389
- parseWorkerResultContract,
1390
- PATH_BOUNDARY_MAX_ENTRIES,
1391
- PathBoundaryError,
1392
- normalizePathBoundaryEntry,
1393
- normalizePathBoundary,
1394
- asDirectoryPathBoundary,
1395
- resolvePathBoundary,
1396
- pathBoundaryEntryCovers,
1397
- pathBoundaryCovers
1420
+ parseWorkerResultContract
1398
1421
  };
1399
- //# sourceMappingURL=chunk-S4COXYBG.js.map
1422
+ //# sourceMappingURL=chunk-DYJP44XW.js.map
@@ -2,25 +2,25 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  canonicalJson,
4
4
  sha256
5
- } from "./chunk-MLOK6ZOS.js";
5
+ } from "./chunk-B7OBL7PK.js";
6
6
  import {
7
7
  addResponseModelIdObservationCount,
8
8
  emptyResponseModelIdObservationCounts,
9
9
  responseModelIdObservationFromRecord
10
- } from "./chunk-LXPJXFM5.js";
10
+ } from "./chunk-QREDIESB.js";
11
11
  import {
12
12
  uncachedPrefillTokens
13
13
  } from "./chunk-3DPEIQKN.js";
14
14
  import {
15
15
  ToolNames
16
- } from "./chunk-CGKSTWHD.js";
16
+ } from "./chunk-K6BSR66V.js";
17
17
  import {
18
18
  ceilChars,
19
19
  extractReasoningTokens
20
- } from "./chunk-AEYBF3TB.js";
20
+ } from "./chunk-UM7N4G5A.js";
21
21
  import {
22
22
  settingsPath
23
- } from "./chunk-PNY46YEY.js";
23
+ } from "./chunk-VFA6GDY5.js";
24
24
  import {
25
25
  expandConfigPath
26
26
  } from "./chunk-SST6Z5JA.js";
@@ -1104,4 +1104,4 @@ export {
1104
1104
  readFileArgsAsync,
1105
1105
  expandInlineFileReferencesAsync
1106
1106
  };
1107
- //# sourceMappingURL=chunk-N5XKWMDW.js.map
1107
+ //# sourceMappingURL=chunk-F4CKPOEQ.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  enabledExtensionResourceRoots
4
- } from "./chunk-5QKCQQ3E.js";
4
+ } from "./chunk-SUW5DORT.js";
5
5
  import {
6
6
  require_dist
7
7
  } from "./chunk-APJ265NV.js";
8
8
  import {
9
9
  clioConfigDir
10
- } from "./chunk-BNAZZHFG.js";
10
+ } from "./chunk-BYP5D4HI.js";
11
11
  import {
12
12
  __toESM,
13
13
  init_esm_shims
@@ -120,4 +120,4 @@ export {
120
120
  splitYamlFrontmatter,
121
121
  stringField
122
122
  };
123
- //# sourceMappingURL=chunk-AMKHQW3C.js.map
123
+ //# sourceMappingURL=chunk-FEFIFZTL.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-ECH6PKUQ.js";
8
8
  import {
9
9
  ToolNames
10
- } from "./chunk-CGKSTWHD.js";
10
+ } from "./chunk-K6BSR66V.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-3R73A4XB.js";
@@ -761,4 +761,4 @@ export {
761
761
  extractCommandDeleteTargets,
762
762
  tokenizeShellLike
763
763
  };
764
- //# sourceMappingURL=chunk-MV3K5QF2.js.map
764
+ //# sourceMappingURL=chunk-GCSMB2KY.js.map
@@ -4,14 +4,14 @@ import {
4
4
  extractCommandDeleteTargets,
5
5
  extractCommandWriteTargets,
6
6
  toolMutationPaths
7
- } from "./chunk-MV3K5QF2.js";
7
+ } from "./chunk-GCSMB2KY.js";
8
8
  import {
9
9
  isProjectVerifierCheckId,
10
10
  isVerificationScriptName
11
11
  } from "./chunk-UL3WSD3F.js";
12
12
  import {
13
13
  ToolNames
14
- } from "./chunk-CGKSTWHD.js";
14
+ } from "./chunk-K6BSR66V.js";
15
15
  import {
16
16
  init_esm_shims
17
17
  } from "./chunk-3R73A4XB.js";
@@ -388,4 +388,4 @@ export {
388
388
  assessFinishContract,
389
389
  typedValidationSummary
390
390
  };
391
- //# sourceMappingURL=chunk-7C6RYZGQ.js.map
391
+ //# sourceMappingURL=chunk-GKF55TAZ.js.map
@@ -2,22 +2,22 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  readLayeredSettings,
4
4
  readStrictLayeredSettings
5
- } from "./chunk-FALJGAWU.js";
5
+ } from "./chunk-7MCTRUCE.js";
6
6
  import {
7
7
  formatBootTrace
8
8
  } from "./chunk-HKIYEGME.js";
9
9
  import {
10
10
  initializeClioHome
11
- } from "./chunk-56KB5IJP.js";
11
+ } from "./chunk-2OQE55CK.js";
12
12
  import {
13
13
  readSettings
14
- } from "./chunk-PNY46YEY.js";
14
+ } from "./chunk-VFA6GDY5.js";
15
15
  import {
16
16
  require_dist
17
17
  } from "./chunk-APJ265NV.js";
18
18
  import {
19
19
  clioConfigDir
20
- } from "./chunk-BNAZZHFG.js";
20
+ } from "./chunk-BYP5D4HI.js";
21
21
  import {
22
22
  findEngineEnvKeys,
23
23
  getEngineEnvApiKey
@@ -100,6 +100,7 @@ var BUILTIN_RUNTIME_BOOT_MANIFEST = [
100
100
  { id: "lmstudio", aliases: ["lmstudio-native"], kind: "http", tier: "local-native", auth: "api-key" },
101
101
  { id: "ollama-native", kind: "http", tier: "local-native", auth: "none" },
102
102
  { id: "anthropic-compat", kind: "http", tier: "protocol", auth: "api-key" },
103
+ { id: "litellm", kind: "http", tier: "protocol", auth: "api-key" },
103
104
  { id: "openai-compat", kind: "http", tier: "protocol", auth: "api-key" },
104
105
  { id: "sglang", kind: "http", tier: "local-native", auth: "api-key" },
105
106
  { id: "vllm", kind: "http", tier: "local-native", auth: "api-key" },
@@ -158,7 +159,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
158
159
  } else if (verdict.kind !== "usable") {
159
160
  process.stdout.write(`${describeVerdict(verdict)} Starting \`clio-coder configure\`.
160
161
  `);
161
- const { runConfigureCommand } = await import("./configure-2WYWSCSD.js");
162
+ const { runConfigureCommand } = await import("./configure-TEGEBYCA.js");
162
163
  const configured = await runConfigureCommand([]);
163
164
  if (configured !== 0) return configured;
164
165
  startupSettings = readStrictLayeredSettings(process.cwd()).settings;
@@ -167,7 +168,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
167
168
  let terminalLease;
168
169
  try {
169
170
  if (terminalLeaseEligible(options)) {
170
- const { createProcessTerminalLease, instantShellEnabled } = await import("./terminal-lease-QYVORFR4.js");
171
+ const { createProcessTerminalLease, instantShellEnabled } = await import("./terminal-lease-44SV3YCN.js");
171
172
  if (instantShellEnabled()) {
172
173
  let stage0FrameId = null;
173
174
  terminalLease = createProcessTerminalLease({
@@ -190,7 +191,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
190
191
  throw new Error("injected Stage 1 hydration failure");
191
192
  }
192
193
  }
193
- const { bootOrchestrator } = await import("./orchestrator-ZKBPCHW6.js");
194
+ const { bootOrchestrator } = await import("./orchestrator-GCGQ4N5I.js");
194
195
  const result = await bootOrchestrator({
195
196
  ...options,
196
197
  ...startupSettings ? { startupSettings } : {},
@@ -214,4 +215,4 @@ export {
214
215
  terminalLeaseEligible,
215
216
  runClioCommand
216
217
  };
217
- //# sourceMappingURL=chunk-B5XRQOLB.js.map
218
+ //# sourceMappingURL=chunk-GR5G2PVF.js.map
@@ -64,16 +64,20 @@ var DEFAULT_SETTINGS = {
64
64
  enabled: true,
65
65
  everyNTools: 10,
66
66
  windowSteps: 8,
67
- maxTokens: 400,
67
+ // Budget for the answer and any reasoning tokens that precede it.
68
+ // An always-on-thinking 35B spent the measured 400/400 completion
69
+ // tokens on reasoning and stopped with finish_reason=length before it
70
+ // emitted content, so the old budget made a useful step unreachable.
71
+ maxTokens: 2e3,
68
72
  // A memory step runs detached from the turn that triggered it, but it
69
73
  // runs on a real inference endpoint that the operator's own turns and
70
74
  // dispatched workers also queue against. The operator's ledger over 14
71
75
  // days recorded 60 llm-tier steps spending 1,666 seconds of model time
72
76
  // for 6 injections, with one step holding a local server for 102.5
73
- // seconds to answer nothing. The deadline is what a turn boundary can
74
- // actually wait for; a step that runs past it is recorded as timed out
75
- // rather than spending the remaining minutes unobserved.
76
- timeoutMs: 3e4
77
+ // seconds to answer nothing. A viable output budget earns one minute,
78
+ // while consecutive timeouts degrade the plane to its free rules tier
79
+ // instead of repeatedly occupying the endpoint for that full minute.
80
+ timeoutMs: 6e4
77
81
  }
78
82
  },
79
83
  watchdog: { enabled: false },
@@ -162,6 +166,32 @@ var DEFAULT_SETTINGS = {
162
166
  prewarm: {
163
167
  enabled: true
164
168
  },
169
+ panes: {
170
+ /**
171
+ * Off: a plain `clio-coder` performs zero pane-host work, and none of the
172
+ * mux domain even loads. The extension is activated per session with
173
+ * `clio-coder --with-panes`, or durably by setting this to `auto` (guest
174
+ * mode when a pane host is detected). The flag beats the setting in both
175
+ * directions.
176
+ */
177
+ enabled: "off",
178
+ /** A toast per finished run is noise; a toast per failure is the signal. */
179
+ notifications: "failures",
180
+ /**
181
+ * Tee every dispatched run's display event tail to
182
+ * `<state>/runs/<runId>/events.ndjson`. The live tail is otherwise
183
+ * in-process only, so this is what lets `clio-coder fleet view` follow a
184
+ * run from a second terminal. Written regardless of any pane host being
185
+ * present; turning it off costs the viewer its transcript and nothing else.
186
+ */
187
+ journal: true,
188
+ yazi: {
189
+ enabled: true,
190
+ mode: "companion",
191
+ profile: "managed",
192
+ followCwd: true
193
+ }
194
+ },
165
195
  retry: {
166
196
  enabled: true,
167
197
  maxRetries: 3,
@@ -243,8 +273,10 @@ memory:
243
273
  enabled: true
244
274
  everyNTools: 10
245
275
  windowSteps: 8
246
- maxTokens: 400
247
- timeoutMs: 30000
276
+ # Covers the answer and any thinking before it. An always-on-thinking 35B
277
+ # spent the measured 400/400 tokens on reasoning, then stopped at length.
278
+ maxTokens: 2000
279
+ timeoutMs: 60000
248
280
 
249
281
  # Opt-in turn-end watchdog. When enabled, a turn that changed the tree is
250
282
  # reviewed by one read-only verifier run briefed with the turn's coalesced diff
@@ -464,6 +496,30 @@ context:
464
496
  prewarm:
465
497
  enabled: true
466
498
 
499
+ # The pane layer. Off by default: plain \`clio-coder\` does no pane-host work at
500
+ # all. Start \`clio-coder --with-panes\` to activate the extension for one
501
+ # session, or set enabled: auto to activate it whenever a pane host is
502
+ # detected (embedded, a Clio-owned private session, is not implemented yet).
503
+ # The command-line flag beats this setting in both directions. notifications
504
+ # picks which terminal run states raise a toast. journal tees every dispatched
505
+ # run's event tail to <state>/runs/<runId>/events.ndjson so
506
+ # \`clio-coder fleet view <runId> --follow\` can watch a run from a second
507
+ # terminal; it is written regardless of any pane host being present. Journal
508
+ # directories are removed when their run leaves the run ledger ring, and
509
+ # \`clio-coder reset --state\` clears them with the rest of the state root.
510
+ panes:
511
+ enabled: off
512
+ notifications: failures
513
+ journal: true
514
+ # The files pane uses a managed, reproducible Yazi profile by default.
515
+ # profile: user preserves the operator's Yazi configuration and therefore
516
+ # forces one-shot chooser mode, since that profile has no Clio pick chord.
517
+ yazi:
518
+ enabled: true
519
+ mode: companion
520
+ profile: managed
521
+ followCwd: true
522
+
467
523
  # Transient provider/stream retry controls for interactive chat.
468
524
  # Retryable errors include overloads, rate limits, 5xx responses, network
469
525
  # resets, and timeouts. Context overflow uses compaction recovery instead.
@@ -512,4 +568,4 @@ export {
512
568
  DEFAULT_SETTINGS,
513
569
  DEFAULT_SETTINGS_YAML
514
570
  };
515
- //# sourceMappingURL=chunk-XDOQXGFO.js.map
571
+ //# sourceMappingURL=chunk-GXNLGKAB.js.map