@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
@@ -1,33 +1,35 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
- import {
3
- typedValidationSummary
4
- } from "./chunk-OBMAI2DP.js";
5
2
  import {
6
3
  ROUTE_POLICY_VERSION,
7
4
  isRouteDecisionAgentSelection,
8
5
  isRoutingIntent,
9
6
  routePriorForLatencyClass,
10
7
  sameRouteIdentity
11
- } from "./chunk-5C77SEEY.js";
8
+ } from "./chunk-VPTUJU4P.js";
12
9
  import {
13
10
  deriveExecutionRole,
14
11
  isExecutionRole
15
- } from "./chunk-UND3GU2L.js";
12
+ } from "./chunk-H7IXIC72.js";
13
+ import {
14
+ typedValidationSummary
15
+ } from "./chunk-7C6RYZGQ.js";
16
16
  import {
17
17
  expandPath,
18
18
  resolveReadPath
19
19
  } from "./chunk-OQE5J4C6.js";
20
- import {
21
- DEFAULT_AUTONOMY_LEVEL,
22
- autonomyAskRejection,
23
- autonomyDenyRejection,
24
- isAutonomyLevel,
25
- mapAutonomy
26
- } from "./chunk-HWUFFB6L.js";
27
20
  import {
28
21
  AGENT_AUTOMATION_AUTHORITIES,
29
- agentSpecFingerprint
30
- } from "./chunk-AOCYTWAV.js";
22
+ COUNCIL_BALLOT_SHAPE,
23
+ COUNCIL_BALLOT_VERDICT_MAX_BYTES,
24
+ PATH_BOUNDARY_MAX_ENTRIES,
25
+ PathBoundaryError,
26
+ agentSpecFingerprint,
27
+ asDirectoryPathBoundary,
28
+ classify,
29
+ normalizePathBoundaryEntry,
30
+ pathBoundaryCovers,
31
+ resolvePathBoundary
32
+ } from "./chunk-S4COXYBG.js";
31
33
  import {
32
34
  detectValidationCommand,
33
35
  extractCommandDeleteTargets,
@@ -35,6 +37,13 @@ import {
35
37
  tokenizeShellLike,
36
38
  toolMutationPaths
37
39
  } from "./chunk-MV3K5QF2.js";
40
+ import {
41
+ DEFAULT_AUTONOMY_LEVEL,
42
+ autonomyAskRejection,
43
+ autonomyDenyRejection,
44
+ isAutonomyLevel,
45
+ mapAutonomy
46
+ } from "./chunk-RAPCMZL4.js";
38
47
  import {
39
48
  DEFAULT_MAX_LINES,
40
49
  OBSERVATION_POLICY_SLACK_BYTES,
@@ -62,26 +71,26 @@ import {
62
71
  ToolNames,
63
72
  isBuiltinToolName
64
73
  } from "./chunk-CGKSTWHD.js";
65
- import {
66
- THINKING_LEVELS
67
- } from "./chunk-4DGYLA73.js";
68
74
  import {
69
75
  gitCommitAttributionEnabled,
70
76
  reportCommitAttributionDiagnostic,
71
77
  resolveSafeCwd,
72
78
  withManagedGitCommitAttributionEnvironment
73
- } from "./chunk-D4MDIG46.js";
79
+ } from "./chunk-B5CSFE7B.js";
74
80
  import {
75
81
  clampTimerDelayMs
76
82
  } from "./chunk-FQ4SKYE4.js";
83
+ import {
84
+ AI_AGENT_NAME
85
+ } from "./chunk-6EJMN2Y3.js";
86
+ import {
87
+ THINKING_LEVELS
88
+ } from "./chunk-XDOQXGFO.js";
77
89
  import {
78
90
  GUARDRAIL_DEFAULTS,
79
91
  GUARDRAIL_ENV_VARS,
80
92
  resolveGuardrail
81
93
  } from "./chunk-4ZG3XFUR.js";
82
- import {
83
- AI_AGENT_NAME
84
- } from "./chunk-6EJMN2Y3.js";
85
94
  import {
86
95
  init_esm_shims
87
96
  } from "./chunk-3R73A4XB.js";
@@ -434,6 +443,12 @@ init_esm_shims();
434
443
  init_esm_shims();
435
444
  var RESPONSE_SCHEMA_MAX_SERIALIZED_BYTES = 64 * 1024;
436
445
  var RESPONSE_SCHEMA_RUNTIME_ID = "llamacpp";
446
+ var OPENAI_SCHEMA_RUNTIME_ID = "lmstudio";
447
+ function responseSchemaDialectFor(runtimeId) {
448
+ if (runtimeId === RESPONSE_SCHEMA_RUNTIME_ID) return "llamacpp-json-object";
449
+ if (runtimeId === OPENAI_SCHEMA_RUNTIME_ID) return "openai-json-schema";
450
+ return null;
451
+ }
437
452
  function runtimeSpeaksResponseSchemaDialect(runtime) {
438
453
  return runtime.id === RESPONSE_SCHEMA_RUNTIME_ID && runtime.kind === "http" && runtime.apiFamily === "openai-completions";
439
454
  }
@@ -1400,6 +1415,15 @@ var COUNCIL_JUDGE_PROMPT = [
1400
1415
  "You cannot modify anything.",
1401
1416
  'End with a JSON object only: {"verdict":"...","text":"the supported synthesis"}.'
1402
1417
  ].join("\n");
1418
+ var COUNCIL_VOTE_MEMBER_DIRECTIVE = [
1419
+ "This council round is a vote. Do the work the task asks for, then cast one ballot on it.",
1420
+ `The verdict is a short comparable token the other members can match exactly, such as "yes", "no", "keep", or the name of an option you were given. It must be a single line of at most ${COUNCIL_BALLOT_VERDICT_MAX_BYTES} bytes and is lower-cased before the tally. Anything longer is reasoning: put that in text, along with the evidence behind it.`,
1421
+ "Your recipe's own result shape does not apply to this run. The council reads the ballot and nothing else.",
1422
+ `End with a JSON object only: ${COUNCIL_BALLOT_SHAPE}`
1423
+ ].join("\n");
1424
+ function renderCouncilVoteMemberTask(originalTask) {
1425
+ return [originalTask, COUNCIL_VOTE_MEMBER_DIRECTIVE].join("\n\n");
1426
+ }
1403
1427
  var COMPETE_STANCES = [
1404
1428
  "minimal-diff",
1405
1429
  "test-first",
@@ -1502,6 +1526,34 @@ function sanitizeForDisplay(value) {
1502
1526
  function oneLine(value) {
1503
1527
  return value.replace(/\s+/g, " ").trim();
1504
1528
  }
1529
+ var DISPLAY_TAB_WIDTH = 4;
1530
+ var CONTROL_BYTE_PLACEHOLDER = "\xB7";
1531
+ function sanitizeMultilineDisplayText(value) {
1532
+ const escapesStripped = value.replace(OSC_PATTERN, "").replace(CSI_PATTERN, "");
1533
+ let neutralized = escapesStripped.length !== value.length;
1534
+ const stripped = escapesStripped.replace(/\r\n/g, "\n");
1535
+ let tabsExpanded = false;
1536
+ let out = "";
1537
+ for (const ch of stripped) {
1538
+ if (ch === "\n") {
1539
+ out += ch;
1540
+ continue;
1541
+ }
1542
+ if (ch === " ") {
1543
+ out += " ".repeat(DISPLAY_TAB_WIDTH);
1544
+ tabsExpanded = true;
1545
+ continue;
1546
+ }
1547
+ const code = ch.codePointAt(0) ?? 0;
1548
+ if (code < 32 || code === 127) {
1549
+ out += CONTROL_BYTE_PLACEHOLDER;
1550
+ neutralized = true;
1551
+ continue;
1552
+ }
1553
+ out += ch;
1554
+ }
1555
+ return { text: out, neutralized, tabsExpanded };
1556
+ }
1505
1557
  function sanitizeCallTargetText(value) {
1506
1558
  return oneLine(sanitizeForDisplay(value));
1507
1559
  }
@@ -2716,6 +2768,10 @@ function builtin(spec, sourceInfo) {
2716
2768
  // src/domains/safety/run-effects.ts
2717
2769
  init_esm_shims();
2718
2770
  import path from "node:path";
2771
+ var ENUMERABLE_ACTION_CLASSES = /* @__PURE__ */ new Set(["read", "write"]);
2772
+ function toolWritesOpaquely(toolName) {
2773
+ return !ENUMERABLE_ACTION_CLASSES.has(classify({ tool: toolName }).actionClass);
2774
+ }
2719
2775
  var GIT_PATH_MUTATIONS = /* @__PURE__ */ new Set(["mv", "rm"]);
2720
2776
  function gitPathOperands(command) {
2721
2777
  const targets = [];
@@ -2763,23 +2819,28 @@ function validationCommandOf(toolName, args, scope) {
2763
2819
  }
2764
2820
  return typedValidationSummary(toolName, { args: args ?? {} });
2765
2821
  }
2766
- function createRunEffectsRecorder(cwd) {
2822
+ function createRunEffectsRecorder(cwd, options = {}) {
2767
2823
  const pending = /* @__PURE__ */ new Map();
2768
2824
  const mutatedPaths = /* @__PURE__ */ new Set();
2769
2825
  const failedMutationPaths = /* @__PURE__ */ new Set();
2770
2826
  const validationCommands = /* @__PURE__ */ new Set();
2771
2827
  const verificationCommands = /* @__PURE__ */ new Set();
2828
+ const writeRecordDowngrades = /* @__PURE__ */ new Map();
2772
2829
  return {
2773
2830
  start(toolCallId, toolName, args) {
2774
2831
  const paths = mutationTargets(toolName, args);
2775
2832
  const validationCommand = validationCommandOf(toolName, args, "finish-contract");
2776
2833
  const verificationCommand = validationCommandOf(toolName, args, "grounding");
2777
- if (paths.length === 0 && validationCommand === null && verificationCommand === null) return;
2834
+ const opaque = toolWritesOpaquely(toolName);
2835
+ if (!opaque && paths.length === 0 && validationCommand === null && verificationCommand === null) return;
2778
2836
  const base = typeof args?.cwd === "string" && args.cwd.length > 0 ? path.resolve(cwd, args.cwd) : cwd;
2779
2837
  pending.set(toolCallId, {
2838
+ tool: toolName,
2839
+ toolCallId,
2780
2840
  paths: paths.map((target) => path.resolve(base, target)),
2781
2841
  validationCommand,
2782
- verificationCommand
2842
+ verificationCommand,
2843
+ opaque
2783
2844
  });
2784
2845
  },
2785
2846
  finish(toolCallId, failed) {
@@ -2790,6 +2851,16 @@ function createRunEffectsRecorder(cwd) {
2790
2851
  for (const target of effects.paths) failedMutationPaths.add(target);
2791
2852
  return;
2792
2853
  }
2854
+ if (effects.opaque) {
2855
+ const downgrade = {
2856
+ reason: "opaque_tool_succeeded",
2857
+ tool: effects.tool,
2858
+ toolCallId: effects.toolCallId
2859
+ };
2860
+ const recordWasComplete = writeRecordDowngrades.size === 0;
2861
+ writeRecordDowngrades.set(effects.toolCallId, downgrade);
2862
+ if (recordWasComplete) options.onWriteRecordDowngraded?.({ ...downgrade });
2863
+ }
2793
2864
  for (const target of effects.paths) mutatedPaths.add(target);
2794
2865
  if (effects.validationCommand !== null) validationCommands.add(effects.validationCommand);
2795
2866
  if (effects.verificationCommand !== null) verificationCommands.add(effects.verificationCommand);
@@ -2799,7 +2870,9 @@ function createRunEffectsRecorder(cwd) {
2799
2870
  mutatedPaths: new Set(mutatedPaths),
2800
2871
  failedMutationPaths: new Set([...failedMutationPaths].filter((target) => !mutatedPaths.has(target))),
2801
2872
  validationCommands: new Set(validationCommands),
2802
- verificationCommands: new Set(verificationCommands)
2873
+ verificationCommands: new Set(verificationCommands),
2874
+ writeRecordComplete: writeRecordDowngrades.size === 0,
2875
+ writeRecordDowngrades: [...writeRecordDowngrades.values()].map((entry) => ({ ...entry }))
2803
2876
  };
2804
2877
  }
2805
2878
  };
@@ -3031,10 +3104,223 @@ function renderAll(entries) {
3031
3104
  return lines.join("\n");
3032
3105
  }
3033
3106
 
3107
+ // src/domains/dispatch/path-scope.ts
3108
+ init_esm_shims();
3109
+ var DISPATCH_PATH_TOKEN_RE = /(?:[\w.-]+\/)+[\w.-]+|\b[\w-]+\.[A-Za-z0-9]{1,8}\b/g;
3110
+ var HTTP_URL_RE = /\bhttps?:\/\/\S+/gu;
3111
+ var POSIX_ABSOLUTE_TOKEN_RE = /(?:^|[\s("'])((?:\/[\w.~+-]+)+)/gu;
3112
+ var WINDOWS_ABSOLUTE_TOKEN_RE = /(?:^|[\s("'])([A-Za-z]:[\\/][^\s"']+)/gu;
3113
+ var BACKSLASH_PATH_RE = /\b[A-Za-z_.-][\w.-]*\\(?:(?:[\w.-]+\\)+[\w.-]+|[\w-]+\.[A-Za-z0-9]{1,8})\b/gu;
3114
+ var DOUBLE_SEPARATOR_PATH_RE = /\b[\w.-]+\/\/[\w./-]+/gu;
3115
+ var DispatchPathScopeInferenceError = class extends Error {
3116
+ code;
3117
+ source;
3118
+ token;
3119
+ constructor(code, source, token, detail) {
3120
+ super(`${code}: ${source} contains ${detail} '${token}'; declare intent explicitly`);
3121
+ this.name = "DispatchPathScopeInferenceError";
3122
+ this.code = code;
3123
+ this.source = source;
3124
+ this.token = token;
3125
+ }
3126
+ };
3127
+ var DECLARED_EVIDENCE = {
3128
+ readRoots: {
3129
+ provenance: "declared",
3130
+ source: "intent.read_roots",
3131
+ confidence: "certain",
3132
+ reason: "explicit_intent"
3133
+ },
3134
+ writeRoots: {
3135
+ provenance: "declared",
3136
+ source: "intent.write_roots",
3137
+ confidence: "certain",
3138
+ reason: "explicit_intent"
3139
+ },
3140
+ relevantPaths: {
3141
+ provenance: "declared",
3142
+ source: "intent.relevant_paths",
3143
+ confidence: "certain",
3144
+ reason: "explicit_intent"
3145
+ }
3146
+ };
3147
+ function cloneEvidence(evidence) {
3148
+ return { ...evidence };
3149
+ }
3150
+ function addProvenance(entries, path4, evidence) {
3151
+ const current = entries.get(path4);
3152
+ if (current === void 0) {
3153
+ entries.set(path4, { path: path4, evidence: [cloneEvidence(evidence)] });
3154
+ return;
3155
+ }
3156
+ if (!current.evidence.some((entry) => entry.source === evidence.source)) {
3157
+ current.evidence.push(cloneEvidence(evidence));
3158
+ }
3159
+ }
3160
+ function sortedEntries(entries) {
3161
+ return [...entries.values()].sort((left, right) => left.path < right.path ? -1 : left.path > right.path ? 1 : 0).map((entry) => ({ path: entry.path, evidence: entry.evidence.map(cloneEvidence) }));
3162
+ }
3163
+ function declaredIntentPathProvenance(input) {
3164
+ const entries = /* @__PURE__ */ new Map();
3165
+ for (const path4 of input.readRoots) addProvenance(entries, path4, DECLARED_EVIDENCE.readRoots);
3166
+ for (const path4 of input.writeRoots) addProvenance(entries, path4, DECLARED_EVIDENCE.writeRoots);
3167
+ for (const path4 of input.relevantPaths) addProvenance(entries, path4, DECLARED_EVIDENCE.relevantPaths);
3168
+ return sortedEntries(entries);
3169
+ }
3170
+ function inferredPaths(req) {
3171
+ const paths = /* @__PURE__ */ new Set();
3172
+ const text = `${req.task}
3173
+ ${req.briefing ?? ""}`;
3174
+ for (const match of text.matchAll(DISPATCH_PATH_TOKEN_RE)) {
3175
+ const token = inferredPathToken(match[0]);
3176
+ if (token.startsWith("http://") || token.startsWith("https://")) continue;
3177
+ paths.add(token);
3178
+ }
3179
+ return [...paths];
3180
+ }
3181
+ function inferredPathToken(token) {
3182
+ return token.replace(/\.+$/u, "");
3183
+ }
3184
+ function failMalformedText(text, source) {
3185
+ const withoutUrls = text.replace(HTTP_URL_RE, (url) => " ".repeat(url.length));
3186
+ const absolute = POSIX_ABSOLUTE_TOKEN_RE.exec(withoutUrls)?.[1];
3187
+ POSIX_ABSOLUTE_TOKEN_RE.lastIndex = 0;
3188
+ if (absolute !== void 0) {
3189
+ throw new DispatchPathScopeInferenceError("legacy_scope_path_absolute", source, absolute, "an absolute path token");
3190
+ }
3191
+ const windowsAbsolute = WINDOWS_ABSOLUTE_TOKEN_RE.exec(withoutUrls)?.[1];
3192
+ WINDOWS_ABSOLUTE_TOKEN_RE.lastIndex = 0;
3193
+ if (windowsAbsolute !== void 0) {
3194
+ throw new DispatchPathScopeInferenceError(
3195
+ "legacy_scope_path_absolute",
3196
+ source,
3197
+ windowsAbsolute,
3198
+ "an absolute path token"
3199
+ );
3200
+ }
3201
+ for (const pattern of [BACKSLASH_PATH_RE, DOUBLE_SEPARATOR_PATH_RE]) {
3202
+ const malformed = pattern.exec(withoutUrls)?.[0];
3203
+ pattern.lastIndex = 0;
3204
+ if (malformed !== void 0) {
3205
+ throw new DispatchPathScopeInferenceError(
3206
+ "legacy_scope_path_malformed",
3207
+ source,
3208
+ malformed,
3209
+ "a malformed path token"
3210
+ );
3211
+ }
3212
+ }
3213
+ }
3214
+ function strictInferredPaths(text, source) {
3215
+ failMalformedText(text, source);
3216
+ const withoutUrls = text.replace(HTTP_URL_RE, (url) => " ".repeat(url.length));
3217
+ const evidence = source === "task" ? { provenance: "inferred", source, confidence: "medium", reason: "task_path_token" } : { provenance: "inferred", source, confidence: "low", reason: "briefing_path_token" };
3218
+ const result = [];
3219
+ for (const match of withoutUrls.matchAll(DISPATCH_PATH_TOKEN_RE)) {
3220
+ const token = inferredPathToken(match[0]);
3221
+ try {
3222
+ result.push({ path: normalizePathBoundaryEntry(token), evidence });
3223
+ } catch (error) {
3224
+ const code = error instanceof PathBoundaryError && error.code === "absolute" ? "legacy_scope_path_absolute" : "legacy_scope_path_malformed";
3225
+ throw new DispatchPathScopeInferenceError(
3226
+ code,
3227
+ source,
3228
+ token,
3229
+ code === "legacy_scope_path_absolute" ? "an absolute path token" : "a malformed path token"
3230
+ );
3231
+ }
3232
+ }
3233
+ return result;
3234
+ }
3235
+ function legacyPathScope(req, cwd) {
3236
+ const workingEntries = /* @__PURE__ */ new Map();
3237
+ const writeEntries = /* @__PURE__ */ new Map();
3238
+ const writeEvidence = {
3239
+ provenance: "derived",
3240
+ source: "writeRoots",
3241
+ confidence: "high",
3242
+ reason: "legacy_write_roots"
3243
+ };
3244
+ for (const root of req.writeRoots ?? []) {
3245
+ addProvenance(workingEntries, root, writeEvidence);
3246
+ addProvenance(writeEntries, asDirectoryPathBoundary(resolvePathBoundary(cwd, root)), writeEvidence);
3247
+ }
3248
+ for (const candidate of strictInferredPaths(req.task, "task")) {
3249
+ addProvenance(workingEntries, candidate.path, candidate.evidence);
3250
+ }
3251
+ if (req.briefing !== void 0) {
3252
+ for (const candidate of strictInferredPaths(req.briefing, "briefing")) {
3253
+ addProvenance(workingEntries, candidate.path, candidate.evidence);
3254
+ }
3255
+ }
3256
+ const workingContext = [...workingEntries.values()].map((entry) => ({
3257
+ path: entry.path,
3258
+ evidence: entry.evidence.map(cloneEvidence)
3259
+ }));
3260
+ const writeBoundaries = [...writeEntries.values()].map((entry) => ({
3261
+ path: entry.path,
3262
+ evidence: entry.evidence.map(cloneEvidence)
3263
+ }));
3264
+ return {
3265
+ source: "inferred",
3266
+ workingContextPaths: workingContext.map((entry) => entry.path),
3267
+ writeBoundaries: writeBoundaries.map((entry) => entry.path),
3268
+ inferredOnlyPaths: [],
3269
+ provenance: {
3270
+ version: 1,
3271
+ mode: "legacy-inferred",
3272
+ workingContextPaths: workingContext,
3273
+ writeBoundaries
3274
+ }
3275
+ };
3276
+ }
3277
+ function resolveDispatchPathScope(req) {
3278
+ const cwd = req.cwd ?? process.cwd();
3279
+ if (req.intent === void 0) return legacyPathScope(req, cwd);
3280
+ const declaredProvenance = declaredIntentPathProvenance(req.intent);
3281
+ const declaredPaths = declaredProvenance.map((entry) => entry.path);
3282
+ const inferredOnlyPaths = inferredPaths(req).filter((candidate) => !pathBoundaryCovers(declaredPaths, candidate));
3283
+ const writeEvidence = DECLARED_EVIDENCE.writeRoots;
3284
+ const writeBoundaries = req.intent.writeRoots.map((root) => ({
3285
+ path: resolvePathBoundary(cwd, root),
3286
+ evidence: [cloneEvidence(writeEvidence)]
3287
+ }));
3288
+ return {
3289
+ source: "declared",
3290
+ workingContextPaths: declaredPaths,
3291
+ writeBoundaries: writeBoundaries.map((entry) => entry.path),
3292
+ inferredOnlyPaths,
3293
+ provenance: {
3294
+ version: 1,
3295
+ mode: "declared",
3296
+ workingContextPaths: declaredProvenance,
3297
+ writeBoundaries
3298
+ }
3299
+ };
3300
+ }
3301
+ function declaredScopeReplacementDiagnostic(scope) {
3302
+ if (scope.source !== "declared" || scope.inferredOnlyPaths.length === 0) return null;
3303
+ return `typed_scope_replaced_inferred_paths: typed intent omitted prose-inferred paths ${scope.inferredOnlyPaths.join(
3304
+ ", "
3305
+ )}; those paths did not select project rules or expand worker authority`;
3306
+ }
3307
+ function declaredScopeReplacementNotice(scope) {
3308
+ if (scope.source !== "declared" || scope.inferredOnlyPaths.length === 0) return null;
3309
+ const omittedPaths = [...scope.inferredOnlyPaths];
3310
+ return {
3311
+ code: "typed_scope_replaced_inferred_paths",
3312
+ level: "warning",
3313
+ omittedPaths,
3314
+ message: `[dispatch scope] typed intent replaced prose path inference; omitted paths: ${omittedPaths.join(
3315
+ ", "
3316
+ )}. Those paths did not select project rules or expand worker authority.`
3317
+ };
3318
+ }
3319
+
3034
3320
  // src/domains/dispatch/intent.ts
3035
3321
  init_esm_shims();
3036
3322
  import path2 from "node:path";
3037
- var DISPATCH_INTENT_PATH_LIST_CAP = 32;
3323
+ var DISPATCH_INTENT_PATH_LIST_CAP = PATH_BOUNDARY_MAX_ENTRIES;
3038
3324
  var DISPATCH_INTENT_PATH_ENTRY_BYTES_CAP = 512;
3039
3325
  var DISPATCH_INTENT_VERIFICATION_CAP = 8;
3040
3326
  var DISPATCH_INTENT_TIMEOUT_MIN_MS = 1e3;
@@ -3048,7 +3334,7 @@ function compareCodepoints(left, right) {
3048
3334
  function fail(reason, message) {
3049
3335
  return { ok: false, reason, message };
3050
3336
  }
3051
- function normalizePathEntry(value, field, index) {
3337
+ function checkedPathText(value, field, index) {
3052
3338
  if (typeof value !== "string" || value.trim().length === 0) {
3053
3339
  return fail("intent_path_malformed", `${field}[${index}] must be a non-empty repository-relative POSIX path`);
3054
3340
  }
@@ -3059,6 +3345,32 @@ function normalizePathEntry(value, field, index) {
3059
3345
  `${field}[${index}] exceeds the ${DISPATCH_INTENT_PATH_ENTRY_BYTES_CAP}-byte cap`
3060
3346
  );
3061
3347
  }
3348
+ return trimmed;
3349
+ }
3350
+ function normalizeScopePathEntry(value, field, index) {
3351
+ const checked = checkedPathText(value, field, index);
3352
+ if (typeof checked !== "string") return checked;
3353
+ try {
3354
+ return normalizePathBoundaryEntry(checked);
3355
+ } catch (error) {
3356
+ if (error instanceof PathBoundaryError) {
3357
+ if (error.code === "absolute") {
3358
+ return fail("intent_path_absolute", `${field}[${index}] must be a repository-relative POSIX path`);
3359
+ }
3360
+ if (error.code === "parent") {
3361
+ return fail("intent_path_escapes_root", `${field}[${index}] escapes the repository root`);
3362
+ }
3363
+ }
3364
+ return fail(
3365
+ "intent_path_malformed",
3366
+ `${field}[${index}] does not follow the repository path boundary grammar: ${error instanceof Error ? error.message : String(error)}`
3367
+ );
3368
+ }
3369
+ }
3370
+ function normalizeExpectedOutputEntry(value, field, index) {
3371
+ const checked = checkedPathText(value, field, index);
3372
+ if (typeof checked !== "string") return checked;
3373
+ const trimmed = checked;
3062
3374
  if (trimmed.includes("\\") || path2.posix.isAbsolute(trimmed) || path2.win32.isAbsolute(trimmed)) {
3063
3375
  return fail("intent_path_absolute", `${field}[${index}] must be a repository-relative POSIX path`);
3064
3376
  }
@@ -3071,7 +3383,7 @@ function normalizePathEntry(value, field, index) {
3071
3383
  }
3072
3384
  return normalized;
3073
3385
  }
3074
- function normalizePathList(value, field) {
3386
+ function normalizePathList(value, field, normalizeEntry = normalizeScopePathEntry) {
3075
3387
  if (value === void 0) return [];
3076
3388
  if (!Array.isArray(value)) return fail("intent_path_malformed", `${field} must be an array`);
3077
3389
  if (value.length > DISPATCH_INTENT_PATH_LIST_CAP) {
@@ -3079,17 +3391,29 @@ function normalizePathList(value, field) {
3079
3391
  }
3080
3392
  const normalized = [];
3081
3393
  for (const [index, entry] of value.entries()) {
3082
- const result = normalizePathEntry(entry, field, index);
3394
+ const result = normalizeEntry(entry, field, index);
3083
3395
  if (typeof result !== "string") return result;
3084
3396
  normalized.push(result);
3085
3397
  }
3086
3398
  return [...new Set(normalized)].sort(compareCodepoints);
3087
3399
  }
3088
3400
  function isDispatchIntent(value) {
3089
- if (!isRecord2(value) || value.version !== 1) return false;
3401
+ if (!isRecord2(value) || value.version !== 2) return false;
3090
3402
  for (const field of ["readRoots", "writeRoots", "relevantPaths", "expectedOutputs"]) {
3091
3403
  if (!Array.isArray(value[field]) || !value[field].every((entry) => typeof entry === "string")) return false;
3092
3404
  }
3405
+ const readRoots = value.readRoots;
3406
+ const writeRoots = value.writeRoots;
3407
+ const relevantPaths = value.relevantPaths;
3408
+ if (!Array.isArray(value.pathProvenance) || JSON.stringify(value.pathProvenance) !== JSON.stringify(
3409
+ declaredIntentPathProvenance({
3410
+ readRoots,
3411
+ writeRoots,
3412
+ relevantPaths
3413
+ })
3414
+ )) {
3415
+ return false;
3416
+ }
3093
3417
  return Array.isArray(value.verification) && value.verification.every(
3094
3418
  (entry) => isRecord2(entry) && typeof entry.check === "string" && entry.check.length > 0 && typeof entry.timeoutMs === "number" && Number.isInteger(entry.timeoutMs) && entry.timeoutMs >= DISPATCH_INTENT_TIMEOUT_MIN_MS
3095
3419
  );
@@ -3104,7 +3428,11 @@ function normalizeDispatchIntent(raw, checks) {
3104
3428
  if (!Array.isArray(writeRoots)) return writeRoots;
3105
3429
  const relevantPaths = normalizePathList(raw.relevant_paths, "intent.relevant_paths");
3106
3430
  if (!Array.isArray(relevantPaths)) return relevantPaths;
3107
- const expectedOutputs = normalizePathList(raw.expected_outputs, "intent.expected_outputs");
3431
+ const expectedOutputs = normalizePathList(
3432
+ raw.expected_outputs,
3433
+ "intent.expected_outputs",
3434
+ normalizeExpectedOutputEntry
3435
+ );
3108
3436
  if (!Array.isArray(expectedOutputs)) return expectedOutputs;
3109
3437
  const rawVerification = raw.verification ?? [];
3110
3438
  if (!Array.isArray(rawVerification)) {
@@ -3140,7 +3468,15 @@ function normalizeDispatchIntent(raw, checks) {
3140
3468
  }
3141
3469
  return {
3142
3470
  ok: true,
3143
- intent: { version: 1, readRoots, writeRoots, relevantPaths, expectedOutputs, verification }
3471
+ intent: {
3472
+ version: 2,
3473
+ readRoots,
3474
+ writeRoots,
3475
+ relevantPaths,
3476
+ pathProvenance: declaredIntentPathProvenance({ readRoots, writeRoots, relevantPaths }),
3477
+ expectedOutputs,
3478
+ verification
3479
+ }
3144
3480
  };
3145
3481
  }
3146
3482
 
@@ -3419,8 +3755,8 @@ function validateJobSpec(spec) {
3419
3755
  }
3420
3756
  if (isDispatchIntent(spec.intent) && spec.intent.writeRoots.length > 0 && Array.isArray(spec.writeRoots)) {
3421
3757
  const jobCwd = typeof spec.cwd === "string" && spec.cwd.length > 0 ? spec.cwd : process.cwd();
3422
- const legacy = [...new Set(spec.writeRoots.map((root) => path3.resolve(jobCwd, String(root))))].sort();
3423
- const declared = [...new Set(spec.intent.writeRoots.map((root) => path3.resolve(jobCwd, root)))].sort();
3758
+ const legacy = [...new Set(spec.writeRoots.map((root) => resolvePathBoundary(jobCwd, String(root))))].sort();
3759
+ const declared = [...new Set(spec.intent.writeRoots.map((root) => resolvePathBoundary(jobCwd, root)))].sort();
3424
3760
  if (JSON.stringify(legacy) !== JSON.stringify(declared)) errors.push("intent_write_roots_contradiction");
3425
3761
  }
3426
3762
  if ("requestOrigin" in spec && spec.requestOrigin !== void 0) {
@@ -3514,7 +3850,7 @@ function validateJobSpec(spec) {
3514
3850
  const effectiveWriteRoots = Array.isArray(spec.writeRoots) && spec.writeRoots.length > 0 && spec.writeRoots.every((root) => typeof root === "string" && root.length > 0) ? spec.writeRoots : isDispatchIntent(spec.intent) && spec.intent.writeRoots.length > 0 ? spec.intent.writeRoots : void 0;
3515
3851
  if (effectiveWriteRoots !== void 0) {
3516
3852
  const jobCwd = typeof spec.cwd === "string" && spec.cwd.length > 0 ? spec.cwd : process.cwd();
3517
- out.writeRoots = effectiveWriteRoots.map((root) => path3.resolve(jobCwd, String(root)));
3853
+ out.writeRoots = isDispatchIntent(spec.intent) ? effectiveWriteRoots.map((root) => resolvePathBoundary(jobCwd, String(root))) : effectiveWriteRoots.map((root) => asDirectoryPathBoundary(path3.resolve(jobCwd, String(root))));
3518
3854
  }
3519
3855
  if (typeof spec.requestOrigin === "string" && VALID_REQUEST_ORIGINS.has(spec.requestOrigin)) {
3520
3856
  out.requestOrigin = spec.requestOrigin;
@@ -4103,12 +4439,14 @@ function agentRoleReadinessReport(entries) {
4103
4439
 
4104
4440
  export {
4105
4441
  RESPONSE_SCHEMA_RUNTIME_ID,
4442
+ responseSchemaDialectFor,
4106
4443
  runtimeSpeaksResponseSchemaDialect,
4107
4444
  responseSchemaConflictsWithTools,
4108
4445
  UnsupportedResponseSchemaError,
4109
4446
  isResponseSchemaRejection,
4110
4447
  redactSecretString,
4111
4448
  redactToolArgs,
4449
+ sanitizeMultilineDisplayText,
4112
4450
  sanitizeCallTargetText,
4113
4451
  describeCallAction,
4114
4452
  describeCallTarget,
@@ -4167,9 +4505,13 @@ export {
4167
4505
  REVIEWER_GATE_PROMPT,
4168
4506
  JUDGE_GATE_PROMPT,
4169
4507
  COUNCIL_JUDGE_PROMPT,
4508
+ renderCouncilVoteMemberTask,
4170
4509
  COMPETE_STANCES,
4171
4510
  competeStanceLiner,
4172
4511
  isBoundedGateRolePrompt,
4512
+ resolveDispatchPathScope,
4513
+ declaredScopeReplacementDiagnostic,
4514
+ declaredScopeReplacementNotice,
4173
4515
  isRunOutcomeCode,
4174
4516
  RETRYABLE_OUTCOMES,
4175
4517
  isTerminalRunEnvelope,
@@ -4180,4 +4522,4 @@ export {
4180
4522
  DISPATCH_BRIEFING_MAX_BYTES,
4181
4523
  validateJobSpec
4182
4524
  };
4183
- //# sourceMappingURL=chunk-CEYBNUGC.js.map
4525
+ //# sourceMappingURL=chunk-4H6ULJ3H.js.map
@@ -1,29 +1,29 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
- import {
3
- parseTomlDocument,
4
- tomlTableAt
5
- } from "./chunk-LCGCVYZ4.js";
6
2
  import {
7
3
  verifyTool
8
- } from "./chunk-UFQ3F4FW.js";
4
+ } from "./chunk-NQ6UCCOD.js";
9
5
  import {
10
6
  discoverDeclaredChecksAtRoot,
11
7
  discoverDeclaredProjectEntriesAtRoot
12
- } from "./chunk-PD3MESLB.js";
8
+ } from "./chunk-P3JGPQFL.js";
9
+ import {
10
+ parseTomlDocument,
11
+ tomlTableAt
12
+ } from "./chunk-LCGCVYZ4.js";
13
13
  import {
14
14
  PROJECT_VERIFIER_CATALOG_CAPS,
15
15
  PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
16
16
  PROJECT_VERIFIER_CATALOG_VERSION,
17
17
  compareCodepoints,
18
18
  parseProjectVerifierCatalogText
19
- } from "./chunk-GH5622CP.js";
19
+ } from "./chunk-A2NJGIB3.js";
20
20
  import {
21
21
  isVerificationScriptName
22
22
  } from "./chunk-UL3WSD3F.js";
23
23
  import {
24
24
  SAFE_EXEC_DEFAULT_TIMEOUT_MS,
25
25
  resolveSafeCwd
26
- } from "./chunk-D4MDIG46.js";
26
+ } from "./chunk-B5CSFE7B.js";
27
27
  import {
28
28
  require_dist
29
29
  } from "./chunk-APJ265NV.js";
@@ -960,4 +960,4 @@ export {
960
960
  previewVerifierDraft,
961
961
  runVerifierAuthoringWorkflow
962
962
  };
963
- //# sourceMappingURL=chunk-YTYFXUI3.js.map
963
+ //# sourceMappingURL=chunk-4LJX2PUC.js.map
@@ -1,7 +1,10 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ readClioVersion
4
+ } from "./chunk-IWHMRKLL.js";
2
5
  import {
3
6
  DEFAULT_SETTINGS_YAML
4
- } from "./chunk-4DGYLA73.js";
7
+ } from "./chunk-XDOQXGFO.js";
5
8
  import {
6
9
  clioCacheDir,
7
10
  clioConfigDir,
@@ -9,9 +12,6 @@ import {
9
12
  clioStateDir,
10
13
  resolveClioDirs
11
14
  } from "./chunk-BNAZZHFG.js";
12
- import {
13
- readClioVersion
14
- } from "./chunk-IWHMRKLL.js";
15
15
  import {
16
16
  init_esm_shims
17
17
  } from "./chunk-3R73A4XB.js";
@@ -143,4 +143,4 @@ function enforceHomePrefixGuard() {
143
143
  export {
144
144
  initializeClioHome
145
145
  };
146
- //# sourceMappingURL=chunk-DOOEX22V.js.map
146
+ //# sourceMappingURL=chunk-56KB5IJP.js.map