@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
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-W6GROXXM.js";
15
15
  import {
16
16
  ceilChars
17
- } from "./chunk-GEYXPTRF.js";
17
+ } from "./chunk-AEYBF3TB.js";
18
18
  import {
19
19
  init_esm_shims
20
20
  } from "./chunk-3R73A4XB.js";
@@ -119,4 +119,4 @@ export {
119
119
  recallableRefListing,
120
120
  recallErrorMessage
121
121
  };
122
- //# sourceMappingURL=chunk-ZZMN5OM4.js.map
122
+ //# sourceMappingURL=chunk-MV2VUEJC.js.map
@@ -108,9 +108,9 @@ function enqueueWorkspace(cwd, task) {
108
108
  }
109
109
  function coordinateCodewikiWrite(cwd, select, options = {}) {
110
110
  const workspace = resolve(cwd);
111
- return enqueueWorkspace(
112
- workspace,
113
- () => withStateFileLock(codewikiPath(workspace), async () => {
111
+ return enqueueWorkspace(workspace, () => {
112
+ if (options.requireExisting && !existsSync(codewikiPath(workspace))) return Promise.resolve(null);
113
+ return withStateFileLock(codewikiPath(workspace), async () => {
114
114
  if (options.requireExisting && !existsSync(codewikiPath(workspace))) return null;
115
115
  const current = options.readCurrent?.(workspace) ?? readCodewiki(workspace);
116
116
  const request = await select(current, workspace);
@@ -121,8 +121,8 @@ function coordinateCodewikiWrite(cwd, select, options = {}) {
121
121
  if (wrote) writeCodewiki(workspace, worker.codewiki);
122
122
  await options.afterCommit?.(worker, workspace);
123
123
  return { codewiki: !worker.changed && current ? current : worker.codewiki, worker, wrote };
124
- })
125
- );
124
+ });
125
+ });
126
126
  }
127
127
  function coordinateCodewikiExclusive(cwd, task) {
128
128
  const workspace = resolve(cwd);
@@ -277,4 +277,4 @@ export {
277
277
  readClioState,
278
278
  writeClioState
279
279
  };
280
- //# sourceMappingURL=chunk-MVVUPGPW.js.map
280
+ //# sourceMappingURL=chunk-MXHC5QYU.js.map
@@ -1,23 +1,19 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  loadProjectVerifierCatalog
4
- } from "./chunk-GH5622CP.js";
4
+ } from "./chunk-A2NJGIB3.js";
5
5
  import {
6
- classify
7
- } from "./chunk-AOCYTWAV.js";
6
+ classify,
7
+ pathBoundaryCovers,
8
+ resolvePathBoundary
9
+ } from "./chunk-S4COXYBG.js";
8
10
  import {
9
11
  artifactDefaultPath,
10
- detectValidationCommand,
11
12
  extractCommandDeleteTargets,
12
13
  extractCommandWriteTargets,
13
14
  inlineShellScript,
14
- tokenizeShellLike,
15
- toolMutationPaths
15
+ tokenizeShellLike
16
16
  } from "./chunk-MV3K5QF2.js";
17
- import {
18
- isProjectVerifierCheckId,
19
- isVerificationScriptName
20
- } from "./chunk-UL3WSD3F.js";
21
17
  import {
22
18
  canonicalizeExistingPath
23
19
  } from "./chunk-ECH6PKUQ.js";
