@iowarp/clio-coder 0.3.7 → 0.3.9

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 (400) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +13 -4
  3. package/dist/{acp-SK4MD6MM.js → acp-7LOELQFP.js} +13 -13
  4. package/dist/{agents-2FN2K6ME.js → agents-FIBG2SHA.js} +41 -37
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-QIYZWM5I.js → auth-OI4LIH2I.js} +31 -24
  7. package/dist/builtins-AD25UL3C.js +17 -0
  8. package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
  9. package/dist/chunk-3DPEIQKN.js +113 -0
  10. package/dist/{chunk-EOOQZZDE.js → chunk-3DUR4WUA.js} +19 -19
  11. package/dist/{chunk-WHJYKASB.js → chunk-3MRC2YSQ.js} +2 -2
  12. package/dist/{chunk-EBEFWSGL.js → chunk-3UUY7R3Z.js} +14 -10
  13. package/dist/{chunk-LADCF22A.js → chunk-3V5AYSEQ.js} +113 -54
  14. package/dist/{chunk-BMWK7ZIZ.js → chunk-465CC7FK.js} +16 -13
  15. package/dist/{chunk-5WIGXA4T.js → chunk-47CMYGET.js} +111 -4
  16. package/dist/{chunk-CEYBNUGC.js → chunk-4H6ULJ3H.js} +378 -36
  17. package/dist/{chunk-YTYFXUI3.js → chunk-4LJX2PUC.js} +9 -9
  18. package/dist/{chunk-DOOEX22V.js → chunk-56KB5IJP.js} +5 -5
  19. package/dist/{chunk-SPULKLCF.js → chunk-5DQRIYDZ.js} +2 -2
  20. package/dist/{chunk-TSHXZTOQ.js → chunk-5HFBWUMU.js} +23 -11
  21. package/dist/{chunk-5UJ6ECTS.js → chunk-5PVQ4SRS.js} +80 -8
  22. package/dist/{chunk-ZWLZP4ZT.js → chunk-5QKCQQ3E.js} +359 -17
  23. package/dist/{chunk-6M7VS3J3.js → chunk-5T7RBWN2.js} +111 -5
  24. package/dist/chunk-774ILSRL.js +172 -0
  25. package/dist/chunk-7C6RYZGQ.js +391 -0
  26. package/dist/{chunk-GH5622CP.js → chunk-A2NJGIB3.js} +2 -2
  27. package/dist/{chunk-C4JBQ5SR.js → chunk-AD7Y7STJ.js} +6 -6
  28. package/dist/{chunk-GEYXPTRF.js → chunk-AEYBF3TB.js} +33 -12
  29. package/dist/{chunk-2SFS6XQE.js → chunk-AMKHQW3C.js} +3 -2
  30. package/dist/{chunk-D4MDIG46.js → chunk-B5CSFE7B.js} +7 -7
  31. package/dist/{chunk-MXI6J5JF.js → chunk-B5XRQOLB.js} +10 -10
  32. package/dist/{chunk-X2KV5FXT.js → chunk-BVDVID7E.js} +2 -2
  33. package/dist/{chunk-JNXPYBB4.js → chunk-CA42X6KT.js} +3 -3
  34. package/dist/{chunk-VREKEFLL.js → chunk-D73KXYPF.js} +3 -3
  35. package/dist/{chunk-JTSEDYVQ.js → chunk-DG4M6ZUE.js} +7 -7
  36. package/dist/{chunk-DQA7QLMD.js → chunk-EBOC7MT3.js} +10 -25
  37. package/dist/{chunk-KZ2H5X4G.js → chunk-ECUO3KDP.js} +129 -14
  38. package/dist/{chunk-JRIO5UD2.js → chunk-EQ63NRB7.js} +5 -5
  39. package/dist/{chunk-YD734TPH.js → chunk-FALJGAWU.js} +2 -2
  40. package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
  41. package/dist/{chunk-XEGB6BCN.js → chunk-GAYUJ7LE.js} +68 -14
  42. package/dist/{chunk-UND3GU2L.js → chunk-H7IXIC72.js} +2 -2
  43. package/dist/{chunk-IR4CFBFN.js → chunk-HAY4ZE2P.js} +12 -12
  44. package/dist/{chunk-UVDSQ6LW.js → chunk-HCBCAYZU.js} +74 -147
  45. package/dist/{chunk-4DWFMQDR.js → chunk-HJB5IUKP.js} +89 -145
  46. package/dist/{chunk-M4AKACEO.js → chunk-HKO36JWF.js} +33 -5
  47. package/dist/{chunk-KCMKRQX4.js → chunk-HPCTNZM2.js} +45 -82
  48. package/dist/{chunk-465YSENW.js → chunk-IFBNV6H6.js} +3 -3
  49. package/dist/{chunk-FJ3H4MN5.js → chunk-IHKBWSXF.js} +2 -2
  50. package/dist/chunk-JEQQR47K.js +3025 -0
  51. package/dist/{chunk-FO5ZOVUY.js → chunk-KV2AOLDF.js} +27 -7
  52. package/dist/chunk-LU7P4LHA.js +33 -0
  53. package/dist/{chunk-6TUKSZVF.js → chunk-LXPJXFM5.js} +11 -11
  54. package/dist/{chunk-VQNODYQ4.js → chunk-MIX5N5AC.js} +488 -3668
  55. package/dist/chunk-MLOK6ZOS.js +2888 -0
  56. package/dist/{chunk-ZZMN5OM4.js → chunk-MV2VUEJC.js} +2 -2
  57. package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
  58. package/dist/{chunk-OBMAI2DP.js → chunk-N3PBVRTZ.js} +12 -388
  59. package/dist/{chunk-WJHBC77E.js → chunk-N5XKWMDW.js} +17 -7
  60. package/dist/{chunk-5C3AQNDW.js → chunk-NNNWO6F2.js} +124 -36
  61. package/dist/{chunk-UFQ3F4FW.js → chunk-NQ6UCCOD.js} +4 -4
  62. package/dist/chunk-NUGM5KR6.js +165 -0
  63. package/dist/{chunk-DMD2AGVS.js → chunk-NZU6YDNV.js} +20 -18
  64. package/dist/{chunk-WHGPSPT5.js → chunk-O6I4CIEU.js} +151 -13
  65. package/dist/{chunk-XN3L4EYL.js → chunk-OEDBCISO.js} +2 -2
  66. package/dist/{chunk-PD3MESLB.js → chunk-P3JGPQFL.js} +4 -4
  67. package/dist/{chunk-UHXRNZ2J.js → chunk-PNY46YEY.js} +23 -6
  68. package/dist/{chunk-THKY7CD7.js → chunk-PZ4I4JE2.js} +134 -29
  69. package/dist/{chunk-SROCI7ZU.js → chunk-QQ7EKM72.js} +5 -5
  70. package/dist/{chunk-QCTRSGHQ.js → chunk-R7LNVMCS.js} +91 -53
  71. package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
  72. package/dist/chunk-RKKLTLYB.js +45 -0
  73. package/dist/{chunk-OB5HIGJY.js → chunk-RKRLDWD3.js} +4 -1
  74. package/dist/{chunk-DJNLUABN.js → chunk-S4COXYBG.js} +588 -32
  75. package/dist/{chunk-3HAPLH5M.js → chunk-T3Z6VAAF.js} +172 -11
  76. package/dist/{chunk-FOT2FX5J.js → chunk-TD7UE2L5.js} +12 -10
  77. package/dist/{chunk-UUANF5CR.js → chunk-TEO2TLVN.js} +856 -967
  78. package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
  79. package/dist/{chunk-EELBMBT6.js → chunk-VKBMFOYV.js} +74 -15
  80. package/dist/chunk-VO2LKSTM.js +165 -0
  81. package/dist/{chunk-5C77SEEY.js → chunk-VPTUJU4P.js} +3 -3
  82. package/dist/{chunk-WEH5XRJQ.js → chunk-WIE7ZOSW.js} +2 -2
  83. package/dist/{chunk-J7PIKKWC.js → chunk-WXCJ7VME.js} +8 -8
  84. package/dist/{chunk-4DGYLA73.js → chunk-XDOQXGFO.js} +22 -7
  85. package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
  86. package/dist/{chunk-AB4XIIVB.js → chunk-YKOFT37S.js} +6 -6
  87. package/dist/chunk-YSEHGPCT.js +127 -0
  88. package/dist/{chunk-HFSBBKSQ.js → chunk-YW7UVM5V.js} +138 -3
  89. package/dist/cli/index.js +32 -32
  90. package/dist/{clio-WBVQEBKO.js → clio-LT5V7SSZ.js} +9 -9
  91. package/dist/{code-nav-FGGFIE7L.js → code-nav-LMW275PA.js} +5 -5
  92. package/dist/codewiki/build-worker.js +4 -4
  93. package/dist/{components-F7OEATSO.js → components-ZFA3SAER.js} +8 -8
  94. package/dist/{config-TRBL3RCF.js → config-RXS5T3JT.js} +98 -65
  95. package/dist/{configure-OLCVPHNM.js → configure-2WYWSCSD.js} +26 -22
  96. package/dist/{context-MJIJ6GOX.js → context-I3BTOTCS.js} +12 -12
  97. package/dist/{context-XEWE3MOJ.js → context-MVOORGMF.js} +54 -47
  98. package/dist/{context-WFPKQSM6.js → context-PALKKQYL.js} +28 -28
  99. package/dist/{context-clear-KNOS2JPB.js → context-clear-N2WOYZ2K.js} +53 -46
  100. package/dist/{context-index-SSR5ECNE.js → context-index-HNG3MOME.js} +6 -6
  101. package/dist/{context-working-set-EUXAZI6N.js → context-working-set-MIEVECVZ.js} +17 -18
  102. package/dist/{dispatch-runner-B7MTOVKL.js → dispatch-runner-VVA4SRRH.js} +90 -61
  103. package/dist/{docs-FLJTIDSE.js → docs-7LQ23DLM.js} +8 -8
  104. package/dist/doctor-TWBWFK5V.js +165 -0
  105. package/dist/eval-IJ5VEZDJ.js +4483 -0
  106. package/dist/{evidence-JZNBUOQZ.js → evidence-L5APPXNV.js} +68 -61
  107. package/dist/{evolve-FJVC4KKI.js → evolve-RGNKFJ52.js} +47 -40
  108. package/dist/{extensions-IQL36S7K.js → extensions-7WYWUX5A.js} +13 -7
  109. package/dist/{fleet-BDKYJFCP.js → fleet-6CNVBZZP.js} +113 -76
  110. package/dist/{fleet-commands-ZFIWZSB3.js → fleet-commands-L2SXSYEI.js} +10 -10
  111. package/dist/{fleet-graph-Y6HPXIVF.js → fleet-graph-2J3OOIPO.js} +17 -15
  112. package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-CZRJ4JP5.js} +5 -6
  113. package/dist/{fleet-validate-BIYREGIK.js → fleet-validate-C5RI6DP7.js} +20 -19
  114. package/dist/{init-LQUB5COQ.js → init-VBN2ACVA.js} +70 -63
  115. package/dist/{library-NJAHIGG4.js → library-JHGUMLY2.js} +22 -20
  116. package/dist/{memory-OG6HOYKM.js → memory-K4OQIYWG.js} +49 -42
  117. package/dist/{models-5ZG5XY7J.js → models-2NCZUWDD.js} +35 -29
  118. package/dist/{monitor-TJ7AMTGB.js → monitor-MMVTJABD.js} +64 -45
  119. package/dist/{orchestrator-WZYB54DM.js → orchestrator-ZKBPCHW6.js} +1971 -520
  120. package/dist/{paths-XUC7GS6E.js → paths-DBXMZMDU.js} +5 -5
  121. package/dist/registry-LG64LTF4.js +11 -0
  122. package/dist/{reset-PXQT45IY.js → reset-DD5JGOY3.js} +11 -11
  123. package/dist/{run-FQ74YF62.js → run-QEGNX7FL.js} +89 -83
  124. package/dist/{share-FW7SVCL3.js → share-JKD3BQMW.js} +20 -18
  125. package/dist/{skills-7E7IRB3R.js → skills-LMQIKDOZ.js} +23 -21
  126. package/dist/{skills-eval-LI75W6OK.js → skills-eval-I7X2774U.js} +59 -52
  127. package/dist/{steer-GGWFUJUD.js → steer-CF5TDANS.js} +3 -3
  128. package/dist/support-I7LOJLIF.js +38 -0
  129. package/dist/{targets-4CIFKCTW.js → targets-RUSR6B5Z.js} +77 -42
  130. package/dist/{terminal-lease-WUZY7ZV5.js → terminal-lease-QYVORFR4.js} +6 -4
  131. package/dist/{trace-PNCASAXC.js → trace-ODOQIVIW.js} +61 -6
  132. package/dist/{uninstall-7FV7IP4E.js → uninstall-ZJF5H5ZN.js} +8 -8
  133. package/dist/{upgrade-K2HVIVMQ.js → upgrade-XANW3FXB.js} +29 -26
  134. package/dist/{usage-GTZELZQX.js → usage-4H7ZRXQT.js} +110 -61
  135. package/dist/{verifiers-RLAHT27O.js → verifiers-UZXNBZEB.js} +13 -13
  136. package/dist/{verify-BX3BRKH5.js → verify-BVKWTNDL.js} +9 -9
  137. package/dist/{wiki-generate-ASIFASCN.js → wiki-generate-MY7WV2QI.js} +76 -69
  138. package/dist/worker/entry.js +69 -66
  139. package/docs/alcf-provider.md +1 -1
  140. package/docs/architecture.md +1 -1
  141. package/docs/artifact-versions.md +11 -5
  142. package/docs/built-in-agents.md +1 -1
  143. package/docs/capacity-and-scheduling.md +23 -2
  144. package/docs/commands-and-modes.md +2 -2
  145. package/docs/configuration-and-targets.md +37 -5
  146. package/docs/context-engine.md +63 -4
  147. package/docs/documentation-coverage.md +3 -3
  148. package/docs/documentation-guide.md +1 -1
  149. package/docs/environment-variables.md +2 -0
  150. package/docs/eval-runner.md +262 -11
  151. package/docs/evals-internal.md +72 -2
  152. package/docs/evidence-and-memory.md +77 -12
  153. package/docs/evolution.md +1 -1
  154. package/docs/extensions-and-sharing.md +3 -1
  155. package/docs/fleet-dispatch.md +34 -9
  156. package/docs/glossary.md +21 -1
  157. package/docs/installation-and-lifecycle.md +1 -1
  158. package/docs/middleware-and-components.md +1 -1
  159. package/docs/model-catalog.md +1 -1
  160. package/docs/observability.md +54 -3
  161. package/docs/proactive-memory.md +127 -14
  162. package/docs/prompt-envelope-and-tools.md +22 -2
  163. package/docs/provider-adapter-cookbook.md +1 -1
  164. package/docs/release-cut-checklist.md +60 -41
  165. package/docs/safety-model.md +1 -1
  166. package/docs/scientific-validation.md +1 -1
  167. package/docs/skills-marketplace.md +1 -1
  168. package/docs/tool-usage.md +1 -1
  169. package/docs/trace-store.md +1 -1
  170. package/docs/troubleshooting.md +87 -0
  171. package/docs/tui-design.md +1 -1
  172. package/docs/worker-dispatch-mechanics.md +1 -1
  173. package/package.json +2 -2
  174. package/src/cli/agents.ts +1 -1
  175. package/src/cli/argv.ts +5 -0
  176. package/src/cli/config-inspect.ts +33 -6
  177. package/src/cli/config.ts +1 -1
  178. package/src/cli/configure.ts +107 -23
  179. package/src/cli/doctor-state-size.ts +82 -0
  180. package/src/cli/doctor.ts +7 -1
  181. package/src/cli/eval.ts +80 -16
  182. package/src/cli/evidence.ts +30 -25
  183. package/src/cli/extensions.ts +5 -1
  184. package/src/cli/fleet-preflight.ts +2 -12
  185. package/src/cli/fleet.ts +32 -3
  186. package/src/cli/shared.ts +1 -0
  187. package/src/cli/targets.ts +45 -11
  188. package/src/cli/trace.ts +63 -4
  189. package/src/cli/usage.ts +63 -14
  190. package/src/cli/validate-model.ts +60 -5
  191. package/src/core/bus-events.ts +54 -1
  192. package/src/core/cache-telemetry.ts +42 -0
  193. package/src/core/commit-attribution.ts +4 -4
  194. package/src/core/config.ts +18 -0
  195. package/src/core/defaults.ts +36 -6
  196. package/src/core/endpoint-key.ts +27 -0
  197. package/src/core/path-boundary.ts +100 -0
  198. package/src/core/residency-target-key.ts +25 -0
  199. package/src/core/response-schema.ts +36 -2
  200. package/src/domains/agents/extension.ts +2 -11
  201. package/src/domains/agents/fleet-contract.ts +30 -12
  202. package/src/domains/agents/recipe.ts +7 -1
  203. package/src/domains/agents/registry.ts +73 -5
  204. package/src/domains/agents/result-contract.ts +128 -17
  205. package/src/domains/agents/write-boundary.ts +15 -50
  206. package/src/domains/config/classify.ts +3 -0
  207. package/src/domains/context/codewiki/coordinator.ts +12 -4
  208. package/src/domains/context/project-rules.ts +51 -1
  209. package/src/domains/dispatch/admission.ts +40 -3
  210. package/src/domains/dispatch/assignment-reconcile.ts +22 -5
  211. package/src/domains/dispatch/assignment-store.ts +151 -14
  212. package/src/domains/dispatch/capacity-lease.ts +98 -9
  213. package/src/domains/dispatch/contract.ts +26 -1
  214. package/src/domains/dispatch/delegation-plan.ts +2 -5
  215. package/src/domains/dispatch/execution-plan.ts +44 -4
  216. package/src/domains/dispatch/execution-role.ts +9 -1
  217. package/src/domains/dispatch/extension.ts +309 -96
  218. package/src/domains/dispatch/fleet-run.ts +78 -4
  219. package/src/domains/dispatch/gate-role-prompts.ts +38 -0
  220. package/src/domains/dispatch/heartbeat.ts +32 -8
  221. package/src/domains/dispatch/index.ts +6 -1
  222. package/src/domains/dispatch/intent-requirements.ts +40 -0
  223. package/src/domains/dispatch/intent.ts +84 -8
  224. package/src/domains/dispatch/orphan-recovery.ts +5 -0
  225. package/src/domains/dispatch/path-scope.ts +370 -0
  226. package/src/domains/dispatch/receipt-integrity.ts +2 -1
  227. package/src/domains/dispatch/reservation-store.ts +116 -8
  228. package/src/domains/dispatch/state.ts +4 -0
  229. package/src/domains/dispatch/types.ts +14 -7
  230. package/src/domains/dispatch/validation.ts +6 -3
  231. package/src/domains/dispatch/worker-spawn.ts +25 -11
  232. package/src/domains/dispatch/write-boundary-enforcer.ts +62 -0
  233. package/src/domains/dispatch/write-boundary.ts +262 -22
  234. package/src/domains/eval/artifacts/store.ts +62 -0
  235. package/src/domains/eval/compare/behavioral.ts +224 -0
  236. package/src/domains/eval/compare/compare.ts +355 -2
  237. package/src/domains/eval/compare/envelope.ts +128 -0
  238. package/src/domains/eval/compare/gates.ts +24 -6
  239. package/src/domains/eval/compare/thresholds.ts +30 -3
  240. package/src/domains/eval/execution-provenance.ts +240 -0
  241. package/src/domains/eval/metrics/aggregate.ts +136 -0
  242. package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
  243. package/src/domains/eval/metrics/evidence.ts +79 -2
  244. package/src/domains/eval/metrics/tracked.ts +413 -0
  245. package/src/domains/eval/provenance.ts +117 -0
  246. package/src/domains/eval/reports/comparison.ts +128 -0
  247. package/src/domains/eval/reports/junit.ts +17 -3
  248. package/src/domains/eval/reports/markdown.ts +3 -3
  249. package/src/domains/eval/reports/text.ts +14 -0
  250. package/src/domains/eval/run-compare.ts +20 -0
  251. package/src/domains/eval/runners/clio-run.ts +139 -2
  252. package/src/domains/eval/runners/external-command.ts +28 -3
  253. package/src/domains/eval/schema/adapter.ts +111 -0
  254. package/src/domains/eval/schema/artifact.ts +20 -0
  255. package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
  256. package/src/domains/eval/schema/behavioral.ts +520 -0
  257. package/src/domains/eval/schema/execution-envelope.ts +194 -0
  258. package/src/domains/eval/schema/serving.ts +74 -0
  259. package/src/domains/eval/schema/suite.ts +38 -8
  260. package/src/domains/eval/schema/validate.ts +58 -3
  261. package/src/domains/eval/schema/verdict.ts +237 -0
  262. package/src/domains/eval/suites/resolve.ts +2 -0
  263. package/src/domains/eval/suites/run.ts +264 -33
  264. package/src/domains/eval/verifiers/command.ts +2 -1
  265. package/src/domains/eval/workspaces/temp-copy.ts +145 -13
  266. package/src/domains/evidence/build.ts +68 -21
  267. package/src/domains/evidence/eval.ts +2 -12
  268. package/src/domains/evidence/findings-markdown.ts +33 -0
  269. package/src/domains/evidence/index.ts +21 -0
  270. package/src/domains/evidence/provenance.ts +46 -11
  271. package/src/domains/evidence/run-trust.ts +7 -113
  272. package/src/domains/evidence/trust-projection.ts +274 -0
  273. package/src/domains/evidence/trust-status.ts +145 -17
  274. package/src/domains/evidence/types.ts +4 -0
  275. package/src/domains/extensions/compatibility.ts +285 -0
  276. package/src/domains/extensions/discovery.ts +126 -4
  277. package/src/domains/extensions/resources.ts +21 -9
  278. package/src/domains/extensions/state.ts +18 -5
  279. package/src/domains/extensions/types.ts +6 -1
  280. package/src/domains/lifecycle/doctor.ts +209 -2
  281. package/src/domains/memory/index.ts +14 -0
  282. package/src/domains/memory/task-bank-promotion.ts +64 -0
  283. package/src/domains/memory/task-memory-policy.ts +77 -8
  284. package/src/domains/memory/task-memory-spend.ts +131 -0
  285. package/src/domains/memory/task-memory-status.ts +7 -0
  286. package/src/domains/memory/task-memory-telemetry.ts +2 -0
  287. package/src/domains/middleware/index.ts +1 -0
  288. package/src/domains/middleware/memory-intervention.ts +69 -5
  289. package/src/domains/middleware/memory-step-endpoint.ts +71 -0
  290. package/src/domains/observability/background-memory-usage.ts +140 -0
  291. package/src/domains/observability/cost.ts +1 -1
  292. package/src/domains/observability/index.ts +7 -0
  293. package/src/domains/observability/out-of-turn-usage.ts +51 -2
  294. package/src/domains/observability/trace-store.ts +192 -2
  295. package/src/domains/prompts/compiler.ts +100 -13
  296. package/src/domains/prompts/contract.ts +3 -5
  297. package/src/domains/providers/endpoint-capacity.ts +96 -0
  298. package/src/domains/providers/extension.ts +30 -2
  299. package/src/domains/providers/index.ts +10 -0
  300. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
  301. package/src/domains/providers/runtime-resolution.ts +8 -1
  302. package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
  303. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
  304. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  305. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
  306. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
  307. package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
  308. package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
  309. package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
  310. package/src/domains/providers/types/capability-flags.ts +2 -0
  311. package/src/domains/providers/types/target-descriptor.ts +2 -0
  312. package/src/domains/resources/common-loader.ts +3 -0
  313. package/src/domains/resources/prompts/loader.ts +184 -17
  314. package/src/domains/safety/call-target.ts +52 -0
  315. package/src/domains/safety/policy-engine.ts +5 -5
  316. package/src/domains/safety/run-effects.ts +96 -2
  317. package/src/domains/safety/scope.ts +7 -12
  318. package/src/domains/session/context-accounting.ts +52 -1
  319. package/src/domains/session/context-ledger.ts +37 -13
  320. package/src/domains/session/index.ts +6 -0
  321. package/src/domains/session/prompt-cache.ts +140 -0
  322. package/src/domains/session/prompt-manifest.ts +42 -0
  323. package/src/engine/acp/adapter.ts +18 -3
  324. package/src/engine/acp/server.ts +4 -1
  325. package/src/engine/ai.ts +35 -0
  326. package/src/engine/apis/llamacpp-residency.ts +55 -3
  327. package/src/engine/apis/lmstudio.ts +25 -5
  328. package/src/engine/apis/ollama-native.ts +2 -1
  329. package/src/engine/apis/openai-completions.ts +80 -17
  330. package/src/engine/apis/residency-lock.ts +3 -1
  331. package/src/engine/apis/residency.ts +34 -1
  332. package/src/engine/prompt-templates.ts +18 -1
  333. package/src/engine/provider-payload.ts +29 -1
  334. package/src/engine/worker-runtime.ts +6 -3
  335. package/src/entry/orchestrator.ts +176 -30
  336. package/src/interactive/chat-loop-messages.ts +26 -7
  337. package/src/interactive/chat-loop.ts +318 -41
  338. package/src/interactive/chat-panel.ts +62 -8
  339. package/src/interactive/clio-editor.ts +45 -8
  340. package/src/interactive/context-activity.ts +5 -1
  341. package/src/interactive/context-meter.ts +1 -1
  342. package/src/interactive/context-overlay.ts +40 -10
  343. package/src/interactive/cost-overlay.ts +64 -6
  344. package/src/interactive/dispatch-board.ts +127 -5
  345. package/src/interactive/fleet-run-preview.ts +41 -15
  346. package/src/interactive/handoff-round.ts +41 -2
  347. package/src/interactive/interactive-application.ts +24 -1
  348. package/src/interactive/interactive-event-projection.ts +14 -0
  349. package/src/interactive/interactive-input-runtime.ts +8 -0
  350. package/src/interactive/interactive-presentation.ts +4 -0
  351. package/src/interactive/interactive-shell.ts +20 -17
  352. package/src/interactive/interactive-slash-runtime.ts +27 -4
  353. package/src/interactive/memory-overlay.ts +8 -0
  354. package/src/interactive/mutation-preview.ts +295 -0
  355. package/src/interactive/overlay-general-openers.ts +16 -0
  356. package/src/interactive/overlay-key-routing.ts +38 -0
  357. package/src/interactive/overlay-lifecycle.ts +38 -5
  358. package/src/interactive/overlay-permission-lifecycle.ts +22 -2
  359. package/src/interactive/overlay-session-lifecycle.ts +73 -9
  360. package/src/interactive/overlays/ask-user.ts +91 -19
  361. package/src/interactive/overlays/help-reference.ts +4 -0
  362. package/src/interactive/overlays/prompts.ts +11 -1
  363. package/src/interactive/overlays/settings.ts +176 -48
  364. package/src/interactive/permission-hint.ts +34 -2
  365. package/src/interactive/permission-overlay.ts +159 -9
  366. package/src/interactive/prewarm.ts +197 -0
  367. package/src/interactive/render-trace.ts +162 -15
  368. package/src/interactive/renderers/tool-execution.ts +4 -0
  369. package/src/interactive/side-question.ts +58 -1
  370. package/src/interactive/slash-commands.ts +7 -2
  371. package/src/interactive/status/controller.ts +11 -0
  372. package/src/interactive/status/state-machine.ts +54 -2
  373. package/src/interactive/status/types.ts +7 -0
  374. package/src/interactive/terminal-lease.ts +2 -0
  375. package/src/interactive/turn-context.ts +299 -31
  376. package/src/interactive/turn-persistence.ts +14 -4
  377. package/src/interactive/turn-prewarm.ts +364 -0
  378. package/src/interactive/turn-queues.ts +7 -4
  379. package/src/interactive/turn-runtime.ts +8 -1
  380. package/src/interactive/turn-state.ts +23 -0
  381. package/src/interactive/view/artifacts.ts +42 -9
  382. package/src/interactive/view/view-overlay.ts +43 -6
  383. package/src/interactive/worker-receipts.ts +14 -2
  384. package/src/interactive/worker-stream.ts +8 -0
  385. package/src/tools/ask-user.ts +43 -2
  386. package/src/tools/dispatch-admission.ts +12 -13
  387. package/src/tools/dispatch-arguments.ts +27 -0
  388. package/src/tools/dispatch-plan.ts +46 -9
  389. package/src/tools/dispatch-runner.ts +48 -13
  390. package/src/tools/dispatch-scout.ts +1 -1
  391. package/src/tools/monitor.ts +13 -0
  392. package/src/tools/registry.ts +16 -0
  393. package/src/tools/worker-evidence.ts +19 -13
  394. package/src/worker/spec-contract.ts +2 -1
  395. package/dist/chunk-AOCYTWAV.js +0 -449
  396. package/dist/chunk-HWUFFB6L.js +0 -83
  397. package/dist/chunk-R346GLFC.js +0 -31
  398. package/dist/chunk-ZGH7FGS5.js +0 -1079
  399. package/dist/doctor-RN4YKO2X.js +0 -87
  400. package/dist/eval-RUBJVSNQ.js +0 -2557
