@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
@@ -468,6 +468,8 @@ export interface PermissionRequestedPayload {
468
468
  /** Sanitized one-line preview of the call's object (command, path, or compact args). */
469
469
  target?: string | undefined;
470
470
  timeoutMs?: number | undefined;
471
+ /** Admitted timeout fallback, so the operator surface can name what an expired ask became. */
472
+ fallback?: "deny" | "fail" | undefined;
471
473
  escalation?: boolean | undefined;
472
474
  }
473
475
 
@@ -486,6 +488,8 @@ export interface PermissionResolvedPayload {
486
488
  actionClass?: string | undefined;
487
489
  reason?: string | undefined;
488
490
  requestedBy?: string | undefined;
491
+ /** Effective fallback applied to an expired worker escalation. */
492
+ fallback?: "deny" | "fail" | undefined;
489
493
  at?: number | undefined;
490
494
  }
491
495
 
@@ -1010,6 +1010,7 @@ const TOP_LEVEL_KEYS = [
1010
1010
  "compaction",
1011
1011
  "context",
1012
1012
  "prewarm",
1013
+ "panes",
1013
1014
  "retry",
1014
1015
  "guardrails",
1015
1016
  ] as const;
@@ -1607,6 +1608,54 @@ export function validateSettings(raw: unknown): SettingsValidationResult {
1607
1608
  }
1608
1609
  }
1609
1610
 
