@iowarp/clio-coder 0.3.8 → 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 (552) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/NOTICE +33 -0
  3. package/README.md +12 -3
  4. package/dist/{acp-U67UHUK2.js → acp-G5WJBNCT.js} +13 -12
  5. package/dist/{agents-YU6SGALZ.js → agents-FMV2Q5G4.js} +41 -36
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-5ZPJOIVG.js → auth-3IDSJEIK.js} +18 -18
  8. package/dist/{builtins-C6JMZVV6.js → builtins-XCZWXSC7.js} +5 -5
  9. package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
  10. package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
  11. package/dist/{chunk-XWSF374K.js → chunk-2OQE55CK.js} +3 -3
  12. package/dist/{chunk-5H3GB5BO.js → chunk-32KWKNSF.js} +8 -384
  13. package/dist/{chunk-KTYTFRMB.js → chunk-36EJLSQQ.js} +34 -36
  14. package/dist/{chunk-FHJEP5SW.js → chunk-3BT2XMV4.js} +19 -13
  15. package/dist/chunk-3DPEIQKN.js +113 -0
  16. package/dist/{chunk-GU2UIAFZ.js → chunk-3URVFKWK.js} +7 -7
  17. package/dist/{chunk-WEH5XRJQ.js → chunk-3XML7CDN.js} +3 -3
  18. package/dist/chunk-42FMPA75.js +101 -0
  19. package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
  20. package/dist/{chunk-VCBR6CU7.js → chunk-5PSMVOLM.js} +2 -2
  21. package/dist/{chunk-NMPKI6XL.js → chunk-6DB53AJS.js} +203 -25
  22. package/dist/{chunk-3BINW3FP.js → chunk-76ONBSIA.js} +2 -2
  23. package/dist/{chunk-26LEYJZH.js → chunk-7MCTRUCE.js} +2 -2
  24. package/dist/{chunk-TYPGUK6W.js → chunk-AB44T6BB.js} +111 -5
  25. package/dist/{chunk-K4XHGFR5.js → chunk-B7OBL7PK.js} +317 -721
  26. package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
  27. package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
  28. package/dist/{chunk-ZVJ5BLO2.js → chunk-BKFJHQCA.js} +154 -16
  29. package/dist/chunk-BKFM6EJV.js +462 -0
  30. package/dist/chunk-BMS5RKQY.js +27 -0
  31. package/dist/{chunk-ZNLWCMVZ.js → chunk-BPKCPIL7.js} +2 -2
  32. package/dist/{chunk-TLQJPP24.js → chunk-BUMFYQFY.js} +1394 -1349
  33. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  34. package/dist/chunk-C2LTL2W6.js +2447 -0
  35. package/dist/{chunk-ME6CCNFO.js → chunk-CODPRO7Q.js} +8 -8
  36. package/dist/{chunk-E77JEWSD.js → chunk-CTJ4RNAA.js} +7 -37
  37. package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
  38. package/dist/{chunk-7RFXX52T.js → chunk-DQITNCXG.js} +642 -172
  39. package/dist/{chunk-TTHACPOM.js → chunk-DYJP44XW.js} +578 -117
  40. package/dist/{chunk-2HFZQUHL.js → chunk-F4CKPOEQ.js} +18 -8
  41. package/dist/{chunk-DGSYXYMX.js → chunk-FEFIFZTL.js} +3 -3
  42. package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
  43. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  44. package/dist/chunk-GKF55TAZ.js +391 -0
  45. package/dist/{chunk-VWZOAB7K.js → chunk-GR5G2PVF.js} +9 -8
  46. package/dist/{chunk-4DGYLA73.js → chunk-GXNLGKAB.js} +80 -9
  47. package/dist/chunk-HHV2GANA.js +88 -0
  48. package/dist/{chunk-IIZWH4XA.js → chunk-HI63TFOG.js} +5 -4
  49. package/dist/{chunk-WLFILSD5.js → chunk-HJJTYUHX.js} +113 -83
  50. package/dist/{chunk-TT36MB5S.js → chunk-HLW2MRKE.js} +3 -1
  51. package/dist/{chunk-PMDBGQSJ.js → chunk-HWHKMHUA.js} +7 -7
  52. package/dist/chunk-HZHHCK24.js +1631 -0
  53. package/dist/{chunk-WSB3FPX7.js → chunk-I5VEOC6I.js} +39 -143
  54. package/dist/chunk-IBEBSCYA.js +564 -0
  55. package/dist/chunk-IQ7KR472.js +362 -0
  56. package/dist/{chunk-A3WNZD3P.js → chunk-J4W7KFM7.js} +949 -972
  57. package/dist/{chunk-TB5666IT.js → chunk-JDG2WCRO.js} +5 -5
  58. package/dist/{chunk-N22QMJKY.js → chunk-K5C3NCBD.js} +4 -4
  59. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  60. package/dist/{chunk-5C3AQNDW.js → chunk-KFZI4NIL.js} +216 -38
  61. package/dist/chunk-KMVISBZR.js +132 -0
  62. package/dist/{chunk-WXY7KU3G.js → chunk-LDQ2ZF2M.js} +2 -2
  63. package/dist/{chunk-XN3L4EYL.js → chunk-LQ3DZAMX.js} +3 -3
  64. package/dist/{chunk-U6MBIEMB.js → chunk-LY4S7GJC.js} +173 -144
  65. package/dist/{chunk-4SPRNWDE.js → chunk-MLKNTWH2.js} +19 -19
  66. package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
  67. package/dist/chunk-NEKRRTYW.js +56 -0
  68. package/dist/{chunk-SPULKLCF.js → chunk-NHCZP4K7.js} +3 -3
  69. package/dist/chunk-NHLBIGRH.js +1506 -0
  70. package/dist/chunk-NQQH3YT7.js +302 -0
  71. package/dist/chunk-NYS75XW5.js +15 -0
  72. package/dist/{chunk-GN57SG4G.js → chunk-O4XIVISU.js} +10 -8
  73. package/dist/{chunk-EMYUUSFG.js → chunk-O6TL7WWY.js} +6 -6
  74. package/dist/chunk-OQBA45DZ.js +97 -0
  75. package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
  76. package/dist/chunk-PMZCIOCJ.js +25 -0
  77. package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
  78. package/dist/{chunk-J3YUBZWY.js → chunk-QBJA7R7N.js} +62 -6
  79. package/dist/chunk-QDC3K2U3.js +262 -0
  80. package/dist/{chunk-2HEJ2F35.js → chunk-QLFS5GO2.js} +22 -10
  81. package/dist/{chunk-7RGZWPB6.js → chunk-QLL7ILRG.js} +95 -32
  82. package/dist/{chunk-YS5VLNH5.js → chunk-QREDIESB.js} +6 -6
  83. package/dist/chunk-QSNYB6ZV.js +195 -0
  84. package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
  85. package/dist/chunk-RKKLTLYB.js +45 -0
  86. package/dist/{chunk-P43ETTHK.js → chunk-SJ5ZKQ4S.js} +2 -2
  87. package/dist/{chunk-GPIEI3LY.js → chunk-SP2RXXYO.js} +6 -54
  88. package/dist/chunk-SUCTJL45.js +45 -0
  89. package/dist/{chunk-DYIM5TJT.js → chunk-SUW5DORT.js} +263 -7
  90. package/dist/chunk-T56WDKA5.js +183 -0
  91. package/dist/chunk-TVHHYFHE.js +255 -0
  92. package/dist/{chunk-FJ3H4MN5.js → chunk-TZ3SGWZZ.js} +3 -3
  93. package/dist/{chunk-MXKJU4JB.js → chunk-U77AMWDL.js} +91 -10
  94. package/dist/{chunk-5DHKRSMQ.js → chunk-ULC6OTWO.js} +11 -7
  95. package/dist/{chunk-RWSI4YD7.js → chunk-UM7N4G5A.js} +33 -12
  96. package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
  97. package/dist/{chunk-IGWKHNIQ.js → chunk-UXMFQ54G.js} +44 -37
  98. package/dist/{chunk-HFSBBKSQ.js → chunk-V5DHCITQ.js} +171 -3
  99. package/dist/{chunk-5WIGXA4T.js → chunk-VAZSBTKF.js} +111 -4
  100. package/dist/{chunk-VHN4MY6O.js → chunk-VEO4AP2K.js} +2 -2
  101. package/dist/{chunk-IJ7RPIYJ.js → chunk-VFA6GDY5.js} +65 -4
  102. package/dist/{chunk-PT7HYKEM.js → chunk-VO2LKSTM.js} +2 -2
  103. package/dist/chunk-VO67MWHC.js +75 -0
  104. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  105. package/dist/{chunk-TANS5ZJS.js → chunk-VYMXRQI6.js} +36 -22
  106. package/dist/{chunk-WWCZ5F23.js → chunk-W5VSYASO.js} +77 -16
  107. package/dist/{chunk-WNIJTQQK.js → chunk-WZR7K7ZX.js} +72 -116
  108. package/dist/{chunk-5Q2VVUKB.js → chunk-X3YGUTOB.js} +4 -4
  109. package/dist/chunk-X75E3D2N.js +686 -0
  110. package/dist/{chunk-VAWNZU7Z.js → chunk-YDFRH54B.js} +4 -4
  111. package/dist/chunk-YJX4SHTD.js +40 -0
  112. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  113. package/dist/chunk-Z2RR6MAK.js +127 -0
  114. package/dist/{chunk-FBVTI2TJ.js → chunk-Z4TXYIEG.js} +12 -131
  115. package/dist/cli/index.js +47 -36
  116. package/dist/{clio-QVTYJ57A.js → clio-2JXHBBY5.js} +7 -7
  117. package/dist/{code-nav-FGGFIE7L.js → code-nav-3YYRMYNF.js} +8 -8
  118. package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
  119. package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
  120. package/dist/{config-LW5IJFQN.js → config-QZPCMYSO.js} +99 -63
  121. package/dist/{configure-7XIZCOU4.js → configure-TEGEBYCA.js} +23 -22
  122. package/dist/{context-Y6Y7QPR6.js → context-AV7OEZ4D.js} +12 -12
  123. package/dist/{context-L3WL3X7K.js → context-E6H5RNMC.js} +56 -47
  124. package/dist/{context-N52ZA626.js → context-GSXUE4CT.js} +29 -27
  125. package/dist/{context-clear-MBQRLSDQ.js → context-clear-SHIBYK6T.js} +55 -46
  126. package/dist/{context-index-HVMFQHK3.js → context-index-HNG3MOME.js} +2 -2
  127. package/dist/{context-working-set-GS6DSO7F.js → context-working-set-5ZGKPGZQ.js} +13 -13
  128. package/dist/{dispatch-runner-22ZCNOM3.js → dispatch-runner-EFMJT4LD.js} +93 -64
  129. package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
  130. package/dist/doctor-QOA5FNY5.js +313 -0
  131. package/dist/{eval-BEC2WHDA.js → eval-TFBYQH4H.js} +2032 -156
  132. package/dist/eval-inventory-SXH7PDKX.js +316 -0
  133. package/dist/{evidence-REJUMSKM.js → evidence-ERGESKGN.js} +203 -48
  134. package/dist/{evolve-PY5ZBA5K.js → evolve-VDXTSYCJ.js} +52 -43
  135. package/dist/{extensions-HVKU65YU.js → extensions-7BGBHN57.js} +13 -7
  136. package/dist/{fleet-7WZEWRFA.js → fleet-2RRVDF2V.js} +228 -108
  137. package/dist/{fleet-commands-UVHWM76J.js → fleet-commands-VJ726XIA.js} +11 -11
  138. package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
  139. package/dist/{fleet-graph-6ULH7PES.js → fleet-graph-JF5QOATM.js} +18 -15
  140. package/dist/fleet-inspect-VLY4S7QM.js +442 -0
  141. package/dist/{fleet-preflight-J53T6CCE.js → fleet-preflight-AIZUEJOY.js} +5 -5
  142. package/dist/{fleet-validate-72PC4SLA.js → fleet-validate-AJRPDMDV.js} +22 -19
  143. package/dist/fleet-verify-JFEL2L3H.js +175 -0
  144. package/dist/fleet-view-ZCON35AG.js +102 -0
  145. package/dist/{init-OG3TPGQG.js → init-DN2WWLFE.js} +72 -62
  146. package/dist/install-XGLBQY5E.js +13 -0
  147. package/dist/interop-OZBKXAYL.js +114 -0
  148. package/dist/{library-CNTMPLRF.js → library-YWZG7IMW.js} +21 -18
  149. package/dist/{memory-6IS7F275.js → memory-I4C4HMLW.js} +54 -45
  150. package/dist/{models-ENRJDA5W.js → models-CEYXJBO6.js} +33 -30
  151. package/dist/{monitor-XLDVO7TN.js → monitor-NZ6GCI3P.js} +59 -52
  152. package/dist/{orchestrator-6KSPYRHA.js → orchestrator-GCGQ4N5I.js} +7827 -7328
  153. package/dist/panes-HMABYVO4.js +58 -0
  154. package/dist/panes-KY6W3V2E.js +103 -0
  155. package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
  156. package/dist/{reset-RZ4ER727.js → reset-DQ6FGCSH.js} +13 -11
  157. package/dist/resources-BB3MVJMD.js +111 -0
  158. package/dist/{run-Y2CNK5RU.js → run-H2GQDUER.js} +119 -87
  159. package/dist/{share-A55GYP6Z.js → share-GTJN6A5O.js} +20 -17
  160. package/dist/{skills-ALC5J6AT.js → skills-L55TEW6R.js} +33 -24
  161. package/dist/{skills-eval-JPBEBYQU.js → skills-eval-XVXPH2JI.js} +67 -56
  162. package/dist/skills-inventory-S4MXPJFV.js +126 -0
  163. package/dist/slash-commands-ZSGASKJC.js +77 -0
  164. package/dist/{steer-GGWFUJUD.js → steer-RZGSCY4R.js} +4 -4
  165. package/dist/{support-MIETYA5E.js → support-PKEUNNQL.js} +6 -6
  166. package/dist/{targets-VGNXIR3S.js → targets-NCPZ644J.js} +68 -40
  167. package/dist/{terminal-lease-WOBR64YA.js → terminal-lease-44SV3YCN.js} +6 -4
  168. package/dist/tools-DAF3DI3C.js +27 -0
  169. package/dist/{trace-PNCASAXC.js → trace-FYVW2MQA.js} +207 -10
  170. package/dist/tui-primitives-2AKXQNZK.js +13 -0
  171. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
  172. package/dist/{upgrade-FUSUAGHR.js → upgrade-3XPP6OQL.js} +27 -24
  173. package/dist/{usage-N4MKVHKD.js → usage-3NLHGTU2.js} +114 -62
  174. package/dist/{verifiers-YAWOJ3H2.js → verifiers-SSQONKRT.js} +172 -13
  175. package/dist/{verify-LTDHYBGY.js → verify-3U6J7FZI.js} +10 -10
  176. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
  177. package/dist/{wiki-generate-6M7GHTBJ.js → wiki-generate-CEHYGPGQ.js} +75 -65
  178. package/dist/with-panes-MKB46MPQ.js +782 -0
  179. package/dist/worker/entry.js +106 -75
  180. package/docs/README.md +3 -2
  181. package/docs/acp.md +24 -3
  182. package/docs/alcf-provider.md +1 -1
  183. package/docs/architecture.md +2 -2
  184. package/docs/artifact-versions.md +9 -1
  185. package/docs/built-in-agents.md +1 -1
  186. package/docs/capacity-and-scheduling.md +62 -3
  187. package/docs/commands-and-modes.md +31 -2
  188. package/docs/configuration-and-targets.md +69 -12
  189. package/docs/context-engine.md +63 -4
  190. package/docs/development-pipeline.md +19 -0
  191. package/docs/dispatch-typed-intent.md +385 -0
  192. package/docs/documentation-coverage.md +5 -5
  193. package/docs/documentation-guide.md +1 -1
  194. package/docs/environment-variables.md +3 -0
  195. package/docs/eval-runner.md +262 -11
  196. package/docs/evals-internal.md +72 -2
  197. package/docs/evidence-and-memory.md +12 -11
  198. package/docs/evolution.md +1 -1
  199. package/docs/exit-codes-and-output.md +1 -1
  200. package/docs/extensions-and-sharing.md +27 -1
  201. package/docs/fleet-dispatch.md +25 -4
  202. package/docs/installation-and-lifecycle.md +15 -2
  203. package/docs/middleware-and-components.md +1 -1
  204. package/docs/model-catalog.md +10 -1
  205. package/docs/observability.md +55 -4
  206. package/docs/proactive-memory.md +127 -14
  207. package/docs/prompt-envelope-and-tools.md +19 -1
  208. package/docs/provider-adapter-cookbook.md +1 -1
  209. package/docs/release-cut-checklist.md +19 -3
  210. package/docs/safety-model.md +2 -2
  211. package/docs/scientific-validation.md +3 -3
  212. package/docs/session-lifecycle.md +1 -1
  213. package/docs/skills-marketplace.md +1 -1
  214. package/docs/tool-usage.md +18 -8
  215. package/docs/trace-store.md +1 -1
  216. package/docs/troubleshooting.md +88 -1
  217. package/docs/tui-design.md +1 -1
  218. package/docs/worker-dispatch-mechanics.md +1 -1
  219. package/package.json +5 -2
  220. package/src/cli/acp.ts +6 -2
  221. package/src/cli/agents.ts +1 -1
  222. package/src/cli/argv.ts +25 -0
  223. package/src/cli/config-inspect.ts +33 -6
  224. package/src/cli/config.ts +1 -1
  225. package/src/cli/configure.ts +23 -21
  226. package/src/cli/doctor-panes.ts +124 -0
  227. package/src/cli/doctor-state-size.ts +82 -0
  228. package/src/cli/doctor-toolchain.ts +57 -0
  229. package/src/cli/doctor.ts +22 -1
  230. package/src/cli/eval-inventory.ts +436 -0
  231. package/src/cli/eval.ts +93 -16
  232. package/src/cli/evidence-detail.ts +88 -0
  233. package/src/cli/evidence-inventory.ts +183 -0
  234. package/src/cli/evidence.ts +30 -5
  235. package/src/cli/extensions.ts +5 -1
  236. package/src/cli/fleet-decisions.ts +69 -0
  237. package/src/cli/fleet-inspect.ts +334 -0
  238. package/src/cli/fleet-verify.ts +133 -0
  239. package/src/cli/fleet-view.ts +810 -0
  240. package/src/cli/fleet.ts +179 -39
  241. package/src/cli/index.ts +14 -2
  242. package/src/cli/interop-inspect.ts +128 -0
  243. package/src/cli/interop.ts +34 -0
  244. package/src/cli/panes.ts +35 -0
  245. package/src/cli/reset.ts +5 -2
  246. package/src/cli/run.ts +58 -0
  247. package/src/cli/skills-inventory.ts +185 -0
  248. package/src/cli/skills.ts +16 -13
  249. package/src/cli/targets.ts +44 -13
  250. package/src/cli/tools.ts +321 -0
  251. package/src/cli/trace-inspect.ts +252 -0
  252. package/src/cli/trace.ts +85 -5
  253. package/src/cli/usage.ts +63 -14
  254. package/src/cli/verifiers-inspect.ts +347 -0
  255. package/src/cli/verifiers.ts +9 -0
  256. package/src/core/bus-events.ts +33 -1
  257. package/src/core/cache-telemetry.ts +42 -0
  258. package/src/core/config.ts +67 -0
  259. package/src/core/defaults.ts +124 -8
  260. package/src/core/endpoint-key.ts +27 -0
  261. package/src/core/residency-target-key.ts +25 -0
  262. package/src/core/response-schema.ts +80 -6
  263. package/src/core/theme-token-hex.ts +43 -0
  264. package/src/core/tool-names.ts +2 -1
  265. package/src/core/xdg.ts +1 -1
  266. package/src/domains/agents/fleets/build-review.md +0 -3
  267. package/src/domains/agents/fleets/build-test.md +0 -3
  268. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  269. package/src/domains/agents/result-contract.ts +164 -35
  270. package/src/domains/config/classify.ts +6 -0
  271. package/src/domains/context/codewiki/coordinator.ts +12 -4
  272. package/src/domains/dispatch/admission-error.ts +9 -0
  273. package/src/domains/dispatch/admission.ts +52 -14
  274. package/src/domains/dispatch/capacity-lease.ts +118 -9
  275. package/src/domains/dispatch/contract.ts +11 -0
  276. package/src/domains/dispatch/council-topology.ts +398 -0
  277. package/src/domains/dispatch/execution-plan.ts +44 -4
  278. package/src/domains/dispatch/extension.ts +378 -82
  279. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  280. package/src/domains/dispatch/fleet-plan.ts +7 -2
  281. package/src/domains/dispatch/fleet-run.ts +87 -4
  282. package/src/domains/dispatch/gate-decisions.ts +11 -1
  283. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  284. package/src/domains/dispatch/gate-topology.ts +289 -0
  285. package/src/domains/dispatch/heartbeat.ts +32 -8
  286. package/src/domains/dispatch/index.ts +22 -0
  287. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  288. package/src/domains/dispatch/intent.ts +85 -1
  289. package/src/domains/dispatch/orphan-recovery.ts +5 -0
  290. package/src/domains/dispatch/reservation-store.ts +139 -11
  291. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  292. package/src/domains/dispatch/run-event-journal.ts +598 -0
  293. package/src/domains/dispatch/state.ts +49 -1
  294. package/src/domains/dispatch/types.ts +13 -0
  295. package/src/domains/dispatch/validation.ts +33 -8
  296. package/src/domains/dispatch/worker-spawn.ts +25 -11
  297. package/src/domains/dispatch/write-boundary-enforcer.ts +20 -3
  298. package/src/domains/dispatch/write-boundary.ts +62 -1
  299. package/src/domains/eval/artifacts/store.ts +62 -0
  300. package/src/domains/eval/compare/behavioral.ts +224 -0
  301. package/src/domains/eval/compare/compare.ts +342 -2
  302. package/src/domains/eval/compare/envelope.ts +128 -0
  303. package/src/domains/eval/compare/gates.ts +24 -6
  304. package/src/domains/eval/compare/thresholds.ts +30 -3
  305. package/src/domains/eval/execution-provenance.ts +240 -0
  306. package/src/domains/eval/inventory.ts +113 -0
  307. package/src/domains/eval/metrics/aggregate.ts +136 -0
  308. package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
  309. package/src/domains/eval/metrics/tracked.ts +413 -0
  310. package/src/domains/eval/provenance.ts +117 -0
  311. package/src/domains/eval/reports/comparison.ts +128 -0
  312. package/src/domains/eval/reports/junit.ts +17 -3
  313. package/src/domains/eval/reports/markdown.ts +3 -3
  314. package/src/domains/eval/reports/text.ts +14 -0
  315. package/src/domains/eval/run-compare.ts +20 -0
  316. package/src/domains/eval/runners/clio-run.ts +127 -0
  317. package/src/domains/eval/runners/external-command.ts +28 -3
  318. package/src/domains/eval/schema/adapter.ts +111 -0
  319. package/src/domains/eval/schema/artifact.ts +20 -0
  320. package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
  321. package/src/domains/eval/schema/behavioral.ts +520 -0
  322. package/src/domains/eval/schema/execution-envelope.ts +194 -0
  323. package/src/domains/eval/schema/serving.ts +105 -0
  324. package/src/domains/eval/schema/suite.ts +38 -8
  325. package/src/domains/eval/schema/validate.ts +58 -3
  326. package/src/domains/eval/schema/verdict.ts +237 -0
  327. package/src/domains/eval/suites/resolve.ts +2 -0
  328. package/src/domains/eval/suites/run.ts +264 -33
  329. package/src/domains/eval/verifiers/command.ts +2 -1
  330. package/src/domains/eval/workspaces/temp-copy.ts +145 -13
  331. package/src/domains/evidence/build.ts +2 -13
  332. package/src/domains/evidence/eval.ts +2 -12
  333. package/src/domains/evidence/findings-markdown.ts +33 -0
  334. package/src/domains/evidence/run-trust.ts +7 -113
  335. package/src/domains/evidence/store.ts +6 -0
  336. package/src/domains/evidence/trust-projection.ts +2 -2
  337. package/src/domains/extensions/compatibility.ts +285 -0
  338. package/src/domains/extensions/discovery.ts +38 -3
  339. package/src/domains/extensions/resources.ts +1 -1
  340. package/src/domains/extensions/state.ts +12 -3
  341. package/src/domains/extensions/types.ts +2 -0
  342. package/src/domains/lifecycle/doctor.ts +69 -1
  343. package/src/domains/memory/index.ts +14 -1
  344. package/src/domains/memory/task-bank-promotion.ts +64 -0
  345. package/src/domains/memory/task-memory-policy.ts +82 -17
  346. package/src/domains/memory/task-memory-spend.ts +131 -0
  347. package/src/domains/memory/task-memory-status.ts +7 -0
  348. package/src/domains/memory/task-memory-telemetry.ts +3 -0
  349. package/src/domains/middleware/index.ts +1 -0
  350. package/src/domains/middleware/memory-intervention.ts +97 -21
  351. package/src/domains/middleware/memory-step-endpoint.ts +71 -0
  352. package/src/domains/mux/contract.ts +434 -0
  353. package/src/domains/mux/detect.ts +158 -0
  354. package/src/domains/mux/extension.ts +47 -0
  355. package/src/domains/mux/index.ts +96 -0
  356. package/src/domains/mux/manifest.ts +6 -0
  357. package/src/domains/mux/operations.ts +164 -0
  358. package/src/domains/mux/pane-registry.ts +90 -0
  359. package/src/domains/mux/protocol.ts +49 -0
  360. package/src/domains/mux/socket-client.ts +816 -0
  361. package/src/domains/mux/types.ts +222 -0
  362. package/src/domains/mux/viewer-command.ts +59 -0
  363. package/src/domains/mux/yazi/assets/init.lua +2 -0
  364. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  365. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  366. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  367. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  368. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  369. package/src/domains/mux/yazi/event-stream.ts +180 -0
  370. package/src/domains/mux/yazi/profile.ts +299 -0
  371. package/src/domains/mux/yazi/session.ts +228 -0
  372. package/src/domains/mux/yazi/theme.ts +30 -0
  373. package/src/domains/observability/background-memory-usage.ts +140 -0
  374. package/src/domains/observability/cost.ts +22 -1
  375. package/src/domains/observability/index.ts +9 -0
  376. package/src/domains/observability/out-of-turn-usage.ts +51 -2
  377. package/src/domains/observability/trace-store.ts +234 -2
  378. package/src/domains/prompts/compiler.ts +100 -13
  379. package/src/domains/providers/endpoint-capacity.ts +228 -0
  380. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  381. package/src/domains/providers/extension.ts +20 -3
  382. package/src/domains/providers/index.ts +32 -0
  383. package/src/domains/providers/model-runtime-capabilities.ts +32 -0
  384. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
  385. package/src/domains/providers/runtime-resolution.ts +8 -1
  386. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  387. package/src/domains/providers/runtimes/builtins.ts +2 -0
  388. package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
  389. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
  390. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  391. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
  392. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
  393. package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
  394. package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
  395. package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
  396. package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
  397. package/src/domains/providers/support.ts +1 -0
  398. package/src/domains/providers/target-model-cache.ts +124 -0
  399. package/src/domains/providers/types/capability-flags.ts +2 -0
  400. package/src/domains/providers/types/target-descriptor.ts +2 -0
  401. package/src/domains/resources/index.ts +3 -0
  402. package/src/domains/resources/prompts/loader.ts +95 -33
  403. package/src/domains/resources/skills/loader.ts +33 -0
  404. package/src/domains/safety/action-classifier.ts +6 -0
  405. package/src/domains/safety/call-target.ts +52 -0
  406. package/src/domains/safety/run-effects.ts +35 -4
  407. package/src/domains/session/context-accounting.ts +52 -1
  408. package/src/domains/session/context-ledger.ts +37 -13
  409. package/src/domains/session/index.ts +6 -0
  410. package/src/domains/session/prompt-cache.ts +140 -0
  411. package/src/domains/session/prompt-manifest.ts +42 -0
  412. package/src/domains/toolchain/archive.ts +175 -0
  413. package/src/domains/toolchain/contract.ts +28 -0
  414. package/src/domains/toolchain/extension.ts +47 -0
  415. package/src/domains/toolchain/index.ts +39 -0
  416. package/src/domains/toolchain/install.ts +327 -0
  417. package/src/domains/toolchain/manifest.ts +8 -0
  418. package/src/domains/toolchain/paths.ts +34 -0
  419. package/src/domains/toolchain/registry.ts +265 -0
  420. package/src/domains/toolchain/remove.ts +218 -0
  421. package/src/domains/toolchain/resolve.ts +182 -0
  422. package/src/domains/toolchain/types.ts +113 -0
  423. package/src/domains/toolchain/version.ts +88 -0
  424. package/src/engine/acp/adapter.ts +18 -3
  425. package/src/engine/acp/server.ts +413 -70
  426. package/src/engine/acp/types.ts +19 -1
  427. package/src/engine/ai.ts +35 -0
  428. package/src/engine/apis/llamacpp-residency.ts +55 -3
  429. package/src/engine/apis/lmstudio.ts +25 -5
  430. package/src/engine/apis/ollama-native.ts +2 -1
  431. package/src/engine/apis/openai-completions.ts +80 -17
  432. package/src/engine/apis/residency-lock.ts +3 -1
  433. package/src/engine/apis/residency.ts +34 -1
  434. package/src/engine/claude/sdk-module.ts +98 -0
  435. package/src/engine/claude/sdk-runtime.ts +19 -11
  436. package/src/engine/provider-payload.ts +29 -1
  437. package/src/engine/tui-primitives.ts +21 -0
  438. package/src/engine/tui.ts +1 -0
  439. package/src/engine/worker-runtime.ts +2 -13
  440. package/src/entry/boot-options.ts +2 -0
  441. package/src/entry/orchestrator.ts +279 -35
  442. package/src/entry/panes-activation.ts +31 -0
  443. package/src/entry/with-panes.ts +20 -0
  444. package/src/interactive/chat-loop-messages.ts +26 -7
  445. package/src/interactive/chat-loop.ts +318 -41
  446. package/src/interactive/chat-panel.ts +62 -8
  447. package/src/interactive/clio-editor.ts +45 -8
  448. package/src/interactive/context-activity.ts +5 -1
  449. package/src/interactive/context-meter.ts +1 -1
  450. package/src/interactive/context-overlay.ts +41 -10
  451. package/src/interactive/cost-overlay.ts +66 -6
  452. package/src/interactive/council-grid.ts +1 -3
  453. package/src/interactive/council.ts +11 -0
  454. package/src/interactive/dispatch-board.ts +102 -20
  455. package/src/interactive/fleet-run-preview.ts +41 -15
  456. package/src/interactive/handoff-round.ts +41 -2
  457. package/src/interactive/interactive-application.ts +177 -7
  458. package/src/interactive/interactive-input-runtime.ts +15 -0
  459. package/src/interactive/interactive-presentation.ts +4 -0
  460. package/src/interactive/interactive-shell.ts +20 -17
  461. package/src/interactive/interactive-slash-runtime.ts +63 -10
  462. package/src/interactive/memory-overlay.ts +9 -0
  463. package/src/interactive/modal-marker.ts +170 -0
  464. package/src/interactive/mutation-preview.ts +295 -0
  465. package/src/interactive/mux-bridge.ts +214 -0
  466. package/src/interactive/overlay-frame.ts +58 -2
  467. package/src/interactive/overlay-general-openers.ts +17 -0
  468. package/src/interactive/overlay-key-routing.ts +52 -3
  469. package/src/interactive/overlay-lifecycle.ts +56 -7
  470. package/src/interactive/overlay-model-selectors.ts +40 -3
  471. package/src/interactive/overlay-permission-lifecycle.ts +112 -24
  472. package/src/interactive/overlay-session-lifecycle.ts +73 -9
  473. package/src/interactive/overlay-transitions.ts +18 -4
  474. package/src/interactive/overlays/agents.ts +1 -0
  475. package/src/interactive/overlays/ask-user.ts +227 -49
  476. package/src/interactive/overlays/auth-dialog.ts +1 -0
  477. package/src/interactive/overlays/context-reset.ts +1 -0
  478. package/src/interactive/overlays/cwd-fallback.ts +1 -0
  479. package/src/interactive/overlays/decisions.ts +11 -11
  480. package/src/interactive/overlays/extensions.ts +1 -0
  481. package/src/interactive/overlays/fleet-run-approval.ts +1 -0
  482. package/src/interactive/overlays/handoff-review.ts +1 -0
  483. package/src/interactive/overlays/help-reference.ts +6 -0
  484. package/src/interactive/overlays/interop.ts +1 -0
  485. package/src/interactive/overlays/library-install-confirm.ts +1 -0
  486. package/src/interactive/overlays/library-tabs.ts +28 -0
  487. package/src/interactive/overlays/list-overlay.ts +10 -1
  488. package/src/interactive/overlays/message-picker.ts +1 -0
  489. package/src/interactive/overlays/model-scope.ts +86 -0
  490. package/src/interactive/overlays/model-selector.ts +1 -0
  491. package/src/interactive/overlays/prompts.ts +12 -1
  492. package/src/interactive/overlays/session-selector.ts +1 -0
  493. package/src/interactive/overlays/settings-sections.ts +30 -0
  494. package/src/interactive/overlays/settings.ts +614 -45
  495. package/src/interactive/overlays/side-question.ts +1 -0
  496. package/src/interactive/overlays/skills-hub.ts +3 -11
  497. package/src/interactive/overlays/tree-selector.ts +1 -0
  498. package/src/interactive/pane-policy.ts +46 -0
  499. package/src/interactive/panes-runtime.ts +292 -0
  500. package/src/interactive/permission-hint.ts +34 -2
  501. package/src/interactive/permission-overlay.ts +159 -9
  502. package/src/interactive/prewarm.ts +197 -0
  503. package/src/interactive/render-trace.ts +162 -15
  504. package/src/interactive/renderers/compaction-summary.ts +29 -0
  505. package/src/interactive/renderers/tool-execution.ts +4 -0
  506. package/src/interactive/renderers/worker-entry.ts +122 -14
  507. package/src/interactive/side-question.ts +58 -1
  508. package/src/interactive/slash-commands.ts +251 -15
  509. package/src/interactive/status/controller.ts +11 -0
  510. package/src/interactive/status/state-machine.ts +54 -2
  511. package/src/interactive/status/types.ts +7 -0
  512. package/src/interactive/tasks-overlay.ts +1 -0
  513. package/src/interactive/terminal-lease.ts +2 -0
  514. package/src/interactive/theme/tokens.ts +3 -14
  515. package/src/interactive/turn-context.ts +346 -33
  516. package/src/interactive/turn-persistence.ts +14 -4
  517. package/src/interactive/turn-prewarm.ts +364 -0
  518. package/src/interactive/turn-queues.ts +7 -4
  519. package/src/interactive/turn-runtime.ts +8 -1
  520. package/src/interactive/turn-state.ts +23 -0
  521. package/src/interactive/view/artifacts.ts +109 -1
  522. package/src/interactive/view/view-overlay.ts +29 -3
  523. package/src/interactive/watch-pane.ts +152 -0
  524. package/src/interactive/worker-progress.ts +7 -1
  525. package/src/interactive/worker-receipts.ts +19 -1
  526. package/src/interactive/worker-stream.ts +5 -0
  527. package/src/interactive/yazi-bridge.ts +444 -0
  528. package/src/tools/ask-user.ts +43 -2
  529. package/src/tools/bootstrap.ts +26 -2
  530. package/src/tools/builtin-tool-catalog.ts +15 -0
  531. package/src/tools/compete-worktrees.ts +83 -2
  532. package/src/tools/core-bootstrap.ts +2 -1
  533. package/src/tools/dispatch-admission.ts +14 -3
  534. package/src/tools/dispatch-arguments.ts +20 -20
  535. package/src/tools/dispatch-plan.ts +17 -9
  536. package/src/tools/dispatch-run-events.ts +134 -19
  537. package/src/tools/dispatch-runner.ts +29 -7
  538. package/src/tools/dispatch-scout.ts +1 -1
  539. package/src/tools/dispatch-types.ts +15 -3
  540. package/src/tools/dispatch.ts +1 -1
  541. package/src/tools/executables.ts +17 -14
  542. package/src/tools/observation.ts +54 -4
  543. package/src/tools/panes-surface.ts +38 -0
  544. package/src/tools/panes.ts +112 -0
  545. package/src/tools/policy.ts +10 -1
  546. package/src/tools/presentation.ts +1 -0
  547. package/src/tools/registry.ts +16 -0
  548. package/dist/chunk-AOCYTWAV.js +0 -449
  549. package/dist/chunk-HLE42MG7.js +0 -37
  550. package/dist/chunk-HWUFFB6L.js +0 -83
  551. package/dist/chunk-JOZYP4GM.js +0 -279
  552. package/dist/doctor-M7YEDGAE.js +0 -91
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Fixed machine-readable projection of this project's verification checks.
3
+ *
4
+ * `verifiers discover` renders an authoring preview and `verifiers validate`
5
+ * prints one sentence, so neither is a transport a GUI host can invoke. This
6
+ * command takes no identifier and no flag beyond `--json`, writes nothing, and
7
+ * runs no check: `verifiers dry-run` executes the production verify path and is
8
+ * a deliberate operator action, not something a browser refresh should trigger.
9
+ *
10
+ * What crosses is the shape of the check plane: which checks exist, where each
11
+ * was declared, which toolchain it drives, whether its argv is fixed, and
12
+ * whether the project catalog parses at all.
13
+ *
14
+ * What does not cross is the argv itself. A catalog check's `command` is an
15
+ * exact argument vector whose entries the schema permits to be absolute paths,
16
+ * so no width of projection makes it safe, and the executable is therefore
17
+ * classified against a closed set of toolchains rather than quoted. That is the
18
+ * same call trace event payloads and process command lines got: count and
19
+ * classify instead of projecting less. The declared `cwd`, the source file
20
+ * path, and every discovery diagnostic stay host-side for the same reason.
21
+ */
22
+
23
+ import { isProjectVerifierCheckId } from "../core/verification-scripts.js";
24
+ import {
25
+ type AuthoringCheck,
26
+ discoverVerifierAuthoring,
27
+ type VerifierProposalAuthority,
28
+ type VerifierSignalKind,
29
+ } from "../tools/verify/authoring.js";
30
+ import { loadProjectVerifierCatalog, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH } from "../tools/verify/catalog.js";
31
+
32
+ /** Wire bound on the emitted check list, independent of the catalog's own 128-check cap. */
33
+ export const MAX_VERIFIERS_INSPECT_CHECKS = 64;
34
+
35
+ const TAG_PATTERN = /^[a-z0-9][a-z0-9._-]*$/;
36
+ const REJECTION_LOCATION_PATTERN = /^(root|checks\[\d{1,3}\])(\.[a-zA-Z]{1,32}(\[\d{1,3}\])?)?$/;
37
+
38
+ /**
39
+ * Where a check was declared, and therefore how much of it the operator wrote.
40
+ *
41
+ * The domain's own `AuthoringCheck.state` also carries `manual`, which only the
42
+ * interactive authoring flow mints. Discovery cannot produce it, so it is not in
43
+ * this set: carrying a value this read can never emit would state a distinction
44
+ * it never establishes.
45
+ */
46
+ export const VERIFIER_ORIGINS = ["package-script", "catalog", "proposed"] as const;
47
+ export type VerifierOrigin = (typeof VERIFIER_ORIGINS)[number];
48
+
49
+ /**
50
+ * The toolchain a check drives, classified from `command[0]`.
51
+ *
52
+ * The catalog schema already guarantees the executable is a single token and
53
+ * refuses every shell, so this is a classification over a constrained value
54
+ * rather than a redaction of an arbitrary one. `other` is a real answer: the
55
+ * operator still learns a check exists and how it is bound, just not which
56
+ * program outside this list it starts.
57
+ */
58
+ export const VERIFIER_RUNNERS = [
59
+ "npm",
60
+ "pnpm",
61
+ "yarn",
62
+ "bun",
63
+ "deno",
64
+ "node",
65
+ "cargo",
66
+ "go",
67
+ "make",
68
+ "just",
69
+ "cmake",
70
+ "ctest",
71
+ "ninja",
72
+ "python",
73
+ "pytest",
74
+ "uv",
75
+ "tox",
76
+ "nox",
77
+ "dotnet",
78
+ "gradle",
79
+ "maven",
80
+ "rake",
81
+ "swift",
82
+ "other",
83
+ ] as const;
84
+ export type VerifierRunner = (typeof VERIFIER_RUNNERS)[number];
85
+
86
+ const RUNNER_ALIASES = new Map<string, VerifierRunner>([
87
+ ["python3", "python"],
88
+ ["python2", "python"],
89
+ ["py", "python"],
90
+ ["mvn", "maven"],
91
+ ["gradlew", "gradle"],
92
+ ["mvnw", "maven"],
93
+ ["npx", "npm"],
94
+ ["pnpx", "pnpm"],
95
+ ["go-test", "go"],
96
+ ]);
97
+
98
+ /** Why discovery could not enumerate the check plane at all. */
99
+ export const VERIFIER_BLOCKS = ["catalog-rejected", "id-collision", "unclassified"] as const;
100
+ export type VerifierBlock = (typeof VERIFIER_BLOCKS)[number];
101
+
102
+ /**
103
+ * Why the production parser refused the project catalog.
104
+ *
105
+ * The parser's diagnostics quote the offending value, the workspace path, and
106
+ * the schema cap that was passed, so the sentence itself never crosses. The
107
+ * classification says what went wrong and `rejectedAt` says where, which is the
108
+ * pair an operator needs to find the line without being handed its contents.
109
+ */
110
+ export const VERIFIER_REJECTIONS = [
111
+ "unreadable",
112
+ "invalid-yaml",
113
+ "unsupported-version",
114
+ "unknown-field",
115
+ "missing-field",
116
+ "duplicate-id",
117
+ "shell-command",
118
+ "too-large",
119
+ "invalid-cwd",
120
+ "invalid-value",
121
+ "unclassified",
122
+ ] as const;
123
+ export type VerifierRejection = (typeof VERIFIER_REJECTIONS)[number];
124
+
125
+ export interface VerifiersInspectCheck {
126
+ readonly id: string;
127
+ readonly description: string;
128
+ readonly origin: VerifierOrigin;
129
+ /** The declaration the harness read this check out of. */
130
+ readonly signal: VerifierSignalKind;
131
+ readonly authority: VerifierProposalAuthority;
132
+ /** The toolchain `command[0]` starts. The arguments themselves stay host-side. */
133
+ readonly runner: VerifierRunner;
134
+ /** How many arguments follow the executable, so an operator can see a bare invocation from a long one. */
135
+ readonly argumentCount: number;
136
+ /** True when the check runs at the repository root. A subdirectory's name does not cross. */
137
+ readonly runsAtRepositoryRoot: boolean;
138
+ /**
139
+ * True when verify fixes argv, cwd, and timeout through safe-exec.
140
+ *
141
+ * A package-script check runs npm with the declared script name and may
142
+ * accept explicit extra argv, so it is the one origin whose effective
143
+ * command is not pinned by the declaration. That is a trust difference and
144
+ * the reason this is reported rather than left to be inferred.
145
+ */
146
+ readonly argvFixed: boolean;
147
+ readonly timeoutMs: number;
148
+ readonly tags: readonly string[];
149
+ }
150
+
151
+ export interface VerifiersInspectSnapshot {
152
+ readonly version: 1;
153
+ readonly generatedAt: string;
154
+ /** Whether the project catalog file exists at all. Its path stays host-side. */
155
+ readonly catalogPresent: boolean;
156
+ /** Whether the production parser accepted it; null when there is nothing to parse. */
157
+ readonly catalogValid: boolean | null;
158
+ readonly rejection: VerifierRejection | null;
159
+ /** The schema location the rejection named, such as `checks[3].command[0]`. */
160
+ readonly rejectedAt: string | null;
161
+ /** Whether the check plane could be enumerated. */
162
+ readonly discovery: "complete" | "blocked";
163
+ readonly blockedBy: VerifierBlock | null;
164
+ readonly checks: readonly VerifiersInspectCheck[];
165
+ readonly checksTruncated: boolean;
166
+ /** How many discovery diagnostics were raised. Each one quotes a path, so the text stays host-side. */
167
+ readonly diagnosticCount: number;
168
+ }
169
+
170
+ /**
171
+ * A codepoint scan rather than a regex, because the whole point is the control
172
+ * range and a character class over it is exactly what a linter refuses.
173
+ */
174
+ function hasControlCharacter(value: string): boolean {
175
+ for (const character of value) {
176
+ const code = character.codePointAt(0) ?? 0;
177
+ if (code <= 0x1f || code === 0x7f) return true;
178
+ }
179
+ return false;
180
+ }
181
+
182
+ function runnerOf(executable: string | undefined): VerifierRunner {
183
+ if (executable === undefined) return "other";
184
+ const separator = Math.max(executable.lastIndexOf("/"), executable.lastIndexOf("\\"));
185
+ const base = executable
186
+ .slice(separator + 1)
187
+ .toLowerCase()
188
+ .replace(/\.(exe|cmd|bat|ps1)$/u, "");
189
+ const alias = RUNNER_ALIASES.get(base);
190
+ if (alias !== undefined) return alias;
191
+ return (VERIFIER_RUNNERS as ReadonlyArray<string>).includes(base) ? (base as VerifierRunner) : "other";
192
+ }
193
+
194
+ function rejectionMessage(reason: string): string {
195
+ const prefix = `${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}: `;
196
+ return reason.startsWith(prefix) ? reason.slice(prefix.length) : reason;
197
+ }
198
+
199
+ function rejectionLocation(message: string): string | null {
200
+ const match = /^(?:root|checks\[\d{1,3}\])(?:\.[a-zA-Z]{1,32}(?:\[\d{1,3}\])?)?/u.exec(message);
201
+ const candidate = match?.[0];
202
+ if (candidate === undefined) return null;
203
+ return REJECTION_LOCATION_PATTERN.test(candidate) ? candidate : null;
204
+ }
205
+
206
+ /**
207
+ * Classify the parser's sentence instead of quoting it.
208
+ *
209
+ * The order is the discriminating one, not the declaration one: a cap failure
210
+ * is a cap failure wherever it happened, and the cwd bucket is guarded on the
211
+ * location so a NUL byte in an argv entry does not read as a bad directory.
212
+ */
213
+ function classifyRejection(reason: string): { rejection: VerifierRejection; rejectedAt: string | null } {
214
+ const message = rejectionMessage(reason);
215
+ const rejectedAt = rejectionLocation(message);
216
+ const has = (fragment: string): boolean => message.includes(fragment);
217
+ const rejection: VerifierRejection = has("invalid YAML")
218
+ ? "invalid-yaml"
219
+ : has("cannot read catalog") || has("must be a regular file") || has("must resolve inside the workspace root")
220
+ ? "unreadable"
221
+ : has("unsupported version")
222
+ ? "unsupported-version"
223
+ : has("has unknown field(s)")
224
+ ? "unknown-field"
225
+ : has(" is required")
226
+ ? "missing-field"
227
+ : has("duplicates '") || has("contains duplicate tag")
228
+ ? "duplicate-id"
229
+ : has("may not invoke shell executable") ||
230
+ has("must be one executable token") ||
231
+ has("shell command strings are not allowed")
232
+ ? "shell-command"
233
+ : has("exceeds the")
234
+ ? "too-large"
235
+ : rejectedAt?.endsWith(".cwd") === true
236
+ ? "invalid-cwd"
237
+ : has("must be") || has("must match") || has("must not contain") || has("uses reserved")
238
+ ? "invalid-value"
239
+ : "unclassified";
240
+ return { rejection, rejectedAt };
241
+ }
242
+
243
+ function classifyBlock(reason: string): VerifierBlock {
244
+ if (reason.includes(`${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}: `)) return "catalog-rejected";
245
+ if (reason.includes("duplicate declared check id ")) return "id-collision";
246
+ return "unclassified";
247
+ }
248
+
249
+ /**
250
+ * Re-enforce the shapes the catalog schema already guarantees.
251
+ *
252
+ * The ids and tags reaching here came through the production parser, so this is
253
+ * belt and braces rather than the first line of defence. It is worth the lines
254
+ * because a package.json script name is not held to the catalog's id rule, and
255
+ * because whatever wrote the declaration, the strings that cross carry no path,
256
+ * quote, space, or control byte.
257
+ */
258
+ function projectCheck(check: AuthoringCheck): VerifiersInspectCheck | null {
259
+ // `manual` is only minted inside the interactive authoring flow, so a check
260
+ // carrying it here means this read was handed a draft rather than a discovery.
261
+ if (check.state === "manual") return null;
262
+ if (!isProjectVerifierCheckId(check.id) || check.id.length > 64) return null;
263
+ if (check.description.trim() !== check.description || check.description.length === 0) return null;
264
+ if (hasControlCharacter(check.description) || check.description.length > 512) return null;
265
+ const tags = check.tags.filter((tag) => TAG_PATTERN.test(tag) && tag.length <= 32);
266
+ if (tags.length !== check.tags.length) return null;
267
+ const origin: VerifierOrigin =
268
+ check.state === "active" ? "package-script" : check.state === "existing" ? "catalog" : "proposed";
269
+ return {
270
+ id: check.id,
271
+ description: check.description,
272
+ origin,
273
+ signal: check.provenance.kind,
274
+ authority: check.provenance.authority,
275
+ runner: runnerOf(check.command[0]),
276
+ argumentCount: Math.max(check.command.length - 1, 0),
277
+ runsAtRepositoryRoot: check.cwd === ".",
278
+ argvFixed: origin !== "package-script",
279
+ timeoutMs: check.timeoutMs,
280
+ tags,
281
+ };
282
+ }
283
+
284
+ const ORIGIN_RANK: Record<VerifierOrigin, number> = { "package-script": 0, catalog: 1, proposed: 2 };
285
+
286
+ export function verifiersInspectSnapshot(
287
+ now: () => number = Date.now,
288
+ workspaceRoot: string = process.cwd(),
289
+ ): VerifiersInspectSnapshot {
290
+ const generatedAt = new Date(now()).toISOString();
291
+ // The catalog is loaded on its own rather than inferred from discovery,
292
+ // because discovery also fails on an id collision between package.json and
293
+ // the catalog, and "your catalog is broken" and "two declarations claim the
294
+ // same id" are different operator states with different repairs.
295
+ const catalog = loadProjectVerifierCatalog(workspaceRoot);
296
+ const catalogPresent = catalog.ok ? catalog.source !== null : true;
297
+ const classified = catalog.ok ? null : classifyRejection(catalog.reason);
298
+ const discovery = discoverVerifierAuthoring(workspaceRoot);
299
+ const base = {
300
+ version: 1,
301
+ generatedAt,
302
+ catalogPresent,
303
+ catalogValid: catalog.ok ? (catalog.source === null ? null : true) : false,
304
+ rejection: classified?.rejection ?? null,
305
+ rejectedAt: classified?.rejectedAt ?? null,
306
+ } as const;
307
+ if (!discovery.ok) {
308
+ return {
309
+ ...base,
310
+ discovery: "blocked",
311
+ blockedBy: classifyBlock(discovery.reason),
312
+ checks: [],
313
+ checksTruncated: false,
314
+ diagnosticCount: 0,
315
+ };
316
+ }
317
+ const projected = [...discovery.activeChecks, ...discovery.existingChecks, ...discovery.proposals]
318
+ .map(projectCheck)
319
+ .filter((check): check is VerifiersInspectCheck => check !== null)
320
+ .sort((left, right) =>
321
+ ORIGIN_RANK[left.origin] !== ORIGIN_RANK[right.origin]
322
+ ? ORIGIN_RANK[left.origin] - ORIGIN_RANK[right.origin]
323
+ : left.id < right.id
324
+ ? -1
325
+ : left.id > right.id
326
+ ? 1
327
+ : 0,
328
+ );
329
+ const checks = projected.slice(0, MAX_VERIFIERS_INSPECT_CHECKS);
330
+ return {
331
+ ...base,
332
+ discovery: "complete",
333
+ blockedBy: null,
334
+ checks,
335
+ checksTruncated: checks.length < projected.length,
336
+ diagnosticCount: discovery.diagnostics.length,
337
+ };
338
+ }
339
+
340
+ export function runVerifiersInspect(args: ReadonlyArray<string>): number {
341
+ if (args.length !== 1 || args[0] !== "--json") {
342
+ process.stderr.write("clio-coder verifiers inspect: usage: clio-coder verifiers inspect --json\n");
343
+ return 2;
344
+ }
345
+ process.stdout.write(`${JSON.stringify(verifiersInspectSnapshot(), null, 2)}\n`);
346
+ return 0;
347
+ }
@@ -9,11 +9,13 @@ import {
9
9
  import { loadProjectVerifierCatalog, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH } from "../tools/verify/catalog.js";
10
10
  import { verifyTool } from "../tools/verify/index.js";
11
11
  import { printError, printOk } from "./argv.js";
12
+ import { runVerifiersInspect } from "./verifiers-inspect.js";
12
13
 
13
14
  const HELP = `Project verifier authoring
14
15
 
15
16
  Usage:
16
17
  clio-coder verifiers discover
18
+ clio-coder verifiers inspect --json
17
19
  clio-coder verifiers author [--exclude <id>] [--rename <old>=<new>] [--dry-run <id>] [--yes]
18
20
  clio-coder verifiers validate
19
21
  clio-coder verifiers dry-run <id>
@@ -30,6 +32,10 @@ Fields:
30
32
  Discovery and every preview are read-only. Mutating commands write only with
31
33
  --yes after printing the exact argv, cwd, timeout, tags, source provenance, and
32
34
  effective execution authority. dry-run invokes the production verify path.
35
+
36
+ inspect is the fixed machine-readable read a GUI host may run. It takes no other
37
+ argument, runs no check, and carries no argv, cwd, source path, or diagnostic
38
+ text: the toolchain each check drives is classified, and the arguments stay here.
33
39
  `;
34
40
 
35
41
  const VALUE_OPTIONS = new Set([
@@ -282,6 +288,9 @@ function validateCommand(): number {
282
288
  }
283
289
 
284
290
  export async function runVerifiersCommand(argv: string[]): Promise<number> {
291
+ // Routed before the authoring parser so the fixed read stays exactly fixed. No
292
+ // authoring flag can reach it, and no flag it does not name can be spent on it.
293
+ if (argv[0] === "inspect") return runVerifiersInspect(argv.slice(1));
285
294
  const parsed = parseAuthoringArgs(argv);
286
295
  if (parsed.error !== undefined) {
287
296
  printError(parsed.error);
@@ -51,6 +51,7 @@ export const BusChannels = {
51
51
  ToolBudgetExceeded: "safety.toolBudgetExceeded",
52
52
  ProviderHealth: "provider.health",
53
53
  RuntimeNotice: "runtime.notice",
54
+ ResidencyMutation: "residency.mutation",
54
55
  DispatchScopeNotice: "dispatch.scopeNotice",
55
56
  DispatchEnqueued: "dispatch.enqueued",
56
57
  DispatchStarted: "dispatch.started",
@@ -64,6 +65,7 @@ export const BusChannels = {
64
65
  ContextWarning: "context.warning",
65
66
  ContextPruned: "context.pruned",
66
67
  ContextRecalled: "context.recalled",
68
+ MemoryStepCompleted: "memory.stepCompleted",
67
69
  AgentStatusChanged: "agent.status.changed",
68
70
  RunAborted: "run.aborted",
69
71
  BudgetAlert: "budget.alert",
@@ -100,6 +102,28 @@ export interface RuntimeNoticePayload {
100
102
  detail?: Record<string, number | string | boolean>;
101
103
  }
102
104
 
105
+ /**
106
+ * One completed proactive-memory model step, published on
107
+ * {@link BusChannels.MemoryStepCompleted}. It carries the endpoint the step
108
+ * called and nothing about what the step decided: the only consumer is the
109
+ * turn context, which stamps an expected-cold reason when a step ran between
110
+ * turns on the endpoint the chat target streams against.
111
+ */
112
+ export interface MemoryStepCompletedPayload {
113
+ endpointKey: string;
114
+ targetId: string;
115
+ }
116
+
117
+ /** A successful model load or eviction on one residency-managed endpoint. */
118
+ export interface ResidencyMutationPayload {
119
+ targetKey: string;
120
+ targetId: string;
121
+ runtimeId: string;
122
+ model: string;
123
+ operation: "load" | "evict";
124
+ at: number;
125
+ }
126
+
103
127
  /**
104
128
  * Window-resolution warning published on {@link BusChannels.ContextWarning}.
105
129
  * Emitted on transitions only: `warning` carries the text when a warning
@@ -133,7 +157,7 @@ export type DispatchScopeNoticePayload =
133
157
  };
134
158
 
135
159
  export type ContextActivityKind = "context-init" | "context-clear" | "context-refresh" | "context-wiki" | "compaction";
136
- export type ContextActivityPhase = "scan" | "codewiki" | "generate" | "clio-md" | "state" | "done";
160
+ export type ContextActivityPhase = "scan" | "codewiki" | "generate" | "clio-md" | "state" | "compact" | "done";
137
161
  export type ContextActivityStatus = "started" | "running" | "completed" | "failed";
138
162
 
139
163
  /** Structured progress for context operations. Interactive renders this as a live context island. */
@@ -444,6 +468,8 @@ export interface PermissionRequestedPayload {
444
468
  /** Sanitized one-line preview of the call's object (command, path, or compact args). */
445
469
  target?: string | undefined;
446
470
  timeoutMs?: number | undefined;
471
+ /** Admitted timeout fallback, so the operator surface can name what an expired ask became. */
472
+ fallback?: "deny" | "fail" | undefined;
447
473
  escalation?: boolean | undefined;
448
474
  }
449
475
 
@@ -462,6 +488,8 @@ export interface PermissionResolvedPayload {
462
488
  actionClass?: string | undefined;
463
489
  reason?: string | undefined;
464
490
  requestedBy?: string | undefined;
491
+ /** Effective fallback applied to an expired worker escalation. */
492
+ fallback?: "deny" | "fail" | undefined;
465
493
  at?: number | undefined;
466
494
  }
467
495
 
@@ -505,6 +533,8 @@ export interface DispatchRunIdentity {
505
533
  wireModelId: string;
506
534
  runtimeId: string;
507
535
  runtimeKind: RunKind;
536
+ /** Canonical inference scheduler and its resolved request-slot bound. */
537
+ endpoint?: { key: string; label: string; limit: number } | undefined;
508
538
  /** Admitted invocation budget provenance for native workers. */
509
539
  budget?: RunToolBudgetEnvelope | undefined;
510
540
  /** Fleet node id the run was placed on; absent renders as the local node. */
@@ -761,6 +791,7 @@ export type BusPayloadMap = {
761
791
  [BusChannels.ToolBudgetExceeded]: ToolBudgetExceededPayload;
762
792
  [BusChannels.ProviderHealth]: ProviderHealthPayload;
763
793
  [BusChannels.RuntimeNotice]: RuntimeNoticePayload;
794
+ [BusChannels.ResidencyMutation]: ResidencyMutationPayload;
764
795
  [BusChannels.DispatchScopeNotice]: DispatchScopeNoticePayload;
765
796
  [BusChannels.DispatchEnqueued]: DispatchEnqueuedPayload;
766
797
  [BusChannels.DispatchStarted]: DispatchStartedPayload;
@@ -774,6 +805,7 @@ export type BusPayloadMap = {
774
805
  [BusChannels.ContextWarning]: ContextWarningPayload;
775
806
  [BusChannels.ContextPruned]: ContextPrunedPayload;
776
807
  [BusChannels.ContextRecalled]: ContextRecalledPayload;
808
+ [BusChannels.MemoryStepCompleted]: MemoryStepCompletedPayload;
777
809
  [BusChannels.AgentStatusChanged]: AgentStatusChangedPayload;
778
810
  [BusChannels.RunAborted]: RunAbortedPayload;
779
811
  [BusChannels.BudgetAlert]: BudgetAlertPayload;
@@ -0,0 +1,42 @@
1
+ /** Cache classification for one backend completion call. */
2
+ export type BackendCacheVerdict = "hot" | "partial" | "cold" | "small";
3
+
4
+ /** Backend timing source that directly reports local prefill work. */
5
+ export type BackendTimingsSource = "llamacpp-timings" | "lmstudio-timings";
6
+
7
+ /** Normalized prefill and prediction timings reported by the serving backend. */
8
+ export interface BackendCompletionTimings {
9
+ promptTokens: number;
10
+ cachedTokens: number | null;
11
+ predictedTokens: number;
12
+ promptMs: number;
13
+ predictedMs: number;
14
+ source: BackendTimingsSource;
15
+ }
16
+
17
+ /** Per-session call counts grouped by backend cache verdict. */
18
+ export interface CacheVerdictCounts {
19
+ hot: number;
20
+ partial: number;
21
+ cold: number;
22
+ small: number;
23
+ }
24
+
25
+ export function emptyCacheVerdictCounts(): CacheVerdictCounts {
26
+ return { hot: 0, partial: 0, cold: 0, small: 0 };
27
+ }
28
+
29
+ /** Return newly evaluated prefill tokens when the backend reports cache reads. */
30
+ export function uncachedPrefillTokens(backend: BackendCompletionTimings | null | undefined): number | null {
31
+ if (backend === null || backend === undefined || backend.cachedTokens === null) return null;
32
+ if (
33
+ !Number.isFinite(backend.promptTokens) ||
34
+ backend.promptTokens < 0 ||
35
+ !Number.isFinite(backend.cachedTokens) ||
36
+ backend.cachedTokens < 0 ||
37
+ backend.cachedTokens > backend.promptTokens
38
+ ) {
39
+ return null;
40
+ }
41
+ return backend.promptTokens - backend.cachedTokens;
42
+ }
@@ -521,6 +521,7 @@ function validateTarget(issues: Issues, path: string, value: unknown): ClioSetti
521
521
  "gateway",
522
522
  "pricing",
523
523
  "lmstudio",
524
+ "maxConcurrentRequests",
524
525
  ]);
525
526
  const id = "id" in value ? expectString(issues, `${path}.id`, value.id) : undefined;
526
527
  const runtime = "runtime" in value ? expectString(issues, `${path}.runtime`, value.runtime) : undefined;
@@ -566,6 +567,10 @@ function validateTarget(issues: Issues, path: string, value: unknown): ClioSetti
566
567
  const v = validateLmStudioSettings(issues, `${path}.lmstudio`, value.lmstudio);
567
568
  if (v !== undefined) target.lmstudio = v;
568
569
  }
570
+ if ("maxConcurrentRequests" in value) {
571
+ const v = expectInteger(issues, `${path}.maxConcurrentRequests`, value.maxConcurrentRequests, { min: 1 });
572
+ if (v !== undefined) target.maxConcurrentRequests = v;
573
+ }
569
574
  return target;
570
575
  }
571
576
 
@@ -1004,6 +1009,8 @@ const TOP_LEVEL_KEYS = [
1004
1009
  "keybindings",
1005
1010
  "compaction",
1006
1011
  "context",
1012
+ "prewarm",
1013
+ "panes",
1007
1014
  "retry",
1008
1015
  "guardrails",
1009
1016
  ] as const;
@@ -1589,6 +1596,66 @@ export function validateSettings(raw: unknown): SettingsValidationResult {
1589
1596
  }
1590
1597
  }
1591
1598
 
1599
+ if ("prewarm" in raw) {
1600
+ if (!isPlainObject(raw.prewarm)) {
1601
+ issues.add("prewarm", `expected a map, got ${describe(raw.prewarm)}`);
1602
+ } else {
1603
+ issues.unknownKeys("prewarm", raw.prewarm, ["enabled"]);
1604
+ if ("enabled" in raw.prewarm) {
1605
+ const v = expectBoolean(issues, "prewarm.enabled", raw.prewarm.enabled);
1606
+ if (v !== undefined) settings.prewarm.enabled = v;
1607
+ }
1608
+ }
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
+
1592
1659
  if ("retry" in raw) {
1593
1660
  if (!isPlainObject(raw.retry)) {
1594
1661
  issues.add("retry", `expected a map, got ${describe(raw.retry)}`);