@@ -827,9 +827,14 @@ function resolveRowSize(value, termHeight) {
827
827
 
828
828
  // src/interactive/permission-hint.ts
829
829
  init_esm_shims();
830
- function permissionHintEntries(composerHasDraft = false) {
830
+ var MUTATION_PREVIEW_KEY = "v";
831
+ function permissionHintEntries(composerHasDraft = false, inspection = "none") {
831
832
  return [
832
833
  composerHasDraft ? { key: "Backspace", verb: "clear the draft to allow", short: "clear draft", critical: true } : { key: "Enter", verb: "allow once", short: "allow", critical: true },
834
+ ...inspection === "none" ? [] : inspection === "open" ? [
835
+ { key: "\u2191\u2193", verb: "scroll", critical: false },
836
+ { key: MUTATION_PREVIEW_KEY, verb: "hide mutation", short: "hide", critical: false }
837
+ ] : [{ key: MUTATION_PREVIEW_KEY, verb: "inspect mutation", short: "inspect", critical: false }],
833
838
  { key: "s", verb: "stop turn", short: "stop", critical: true },
834
839
  // With a draft, deny and stop are the only immediate answers, so Esc
835
840
  // outranks the narrowing that would otherwise drop it first.
@@ -841,6 +846,8 @@ function permissionHintEntries(composerHasDraft = false) {
841
846
  var REVERSE_VIDEO_BLANK = `${String.fromCharCode(27)}[7m ${String.fromCharCode(27)}[0m`;
842
847
  var EMPTY_PROMPT = "Ask Clio\u2026 / for commands";
843
848
  var CONFIRM_PROMPT = "A parked call is waiting for your decision";
849
+ var PREPARING_PROMPT = "Clio has your prompt and is preparing the turn";
850
+ var COMPACTING_PROMPT = "Clio has your prompt and is compacting the context first";
844
851
  var MIN_HINT_WIDTH = 60;
845
852
  function hasScrollIndicator(line) {
846
853
  const stripped = stripTerminalSequences(line);
@@ -870,7 +877,12 @@ function styledRailLabel(theme, chrome) {
870
877
  }
871
878
  function composerMode(chrome, text) {
872
879
  if (chrome.isAwaitingApproval?.() ?? false) return "CONFIRM";
873
- if (!(chrome.isStreaming?.() ?? false)) return "MESSAGE";
880
+ if (!(chrome.isStreaming?.() ?? false)) {
881
+ const preparation = chrome.getTurnPreparation?.() ?? "idle";
882
+ if (preparation === "compacting") return "COMPACTING";
883
+ if (preparation === "preparing") return "PREPARING";
884
+ return "MESSAGE";
885
+ }
874
886
  const willSteer = chrome.willEnterSteer?.(text) ?? text.trim().length > 0;
875
887
  return willSteer ? "STEER" : "FOLLOW-UP";
876
888
  }
@@ -880,14 +892,20 @@ function lowerRailHint(theme, chrome) {
880
892
  `${chrome.getSubmitKeyLabel?.() ?? "Enter"} send \xB7 ${chrome.getNewlineKeyLabel?.() ?? "Shift+Enter"} newline`
881
893
  );
882
894
  }
883
- function confirmRailHint(theme, width, hasDraft) {
884
- return theme.fg("warning", fitHintEntries(permissionHintEntries(hasDraft), Math.max(1, width - 3)));
895
+ function confirmRailHint(theme, width, hasDraft, inspection) {
896
+ return theme.fg("warning", fitHintEntries(permissionHintEntries(hasDraft, inspection), Math.max(1, width - 3)));
885
897
  }
886
898
  function modeToken(mode) {
887
- if (mode === "STEER") return "action";
899
+ if (mode === "STEER" || mode === "PREPARING" || mode === "COMPACTING") return "action";
888
900
  if (mode === "CONFIRM") return "warning";
889
901
  return "accentDeep";
890
902
  }
903
+ function emptyPromptFor(mode) {
904
+ if (mode === "CONFIRM") return CONFIRM_PROMPT;
905
+ if (mode === "PREPARING") return PREPARING_PROMPT;
906
+ if (mode === "COMPACTING") return COMPACTING_PROMPT;
907
+ return EMPTY_PROMPT;
908
+ }
891
909
  function renderEmptyPrompt(line, width, theme, text = EMPTY_PROMPT) {
892
910
  const cursorAt = line.indexOf(REVERSE_VIDEO_BLANK);
893
911
  if (cursorAt < 0) return line;
@@ -931,12 +949,12 @@ var ClioEditor = class extends Editor {
931
949
  });
932
950
  }
933
951
  if (text.length === 0 && lines[1]) {
934
- lines[1] = renderEmptyPrompt(lines[1], safeWidth, theme, mode === "CONFIRM" ? CONFIRM_PROMPT : EMPTY_PROMPT);
952
+ lines[1] = renderEmptyPrompt(lines[1], safeWidth, theme, emptyPromptFor(mode));
935
953
  }
936
954
  const bottomRail = findBottomRail(lines, safeWidth);
937
955
  if (bottomRail >= 0 && mode === "CONFIRM") {
938
956
  lines[bottomRail] = rule(theme, safeWidth, {
939
- right: confirmRailHint(theme, safeWidth, text.length > 0),
957
+ right: confirmRailHint(theme, safeWidth, text.length > 0, this.chrome.getPermissionInspection?.() ?? "none"),
940
958
  fillToken: "frameStrong",
941
959
  rightRaw: true,
942
960
  rightTail: theme.style("frameStrong", "\u2500", { bold: true })
@@ -977,10 +995,49 @@ init_esm_shims();
977
995
 
978
996
  // src/interactive/render-trace.ts
979
997
  init_esm_shims();
980
- import { mkdirSync, writeFileSync } from "node:fs";
998
+ import { mkdirSync, readdirSync, rmSync, writeFileSync } from "node:fs";
981
999
  import { appendFile } from "node:fs/promises";
982
- import { dirname } from "node:path";
1000
+ import { dirname, join } from "node:path";
983
1001
  var RENDER_TRACE_VERSION = 2;
1002
+ var INPUT_WEDGE_RING_CAPACITY = 256;
1003
+ var INPUT_WEDGE_DUMP_DIRNAME = "input-wedge";
1004
+ var INPUT_WEDGE_DUMP_RETAINED = 5;
1005
+ function createRing(capacity) {
1006
+ const slots = [];
1007
+ let next = 0;
1008
+ return {
1009
+ push(value) {
1010
+ if (slots.length < capacity) slots.push(value);
1011
+ else slots[next] = value;
1012
+ next = (next + 1) % capacity;
1013
+ },
1014
+ toArray() {
1015
+ if (slots.length < capacity) return [...slots];
1016
+ return [...slots.slice(next), ...slots.slice(0, next)];
1017
+ }
1018
+ };
1019
+ }
1020
+ function classifyInputWedge(inputIngress, frames) {
1021
+ const newest = [...inputIngress].reverse().find((record) => record.visualExpected) ?? inputIngress.at(-1);
1022
+ if (newest === void 0) return "no-input-recorded";
1023
+ return frames.some((frame2) => frame2.inputHighWater >= newest.inputSeq) ? "input-committed" : "input-not-committed";
1024
+ }
1025
+ function writeInputWedgeDump(stateDir, snapshot) {
1026
+ const directory = join(stateDir, INPUT_WEDGE_DUMP_DIRNAME);
1027
+ mkdirSync(directory, { recursive: true });
1028
+ const stamp = new Date(snapshot.atEpochMs).toISOString().replace(/[:.]/gu, "-");
1029
+ const path = join(directory, `${stamp}-${snapshot.pid}.json`);
1030
+ writeFileSync(path, `${JSON.stringify(snapshot, null, 2)}
1031
+ `, "utf8");
1032
+ try {
1033
+ const existing = readdirSync(directory).filter((name) => name.endsWith(".json")).sort();
1034
+ for (const name of existing.slice(0, Math.max(0, existing.length - INPUT_WEDGE_DUMP_RETAINED))) {
1035
+ rmSync(join(directory, name), { force: true });
1036
+ }
1037
+ } catch {
1038
+ }
1039
+ return path;
1040
+ }
984
1041
  function createAsyncTraceWriter(path, options = {}) {
985
1042
  const maxRecords = options.maxRecords ?? 4096;
986
1043
  const batchRecords = options.batchRecords ?? 128;
@@ -1073,11 +1130,16 @@ function renderTracePath(env = process.env) {
1073
1130
  return raw && raw.length > 0 ? raw : null;
1074
1131
  }
1075
1132
  function createRenderTrace(path, now = () => performance.now(), writerOptions = {}) {
1076
- mkdirSync(dirname(path), { recursive: true });
1077
- writeFileSync(path, "", "utf8");
1133
+ if (path !== null) {
1134
+ mkdirSync(dirname(path), { recursive: true });
1135
+ writeFileSync(path, "", "utf8");
1136
+ }
1078
1137
  const openedAt = now();
1138
+ const openedAtEpochMs = Date.now();
1079
1139
  const at = () => rounded(now() - openedAt);
1080
- const writer = createAsyncTraceWriter(path, { ...writerOptions, recordTime: at });
1140
+ const writer = path === null ? null : createAsyncTraceWriter(path, { ...writerOptions, recordTime: at });
1141
+ const inputRing = createRing(INPUT_WEDGE_RING_CAPACITY);
1142
+ const frameRing = createRing(INPUT_WEDGE_RING_CAPACITY);
1081
1143
  let frameSeq = 0;
1082
1144
  let writeSeq = 0;
1083
1145
  let eventSeq = 0;
@@ -1093,7 +1155,7 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1093
1155
  let firstCommitDelivered = false;
1094
1156
  const ranges = /* @__PURE__ */ new Map();
1095
1157
  const pendingDrains = /* @__PURE__ */ new Map();
1096
- writer.enqueue({ type: "trace_start", version: RENDER_TRACE_VERSION, at: 0 });
1158
+ writer?.enqueue({ type: "trace_start", version: RENDER_TRACE_VERSION, at: 0 });
1097
1159
  const trace = {
1098
1160
  recordPanelRender(metrics) {
1099
1161
  pendingPanel = metrics;
@@ -1104,12 +1166,13 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1104
1166
  },
1105
1167
  recordVisibleEvent(fields) {
1106
1168
  eventSeq += 1;
1169
+ if (writer === null) return eventSeq;
1107
1170
  const key = `${generation}:${fields.kind}:${fields.contentIndex}`;
1108
1171
  const previous = ranges.get(key) ?? { codeUnits: 0, graphemes: 0 };
1109
1172
  const graphemes = graphemeCount(fields.delta);
1110
1173
  const next = { codeUnits: previous.codeUnits + fields.delta.length, graphemes: previous.graphemes + graphemes };
1111
1174
  ranges.set(key, next);
1112
- writer.enqueue({
1175
+ writer?.enqueue({
1113
1176
  type: "event_ingress",
1114
1177
  version: RENDER_TRACE_VERSION,
1115
1178
  eventSeq,
@@ -1127,7 +1190,7 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1127
1190
  },
1128
1191
  recordQueue(sequence, action) {
1129
1192
  queueDepth = Math.max(0, queueDepth + (action === "admit" ? 1 : -1));
1130
- writer.enqueue({
1193
+ writer?.enqueue({
1131
1194
  type: "queue",
1132
1195
  version: RENDER_TRACE_VERSION,
1133
1196
  eventSeq: sequence,
@@ -1138,7 +1201,7 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1138
1201
  },
1139
1202
  recordPanelApplied(sequence) {
1140
1203
  panelHighWater = Math.max(panelHighWater, sequence);
1141
- writer.enqueue({
1204
+ writer?.enqueue({
1142
1205
  type: "panel",
1143
1206
  version: RENDER_TRACE_VERSION,
1144
1207
  eventSeq: sequence,
@@ -1149,7 +1212,7 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1149
1212
  recordInputIngress(action, bytes, visualExpected = action !== "no-visual-change") {
1150
1213
  inputSeq += 1;
1151
1214
  if (visualExpected) inputHighWater = inputSeq;
1152
- writer.enqueue({
1215
+ const record = {
1153
1216
  type: "input_ingress",
1154
1217
  version: RENDER_TRACE_VERSION,
1155
1218
  inputSeq,
@@ -1157,7 +1220,9 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1157
1220
  at: at(),
1158
1221
  bytes,
1159
1222
  visualExpected
1160
- });
1223
+ };
1224
+ inputRing.push(record);
1225
+ writer?.enqueue(record);
1161
1226
  return inputSeq;
1162
1227
  },
1163
1228
  beginFrame(fields) {
@@ -1205,8 +1270,9 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1205
1270
  },
1206
1271
  commits: frame2.commits
1207
1272
  };
1208
- writer.enqueue(record);
1273
+ writer?.enqueue(record);
1209
1274
  if (frame2.commits.length > 0) {
1275
+ frameRing.push(record);
1210
1276
  lastCommitAt = frame2.commits.at(-1)?.at ?? endAt;
1211
1277
  if (!firstCommitDelivered) {
1212
1278
  firstCommitDelivered = true;
@@ -1241,6 +1307,7 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1241
1307
  backpressured: !fields.returned
1242
1308
  };
1243
1309
  currentFrame?.commits.push(commit);
1310
+ if (writer === null) return writeSeq;
1244
1311
  writer.enqueue({ type: "terminal_write", version: RENDER_TRACE_VERSION, frameId, ...commit });
1245
1312
  if (!fields.returned) pendingDrains.set(writeSeq, { frameId, at: commit.at });
1246
1313
  return writeSeq;
@@ -1250,7 +1317,7 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1250
1317
  if (!pending) return;
1251
1318
  pendingDrains.delete(writeId);
1252
1319
  const drainAt = at();
1253
- writer.enqueue({
1320
+ writer?.enqueue({
1254
1321
  type: "terminal_drain",
1255
1322
  version: RENDER_TRACE_VERSION,
1256
1323
  writeId,
@@ -1263,7 +1330,28 @@ function createRenderTrace(path, now = () => performance.now(), writerOptions =
1263
1330
  onFirstFrameCommit(listener) {
1264
1331
  firstCommitListener = listener;
1265
1332
  },
1266
- close: () => writer.close()
1333
+ snapshotInputWedge() {
1334
+ const inputIngress = inputRing.toArray();
1335
+ const frames = frameRing.toArray();
1336
+ const nowAt = at();
1337
+ const lastIngressAt = inputIngress.at(-1)?.at;
1338
+ const lastFrame = frames.at(-1);
1339
+ const lastFrameCommitAt = lastFrame?.commits.at(-1)?.at ?? lastFrame?.endAt;
1340
+ return {
1341
+ version: RENDER_TRACE_VERSION,
1342
+ capacity: INPUT_WEDGE_RING_CAPACITY,
1343
+ pid: process.pid,
1344
+ openedAtEpochMs,
1345
+ atEpochMs: Date.now(),
1346
+ at: nowAt,
1347
+ classification: classifyInputWedge(inputIngress, frames),
1348
+ msSinceLastInputIngress: lastIngressAt === void 0 ? null : rounded(nowAt - lastIngressAt),
1349
+ msSinceLastCommittedFrame: lastFrameCommitAt === void 0 ? null : rounded(nowAt - lastFrameCommitAt),
1350
+ inputIngress,
1351
+ frames
1352
+ };
1353
+ },
1354
+ close: () => writer?.close() ?? Promise.resolve()
1267
1355
  };
1268
1356
  return trace;
1269
1357
  }
@@ -1490,20 +1578,18 @@ function createProcessInteractiveShell(options = {}) {
1490
1578
  let restoreRoot = null;
1491
1579
  let backpressure = null;
1492
1580
  let observedBackpressure = false;
1493
- if (tracePath) {
1494
- let candidate = null;
1495
- try {
1496
- candidate = createRenderTrace(tracePath);
1497
- restoreStdout = traceProcessStdout(candidate);
1498
- activeRenderTrace = candidate;
1499
- } catch {
1500
- restoreStdout?.();
1501
- restoreStdout = null;
1502
- void candidate?.close().catch(() => {
1503
- });
1504
- activeRenderTrace = null;
1505
- }
1506
- } else activeRenderTrace = null;
1581
+ let candidate = null;
1582
+ try {
1583
+ candidate = createRenderTrace(tracePath);
1584
+ restoreStdout = traceProcessStdout(candidate);
1585
+ activeRenderTrace = candidate;
1586
+ } catch {
1587
+ restoreStdout?.();
1588
+ restoreStdout = null;
1589
+ void candidate?.close().catch(() => {
1590
+ });
1591
+ activeRenderTrace = null;
1592
+ }
1507
1593
  const trace = activeRenderTrace;
1508
1594
  if (trace && options.onFirstFrameCommit) trace.onFirstFrameCommit(options.onFirstFrameCommit);
1509
1595
  let firstFrameDelivered = false;
@@ -2187,8 +2273,10 @@ export {
2187
2273
  formatRuntimeResolutionDiagnostic,
2188
2274
  runtimeResolutionDiagnosticLine,
2189
2275
  showClioOverlayFrame,
2276
+ MUTATION_PREVIEW_KEY,
2190
2277
  permissionHintEntries,
2191
2278
  ClioEditor,
2279
+ writeInputWedgeDump,
2192
2280
  getActiveRenderTrace,
2193
2281
  createProcessInteractiveShell,
2194
2282
  validateKeybindings,
@@ -2198,4 +2286,4 @@ export {
2198
2286
  formatPlatformKeybindingNotice,
2199
2287
  createKeybindingManager
2200
2288
  };
2201
- //# sourceMappingURL=chunk-5C3AQNDW.js.map
2289
+ //# sourceMappingURL=chunk-NNNWO6F2.js.map
@@ -4,14 +4,14 @@ import {
4
4
  listChecks,
5
5
  runProjectCheck,
6
6
  runScriptCheck
7
- } from "./chunk-PD3MESLB.js";
7
+ } from "./chunk-P3JGPQFL.js";
8
8
  import {
9
9
  BROWSER_MODES,
10
10
  maxOutputArg,
11
11
  prepareVerifyArguments,
12
12
  timeoutArg,
13
13
  verifyToolSurface
14
- } from "./chunk-JNXPYBB4.js";
14
+ } from "./chunk-CA42X6KT.js";
15
15
  import {
16
16
  escapeRegExp
17
17
  } from "./chunk-VG7TBQIY.js";
@@ -28,7 +28,7 @@ import {
28
28
  import {
29
29
  combineSafeOutput,
30
30
  runCommandVector
31
- } from "./chunk-D4MDIG46.js";
31
+ } from "./chunk-B5CSFE7B.js";
32
32
  import {
33
33
  init_esm_shims
34
34
  } from "./chunk-3R73A4XB.js";
@@ -633,4 +633,4 @@ var verifyTool = {
633
633
  export {
634
634
  verifyTool
635
635
  };
636
- //# sourceMappingURL=chunk-UFQ3F4FW.js.map
636
+ //# sourceMappingURL=chunk-NQ6UCCOD.js.map
@@ -0,0 +1,165 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-3R73A4XB.js";
5
+
6
+ // src/domains/providers/registry.ts
7
+ init_esm_shims();
8
+ import { readdirSync, statSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { pathToFileURL } from "node:url";
11
+ var RUNTIME_KINDS = ["http", "sdk", "subprocess"];
12
+ var RUNTIME_AUTHS = ["api-key", "oauth", "aws-sdk", "vertex-adc", "claude-cli", "none"];
13
+ function createRuntimeRegistry() {
14
+ const byId = /* @__PURE__ */ new Map();
15
+ const canonical = /* @__PURE__ */ new Set();
16
+ const register = (desc) => {
17
+ const ids = [desc.id, ...desc.aliases ?? []];
18
+ const conflict = ids.find((id) => byId.has(id));
19
+ if (conflict) {
20
+ throw new Error(`runtime id '${conflict}' already registered`);
21
+ }
22
+ for (const id of ids) byId.set(id, desc);
23
+ canonical.add(desc.id);
24
+ };
25
+ const get = (id) => byId.get(id) ?? null;
26
+ const list = () => Array.from(canonical, (id) => byId.get(id)).filter((entry) => entry !== void 0);
27
+ const clear = () => {
28
+ byId.clear();
29
+ canonical.clear();
30
+ };
31
+ const loadFromDir = async (dir, beforeImport) => {
32
+ let entries;
33
+ try {
34
+ const stat = statSync(dir);
35
+ if (!stat.isDirectory()) return [];
36
+ entries = readdirSync(dir);
37
+ } catch {
38
+ return [];
39
+ }
40
+ const loaded = [];
41
+ for (const name of entries) {
42
+ if (!name.endsWith(".js")) continue;
43
+ const full = join(dir, name);
44
+ const desc = await importDescriptor(full, pathToFileURL(full).href, beforeImport);
45
+ if (desc === null) continue;
46
+ try {
47
+ register(desc);
48
+ loaded.push(desc.id);
49
+ } catch (err) {
50
+ process.stderr.write(`[providers] runtime plugin ${full} rejected: ${describeError(err)}
51
+ `);
52
+ }
53
+ }
54
+ return loaded;
55
+ };
56
+ const loadFromPackage = async (packageName, beforeImport) => {
57
+ let mod;
58
+ try {
59
+ await beforeImport?.();
60
+ mod = await import(packageName);
61
+ } catch (err) {
62
+ process.stderr.write(`[providers] runtime package ${packageName} failed to import: ${describeError(err)}
63
+ `);
64
+ return [];
65
+ }
66
+ const exported = mod.clioRuntimes;
67
+ if (!Array.isArray(exported)) {
68
+ process.stderr.write(`[providers] runtime package ${packageName} has no 'clioRuntimes' array export
69
+ `);
70
+ return [];
71
+ }
72
+ const loaded = [];
73
+ for (const candidate of exported) {
74
+ const validation = validateRuntimeDescriptor(candidate);
75
+ if (!validation.ok) {
76
+ process.stderr.write(
77
+ `[providers] runtime package ${packageName} exported an invalid descriptor: ${validation.reason}
78
+ `
79
+ );
80
+ continue;
81
+ }
82
+ try {
83
+ register(validation.descriptor);
84
+ loaded.push(validation.descriptor.id);
85
+ } catch (err) {
86
+ process.stderr.write(`[providers] runtime package ${packageName} id conflict: ${describeError(err)}
87
+ `);
88
+ }
89
+ }
90
+ return loaded;
91
+ };
92
+ return { register, get, list, clear, loadFromDir, loadFromPackage };
93
+ }
94
+ var singleton = null;
95
+ function getRuntimeRegistry() {
96
+ if (singleton === null) singleton = createRuntimeRegistry();
97
+ return singleton;
98
+ }
99
+ async function importDescriptor(file, href, beforeImport) {
100
+ let mod;
101
+ try {
102
+ await beforeImport?.();
103
+ mod = await import(href);
104
+ } catch (err) {
105
+ process.stderr.write(`[providers] runtime plugin ${file} failed to import: ${describeError(err)}
106
+ `);
107
+ return null;
108
+ }
109
+ const candidate = mod.default;
110
+ const validation = validateRuntimeDescriptor(candidate);
111
+ if (!validation.ok) {
112
+ process.stderr.write(
113
+ `[providers] runtime plugin ${file} has invalid default-export RuntimeDescriptor: ${validation.reason}
114
+ `
115
+ );
116
+ return null;
117
+ }
118
+ return validation.descriptor;
119
+ }
120
+ function validateRuntimeDescriptor(value) {
121
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
122
+ return { ok: false, reason: "descriptor must be an object" };
123
+ }
124
+ const v = value;
125
+ if (typeof v.id !== "string" || v.id.trim().length === 0) {
126
+ return { ok: false, reason: "id must be a non-empty string" };
127
+ }
128
+ if (v.aliases !== void 0 && (!Array.isArray(v.aliases) || v.aliases.some((alias) => typeof alias !== "string" || alias.trim().length === 0))) {
129
+ return { ok: false, reason: "aliases must be non-empty strings when present" };
130
+ }
131
+ if (typeof v.displayName !== "string" || v.displayName.trim().length === 0) {
132
+ return { ok: false, reason: "displayName must be a non-empty string" };
133
+ }
134
+ if (typeof v.kind !== "string" || !RUNTIME_KINDS.includes(v.kind)) {
135
+ return { ok: false, reason: `kind must be one of: ${RUNTIME_KINDS.join(", ")}` };
136
+ }
137
+ if (typeof v.apiFamily !== "string" || v.apiFamily.trim().length === 0) {
138
+ return { ok: false, reason: "apiFamily must be a non-empty string" };
139
+ }
140
+ if (typeof v.auth !== "string" || !RUNTIME_AUTHS.includes(v.auth)) {
141
+ return { ok: false, reason: `auth must be one of: ${RUNTIME_AUTHS.join(", ")}` };
142
+ }
143
+ if (typeof v.defaultCapabilities !== "object" || v.defaultCapabilities === null || Array.isArray(v.defaultCapabilities)) {
144
+ return { ok: false, reason: "defaultCapabilities must be an object" };
145
+ }
146
+ if (typeof v.synthesizeModel !== "function") {
147
+ return { ok: false, reason: "synthesizeModel must be a function" };
148
+ }
149
+ for (const field of ["probe", "probeModels", "complete", "infill", "embed", "rerank"]) {
150
+ if (v[field] !== void 0 && typeof v[field] !== "function") {
151
+ return { ok: false, reason: `${field} must be a function when present` };
152
+ }
153
+ }
154
+ return { ok: true, descriptor: value };
155
+ }
156
+ function describeError(err) {
157
+ if (err instanceof Error) return err.message;
158
+ return String(err);
159
+ }
160
+
161
+ export {
162
+ createRuntimeRegistry,
163
+ getRuntimeRegistry
164
+ };
165
+ //# sourceMappingURL=chunk-NUGM5KR6.js.map
@@ -1,16 +1,18 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  receiptResponseModelIdObservationLabel
4
- } from "./chunk-VREKEFLL.js";
4
+ } from "./chunk-D73KXYPF.js";
5
5
  import {
6
- adaptRunReceiptTrustStatus
7
- } from "./chunk-UUANF5CR.js";
6
+ adaptRunReceiptTrustStatus,
7
+ formatTrustAxes,
8
+ formatTrustSummary
9
+ } from "./chunk-MLOK6ZOS.js";
8
10
  import {
9
11
  formatBudgetPolicy,
10
12
  formatBudgetReasons,
11
13
  formatBudgetRequest,
12
14
  formatEffectiveBudget
13
- } from "./chunk-CEYBNUGC.js";
15
+ } from "./chunk-4H6ULJ3H.js";
14
16
  import {
15
17
  mentionsWorkerToolCallCap
16
18
  } from "./chunk-4ZG3XFUR.js";
@@ -73,9 +75,9 @@ function receiptActivityLabels(receipt, status) {
73
75
  }
74
76
  function receiptEvidenceLabels(receipt, verification, integrity) {
75
77
  const status = adaptRunReceiptTrustStatus({ ...receipt, verification }, { integrity });
76
- const canonical = canonicalTrustLabel(status);
78
+ const canonical = canonicalTrustLabels(status);
77
79
  if (!integrity.ok) {
78
- return [canonical, `receipt_integrity=FAILED reason=${JSON.stringify(integrity.reason)}`];
80
+ return [...canonical, `receipt_integrity=FAILED reason=${JSON.stringify(integrity.reason)}`];
79
81
  }
80
82
  const briefing = receipt.briefing === void 0 ? "briefing=none" : `briefing=bytes:${receipt.briefing.bytes} sha256:${receipt.briefing.contentHash}`;
81
83
  let projectContext = "project_context=absent";
@@ -91,7 +93,7 @@ function receiptEvidenceLabels(receipt, verification, integrity) {
91
93
  `budget_reason=${JSON.stringify(formatBudgetReasons(receipt.budget))}`
92
94
  ];
93
95
  return [
94
- canonical,
96
+ ...canonical,
95
97
  `receipt_integrity=verified/v${receipt.integrity.version}/${receipt.integrity.algorithm}`,
96
98
  `evidence_verification=${verification.state}/${verification.basis}`,
97
99
  `host_verification=${receipt.hostVerification?.status ?? "not_requested"}`,
@@ -103,16 +105,8 @@ function receiptEvidenceLabels(receipt, verification, integrity) {
103
105
  projectContext
104
106
  ];
105
107
  }
106
- function canonicalTrustLabel(status) {
107
- return [
108
- `trust_status=v${status.version}`,
109
- `artifactIntegrity:${status.artifactIntegrity.state}`,
110
- `validationGrounding:${status.validationGrounding.state}`,
111
- `independentReview:${status.independentReview.state}`,
112
- `contextProvenance:${status.contextProvenance.state}`,
113
- `autonomyEnforcement:${status.autonomyEnforcement.state}`,
114
- `completionEvidence:${status.completionEvidence.state}`
115
- ].join(" ");
108
+ function canonicalTrustLabels(status) {
109
+ return [`trust=${JSON.stringify(formatTrustSummary(status))}`, formatTrustAxes(status)];
116
110
  }
117
111
  function workerTextLabel(status) {
118
112
  switch (status.validationGrounding.state) {
@@ -122,6 +116,14 @@ function workerTextLabel(status) {
122
116
  return "reconnaissance output (advisory leads, not validation evidence):";
123
117
  case "unknown":
124
118
  return "worker claims (validation not observable at this layer):";
119
+ // The three remaining states were one label. The evidence bundle tells
120
+ // a failed check, an inferred claim, and no validation at all apart, so
121
+ // the terminal must too or it hands the operator a coarser verdict than
122
+ // the report for the same run.
123
+ case "failed":
124
+ return "worker claims (validation failed; a check ran and did not pass):";
125
+ case "ungrounded":
126
+ return "worker claims (inferred; validation claimed, none observed):";
125
127
  default:
126
128
  return "worker claims (unverified prose):";
127
129
  }
@@ -171,4 +173,4 @@ export {
171
173
  workerTextLabel,
172
174
  workerTextNonEvidenceNotices
173
175
  };
174
- //# sourceMappingURL=chunk-DMD2AGVS.js.map
176
+ //# sourceMappingURL=chunk-NZU6YDNV.js.map