@@ -27,387 +23,20 @@ import {
27
23
  import {
28
24
  foreignAgentDirs
29
25
  } from "./chunk-IHXBNWMM.js";
26
+ import {
27
+ resolvePackageRoot
28
+ } from "./chunk-IWHMRKLL.js";
30
29
  import {
31
30
  require_dist
32
31
  } from "./chunk-APJ265NV.js";
33
32
  import {
34
33
  clioConfigDir
35
34
  } from "./chunk-BNAZZHFG.js";
36
- import {
37
- resolvePackageRoot
38
- } from "./chunk-IWHMRKLL.js";
39
35
  import {
40
36
  __toESM,
41
37
  init_esm_shims
42
38
  } from "./chunk-3R73A4XB.js";
43
39
 
44
- // src/domains/safety/finish-contract.ts
45
- init_esm_shims();
46
- var FINISH_CONTRACT_ADVISORY_MESSAGE = "[Clio Coder] finish-contract advisory: you changed files this turn without recording validation evidence or an explicit limitation. Run a verification command or state what could not be verified.";
47
- var DEFAULT_RECENT_ENTRY_LIMIT = 80;
48
- var LIMITATION_PATTERNS = [
49
- /\b(?:blocked by|blocker|blockers|unable to|not able to|could not|couldn't|cannot|can't)\b/i,
50
- /\b(?:did not|didn't|have not|haven't|has not|hasn't|was not able|wasn't able)\b/i,
51
- /\b(?:not complete|incomplete)\b/i,
52
- /\b(?:not|un)(?:\s|-)?(?:validated|verified|tested)\b/i,
53
- /^\s*Tests\s*:\s*(?:not run|not executed|not available|failed|blocked|skipped)\b/im,
54
- /^\s*Known gaps?\s*:\s*(?!\s*(?:none|no\b|n\/a|not applicable)\b).+/im,
55
- /\bremaining(?:\s+\w+){0,3}\s+(?:work|issue|issues|gap|gaps|blocker|blockers)\b/i
56
- ];
57
- function assessFinishContract(input) {
58
- const assistantText = input.assistantText.trim();
59
- const sessionEntries = input.sessionEntries ?? [];
60
- const assistantTurnId = input.assistantTurnId ?? null;
61
- const window = recentEntries(sessionEntries, assistantTurnId, input.recentEntryLimit ?? DEFAULT_RECENT_ENTRY_LIMIT);
62
- const mutatedPaths = mutatingReceipts(window);
63
- if (mutatedPaths.length === 0) {
64
- return { kind: "ok", reason: "no_mutation", evidence: [], mutatedPaths };
65
- }
66
- const evidence = collectValidationEvidence(window);
67
- if (evidence.length > 0) {
68
- return { kind: "ok", reason: "validation_evidence", evidence, mutatedPaths };
69
- }
70
- if (hasExplicitLimitation(assistantText)) {
71
- return { kind: "ok", reason: "explicit_limitation", evidence: [], mutatedPaths };
72
- }
73
- return {
74
- kind: "engage",
75
- reason: "unvalidated_mutation",
76
- message: FINISH_CONTRACT_ADVISORY_MESSAGE,
77
- evidence: [],
78
- mutatedPaths
79
- };
80
- }
81
- function hasExplicitLimitation(text) {
82
- const normalized = text.trim();
83
- if (normalized.length === 0) return false;
84
- return LIMITATION_PATTERNS.some((pattern) => pattern.test(normalized));
85
- }
86
- function mutatingReceipts(recent) {
87
- const mutationCalls = /* @__PURE__ */ new Map();
88
- const paths = [];
89
- const seen = /* @__PURE__ */ new Set();
90
- for (const entry of recent) {
91
- const bashMutation = bashExecutionMutationPaths(entry);
92
- if (bashMutation !== null) {
93
- for (const path4 of bashMutation) pushPath(paths, seen, path4);
94
- continue;
95
- }
96
- const call = mutatingToolCall(entry);
97
- if (call !== null) {
98
- mutationCalls.set(call.toolCallId, call);
99
- continue;
100
- }
101
- const resultId = successfulToolResultId(entry);
102
- if (resultId !== null) {
103
- const candidate = mutationCalls.get(resultId);
104
- if (candidate !== void 0) {
105
- for (const path4 of candidate.paths) pushPath(paths, seen, path4);
106
- }
107
- }
108
- }
109
- return paths;
110
- }
111
- function mutationPathsForTool(toolName, args) {
112
- if (toolName === ToolNames.Bash) {
113
- const command = typeof args?.command === "string" ? args.command : null;
114
- if (command === null) return [];
115
- return [...extractCommandWriteTargets(command), ...extractCommandDeleteTargets(command)];
116
- }
117
- return toolMutationPaths(toolName, args);
118
- }
119
- function mutatingToolCall(entry) {
120
- const record = asRecord(entry);
121
- if (record?.kind !== "message" || record.role !== "tool_call") return null;
122
- const payload = asRecord(record.payload);
123
- if (payload === null) return null;
124
- const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
125
- if (toolName === null) return null;
126
- const args = asRecord(payload.args ?? payload.arguments ?? payload.input) ?? void 0;
127
- const paths = mutationPathsForTool(toolName, args);
128
- if (paths.length === 0) return null;
129
- const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
130
- if (toolCallId === null) return null;
131
- return { toolCallId, paths };
132
- }
133
- function bashExecutionMutationPaths(entry) {
134
- const record = asRecord(entry);
135
- if (record?.kind !== "bashExecution") return null;
136
- if (typeof record.command !== "string") return null;
137
- if (record.cancelled === true || record.exitCode !== 0) return null;
138
- return [...extractCommandWriteTargets(record.command), ...extractCommandDeleteTargets(record.command)];
139
- }
140
- function pushPath(paths, seen, path4) {
141
- if (path4.length === 0 || seen.has(path4)) return;
142
- seen.add(path4);
143
- paths.push(path4);
144
- }
145
- function collectValidationEvidence(recent) {
146
- const evidence = [];
147
- const toolCalls = /* @__PURE__ */ new Map();
148
- const dispatchCalls = /* @__PURE__ */ new Map();
149
- const seen = /* @__PURE__ */ new Set();
150
- for (const entry of recent) {
151
- const protectedArtifact = protectedArtifactEvidence(entry);
152
- if (protectedArtifact !== null) {
153
- pushEvidence(evidence, seen, protectedArtifact);
154
- continue;
155
- }
156
- const call = bashValidationCall(entry);
157
- if (call !== null) {
158
- toolCalls.set(call.toolCallId, call);
159
- continue;
160
- }
161
- const typedValidationCall = validationToolCall(entry);
162
- if (typedValidationCall !== null) {
163
- toolCalls.set(typedValidationCall.toolCallId, typedValidationCall);
164
- continue;
165
- }
166
- const dispatchCall = dispatchEvidenceCall(entry);
167
- if (dispatchCall !== null) {
168
- dispatchCalls.set(dispatchCall.toolCallId, dispatchCall);
169
- continue;
170
- }
171
- const resultId = successfulToolResultId(entry);
172
- if (resultId !== null) {
173
- const dispatchCandidate = dispatchCalls.get(resultId);
174
- const dispatchReceipt = dispatchReceiptEvidence(entry, dispatchCandidate);
175
- if (dispatchReceipt !== null) {
176
- pushEvidence(evidence, seen, dispatchReceipt);
177
- continue;
178
- }
179
- const candidate = toolCalls.get(resultId);
180
- if (candidate !== void 0) {
181
- pushEvidence(evidence, seen, validationEvidence(candidate));
182
- }
183
- continue;
184
- }
185
- const bashExecution = bashExecutionEvidence(entry);
186
- if (bashExecution !== null) pushEvidence(evidence, seen, bashExecution);
187
- }
188
- return evidence;
189
- }
190
- function recentEntries(entries, assistantTurnId, recentEntryLimit) {
191
- const boundedLimit = Number.isFinite(recentEntryLimit) && recentEntryLimit > 0 ? Math.floor(recentEntryLimit) : DEFAULT_RECENT_ENTRY_LIMIT;
192
- const assistantIndex = assistantTurnId === null ? -1 : entries.findIndex((entry) => turnIdOf(entry) === assistantTurnId);
193
- const endExclusive = assistantIndex >= 0 ? assistantIndex : entries.length;
194
- let startInclusive = Math.max(0, endExclusive - boundedLimit);
195
- for (let index = endExclusive - 1; index >= startInclusive; index -= 1) {
196
- if (isUserMessageEntry(entries[index])) {
197
- startInclusive = index + 1;
198
- break;
199
- }
200
- }
201
- return entries.slice(startInclusive, endExclusive);
202
- }
203
- function bashValidationCall(entry) {
204
- const record = asRecord(entry);
205
- if (record?.kind !== "message" || record.role !== "tool_call") return null;
206
- const payload = asRecord(record.payload);
207
- if (payload === null) return null;
208
- const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
209
- if (toolName !== "bash") return null;
210
- const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
211
- const command = typeof args?.command === "string" ? args.command : null;
212
- if (command === null) return null;
213
- const detected = detectValidationCommand(command);
214
- if (detected.kind !== "validation") return null;
215
- const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
216
- if (toolCallId === null) return null;
217
- const candidate = {
218
- toolCallId,
219
- command: detected.matched
220
- };
221
- const turnId = turnIdOf(entry);
222
- if (turnId !== null) candidate.turnId = turnId;
223
- return candidate;
224
- }
225
- function dispatchEvidenceCall(entry) {
226
- const record = asRecord(entry);
227
- if (record?.kind !== "message" || record.role !== "tool_call") return null;
228
- const payload = asRecord(record.payload);
229
- if (payload === null) return null;
230
- const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
231
- if (toolName !== "dispatch") return null;
232
- const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
233
- const { agentId, task } = dispatchCallDescriptor(args);
234
- const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
235
- if (toolCallId === null) return null;
236
- const candidate = {
237
- toolCallId,
238
- command: `agent=${agentId}${task.length > 0 ? ` task=${task}` : ""}`
239
- };
240
- const turnId = turnIdOf(entry);
241
- if (turnId !== null) candidate.turnId = turnId;
242
- return candidate;
243
- }
244
- function dispatchCallDescriptor(args) {
245
- const defaultAgent = stringFromFirst(args ?? {}, ["agent", "agent_id", "agentId"]);
246
- const tasks = Array.isArray(args?.tasks) ? args.tasks : null;
247
- if (tasks !== null && tasks.length > 0) {
248
- const first = tasks[0];
249
- if (typeof first === "string") {
250
- return { agentId: defaultAgent ?? "coder", task: first.trim() };
251
- }
252
- const firstRecord = asRecord(first);
253
- const itemAgent = firstRecord === null ? null : stringFromFirst(firstRecord, ["agent", "agent_id", "agentId"]);
254
- const itemTask = typeof firstRecord?.task === "string" ? firstRecord.task.trim() : "";
255
- return { agentId: itemAgent ?? defaultAgent ?? "coder", task: itemTask };
256
- }
257
- const singleTask = typeof args?.task === "string" ? args.task.trim() : "";
258
- return { agentId: defaultAgent ?? "coder", task: singleTask };
259
- }
260
- function validationToolCall(entry) {
261
- const record = asRecord(entry);
262
- if (record?.kind !== "message" || record.role !== "tool_call") return null;
263
- const payload = asRecord(record.payload);
264
- if (payload === null) return null;
265
- const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
266
- if (toolName === null) return null;
267
- const summary = typedValidationSummary(toolName, payload);
268
- if (summary === null) return null;
269
- const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
270
- if (toolCallId === null) return null;
271
- const candidate = {
272
- toolCallId,
273
- command: summary
274
- };
275
- const turnId = turnIdOf(entry);
276
- if (turnId !== null) candidate.turnId = turnId;
277
- return candidate;
278
- }
279
- function typedValidationSummary(toolName, payload) {
280
- const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
281
- if (toolName === "verify") {
282
- const check = typeof args?.check === "string" ? args.check.trim() : "";
283
- if (check === "frontend") {
284
- const path4 = typeof args?.path === "string" && args.path.trim().length > 0 ? args.path.trim() : "artifact";
285
- return `verify frontend ${path4}`;
286
- }
287
- if (isVerificationScriptName(check)) return `npm run ${check}`;
288
- if (isProjectVerifierCheckId(check)) return `verify ${check}`;
289
- return null;
290
- }
291
- return null;
292
- }
293
- function successfulToolResultId(entry) {
294
- const record = asRecord(entry);
295
- if (record?.kind !== "message" || record.role !== "tool_result") return null;
296
- const payload = asRecord(record.payload);
297
- if (payload === null) return null;
298
- if (payload.isError === true || payload.error === true) return null;
299
- const result = asRecord(payload.result);
300
- const details = asRecord(result?.details);
301
- if (details?.kind === "error") return null;
302
- return stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]);
303
- }
304
- function dispatchReceiptEvidence(entry, candidate) {
305
- const record = asRecord(entry);
306
- if (record?.kind !== "message" || record.role !== "tool_result") return null;
307
- const payload = asRecord(record.payload);
308
- if (payload === null) return null;
309
- const toolName = stringFromFirst(payload, ["toolName", "name", "tool"]);
310
- if (toolName !== null && toolName !== "dispatch") return null;
311
- const result = asRecord(payload.result);
312
- const details = asRecord(result?.details);
313
- if (details === null) return null;
314
- const summary = passedDispatchReceiptSummary(details, candidate);
315
- if (summary === null) return null;
316
- const evidence = {
317
- kind: "dispatch_receipt",
318
- summary
319
- };
320
- const turnId = candidate?.turnId ?? turnIdOf(entry);
321
- if (turnId !== null && turnId !== void 0) evidence.turnId = turnId;
322
- return evidence;
323
- }
324
- function passedDispatchReceiptSummary(details, candidate) {
325
- if (Array.isArray(details.runs)) {
326
- const runs = details.runs.map(asRecord);
327
- if (runs.length === 0 || runs.some((run) => run === null || run.exitCode !== 0)) return null;
328
- if (typeof details.failedCount === "number" && details.failedCount !== 0) return null;
329
- const first = runs[0];
330
- const runId = typeof first?.runId === "string" && first.runId.length > 0 ? first.runId : "unknown";
331
- const agentId = dispatchReceiptAgentId(typeof first?.agentId === "string" ? first.agentId : void 0, candidate);
332
- const extra = runs.length > 1 ? ` (+${runs.length - 1} more)` : "";
333
- return `dispatch receipt passed: run ${runId} agent ${agentId}${extra}`;
334
- }
335
- if (details.exitCode === 0) {
336
- const runId = typeof details.runId === "string" && details.runId.length > 0 ? details.runId : "unknown";
337
- const agentId = dispatchReceiptAgentId(typeof details.agentId === "string" ? details.agentId : void 0, candidate);
338
- return `dispatch receipt passed: run ${runId} agent ${agentId}`;
339
- }
340
- return null;
341
- }
342
- function dispatchReceiptAgentId(receiptAgentId, candidate) {
343
- if (receiptAgentId !== void 0 && receiptAgentId.length > 0) return receiptAgentId;
344
- return candidate?.command.match(/^agent=([^\s]+)/)?.[1] ?? "unknown";
345
- }
346
- function bashExecutionEvidence(entry) {
347
- const record = asRecord(entry);
348
- if (record?.kind !== "bashExecution") return null;
349
- if (typeof record.command !== "string") return null;
350
- if (record.cancelled === true) return null;
351
- if (record.exitCode !== 0) return null;
352
- const detected = detectValidationCommand(record.command);
353
- if (detected.kind !== "validation") return null;
354
- const evidence = {
355
- kind: "validation_command",
356
- summary: `validation command passed: ${detected.matched}`
357
- };
358
- const turnId = turnIdOf(entry);
359
- if (turnId !== null) evidence.turnId = turnId;
360
- return evidence;
361
- }
362
- function protectedArtifactEvidence(entry) {
363
- const record = asRecord(entry);
364
- if (record?.kind !== "protectedArtifact" || record.action !== "protect") return null;
365
- const artifact = asRecord(record.artifact);
366
- const path4 = typeof artifact?.path === "string" && artifact.path.trim().length > 0 ? artifact.path.trim() : null;
367
- if (path4 === null) return null;
368
- const evidence = {
369
- kind: "protected_artifact",
370
- summary: `protected artifact recorded: ${path4}`
371
- };
372
- const turnId = turnIdOf(entry);
373
- if (turnId !== null) evidence.turnId = turnId;
374
- return evidence;
375
- }
376
- function validationEvidence(candidate) {
377
- const evidence = {
378
- kind: "validation_command",
379
- summary: `validation command passed: ${candidate.command}`
380
- };
381
- if (candidate.turnId !== void 0) evidence.turnId = candidate.turnId;
382
- return evidence;
383
- }
384
- function pushEvidence(evidence, seen, item) {
385
- const key = `${item.kind}\0${item.summary}\0${item.turnId ?? ""}`;
386
- if (seen.has(key)) return;
387
- seen.add(key);
388
- evidence.push(item);
389
- }
390
- function isUserMessageEntry(entry) {
391
- const record = asRecord(entry);
392
- if (record?.kind !== "message" || record.role !== "user") return false;
393
- const payload = asRecord(record.payload);
394
- return payload?.synthetic !== true;
395
- }
396
- function turnIdOf(entry) {
397
- const record = asRecord(entry);
398
- return typeof record?.turnId === "string" ? record.turnId : null;
399
- }
400
- function stringFromFirst(record, keys) {
401
- for (const key of keys) {
402
- const value = record[key];
403
- if (typeof value === "string" && value.length > 0) return value;
404
- }
405
- return null;
406
- }
407
- function asRecord(value) {
408
- return value !== null && typeof value === "object" ? value : null;
409
- }
410
-
411
40
  // src/domains/safety/path-policy.ts