1611
+ if ("panes" in raw) {
1612
+ if (!isPlainObject(raw.panes)) {
1613
+ issues.add("panes", `expected a map, got ${describe(raw.panes)}`);
1614
+ } else {
1615
+ // `agents` and `keepFailed` are retired: pane-opening is no longer a
1616
+ // per-dispatch policy (src/interactive/pane-policy.ts holds the one
1617
+ // decision). They stay accepted-and-ignored so a settings file written
1618
+ // against an older release keeps passing the strict boot gate.
1619
+ issues.unknownKeys("panes", raw.panes, ["enabled", "agents", "keepFailed", "notifications", "journal", "yazi"]);
1620
+ if ("enabled" in raw.panes) {
1621
+ const v = expectEnum(issues, "panes.enabled", raw.panes.enabled, ["auto", "embedded", "off"] as const);
1622
+ if (v !== undefined) settings.panes.enabled = v;
1623
+ }
1624
+ if ("notifications" in raw.panes) {
1625
+ const v = expectEnum(issues, "panes.notifications", raw.panes.notifications, ["failures", "all", "off"] as const);
1626
+ if (v !== undefined) settings.panes.notifications = v;
1627
+ }
1628
+ if ("journal" in raw.panes) {
1629
+ const v = expectBoolean(issues, "panes.journal", raw.panes.journal);
1630
+ if (v !== undefined) settings.panes.journal = v;
1631
+ }
1632
+ if ("yazi" in raw.panes) {
1633
+ if (!isPlainObject(raw.panes.yazi)) {
1634
+ issues.add("panes.yazi", `expected a map, got ${describe(raw.panes.yazi)}`);
1635
+ } else {
1636
+ const yazi = raw.panes.yazi;
1637
+ issues.unknownKeys("panes.yazi", yazi, ["enabled", "mode", "profile", "followCwd"]);
1638
+ if ("enabled" in yazi) {
1639
+ const v = expectBoolean(issues, "panes.yazi.enabled", yazi.enabled);
1640
+ if (v !== undefined) settings.panes.yazi.enabled = v;
1641
+ }
1642
+ if ("mode" in yazi) {
1643
+ const v = expectEnum(issues, "panes.yazi.mode", yazi.mode, ["companion", "chooser"] as const);
1644
+ if (v !== undefined) settings.panes.yazi.mode = v;
1645
+ }
1646
+ if ("profile" in yazi) {
1647
+ const v = expectEnum(issues, "panes.yazi.profile", yazi.profile, ["managed", "user"] as const);
1648
+ if (v !== undefined) settings.panes.yazi.profile = v;
1649
+ }
1650
+ if ("followCwd" in yazi) {
1651
+ const v = expectBoolean(issues, "panes.yazi.followCwd", yazi.followCwd);
1652
+ if (v !== undefined) settings.panes.yazi.followCwd = v;
1653
+ }
1654
+ }
1655
+ }
1656
+ }
1657
+ }
1658
+
1610
1659
  if ("retry" in raw) {
1611
1660
  if (!isPlainObject(raw.retry)) {
1612
1661
  issues.add("retry", `expected a map, got ${describe(raw.retry)}`);
@@ -1,3 +1,5 @@
1
+ // Default constants for Clio Coder settings.
2
+
1
3
  /**
2
4
  * Default settings shipped with Clio Coder. Written to the resolved config
3
5
  * directory's settings.yaml on first install if the file does not already
@@ -166,6 +168,34 @@ export interface PrewarmSettings {
166
168
  enabled: boolean;
167
169
  }
168
170
 
171
+ /**
172
+ * The pane layer's settings block.
173
+ *
174
+ * `journal` is the durable half: the run event journal, which every other pane
175
+ * surface reads and which the standalone run viewer needs whether or not a pane
176
+ * host is installed. The run-view settings govern the live projection. The
177
+ * Yazi chooser remains useful without a pane host because it can borrow the
178
+ * terminal for one selection.
179
+ */
180
+ export interface PanesSettings {
181
+ /**
182
+ * Capability rung the pane layer may reach. `auto` takes guest mode when a
183
+ * pane host is detected; `embedded` asks Clio to own a private session, which
184
+ * degrades to none until that ships; `off` skips detection entirely.
185
+ */
186
+ enabled: "auto" | "embedded" | "off";
187
+ /** Which terminal run states raise a pane-host toast. */
188
+ notifications: "failures" | "all" | "off";
189
+ journal: boolean;
190
+ /** File-pane round-trip settings read live for each explicit open. */
191
+ yazi: {
192
+ enabled: boolean;
193
+ mode: "companion" | "chooser";
194
+ profile: "managed" | "user";
195
+ followCwd: boolean;
196
+ };
197
+ }
198
+
169
199
  /**
170
200
  * Transient provider retry controls for the interactive chat loop. These are
171
201
  * intentionally small and mirror the session retry helper defaults. Dispatched
@@ -368,16 +398,20 @@ export const DEFAULT_SETTINGS = {
368
398
  enabled: true,
369
399
  everyNTools: 10,
370
400
  windowSteps: 8,
371
- maxTokens: 400,
401
+ // Budget for the answer and any reasoning tokens that precede it.
402
+ // An always-on-thinking 35B spent the measured 400/400 completion
403
+ // tokens on reasoning and stopped with finish_reason=length before it
404
+ // emitted content, so the old budget made a useful step unreachable.
405
+ maxTokens: 2000,
372
406
  // A memory step runs detached from the turn that triggered it, but it
373
407
  // runs on a real inference endpoint that the operator's own turns and
374
408
  // dispatched workers also queue against. The operator's ledger over 14
375
409
  // days recorded 60 llm-tier steps spending 1,666 seconds of model time
376
410
  // for 6 injections, with one step holding a local server for 102.5
377
- // seconds to answer nothing. The deadline is what a turn boundary can
378
- // actually wait for; a step that runs past it is recorded as timed out
379
- // rather than spending the remaining minutes unobserved.
380
- timeoutMs: 30_000,
411
+ // seconds to answer nothing. A viable output budget earns one minute,
412
+ // while consecutive timeouts degrade the plane to its free rules tier
413
+ // instead of repeatedly occupying the endpoint for that full minute.
414
+ timeoutMs: 60_000,
381
415
  },
382
416
  },
383
417
  watchdog: { enabled: false } as WatchdogSettings,
@@ -466,6 +500,32 @@ export const DEFAULT_SETTINGS = {
466
500
  prewarm: {
467
501
  enabled: true,
468
502
  } as PrewarmSettings,
503
+ panes: {
504
+ /**
505
+ * Off: a plain `clio-coder` performs zero pane-host work, and none of the
506
+ * mux domain even loads. The extension is activated per session with
507
+ * `clio-coder --with-panes`, or durably by setting this to `auto` (guest
508
+ * mode when a pane host is detected). The flag beats the setting in both
509
+ * directions.
510
+ */
511
+ enabled: "off",
512
+ /** A toast per finished run is noise; a toast per failure is the signal. */
513
+ notifications: "failures",
514
+ /**
515
+ * Tee every dispatched run's display event tail to
516
+ * `<state>/runs/<runId>/events.ndjson`. The live tail is otherwise
517
+ * in-process only, so this is what lets `clio-coder fleet view` follow a
518
+ * run from a second terminal. Written regardless of any pane host being
519
+ * present; turning it off costs the viewer its transcript and nothing else.
520
+ */
521
+ journal: true,
522
+ yazi: {
523
+ enabled: true,
524
+ mode: "companion",
525
+ profile: "managed",
526
+ followCwd: true,
527
+ },
528
+ } as PanesSettings,
469
529
  retry: {
470
530
  enabled: true,
471
531
  maxRetries: 3,
@@ -560,8 +620,10 @@ memory:
560
620
  enabled: true
561
621
  everyNTools: 10
562
622
  windowSteps: 8
563
- maxTokens: 400
564
- timeoutMs: 30000
623
+ # Covers the answer and any thinking before it. An always-on-thinking 35B
624
+ # spent the measured 400/400 tokens on reasoning, then stopped at length.
625
+ maxTokens: 2000
626
+ timeoutMs: 60000
565
627
 
566
628
  # Opt-in turn-end watchdog. When enabled, a turn that changed the tree is
567
629
  # reviewed by one read-only verifier run briefed with the turn's coalesced diff
@@ -781,6 +843,30 @@ context:
781
843
  prewarm:
782
844
  enabled: true
783
845
 
846
+ # The pane layer. Off by default: plain \`clio-coder\` does no pane-host work at
847
+ # all. Start \`clio-coder --with-panes\` to activate the extension for one
848
+ # session, or set enabled: auto to activate it whenever a pane host is
849
+ # detected (embedded, a Clio-owned private session, is not implemented yet).
850
+ # The command-line flag beats this setting in both directions. notifications
851
+ # picks which terminal run states raise a toast. journal tees every dispatched
852
+ # run's event tail to <state>/runs/<runId>/events.ndjson so
853
+ # \`clio-coder fleet view <runId> --follow\` can watch a run from a second
854
+ # terminal; it is written regardless of any pane host being present. Journal
855
+ # directories are removed when their run leaves the run ledger ring, and
856
+ # \`clio-coder reset --state\` clears them with the rest of the state root.
857
+ panes:
858
+ enabled: off
859
+ notifications: failures
860
+ journal: true
861
+ # The files pane uses a managed, reproducible Yazi profile by default.
862
+ # profile: user preserves the operator's Yazi configuration and therefore
863
+ # forces one-shot chooser mode, since that profile has no Clio pick chord.
864
+ yazi:
865
+ enabled: true
866
+ mode: companion
867
+ profile: managed
868
+ followCwd: true
869
+
784
870
  # Transient provider/stream retry controls for interactive chat.
785
871
  # Retryable errors include overloads, rate limits, 5xx responses, network
786
872
  # resets, and timeouts. Context overflow uses compaction recovery instead.
@@ -21,6 +21,28 @@ export const RESPONSE_SCHEMA_RUNTIME_ID = "llamacpp";
21
21
  /** The runtime that takes the standard OpenAI `json_schema` response format. */
22
22
  export const OPENAI_SCHEMA_RUNTIME_ID = "lmstudio";
23
23
 
24
+ /**
25
+ * The LiteLLM gateway, which takes the same standard `json_schema` format.
26
+ *
27
+ * This is the one gateway admitted to the table above, and it is admitted on
28
+ * measurement rather than on the api family the warning describes. Against a
29
+ * LiteLLM v1.98.0 proxy fronting both a llama.cpp and an LM Studio upstream:
30
+ * `{"type":"json_schema", json_schema:{...}}` was grammar-enforced end to end
31
+ * through both, `{"type":"json_object", schema:{...}}` was enforced through
32
+ * llama.cpp but rejected HTTP 400 by LM Studio, and the same prompt with no
33
+ * `response_format` returned plain prose. LiteLLM's `drop_params` did not strip
34
+ * either spelling, because `response_format` is a parameter it recognizes and
35
+ * forwards whole.
36
+ *
37
+ * The standard dialect is therefore the only one that holds across every
38
+ * upstream a gateway may route to, which is why LiteLLM belongs with LM Studio
39
+ * here and not with llama.cpp. Re-verify with the gateway's own smoke test
40
+ * before trusting this against a proxy other than LiteLLM: the hazard the
41
+ * warning names is real, and the only thing that makes this entry safe is that
42
+ * somebody measured it.
43
+ */
44
+ export const GATEWAY_SCHEMA_RUNTIME_ID = "litellm";
45
+
24
46
  /**
25
47
  * How a runtime spells a JSON-schema response constraint on the wire.
26
48
  *
@@ -47,14 +69,32 @@ export type ResponseSchemaDialect = "llamacpp-json-object" | "openai-json-schema
47
69
  export function responseSchemaDialectFor(runtimeId: string): ResponseSchemaDialect | null {
48
70
  if (runtimeId === RESPONSE_SCHEMA_RUNTIME_ID) return "llamacpp-json-object";
49
71
  if (runtimeId === OPENAI_SCHEMA_RUNTIME_ID) return "openai-json-schema";
72
+ if (runtimeId === GATEWAY_SCHEMA_RUNTIME_ID) return "openai-json-schema";
50
73
  return null;
51
74
  }
52
75
 
53
- /** Whether this runtime speaks the dialect above. Transport shape, not capability. */
76
+ /**
77
+ * Whether this runtime speaks the dialect above. Transport shape, not capability.
78
+ *
79
+ * LiteLLM joins llama.cpp here because a gateway in front of llama.cpp is the
80
+ * same transport with one hop added, and the hop was measured not to alter it.
81
+ * That is what admits a contract-bearing worker to a gateway target; without
82
+ * it, every typed agent behind a proxy is refused rather than enforced.
83
+ *
84
+ * It also opts LiteLLM into {@link responseSchemaConflictsWithTools}, which is
85
+ * deliberately conservative. Whether a schema and a tool surface can constrain
86
+ * the same completion is a property of the upstream, and one alias may route to
87
+ * llama.cpp (which refuses both with HTTP 400) while another routes to LM Studio
88
+ * (which accepts them). A runtime id cannot tell those apart, so this treats
89
+ * every gateway upstream as if it were the refusing one. The cost is a
90
+ * tool-bearing contract run through an LM Studio upstream falling back to the
91
+ * prompt parser when it did not strictly have to. The alternative is paying a
92
+ * round trip to discover a predictable 400, and having the answer depend on
93
+ * which deployment the proxy happened to pick for that request.
94
+ */
54
95
  export function runtimeSpeaksResponseSchemaDialect(runtime: { id: string; kind: string; apiFamily: string }): boolean {
55
- return (
56
- runtime.id === RESPONSE_SCHEMA_RUNTIME_ID && runtime.kind === "http" && runtime.apiFamily === "openai-completions"
57
- );
96
+ if (runtime.kind !== "http" || runtime.apiFamily !== "openai-completions") return false;
97
+ return runtime.id === RESPONSE_SCHEMA_RUNTIME_ID || runtime.id === GATEWAY_SCHEMA_RUNTIME_ID;
58
98
  }
59
99
 
60
100
  /**
@@ -0,0 +1,43 @@
1
+ /** Semantic colors shared by Clio's terminal surfaces and generated companion profiles. */
2
+ export type ClioToken =
3
+ | "accent"
4
+ | "accentDeep"
5
+ | "action"
6
+ | "success"
7
+ | "warning"
8
+ | "error"
9
+ | "info"
10
+ | "reason"
11
+ | "dim"
12
+ | "muted"
13
+ | "title"
14
+ | "frame"
15
+ | "frameStrong";
16
+
17
+ /**
18
+ * The palette's lowercase hex projection.
19
+ *
20
+ * Keep this leaf free of interactive imports. Generated companion profiles
21
+ * need the color vocabulary without becoming a second reacher of the terminal
22
+ * renderer and splitting the instant shell's Stage 0 chunk.
23
+ */
24
+ const TOKEN_HEX: Readonly<Record<ClioToken, `#${string}`>> = {
25
+ accent: "#46e5d0",
26
+ accentDeep: "#1fb7a6",
27
+ action: "#ff7e29",
28
+ success: "#57e389",
29
+ warning: "#ffb454",
30
+ error: "#ff5c66",
31
+ info: "#5ba8ff",
32
+ reason: "#9d8cff",
33
+ dim: "#6a7a85",
34
+ muted: "#8a99a4",
35
+ title: "#46e5d0",
36
+ frame: "#2f5d5a",
37
+ frameStrong: "#2aab9e",
38
+ };
39
+
40
+ /** The canonical lowercase `#rrggbb` value for one Clio theme token. */
41
+ export function tokenHex(token: ClioToken): `#${string}` {
42
+ return TOKEN_HEX[token];
43
+ }
@@ -7,7 +7,7 @@
7
7
  * OBSERVE read, grep, find, ls, code_nav, context, credential_present
8
8
  * MUTATE write, edit
9
9
  * EXECUTE bash, git, verify
10
- * ORCHESTRATE dispatch, monitor, steer, tasks
10
+ * ORCHESTRATE dispatch, monitor, steer, tasks, panes
11
11
  * RETRIEVE web_fetch
12
12
  * INTERACT ask_user
13
13
  * ARTIFACT artifact
@@ -35,6 +35,7 @@ export const ToolNames = {
35
35
  Steer: "steer",
36
36
  Tasks: "tasks",
37
37
  Ledger: "ledger",
38
+ Panes: "panes",
38
39
  // RETRIEVE
39
40
  WebFetch: "web_fetch",
40
41
  // INTERACT
package/src/core/xdg.ts CHANGED
@@ -20,7 +20,7 @@ import { join } from "node:path";
20
20
  *
21
21
  * Role contents: config holds user-authored files (settings, credentials,
22
22
  * agents, skills, prompts, extensions, runtimes); data holds durable artifacts
23
- * (memory, evidence, evals); state holds machine-produced session state
23
+ * (memory, evidence, evals, vendored tools); state holds machine-produced session state
24
24
  * (sessions, audit, receipts, runs.json, recent-models.json, install.json,
25
25
  * interviews, scratch); cache holds disposable derived files.
26
26
  */
@@ -29,6 +29,3 @@ task above. Nothing you write here persuades it.
29
29
 
30
30
  If it fails you, you receive its failed checks as input data and get exactly one
31
31
  revision. Close the findings it reported and nothing else.
32
-
33
- Answer with your `mutation-report`. Include `commitMessage`: one imperative
34
- subject line describing this change, as you would write it in the log.
@@ -30,6 +30,3 @@ If the suite comes back red you will receive its output as input data. Repair
30
30
  exactly what it reported. Do not restate the failure, do not weaken or delete a
31
31
  test to make it pass, and do not widen the change beyond the repair. You get at
32
32
  most two repair attempts before the run fails with the suite still red.
33
-
34
- Answer with your `mutation-report`. Include `commitMessage`: one imperative
35
- subject line describing this change, as you would write it in the log.
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The one live-disk implementation of `ResultContractFilesystem`.
3
+ *
4
+ * `result-contract.ts` takes filesystem access as an argument so the validators
5
+ * stay deterministic and testable without touching a disk. That leaves every
6
+ * caller to supply the same three accessors, and the worker and the
7
+ * orchestrator had each written their own copy. A capability added to the
8
+ * interface then lands in one of them and not the other, which is how a Scout
9
+ * citation could ground inside the worker's repair rounds and fail the
10
+ * orchestrator's sealed revalidation of the identical result. One factory, both
11
+ * callers, no drift.
12
+ */
13
+ import { existsSync, readFileSync, statSync } from "node:fs";
14
+ import type { ResultContractFilesystem } from "./result-contract.js";
15
+
16
+ export function nodeResultContractFilesystem(): ResultContractFilesystem {
17
+ return {
18
+ readFile(filePath) {
19
+ try {
20
+ return readFileSync(filePath, "utf8");
21
+ } catch {
22
+ return null;
23
+ }
24
+ },
25
+ pathExists(filePath) {
26
+ return existsSync(filePath);
27
+ },
28
+ isDirectory(filePath) {
29
+ return statSync(filePath, { throwIfNoEntry: false })?.isDirectory() === true;
30
+ },
31
+ };
32
+ }