@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
@@ -2,7 +2,7 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  cwdHash,
4
4
  sessionPaths
5
- } from "./chunk-FO5ZOVUY.js";
5
+ } from "./chunk-KV2AOLDF.js";
6
6
  import {
7
7
  init_esm_shims
8
8
  } from "./chunk-3R73A4XB.js";
@@ -170,14 +170,6 @@ function buildContextLedger(input) {
170
170
  });
171
171
  }
172
172
  const meter = [...groups];
173
- if (reserveTokens > 0) {
174
- meter.push({
175
- category: "reserve",
176
- label: CONTEXT_CATEGORY_LABEL.reserve,
177
- tokens: reserveTokens,
178
- percent: percentOf(reserveTokens, window)
179
- });
180
- }
181
173
  if (window > 0) {
182
174
  meter.push({
183
175
  category: "free",
@@ -186,6 +178,14 @@ function buildContextLedger(input) {
186
178
  percent: percentOf(freeTokens, window)
187
179
  });
188
180
  }
181
+ if (reserveTokens > 0) {
182
+ meter.push({
183
+ category: "reserve",
184
+ label: CONTEXT_CATEGORY_LABEL.reserve,
185
+ tokens: reserveTokens,
186
+ percent: percentOf(reserveTokens, window)
187
+ });
188
+ }
189
189
  return {
190
190
  provider: input.provider ?? null,
191
191
  model: input.model ?? null,
@@ -205,7 +205,8 @@ function buildContextLedger(input) {
205
205
  groups,
206
206
  meter,
207
207
  lastCompaction: input.lastCompaction ?? null,
208
- promptCache: input.promptCache ?? null
208
+ promptCache: input.promptCache ?? null,
209
+ prewarm: input.prewarm ?? null
209
210
  };
210
211
  }
211
212
 
@@ -405,6 +406,17 @@ function getLatestContextSnapshot(meta) {
405
406
  const list = getContextSnapshots(meta);
406
407
  return list.at(-1) ?? null;
407
408
  }
409
+ function lastLoadedContextWindow(meta, providerId, modelId) {
410
+ const snapshots = getContextSnapshots(meta);
411
+ for (let i = snapshots.length - 1; i >= 0; i -= 1) {
412
+ const snapshot = snapshots[i];
413
+ if (snapshot?.contextWindowSource !== "loaded") continue;
414
+ if (snapshot.providerId !== providerId || snapshot.modelId !== modelId) continue;
415
+ const window = snapshot.effectiveContextWindow;
416
+ if (typeof window === "number" && Number.isFinite(window) && window > 0) return window;
417
+ }
418
+ return null;
419
+ }
408
420
  function buildSnapshotCategories(inputs) {
409
421
  const raw = {
410
422
  system: 0,
@@ -477,6 +489,7 @@ function captureContextSnapshot(input) {
477
489
  compactionThreshold: input.compactionThreshold
478
490
  });
479
491
  return {
492
+ estimatedTokens: sumSplitTokens(categories),
480
493
  snapshotId: nextSnapshotId(),
481
494
  sessionId: input.sessionId,
482
495
  turnId: input.turnId,
@@ -499,8 +512,11 @@ function captureContextSnapshot(input) {
499
512
  messageRange: input.conversationMessages.length > 0 ? { start: 0, end: input.conversationMessages.length - 1 } : void 0
500
513
  };
501
514
  }
515
+ function sumSplitTokens(categories) {
516
+ return SNAPSHOT_SPLIT_KEYS.reduce((sum, key) => sum + (categories[key] ?? 0), 0);
517
+ }
502
518
  function snapshotInputTokens(snapshot) {
503
- return SNAPSHOT_SPLIT_KEYS.reduce((sum, key) => sum + (snapshot.categories[key] ?? 0), 0);
519
+ return sumSplitTokens(snapshot.categories);
504
520
  }
505
521
  function reconcileSnapshot(snapshot, usage) {
506
522
  const exactInput = (usage.input || 0) + (usage.cacheRead || 0) + (usage.cacheWrite || 0);
@@ -580,9 +596,13 @@ function reconcileSnapshot(snapshot, usage) {
580
596
  },
581
597
  {}
582
598
  );
599
+ const estimatedTokens = snapshot.estimatedTokens ?? sumSplitTokens(snapshot.categories);
583
600
  return {
584
601
  ...snapshot,
585
602
  categories: updatedCategories,
603
+ estimatedTokens,
604
+ reconciledTokens: exactInput,
605
+ divergenceRatio: estimatedTokens > 0 ? Math.round(exactInput / estimatedTokens * 1e3) / 1e3 : void 0,
586
606
  sources: {
587
607
  total: "reconciled",
588
608
  splits: splitsSources
@@ -606,8 +626,9 @@ export {
606
626
  contextUsageSnapshot,
607
627
  appendContextSnapshot,
608
628
  getLatestContextSnapshot,
629
+ lastLoadedContextWindow,
609
630
  captureContextSnapshot,
610
631
  snapshotInputTokens,
611
632
  reconcileSnapshot
612
633
  };
613
- //# sourceMappingURL=chunk-GEYXPTRF.js.map
634
+ //# sourceMappingURL=chunk-AEYBF3TB.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  enabledExtensionResourceRoots
4
- } from "./chunk-ZWLZP4ZT.js";
4
+ } from "./chunk-5QKCQQ3E.js";
5
5
  import {
6
6
  require_dist
7
7
  } from "./chunk-APJ265NV.js";
@@ -29,6 +29,7 @@ function defaultScopedResourceRoots(kind, cwd) {
29
29
  return [
30
30
  ...enabledExtensionResourceRoots(kind, cwd).map((root) => ({
31
31
  path: root.path,
32
+ rootPath: root.rootPath,
32
33
  scope: "package",
33
34
  source: root.source,
34
35
  precedence: COMPAT_RESOURCE_PRECEDENCE.extension
@@ -119,4 +120,4 @@ export {
119
120
  splitYamlFrontmatter,
120
121
  stringField
121
122
  };
122
- //# sourceMappingURL=chunk-2SFS6XQE.js.map
123
+ //# sourceMappingURL=chunk-AMKHQW3C.js.map
@@ -2,12 +2,12 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  clampTimerDelayMs
4
4
  } from "./chunk-FQ4SKYE4.js";
5
- import {
6
- clioStateDir
7
- } from "./chunk-BNAZZHFG.js";
8
5
  import {
9
6
  AI_AGENT_NAME
10
7
  } from "./chunk-6EJMN2Y3.js";
8
+ import {
9
+ clioStateDir
10
+ } from "./chunk-BNAZZHFG.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-3R73A4XB.js";
@@ -48,7 +48,7 @@ var KNOWN_CLIO_TRAILERS = new Set(
48
48
  Object.values(CLIO_COMMIT_TRAILERS).map((line) => normalizedTrailer(line)).filter((line) => line !== null)
49
49
  );
50
50
  function isClioTrailer(key) {
51
- return KNOWN_CLIO_TRAILERS.has(key) || key.startsWith("clio-evidence:receipt-v19/sha256:");
51
+ return KNOWN_CLIO_TRAILERS.has(key) || key.startsWith("clio-evidence:receipt-v20/sha256:");
52
52
  }
53
53
  function trailerBlockStart(lines) {
54
54
  if (lines.length < 2) return null;
@@ -67,10 +67,10 @@ function trailerBlockStart(lines) {
67
67
  return sawTrailer ? first : null;
68
68
  }
69
69
  function receiptTrailer(receipt) {
70
- if (receipt?.version !== 19 || receipt.algorithm !== "sha256" || receipt.integrityValid !== true || receipt.directlyRelevant !== true || !SHA256.test(receipt.digest)) {
70
+ if (receipt?.version !== 20 || receipt.algorithm !== "sha256" || receipt.integrityValid !== true || receipt.directlyRelevant !== true || !SHA256.test(receipt.digest)) {
71
71
  return null;
72
72
  }
73
- return `Clio-Evidence: receipt-v19/sha256:${receipt.digest}`;
73
+ return `Clio-Evidence: receipt-v20/sha256:${receipt.digest}`;
74
74
  }
75
75
  function attributeCommitMessage(originalMessage, evidence, enabled = true) {
76
76
  if (!enabled) return originalMessage;
@@ -567,4 +567,4 @@ export {
567
567
  runCommandVector,
568
568
  combineSafeOutput
569
569
  };
570
- //# sourceMappingURL=chunk-D4MDIG46.js.map
570
+ //# sourceMappingURL=chunk-B5CSFE7B.js.map
@@ -2,26 +2,26 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  readLayeredSettings,
4
4
  readStrictLayeredSettings
5
- } from "./chunk-YD734TPH.js";
5
+ } from "./chunk-FALJGAWU.js";
6
6
  import {
7
7
  formatBootTrace
8
8
  } from "./chunk-HKIYEGME.js";
9
9
  import {
10
10
  initializeClioHome
11
- } from "./chunk-DOOEX22V.js";
11
+ } from "./chunk-56KB5IJP.js";
12
12
  import {
13
13
  readSettings
14
- } from "./chunk-UHXRNZ2J.js";
14
+ } from "./chunk-PNY46YEY.js";
15
15
  import {
16
16
  require_dist
17
17
  } from "./chunk-APJ265NV.js";
18
+ import {
19
+ clioConfigDir
20
+ } from "./chunk-BNAZZHFG.js";
18
21
  import {
19
22
  findEngineEnvKeys,
20
23
  getEngineEnvApiKey
21
24
  } from "./chunk-YXLYO42X.js";
22
- import {
23
- clioConfigDir
24
- } from "./chunk-BNAZZHFG.js";
25
25
  import {
26
26
  __toESM,
27
27
  init_esm_shims
@@ -158,7 +158,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
158
158
  } else if (verdict.kind !== "usable") {
159
159
  process.stdout.write(`${describeVerdict(verdict)} Starting \`clio-coder configure\`.
160
160
  `);
161
- const { runConfigureCommand } = await import("./configure-OLCVPHNM.js");
161
+ const { runConfigureCommand } = await import("./configure-2WYWSCSD.js");
162
162
  const configured = await runConfigureCommand([]);
163
163
  if (configured !== 0) return configured;
164
164
  startupSettings = readStrictLayeredSettings(process.cwd()).settings;
@@ -167,7 +167,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
167
167
  let terminalLease;
168
168
  try {
169
169
  if (terminalLeaseEligible(options)) {
170
- const { createProcessTerminalLease, instantShellEnabled } = await import("./terminal-lease-WUZY7ZV5.js");
170
+ const { createProcessTerminalLease, instantShellEnabled } = await import("./terminal-lease-QYVORFR4.js");
171
171
  if (instantShellEnabled()) {
172
172
  let stage0FrameId = null;
173
173
  terminalLease = createProcessTerminalLease({
@@ -190,7 +190,7 @@ Run \`clio-coder auth login ${verdict.store}\` if the endpoint requires one; loc
190
190
  throw new Error("injected Stage 1 hydration failure");
191
191
  }
192
192
  }
193
- const { bootOrchestrator } = await import("./orchestrator-WZYB54DM.js");
193
+ const { bootOrchestrator } = await import("./orchestrator-ZKBPCHW6.js");
194
194
  const result = await bootOrchestrator({
195
195
  ...options,
196
196
  ...startupSettings ? { startupSettings } : {},
@@ -214,4 +214,4 @@ export {
214
214
  terminalLeaseEligible,
215
215
  runClioCommand
216
216
  };
217
- //# sourceMappingURL=chunk-MXI6J5JF.js.map
217
+ //# sourceMappingURL=chunk-B5XRQOLB.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-ZGVHUX3M.js";
5
5
  import {
6
6
  BusChannels
7
- } from "./chunk-OB5HIGJY.js";
7
+ } from "./chunk-RKRLDWD3.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-3R73A4XB.js";
@@ -226,4 +226,4 @@ export {
226
226
  runWithBudget,
227
227
  getTerminationCoordinator
228
228
  };
229
- //# sourceMappingURL=chunk-X2KV5FXT.js.map
229
+ //# sourceMappingURL=chunk-BVDVID7E.js.map
@@ -16,10 +16,10 @@ import {
16
16
  SAFE_EXEC_DEFAULT_TIMEOUT_MS,
17
17
  combineSafeOutput,
18
18
  runCommandVector
19
- } from "./chunk-D4MDIG46.js";
19
+ } from "./chunk-B5CSFE7B.js";
20
20
  import {
21
21
  StringEnum
22
- } from "./chunk-FCSXB6T2.js";
22
+ } from "./chunk-UOSL25KY.js";
23
23
  import {
24
24
  init_esm_shims
25
25
  } from "./chunk-3R73A4XB.js";
@@ -177,4 +177,4 @@ export {
177
177
  prepareVerifyArguments,
178
178
  verifyToolSurface
179
179
  };
180
- //# sourceMappingURL=chunk-JNXPYBB4.js.map
180
+ //# sourceMappingURL=chunk-CA42X6KT.js.map
@@ -1,10 +1,10 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  durableAssistantTextFromEvent
4
- } from "./chunk-UUANF5CR.js";
4
+ } from "./chunk-TEO2TLVN.js";
5
5
  import {
6
6
  responseModelIdObservationFromRecord
7
- } from "./chunk-6TUKSZVF.js";
7
+ } from "./chunk-LXPJXFM5.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-3R73A4XB.js";
@@ -34,4 +34,4 @@ export {
34
34
  assistantTextFromEvent,
35
35
  receiptResponseModelIdObservationLabel
36
36
  };
37
- //# sourceMappingURL=chunk-VREKEFLL.js.map
37
+ //# sourceMappingURL=chunk-D73KXYPF.js.map
@@ -2,19 +2,19 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  readStateInfo,
4
4
  runDoctor
5
- } from "./chunk-3HAPLH5M.js";
5
+ } from "./chunk-T3Z6VAAF.js";
6
6
  import {
7
7
  getVersionInfo
8
8
  } from "./chunk-XPLRXC72.js";
9
- import {
10
- authStoragePath,
11
- openAuthStorage
12
- } from "./chunk-JRIO5UD2.js";
13
9
  import {
14
10
  readSettings,
15
11
  settingsPath,
16
12
  updateSettings
17
- } from "./chunk-UHXRNZ2J.js";
13
+ } from "./chunk-PNY46YEY.js";
14
+ import {
15
+ authStoragePath,
16
+ openAuthStorage
17
+ } from "./chunk-EQ63NRB7.js";
18
18
  import {
19
19
  init_esm_shims
20
20
  } from "./chunk-3R73A4XB.js";
@@ -158,4 +158,4 @@ export {
158
158
  describeUpgradeNotice,
159
159
  LifecycleDomainModule
160
160
  };
161
- //# sourceMappingURL=chunk-JTSEDYVQ.js.map
161
+ //# sourceMappingURL=chunk-DG4M6ZUE.js.map
@@ -1,48 +1,33 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
- compileFleetExecutionPlan
4
- } from "./chunk-M4AKACEO.js";
3
+ discoverAgentRecipes
4
+ } from "./chunk-HCBCAYZU.js";
5
5
  import {
6
- loadRecipesFromDir,
7
- mergeRecipes
8
- } from "./chunk-UVDSQ6LW.js";
6
+ compileFleetExecutionPlan
7
+ } from "./chunk-HKO36JWF.js";
9
8
  import {
10
9
  loadFleetCommands,
11
10
  loadFleetContract,
12
11
  renderFleetPrompt
13
- } from "./chunk-KCMKRQX4.js";
12
+ } from "./chunk-HPCTNZM2.js";
14
13
  import {
15
14
  requestExecutionRole,
16
15
  withAttemptRole
17
- } from "./chunk-UND3GU2L.js";
16
+ } from "./chunk-H7IXIC72.js";
18
17
  import {
19
18
  normalizeAgentSpec
20
- } from "./chunk-AOCYTWAV.js";
19
+ } from "./chunk-S4COXYBG.js";
21
20
  import {
22
21
  readSettings
23
- } from "./chunk-UHXRNZ2J.js";
24
- import {
25
- clioConfigDir
26
- } from "./chunk-BNAZZHFG.js";
27
- import {
28
- resolvePackageRoot
29
- } from "./chunk-IWHMRKLL.js";
22
+ } from "./chunk-PNY46YEY.js";
30
23
  import {
31
24
  init_esm_shims
32
25
  } from "./chunk-3R73A4XB.js";
33
26
 
34
27
  // src/cli/fleet-preflight.ts
35
28
  init_esm_shims();
36
- import { join } from "node:path";
37
29
  function discoverSpecs(cwd) {
38
- const diagnostics = [];
39
- const builtin = loadRecipesFromDir(
40
- { dir: join(resolvePackageRoot(), "src", "domains", "agents", "builtins"), source: "builtin" },
41
- diagnostics
42
- );
43
- const user = loadRecipesFromDir({ dir: join(clioConfigDir(), "agents"), source: "user" }, diagnostics);
44
- const project = loadRecipesFromDir({ dir: join(cwd, ".clio-coder", "agents"), source: "project" }, diagnostics);
45
- return mergeRecipes(builtin, user, project).map(normalizeAgentSpec);
30
+ return discoverAgentRecipes(cwd).map(normalizeAgentSpec);
46
31
  }
47
32
  function inspectFleet(name, vars) {
48
33
  const cwd = process.cwd();
@@ -120,4 +105,4 @@ function inspectFleet(name, vars) {
120
105
  export {
121
106
  inspectFleet
122
107
  };
123
- //# sourceMappingURL=chunk-DQA7QLMD.js.map
108
+ //# sourceMappingURL=chunk-EBOC7MT3.js.map
@@ -2,11 +2,16 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  describeWriteBoundary,
4
4
  normalizeWriteBoundary,
5
+ normalizeWriteBoundaryEntry,
5
6
  writeBoundaryCovers
6
- } from "./chunk-KCMKRQX4.js";
7
+ } from "./chunk-HPCTNZM2.js";
8
+ import {
9
+ asDirectoryPathBoundary,
10
+ pathBoundaryEntryCovers
11
+ } from "./chunk-S4COXYBG.js";
7
12
  import {
8
13
  atomicWrite
9
- } from "./chunk-FO5ZOVUY.js";
14
+ } from "./chunk-KV2AOLDF.js";
10
15
  import {
11
16
  clioStateDir
12
17
  } from "./chunk-BNAZZHFG.js";
@@ -730,7 +735,7 @@ init_esm_shims();
730
735
  import { execFileSync as execFileSync3 } from "node:child_process";
731
736
  import { createHash as createHash2 } from "node:crypto";
732
737
  import { existsSync as existsSync3, lstatSync as lstatSync2, mkdirSync as mkdirSync3, readlinkSync, realpathSync as realpathSync3, rmSync as rmSync3, writeFileSync as writeFileSync3 } from "node:fs";
733
- import { dirname, join as join3, relative as relative3, resolve as resolve3, sep as sep2 } from "node:path";
738
+ import { dirname, isAbsolute as isAbsolute2, join as join3, relative as relative3, resolve as resolve3, sep as sep2 } from "node:path";
734
739
  var WRITE_BOUNDARY_VIOLATION_REASON = "writes_boundary_violation";
735
740
  var ABSENT = "absent";
736
741
  var GIT_TIMEOUT_MS = 3e4;
@@ -834,6 +839,20 @@ function diffWorkspace(snapshot) {
834
839
  }
835
840
  return changes;
836
841
  }
842
+ function describeWriteBoundaryAttributionDowngrade(downgrade) {
843
+ if (downgrade.reason === "opaque_tool_succeeded") {
844
+ const tool = downgrade.tool ?? "unknown";
845
+ const call = downgrade.toolCallId === null ? "" : ` (call ${downgrade.toolCallId})`;
846
+ return `a successful '${tool}' call${call} can write paths its arguments do not name`;
847
+ }
848
+ if (downgrade.reason === "incomplete_tool_telemetry") {
849
+ return downgrade.runId === null ? "tool telemetry was incomplete" : `run '${downgrade.runId}' reported incomplete tool telemetry`;
850
+ }
851
+ if (downgrade.reason === "code_step_untracked") {
852
+ return downgrade.stepId === null ? "a code step ran through the untracked command runner" : `code step '${downgrade.stepId}' ran through the untracked command runner`;
853
+ }
854
+ return downgrade.stepId === null ? "no usable write record was available" : `step '${downgrade.stepId}' supplied no usable write record`;
855
+ }
837
856
  function canonicalVerdict(verdict) {
838
857
  return JSON.stringify(verdict);
839
858
  }
@@ -876,10 +895,34 @@ function rollbackPath(snapshot, change) {
876
895
  }
877
896
  return { rolledBack: { path: change.path, action: "restored", restoredFrom: `${snapshot.head}:${change.path}` } };
878
897
  }
898
+ function withinRecordedWrite(recorded, path) {
899
+ if (recorded.has(path)) return true;
900
+ for (const target of recorded) {
901
+ if (path.startsWith(`${target}/`)) return true;
902
+ }
903
+ return false;
904
+ }
879
905
  function enforceWriteBoundary(input) {
880
906
  const allow = normalizeWriteBoundary(input.allow);
881
907
  const changes = diffWorkspace(input.snapshot);
882
- const violations = changes.filter((change) => !writeBoundaryCovers(allow, change.path));
908
+ const outside = changes.filter((change) => !writeBoundaryCovers(allow, change.path));
909
+ const attributionComplete = input.attribution?.complete === true;
910
+ const attributionDowngrades = attributionComplete ? [] : input.attribution?.downgrades !== void 0 && input.attribution.downgrades.length > 0 ? input.attribution.downgrades.map((entry) => ({ ...entry })) : [
911
+ {
912
+ reason: "write_record_unavailable",
913
+ tool: null,
914
+ toolCallId: null,
915
+ runId: null,
916
+ stepId: input.stepIds.length === 1 ? input.stepIds[0] ?? null : null
917
+ }
918
+ ];
919
+ const recorded = /* @__PURE__ */ new Set();
920
+ for (const target of input.attribution?.recorded ?? []) {
921
+ const relativeTarget = repoRelative(input.snapshot.root, target);
922
+ if (relativeTarget !== null) recorded.add(relativeTarget);
923
+ }
924
+ const violations = attributionComplete ? outside.filter((change) => withinRecordedWrite(recorded, change.path)) : outside;
925
+ const unattributed = attributionComplete ? outside.filter((change) => !withinRecordedWrite(recorded, change.path)) : [];
883
926
  const rolledBack = [];
884
927
  const unrecoverable = [];
885
928
  for (const change of violations) {
@@ -888,14 +931,20 @@ function enforceWriteBoundary(input) {
888
931
  if (outcome.unrecoverable !== void 0) unrecoverable.push(outcome.unrecoverable);
889
932
  }
890
933
  const status = violations.length === 0 ? "clean" : unrecoverable.length === 0 ? "rolled-back" : "rollback-incomplete";
891
- const attribution = input.stepIds.length === 1 ? `step '${input.stepIds[0]}'` : `steps ${input.stepIds.map((id) => `'${id}'`).join(", ")} ran concurrently in one checkout, so the write cannot be attributed to one of them`;
892
- const detail = violations.length === 0 ? null : [
893
- `${attribution} wrote outside its declared boundary.`,
934
+ const who = input.stepIds.length === 1 ? `step '${input.stepIds[0]}'` : `steps ${input.stepIds.map((id) => `'${id}'`).join(", ")} ran concurrently in one checkout, so the write cannot be attributed to one of them`;
935
+ const violationDetail = violations.length === 0 ? [] : [
936
+ `${who} wrote outside its declared boundary.`,
894
937
  `Unauthorized paths: ${violations.map((change) => change.path).join(", ")}.`,
895
938
  `Declared writes: ${describeWriteBoundary(allow)}.`,
896
939
  status === "rolled-back" ? "Those paths were rolled back to the baseline commit." : `Rollback is incomplete; the working tree is left as the step made it. Unrestorable: ${unrecoverable.map((entry) => `${entry.path} (${entry.reason})`).join("; ")}.`,
940
+ attributionComplete ? "Each was blamed on this window because a run in it recorded writing that path." : `Attribution was incomplete because ${attributionDowngrades.map(describeWriteBoundaryAttributionDowngrade).join("; ")}, so every change outside the declaration was blamed on this window.`,
897
941
  "If the change was legitimate, widen the step's `writes:` declaration to cover it."
898
- ].join(" ");
942
+ ];
943
+ const concurrentDetail = unattributed.length === 0 ? [] : [
944
+ `Concurrent changes were seen in this window that no run in it recorded writing: ${unattributed.map((change) => change.path).join(", ")}.`,
945
+ "They were left untouched, because a path this window did not write is not this window's to restore."
946
+ ];
947
+ const detail = [...violationDetail, ...concurrentDetail];
899
948
  const body = {
900
949
  version: 1,
901
950
  window: input.window,
@@ -906,11 +955,14 @@ function enforceWriteBoundary(input) {
906
955
  checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
907
956
  changedPaths: changes.map((change) => change.path),
908
957
  violations: violations.map((change) => change.path),
958
+ unattributed: unattributed.map((change) => change.path),
959
+ attributionComplete,
960
+ attributionDowngrades,
909
961
  rolledBack,
910
962
  unrecoverable,
911
963
  status,
912
964
  reason: violations.length === 0 ? null : WRITE_BOUNDARY_VIOLATION_REASON,
913
- detail
965
+ detail: detail.length === 0 ? null : detail.join(" ")
914
966
  };
915
967
  return { ...body, digest: createHash2("sha256").update(canonicalVerdict(body), "utf8").digest("hex") };
916
968
  }
@@ -921,14 +973,41 @@ function assertWriteBoundaryInsideRoot(root, allow) {
921
973
  let probe = join3(realRoot, relativeEntry);
922
974
  while (probe !== realRoot && !existsSync3(probe)) probe = dirname(probe);
923
975
  const resolved = realpathSync3(probe);
924
- if (resolved !== realRoot && !resolved.startsWith(realRoot + sep2)) {
976
+ if (resolved !== realRoot && !pathBoundaryEntryCovers(asDirectoryPathBoundary(realRoot), resolved)) {
925
977
  throw new Error(`write boundary: entry '${entry}' resolves to ${resolved}, outside the workspace at ${realRoot}`);
926
978
  }
927
979
  }
928
980
  }
981
+ function assertWriteBoundaryVisibleToGit(root, allow) {
982
+ const entries = [...new Set(allow.map(normalizeWriteBoundaryEntry))].sort();
983
+ if (entries.length === 0) return;
984
+ const absolute = resolve3(root);
985
+ let raw;
986
+ try {
987
+ raw = git3(absolute, ["check-ignore", "-v", "-z", "--stdin"], `${entries.join("\0")}\0`);
988
+ } catch (error) {
989
+ const status = error.status;
990
+ if (status === 1) return;
991
+ throw new Error(
992
+ `write boundary: could not determine whether ${describeWriteBoundary(entries)} is ignored by git in ${absolute}: ${error.message}`
993
+ );
994
+ }
995
+ const fields = raw.split("\0");
996
+ const refusals = [];
997
+ for (let index = 0; index + 3 < fields.length; index += 4) {
998
+ const [source, line, pattern, path] = fields.slice(index, index + 4);
999
+ if (path === void 0 || path.length === 0) continue;
1000
+ refusals.push(`'${path}' is ignored by ${source}:${line}:${pattern}`);
1001
+ }
1002
+ if (refusals.length === 0) return;
1003
+ throw new Error(
1004
+ `write boundary: ${refusals.join(", ")}. git status never reports an ignored path, so a boundary declared over one is verified against nothing and every window would be certified clean without an observation. Declare a path the repository tracks, or stop ignoring this one.`
1005
+ );
1006
+ }
929
1007
  function repoRelative(root, path) {
930
- const rel = relative3(resolve3(root), resolve3(path));
931
- if (rel.length === 0 || rel.startsWith("..") || rel.startsWith(`..${sep2}`)) return null;
1008
+ const base = resolve3(root);
1009
+ const rel = relative3(base, resolve3(base, path));
1010
+ if (rel.length === 0 || rel === ".." || rel.startsWith(`..${sep2}`) || isAbsolute2(rel)) return null;
932
1011
  return rel.split(sep2).join("/");
933
1012
  }
934
1013
  function writeBoundaryDir(rootId) {
@@ -956,6 +1035,7 @@ function preflightWriteBoundaries(plan, root) {
956
1035
  );
957
1036
  }
958
1037
  for (const step of declared) assertWriteBoundaryInsideRoot(root, step.writes ?? []);
1038
+ assertWriteBoundaryVisibleToGit(root, [...new Set(declared.flatMap((step) => [...step.writes ?? []]))]);
959
1039
  }
960
1040
  function createWriteBoundaryEnforcer(input) {
961
1041
  const open = /* @__PURE__ */ new Map();
@@ -964,10 +1044,42 @@ function createWriteBoundaryEnforcer(input) {
964
1044
  for (const stepId of stepIds) for (const entry of input.boundaryFor(stepId) ?? []) allow.add(entry);
965
1045
  return [...allow].sort();
966
1046
  };
1047
+ const attributionFor = (stepIds) => {
1048
+ const recordedWritesFor = input.recordedWritesFor;
1049
+ if (recordedWritesFor === void 0) return void 0;
1050
+ const recorded = /* @__PURE__ */ new Set();
1051
+ const downgrades = [];
1052
+ let complete = true;
1053
+ for (const stepId of stepIds) {
1054
+ const observed = recordedWritesFor(stepId);
1055
+ if (observed === null) {
1056
+ complete = false;
1057
+ downgrades.push({
1058
+ reason: "write_record_unavailable",
1059
+ tool: null,
1060
+ toolCallId: null,
1061
+ runId: null,
1062
+ stepId
1063
+ });
1064
+ continue;
1065
+ }
1066
+ if (!("recorded" in observed)) {
1067
+ for (const target of observed) recorded.add(target);
1068
+ continue;
1069
+ }
1070
+ for (const target of observed.recorded) recorded.add(target);
1071
+ if (!observed.complete) complete = false;
1072
+ for (const downgrade of observed.downgrades ?? []) {
1073
+ downgrades.push({ ...downgrade, stepId: downgrade.stepId ?? stepId });
1074
+ }
1075
+ }
1076
+ return { recorded: [...recorded].sort(), complete, downgrades };
1077
+ };
967
1078
  return {
968
1079
  begin(window, stepIds) {
969
1080
  const allow = allowFor(stepIds);
970
1081
  assertWriteBoundaryInsideRoot(input.root, allow);
1082
+ assertWriteBoundaryVisibleToGit(input.root, allow);
971
1083
  open.set(window, { snapshot: captureWorkspaceSnapshot(input.root), allow });
972
1084
  },
973
1085
  async verify(window, stepIds) {
@@ -976,11 +1088,13 @@ function createWriteBoundaryEnforcer(input) {
976
1088
  throw new Error(`write boundary: window '${window}' was verified without a snapshot`);
977
1089
  }
978
1090
  open.delete(window);
1091
+ const attribution = attributionFor(stepIds);
979
1092
  const verdict = enforceWriteBoundary({
980
1093
  snapshot: pending.snapshot,
981
1094
  window,
982
1095
  stepIds,
983
- allow: pending.allow
1096
+ allow: pending.allow,
1097
+ ...attribution === void 0 ? {} : { attribution }
984
1098
  });
985
1099
  const path = writeWriteBoundaryVerdict(input.rootId, verdict);
986
1100
  input.onVerdict?.(verdict, path);
@@ -1020,7 +1134,8 @@ export {
1020
1134
  recoverCleanupReadyCompeteGroups,
1021
1135
  WRITE_BOUNDARY_VIOLATION_REASON,
1022
1136
  captureWorkspaceSnapshot,
1137
+ describeWriteBoundaryAttributionDowngrade,
1023
1138
  preflightWriteBoundaries,
1024
1139
  createWriteBoundaryEnforcer
1025
1140
  };
1026
- //# sourceMappingURL=chunk-KZ2H5X4G.js.map
1141
+ //# sourceMappingURL=chunk-ECUO3KDP.js.map
@@ -9,16 +9,16 @@ import {
9
9
  import {
10
10
  require_dist
11
11
  } from "./chunk-APJ265NV.js";
12
- import {
13
- findEngineEnvKeys,
14
- getEngineEnvApiKey
15
- } from "./chunk-YXLYO42X.js";
16
12
  import {
17
13
  clioConfigDir
18
14
  } from "./chunk-BNAZZHFG.js";
19
15
  import {
20
16
  safeResourceWrite
21
17
  } from "./chunk-WEPFGWHJ.js";
18
+ import {
19
+ findEngineEnvKeys,
20
+ getEngineEnvApiKey
21
+ } from "./chunk-YXLYO42X.js";
22
22
  import {
23
23
  __toESM,
24
24
  init_esm_shims
@@ -959,4 +959,4 @@ export {
959
959
  authNotRequiredStatus,
960
960
  openAuthStorage
961
961
  };
962
- //# sourceMappingURL=chunk-JRIO5UD2.js.map
962
+ //# sourceMappingURL=chunk-EQ63NRB7.js.map
@@ -5,7 +5,7 @@ import {
5
5
  settingsPath,
6
6
  updateSavedSettingsDocument,
7
7
  validateSettings
8
- } from "./chunk-UHXRNZ2J.js";
8
+ } from "./chunk-PNY46YEY.js";
9
9
  import {
10
10
  require_dist
11
11
  } from "./chunk-APJ265NV.js";
@@ -226,4 +226,4 @@ export {
226
226
  updateLayeredSettings,
227
227
  settingsSourceFor
228
228
  };
229
- //# sourceMappingURL=chunk-YD734TPH.js.map
229
+ //# sourceMappingURL=chunk-FALJGAWU.js.map