412
41
  init_esm_shims();
413
42
  import { homedir } from "node:os";
@@ -1141,15 +770,13 @@ function evaluateWriteRoots(roots, writeRootCwd, call) {
1141
770
  const target = writeRootTargetPath(call);
1142
771
  if (target === null) return null;
1143
772
  const resolved = path3.resolve(writeRootCwd, target);
1144
- for (const root of roots) {
1145
- if (resolved === root || resolved.startsWith(`${root}${path3.sep}`)) return null;
1146
- }
773
+ if (pathBoundaryCovers(roots, resolved)) return null;
1147
774
  return `write target '${target}' resolves to '${resolved}', which is outside the permitted write roots for this run: ${roots.join(", ")}`;
1148
775
  }
1149
776
  function createSafetyPolicyEngine(options = {}) {
1150
777
  const cwd = canonicalizeExistingPath(path3.resolve(options.cwd ?? process.cwd()));
1151
778
  const writeRootCwd = path3.resolve(options.cwd ?? process.cwd());
1152
- const writeRoots = (options.writeRoots ?? []).map((root) => path3.resolve(root));
779
+ const writeRoots = (options.writeRoots ?? []).map((root) => resolvePathBoundary(writeRootCwd, root));
1153
780
  const packs = options.rulePacks ?? getCachedDefaultRulePacks();
1154
781
  const projectPolicy = options.projectPolicy ?? loadProjectSafetyPolicy(cwd);
1155
782
  const projectPolicyRoot = projectPolicy.path === null ? cwd : path3.dirname(path3.dirname(canonicalizeExistingPath(projectPolicy.path)));
@@ -1707,11 +1334,8 @@ function packPayload(rules) {
1707
1334
  }
1708
1335
 
1709
1336
  export {
1710
- DEFAULT_RECENT_ENTRY_LIMIT,
1711
- assessFinishContract,
1712
- typedValidationSummary,
1713
1337
  formatModelRejection,
1714
1338
  WRITE_ROOT_REFUSED_TOOLS,
1715
1339
  createSafetyPolicyEngine
1716
1340
  };
1717
- //# sourceMappingURL=chunk-OBMAI2DP.js.map
1341
+ //# sourceMappingURL=chunk-N3PBVRTZ.js.map
@@ -2,28 +2,31 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  canonicalJson,
4
4
  sha256
5
- } from "./chunk-UUANF5CR.js";
5
+ } from "./chunk-MLOK6ZOS.js";
6
6
  import {
7
7
  addResponseModelIdObservationCount,
8
8
  emptyResponseModelIdObservationCounts,
9
9
  responseModelIdObservationFromRecord
10
- } from "./chunk-6TUKSZVF.js";
10
+ } from "./chunk-LXPJXFM5.js";
11
+ import {
12
+ uncachedPrefillTokens
13
+ } from "./chunk-3DPEIQKN.js";
11
14
  import {
12
15
  ToolNames
13
16
  } from "./chunk-CGKSTWHD.js";
14
17
  import {
15
18
  ceilChars,
16
19
  extractReasoningTokens
17
- } from "./chunk-GEYXPTRF.js";
20
+ } from "./chunk-AEYBF3TB.js";
18
21
  import {
19
22
  settingsPath
20
- } from "./chunk-UHXRNZ2J.js";
23
+ } from "./chunk-PNY46YEY.js";
21
24
  import {
22
25
  expandConfigPath
23
26
  } from "./chunk-SST6Z5JA.js";
24
27
  import {
25
28
  isEngineContextOverflow
26
- } from "./chunk-FCSXB6T2.js";
29
+ } from "./chunk-UOSL25KY.js";
27
30
  import {
28
31
  init_esm_shims
29
32
  } from "./chunk-3R73A4XB.js";
@@ -371,10 +374,17 @@ function sumRunUsage(messages) {
371
374
  }
372
375
  return summary;
373
376
  }
374
- function backendCacheVerdict(input, cacheRead) {
377
+ function classifyCacheUsage(input, cacheRead) {
375
378
  if (cacheRead > 0) return input >= 2e3 ? "partial" : "hot";
376
379
  return input >= 2e3 ? "cold" : "small";
377
380
  }
381
+ function backendCacheVerdict(input, cacheRead, backend) {
382
+ if (cacheRead === 0 && backend?.cachedTokens !== null && backend?.cachedTokens !== void 0) {
383
+ const backendInput = uncachedPrefillTokens(backend);
384
+ if (backendInput !== null) return classifyCacheUsage(backendInput, backend.cachedTokens);
385
+ }
386
+ return classifyCacheUsage(input, cacheRead);
387
+ }
378
388
  function assistantSessionPayload(message, failure) {
379
389
  const text = extractText(message).trim();
380
390
  const thinking = extractThinking(message).trim();
@@ -1094,4 +1104,4 @@ export {
1094
1104
  readFileArgsAsync,
1095
1105
  expandInlineFileReferencesAsync
1096
1106
  };
1097
- //# sourceMappingURL=chunk-WJHBC77E.js.map
1107
+ //# sourceMappingURL=chunk-N5XKWMDW.js.map