@iowarp/clio-coder 0.3.6 → 0.3.8

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 (323) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +22 -6
  3. package/dist/{acp-2BEHC4DL.js → acp-U67UHUK2.js} +14 -14
  4. package/dist/{agents-LNNFTM53.js → agents-YU6SGALZ.js} +42 -35
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-KXXFI2VS.js → auth-5ZPJOIVG.js} +32 -24
  7. package/dist/builtins-C6JMZVV6.js +17 -0
  8. package/dist/{chunk-E25LMLRW.js → chunk-26LEYJZH.js} +2 -2
  9. package/dist/{chunk-TSHXZTOQ.js → chunk-2HEJ2F35.js} +5 -5
  10. package/dist/{chunk-PBTHKCPN.js → chunk-2HFZQUHL.js} +7 -7
  11. package/dist/{chunk-FO5ZOVUY.js → chunk-3BINW3FP.js} +5 -5
  12. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  13. package/dist/{chunk-CKXWIANG.js → chunk-4SPRNWDE.js} +18 -16
  14. package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
  15. package/dist/{chunk-XF5N4U5A.js → chunk-5DHKRSMQ.js} +9 -8
  16. package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
  17. package/dist/{chunk-EKY57CSP.js → chunk-5H3GB5BO.js} +68 -772
  18. package/dist/{chunk-6XXKFVSN.js → chunk-5Q2VVUKB.js} +4 -4
  19. package/dist/{chunk-DJVECN66.js → chunk-7RFXX52T.js} +295 -3705
  20. package/dist/{chunk-ZXF4XRKW.js → chunk-7RGZWPB6.js} +158 -8
  21. package/dist/{chunk-FYYLNIL5.js → chunk-A2NJGIB3.js} +2 -2
  22. package/dist/{chunk-XXQNGV4M.js → chunk-A3WNZD3P.js} +548 -72
  23. package/dist/{chunk-VEZEGCGW.js → chunk-B5CSFE7B.js} +23 -21
  24. package/dist/{chunk-2SFS6XQE.js → chunk-DGSYXYMX.js} +3 -2
  25. package/dist/chunk-DR52UMZW.js +21 -0
  26. package/dist/{chunk-ZWLZP4ZT.js → chunk-DYIM5TJT.js} +98 -12
  27. package/dist/{chunk-QKMUKYO7.js → chunk-E77JEWSD.js} +270 -125
  28. package/dist/{chunk-LYF7OHWH.js → chunk-EMYUUSFG.js} +12 -467
  29. package/dist/{chunk-4VP4KH3K.js → chunk-EQ63NRB7.js} +8 -8
  30. package/dist/chunk-FBVTI2TJ.js +518 -0
  31. package/dist/{chunk-R46L2BIR.js → chunk-FHJEP5SW.js} +19 -25
  32. package/dist/{chunk-WR67VIZY.js → chunk-GN57SG4G.js} +66 -8
  33. package/dist/{chunk-RD5U66HV.js → chunk-GPIEI3LY.js} +9 -9
  34. package/dist/{chunk-PCZJO5TI.js → chunk-GU2UIAFZ.js} +13 -178
  35. package/dist/chunk-GWS3VEIW.js +195 -0
  36. package/dist/chunk-H7IXIC72.js +103 -0
  37. package/dist/{chunk-3BPUFZDL.js → chunk-HLE42MG7.js} +3 -3
  38. package/dist/{chunk-24I7BN55.js → chunk-IFBNV6H6.js} +3 -3
  39. package/dist/{chunk-QNQHSOLF.js → chunk-IGWKHNIQ.js} +114 -55
  40. package/dist/chunk-IIZWH4XA.js +172 -0
  41. package/dist/{chunk-AD2SYQYC.js → chunk-IJ7RPIYJ.js} +124 -6
  42. package/dist/chunk-J3YUBZWY.js +382 -0
  43. package/dist/{chunk-5JGRAMKL.js → chunk-JOZYP4GM.js} +8 -6
  44. package/dist/{chunk-OH3TOQTB.js → chunk-K4XHGFR5.js} +751 -15
  45. package/dist/{chunk-EYPA3EGJ.js → chunk-KTYTFRMB.js} +178 -14
  46. package/dist/chunk-LU7P4LHA.js +33 -0
  47. package/dist/chunk-ME6CCNFO.js +108 -0
  48. package/dist/chunk-MXKJU4JB.js +1100 -0
  49. package/dist/{chunk-RY3LY4J5.js → chunk-N22QMJKY.js} +21 -18
  50. package/dist/chunk-NMPKI6XL.js +3006 -0
  51. package/dist/chunk-NUGM5KR6.js +165 -0
  52. package/dist/{chunk-22NAGB7X.js → chunk-P43ETTHK.js} +5 -94
  53. package/dist/{chunk-NILBFAPG.js → chunk-PMDBGQSJ.js} +2 -2
  54. package/dist/chunk-PT7HYKEM.js +165 -0
  55. package/dist/chunk-RVG5JXAL.js +41 -0
  56. package/dist/{chunk-GEYXPTRF.js → chunk-RWSI4YD7.js} +2 -2
  57. package/dist/{chunk-4BPJXDWC.js → chunk-TANS5ZJS.js} +35 -19
  58. package/dist/{verifiers-NCBTHHN2.js → chunk-TB5666IT.js} +67 -324
  59. package/dist/{chunk-QM3F2GKX.js → chunk-TLQJPP24.js} +7927 -8088
  60. package/dist/{chunk-G7MUEIGA.js → chunk-TT36MB5S.js} +2 -1
  61. package/dist/chunk-TTHACPOM.js +961 -0
  62. package/dist/{chunk-6US73PDB.js → chunk-TYPGUK6W.js} +7 -7
  63. package/dist/{chunk-MFFY33HR.js → chunk-U6MBIEMB.js} +554 -209
  64. package/dist/chunk-VAWNZU7Z.js +242 -0
  65. package/dist/{chunk-IR4CFBFN.js → chunk-VCBR6CU7.js} +12 -12
  66. package/dist/{chunk-WHJYKASB.js → chunk-VHN4MY6O.js} +2 -2
  67. package/dist/{chunk-XYDYPRZI.js → chunk-VWZOAB7K.js} +10 -10
  68. package/dist/{chunk-ZRGEBJ4T.js → chunk-WLFILSD5.js} +48 -48
  69. package/dist/{chunk-K7T3E2SR.js → chunk-WNIJTQQK.js} +12 -11
  70. package/dist/{chunk-CYQKWTG3.js → chunk-WSB3FPX7.js} +68 -20
  71. package/dist/{chunk-KHSFENX2.js → chunk-WWCZ5F23.js} +116 -14
  72. package/dist/{chunk-XE2VEJHX.js → chunk-WXY7KU3G.js} +2 -2
  73. package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
  74. package/dist/{chunk-KOHPCX4K.js → chunk-XWSF374K.js} +5 -5
  75. package/dist/{chunk-CJUB2JJ2.js → chunk-YS5VLNH5.js} +10 -10
  76. package/dist/{chunk-ZZMN5OM4.js → chunk-ZNLWCMVZ.js} +2 -2
  77. package/dist/{chunk-WHGPSPT5.js → chunk-ZVJ5BLO2.js} +2 -2
  78. package/dist/cli/index.js +33 -31
  79. package/dist/{clio-M2KGYUFZ.js → clio-QVTYJ57A.js} +10 -10
  80. package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +5 -5
  81. package/dist/codewiki/build-worker.js +4 -4
  82. package/dist/{components-5TTYYX6G.js → components-ZFA3SAER.js} +9 -9
  83. package/dist/{config-XUUYQIWO.js → config-LW5IJFQN.js} +65 -55
  84. package/dist/{configure-IHJ7YOMV.js → configure-7XIZCOU4.js} +29 -24
  85. package/dist/{context-75MIWW3U.js → context-L3WL3X7K.js} +54 -43
  86. package/dist/{context-ZQ7SIFJV.js → context-N52ZA626.js} +30 -14
  87. package/dist/{context-74JLXAWD.js → context-Y6Y7QPR6.js} +12 -12
  88. package/dist/{context-clear-GYKWNUML.js → context-clear-MBQRLSDQ.js} +54 -43
  89. package/dist/{context-index-SSR5ECNE.js → context-index-HVMFQHK3.js} +5 -5
  90. package/dist/{context-working-set-UX5KEP4J.js → context-working-set-GS6DSO7F.js} +18 -18
  91. package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-22ZCNOM3.js} +367 -79
  92. package/dist/{docs-6FZSCG5B.js → docs-7LQ23DLM.js} +9 -9
  93. package/dist/{doctor-SVJ5BZCW.js → doctor-M7YEDGAE.js} +27 -23
  94. package/dist/{eval-CG6LLBLD.js → eval-BEC2WHDA.js} +73 -20
  95. package/dist/{evidence-ZYFIEN42.js → evidence-REJUMSKM.js} +70 -59
  96. package/dist/{evolve-QGEXEMDW.js → evolve-PY5ZBA5K.js} +50 -39
  97. package/dist/{extensions-ADGNCJJD.js → extensions-HVKU65YU.js} +7 -7
  98. package/dist/{fleet-S5R4ZOQY.js → fleet-7WZEWRFA.js} +236 -377
  99. package/dist/fleet-commands-UVHWM76J.js +70 -0
  100. package/dist/fleet-graph-6ULH7PES.js +125 -0
  101. package/dist/fleet-new-RDVJLHHH.js +48 -0
  102. package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-J53T6CCE.js} +5 -5
  103. package/dist/fleet-validate-72PC4SLA.js +79 -0
  104. package/dist/{init-5DRU55YR.js → init-OG3TPGQG.js} +69 -57
  105. package/dist/library-CNTMPLRF.js +217 -0
  106. package/dist/{memory-7YKKR6UC.js → memory-6IS7F275.js} +52 -41
  107. package/dist/{models-ZPOLRU2C.js → models-ENRJDA5W.js} +37 -31
  108. package/dist/{monitor-US5F5YGZ.js → monitor-XLDVO7TN.js} +79 -42
  109. package/dist/{orchestrator-E2AL4T5N.js → orchestrator-6KSPYRHA.js} +4126 -762
  110. package/dist/{paths-E7KYAQWE.js → paths-DBXMZMDU.js} +6 -6
  111. package/dist/registry-LG64LTF4.js +11 -0
  112. package/dist/{reset-KZ652EK6.js → reset-RZ4ER727.js} +12 -12
  113. package/dist/{run-SRNBKDWD.js → run-Y2CNK5RU.js} +89 -76
  114. package/dist/{share-CGZE33UP.js → share-A55GYP6Z.js} +37 -13
  115. package/dist/{skills-S2X4DLY5.js → skills-ALC5J6AT.js} +29 -13
  116. package/dist/{skills-eval-W2GGIC4R.js → skills-eval-JPBEBYQU.js} +60 -48
  117. package/dist/support-MIETYA5E.js +38 -0
  118. package/dist/{targets-54SWINWB.js → targets-VGNXIR3S.js} +46 -36
  119. package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WOBR64YA.js} +4 -4
  120. package/dist/{uninstall-BVLWXKBT.js → uninstall-ZJF5H5ZN.js} +9 -9
  121. package/dist/{upgrade-JKAR27XC.js → upgrade-FUSUAGHR.js} +31 -28
  122. package/dist/{usage-MSAWCLX4.js → usage-N4MKVHKD.js} +140 -68
  123. package/dist/verifiers-YAWOJ3H2.js +336 -0
  124. package/dist/{verify-X5HDROLA.js → verify-LTDHYBGY.js} +10 -9
  125. package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-6M7GHTBJ.js} +75 -62
  126. package/dist/worker/entry.js +67 -57
  127. package/docs/README.md +3 -2
  128. package/docs/acp.md +1 -1
  129. package/docs/alcf-provider.md +1 -1
  130. package/docs/architecture.md +2 -2
  131. package/docs/artifact-versions.md +11 -6
  132. package/docs/built-in-agents.md +26 -2
  133. package/docs/capacity-and-scheduling.md +1 -1
  134. package/docs/commands-and-modes.md +83 -3
  135. package/docs/configuration-and-targets.md +86 -4
  136. package/docs/context-engine.md +1 -1
  137. package/docs/development-pipeline.md +1 -1
  138. package/docs/dispatch-architecture-rationale.md +1 -1
  139. package/docs/documentation-coverage.md +3 -3
  140. package/docs/documentation-guide.md +3 -3
  141. package/docs/eval-runner.md +1 -1
  142. package/docs/evals-internal.md +1 -1
  143. package/docs/evidence-and-memory.md +74 -10
  144. package/docs/evolution.md +1 -1
  145. package/docs/exit-codes-and-output.md +4 -1
  146. package/docs/extensions-and-sharing.md +6 -2
  147. package/docs/fleet-demo-runbook.md +2 -2
  148. package/docs/fleet-dispatch.md +228 -16
  149. package/docs/git-commit-provenance.md +2 -2
  150. package/docs/glossary.md +22 -2
  151. package/docs/installation-and-lifecycle.md +2 -2
  152. package/docs/middleware-and-components.md +2 -1
  153. package/docs/model-catalog.md +1 -1
  154. package/docs/observability.md +56 -9
  155. package/docs/proactive-memory.md +1 -1
  156. package/docs/prompt-envelope-and-tools.md +4 -2
  157. package/docs/provider-adapter-cookbook.md +1 -1
  158. package/docs/release-cut-checklist.md +83 -65
  159. package/docs/resource-library.md +59 -0
  160. package/docs/safety-model.md +2 -2
  161. package/docs/scientific-validation.md +3 -3
  162. package/docs/session-lifecycle.md +37 -1
  163. package/docs/skills-marketplace.md +16 -3
  164. package/docs/tool-usage.md +14 -7
  165. package/docs/trace-store.md +1 -1
  166. package/docs/troubleshooting.md +1 -1
  167. package/docs/tui-design.md +1 -1
  168. package/docs/worker-dispatch-mechanics.md +3 -3
  169. package/package.json +1 -2
  170. package/src/cli/argv.ts +5 -0
  171. package/src/cli/configure.ts +107 -23
  172. package/src/cli/doctor.ts +5 -1
  173. package/src/cli/evidence.ts +30 -25
  174. package/src/cli/fleet-commands.ts +37 -0
  175. package/src/cli/fleet-graph.ts +102 -0
  176. package/src/cli/fleet-new.ts +36 -0
  177. package/src/cli/fleet-preflight.ts +111 -0
  178. package/src/cli/fleet-validate.ts +30 -0
  179. package/src/cli/fleet.ts +173 -335
  180. package/src/cli/index.ts +3 -1
  181. package/src/cli/library.ts +190 -0
  182. package/src/cli/share.ts +13 -1
  183. package/src/cli/shared.ts +1 -0
  184. package/src/cli/targets.ts +4 -1
  185. package/src/cli/usage.ts +111 -19
  186. package/src/cli/validate-model.ts +60 -5
  187. package/src/core/bus-events.ts +29 -0
  188. package/src/core/commit-attribution.ts +4 -4
  189. package/src/core/config.ts +130 -0
  190. package/src/core/defaults.ts +81 -0
  191. package/src/core/path-boundary.ts +100 -0
  192. package/src/domains/agents/builtins/architect.md +1 -0
  193. package/src/domains/agents/builtins/oracle.md +33 -0
  194. package/src/domains/agents/catalog.ts +13 -1
  195. package/src/domains/agents/extension.ts +2 -11
  196. package/src/domains/agents/fleet-contract.ts +304 -24
  197. package/src/domains/agents/index.ts +14 -0
  198. package/src/domains/agents/recipe.ts +7 -1
  199. package/src/domains/agents/registry.ts +73 -5
  200. package/src/domains/agents/result-contract.ts +360 -15
  201. package/src/domains/agents/write-boundary.ts +15 -50
  202. package/src/domains/config/classify.ts +4 -0
  203. package/src/domains/context/project-rules.ts +51 -1
  204. package/src/domains/dispatch/active-route-planner.ts +14 -0
  205. package/src/domains/dispatch/assignment-reconcile.ts +22 -5
  206. package/src/domains/dispatch/assignment-store.ts +151 -14
  207. package/src/domains/dispatch/backoff.ts +2 -1
  208. package/src/domains/dispatch/capability-match.ts +1 -0
  209. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  210. package/src/domains/dispatch/contract.ts +48 -0
  211. package/src/domains/dispatch/delegation-plan.ts +164 -0
  212. package/src/domains/dispatch/execution-plan.ts +76 -5
  213. package/src/domains/dispatch/execution-role.ts +12 -2
  214. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  215. package/src/domains/dispatch/extension.ts +412 -74
  216. package/src/domains/dispatch/fleet-gate.ts +14 -0
  217. package/src/domains/dispatch/fleet-plan.ts +63 -3
  218. package/src/domains/dispatch/fleet-run.ts +791 -0
  219. package/src/domains/dispatch/gate-role-prompts.ts +47 -0
  220. package/src/domains/dispatch/host-verification.ts +178 -0
  221. package/src/domains/dispatch/index.ts +41 -1
  222. package/src/domains/dispatch/intent-requirements.ts +40 -0
  223. package/src/domains/dispatch/intent.ts +235 -0
  224. package/src/domains/dispatch/path-scope.ts +370 -0
  225. package/src/domains/dispatch/receipt-integrity.ts +9 -4
  226. package/src/domains/dispatch/state.ts +36 -3
  227. package/src/domains/dispatch/types.ts +64 -12
  228. package/src/domains/dispatch/validation.ts +69 -6
  229. package/src/domains/dispatch/write-boundary-enforcer.ts +45 -0
  230. package/src/domains/dispatch/write-boundary.ts +201 -22
  231. package/src/domains/eval/metrics/evidence.ts +79 -2
  232. package/src/domains/eval/runners/clio-run.ts +12 -2
  233. package/src/domains/evidence/build.ts +69 -11
  234. package/src/domains/evidence/index.ts +21 -0
  235. package/src/domains/evidence/provenance.ts +46 -11
  236. package/src/domains/evidence/trust-projection.ts +274 -0
  237. package/src/domains/evidence/trust-status.ts +155 -18
  238. package/src/domains/evidence/types.ts +4 -0
  239. package/src/domains/extensions/discovery.ts +88 -1
  240. package/src/domains/extensions/resources.ts +20 -8
  241. package/src/domains/extensions/state.ts +6 -2
  242. package/src/domains/extensions/types.ts +4 -1
  243. package/src/domains/lifecycle/doctor.ts +140 -1
  244. package/src/domains/middleware/index.ts +15 -0
  245. package/src/domains/middleware/watchdog.ts +281 -0
  246. package/src/domains/observability/contract.ts +3 -1
  247. package/src/domains/observability/cost.ts +12 -1
  248. package/src/domains/observability/extension.ts +2 -2
  249. package/src/domains/observability/index.ts +10 -0
  250. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  251. package/src/domains/prompts/contract.ts +3 -5
  252. package/src/domains/providers/extension.ts +30 -2
  253. package/src/domains/resources/common-loader.ts +3 -0
  254. package/src/domains/resources/index.ts +20 -0
  255. package/src/domains/resources/library.ts +326 -0
  256. package/src/domains/resources/prompts/loader.ts +119 -14
  257. package/src/domains/resources/skills/marketplace.ts +37 -12
  258. package/src/domains/safety/policy-engine.ts +5 -5
  259. package/src/domains/safety/run-effects.ts +64 -1
  260. package/src/domains/safety/scope.ts +7 -12
  261. package/src/domains/session/handoff.ts +629 -0
  262. package/src/domains/share/archive.ts +67 -2
  263. package/src/engine/acp/server.ts +4 -1
  264. package/src/engine/prompt-templates.ts +18 -1
  265. package/src/engine/worker-runtime.ts +6 -3
  266. package/src/entry/orchestrator.ts +37 -0
  267. package/src/interactive/bus-notices.ts +26 -0
  268. package/src/interactive/chat-loop.ts +235 -1
  269. package/src/interactive/chat-renderer.ts +22 -0
  270. package/src/interactive/cost-overlay.ts +31 -3
  271. package/src/interactive/council-dispatch.ts +30 -0
  272. package/src/interactive/council-grid.ts +213 -0
  273. package/src/interactive/council.ts +99 -0
  274. package/src/interactive/dispatch-board.ts +311 -17
  275. package/src/interactive/fleet-run-preview.ts +307 -0
  276. package/src/interactive/footer/notifications.ts +219 -0
  277. package/src/interactive/handoff-round.ts +56 -0
  278. package/src/interactive/interactive-application.ts +43 -1
  279. package/src/interactive/interactive-event-projection.ts +23 -1
  280. package/src/interactive/interactive-slash-runtime.ts +52 -2
  281. package/src/interactive/interactive-subscriptions.ts +14 -2
  282. package/src/interactive/oracle.ts +179 -0
  283. package/src/interactive/overlay-ask-user-lifecycle.ts +6 -0
  284. package/src/interactive/overlay-general-openers.ts +190 -1
  285. package/src/interactive/overlay-key-routing.ts +17 -1
  286. package/src/interactive/overlay-lifecycle.ts +41 -1
  287. package/src/interactive/overlay-permission-lifecycle.ts +10 -0
  288. package/src/interactive/overlay-resource-openers.ts +11 -3
  289. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  290. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  291. package/src/interactive/overlays/handoff-review.ts +185 -0
  292. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  293. package/src/interactive/overlays/list-overlay.ts +168 -2
  294. package/src/interactive/overlays/settings.ts +221 -30
  295. package/src/interactive/overlays/side-question.ts +139 -0
  296. package/src/interactive/overlays/skills-hub.ts +401 -15
  297. package/src/interactive/side-question.ts +171 -0
  298. package/src/interactive/slash-commands.ts +439 -7
  299. package/src/interactive/slash-spec.ts +19 -6
  300. package/src/interactive/theme/tokens.ts +30 -0
  301. package/src/interactive/turn-middleware.ts +15 -1
  302. package/src/interactive/view/artifacts.ts +42 -9
  303. package/src/interactive/view/view-overlay.ts +15 -3
  304. package/src/interactive/watchdog-run.ts +75 -0
  305. package/src/interactive/worker-receipts.ts +14 -2
  306. package/src/interactive/worker-share.ts +56 -1
  307. package/src/interactive/worker-stream.ts +15 -0
  308. package/src/tools/bootstrap.ts +3 -0
  309. package/src/tools/compete-worktrees.ts +13 -79
  310. package/src/tools/dispatch-admission.ts +251 -18
  311. package/src/tools/dispatch-arguments.ts +84 -1
  312. package/src/tools/dispatch-plan.ts +165 -6
  313. package/src/tools/dispatch-runner.ts +364 -23
  314. package/src/tools/dispatch-types.ts +20 -1
  315. package/src/tools/dispatch.ts +72 -2
  316. package/src/tools/monitor.ts +29 -0
  317. package/src/tools/profiles.ts +18 -4
  318. package/src/tools/task-worktree.ts +238 -0
  319. package/src/tools/verify/authoring.ts +61 -1
  320. package/src/tools/verify/scripts.ts +62 -0
  321. package/src/tools/worker-evidence.ts +21 -14
  322. package/src/worker/spec-contract.ts +3 -1
  323. package/dist/chunk-HC4CLZ2Y.js +0 -68
@@ -1,12 +1,26 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ parseAgentRecipeSchema
4
+ } from "./chunk-FBVTI2TJ.js";
5
+ import {
6
+ parseFleetContract,
7
+ parseFrontmatter
8
+ } from "./chunk-E77JEWSD.js";
9
+ import {
10
+ assertAgentSpecPolicy,
11
+ normalizeAgentSpec
12
+ } from "./chunk-AOCYTWAV.js";
2
13
  import {
3
14
  readSettings,
4
15
  settingsPath,
5
16
  updateSettings
6
- } from "./chunk-AD2SYQYC.js";
17
+ } from "./chunk-IJ7RPIYJ.js";
18
+ import {
19
+ readClioVersion
20
+ } from "./chunk-IWHMRKLL.js";
7
21
  import {
8
22
  DEFAULT_SETTINGS
9
- } from "./chunk-4OC57DA6.js";
23
+ } from "./chunk-4DGYLA73.js";
10
24
  import {
11
25
  require_dist
12
26
  } from "./chunk-APJ265NV.js";
@@ -18,9 +32,6 @@ import {
18
32
  safeResourceBackupPath,
19
33
  safeResourceWrite
20
34
  } from "./chunk-WEPFGWHJ.js";
21
- import {
22
- readClioVersion
23
- } from "./chunk-IWHMRKLL.js";
24
35
  import {
25
36
  __toESM,
26
37
  init_esm_shims
@@ -113,11 +124,13 @@ function requestedScopes(scope) {
113
124
  return [scope ?? "project"];
114
125
  }
115
126
  function defaultedIncludes(options) {
116
- const hasExplicitInclude = options.includeContext !== void 0 || options.includePrompts !== void 0 || options.includeSkills !== void 0 || options.includeSettings !== void 0 || options.includeExtensions !== void 0;
127
+ const hasExplicitInclude = options.includeContext !== void 0 || options.includePrompts !== void 0 || options.includeSkills !== void 0 || options.includeAgents !== void 0 || options.includeFleets !== void 0 || options.includeSettings !== void 0 || options.includeExtensions !== void 0;
117
128
  return {
118
129
  includeContext: hasExplicitInclude ? options.includeContext === true : true,
119
130
  includePrompts: hasExplicitInclude ? options.includePrompts === true : true,
120
131
  includeSkills: hasExplicitInclude ? options.includeSkills === true : true,
132
+ includeAgents: hasExplicitInclude ? options.includeAgents === true : true,
133
+ includeFleets: hasExplicitInclude ? options.includeFleets === true : true,
121
134
  includeSettings: hasExplicitInclude ? options.includeSettings === true : true,
122
135
  includeExtensions: hasExplicitInclude ? options.includeExtensions === true : true
123
136
  };
@@ -155,6 +168,18 @@ function createShareArchive(options = {}) {
155
168
  addTree(files, "skill", scope, root, `${scope}/skills`);
156
169
  }
157
170
  }
171
+ if (includes.includeAgents) {
172
+ for (const scope of scopes) {
173
+ const root = scope === "user" ? path.join(clioConfigDir(), "agents") : path.join(cwd, ".clio-coder", "agents");
174
+ addTree(files, "agent", scope, root, `${scope}/agents`);
175
+ }
176
+ }
177
+ if (includes.includeFleets) {
178
+ for (const scope of scopes) {
179
+ const root = scope === "user" ? path.join(clioConfigDir(), "fleets") : path.join(cwd, ".clio-coder", "fleets");
180
+ addTree(files, "fleet", scope, root, `${scope}/fleets`);
181
+ }
182
+ }
158
183
  if (includes.includeExtensions) {
159
184
  for (const scope of scopes) {
160
185
  const root = scope === "user" ? path.join(clioConfigDir(), "extensions") : path.join(cwd, ".clio-coder", "extensions");
@@ -201,8 +226,17 @@ function parseArchive(raw) {
201
226
  throw new Error("share archive manifest is malformed");
202
227
  }
203
228
  const archive = raw;
229
+ const allowedTypes = /* @__PURE__ */ new Set([
230
+ "project-context",
231
+ "prompt",
232
+ "skill",
233
+ "agent",
234
+ "fleet",
235
+ "settings",
236
+ "extension"
237
+ ]);
204
238
  for (const file of archive.files) {
205
- if (!isRecord(file) || typeof file.archivePath !== "string" || typeof file.relativePath !== "string" || typeof file.sha256 !== "string" || file.encoding !== "base64" || typeof file.data !== "string") {
239
+ if (!isRecord(file) || !allowedTypes.has(file.type) || typeof file.archivePath !== "string" || typeof file.relativePath !== "string" || typeof file.sha256 !== "string" || file.encoding !== "base64" || typeof file.data !== "string") {
206
240
  throw new Error("share archive file entry is malformed");
207
241
  }
208
242
  const actual = sha256(decodeArchiveFile(file));
@@ -244,6 +278,10 @@ function targetRootForFile(entry, options) {
244
278
  return scope === "user" ? { root: path.join(config, "prompts"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "prompts"), containmentRoot: cwd, scope };
245
279
  case "skill":
246
280
  return scope === "user" ? { root: path.join(config, "skills"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "skills"), containmentRoot: cwd, scope };
281
+ case "agent":
282
+ return { root: path.join(config, "agents"), containmentRoot: config, scope: "user" };
283
+ case "fleet":
284
+ return { root: path.join(config, "fleets"), containmentRoot: config, scope: "user" };
247
285
  case "extension":
248
286
  return scope === "user" ? { root: path.join(config, "extensions"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "extensions"), containmentRoot: cwd, scope };
249
287
  case "settings":
@@ -393,6 +431,26 @@ function prepareShareImport(filePath, options = {}) {
393
431
  }
394
432
  for (const targetInfo of preflight.targets) {
395
433
  const { entry, target, scope, buffer } = targetInfo;
434
+ if (entry.type === "fleet") {
435
+ try {
436
+ parseFleetContract(buffer.toString("utf8"), target);
437
+ } catch (error) {
438
+ diagnostics.push({ type: "error", message: error instanceof Error ? error.message : String(error), path: target });
439
+ continue;
440
+ }
441
+ }
442
+ if (entry.type === "agent") {
443
+ try {
444
+ const parsed = parseFrontmatter(buffer.toString("utf8"), target);
445
+ const id = path.basename(target, ".md");
446
+ assertAgentSpecPolicy(
447
+ normalizeAgentSpec(parseAgentRecipeSchema({ id, source: "user", filepath: target, ...parsed }))
448
+ );
449
+ } catch (error) {
450
+ diagnostics.push({ type: "error", message: error instanceof Error ? error.message : String(error), path: target });
451
+ continue;
452
+ }
453
+ }
396
454
  if (entry.type === "settings") {
397
455
  diagnostics.push(...settingsPlan(buffer, options));
398
456
  actions.push({ action: "settings", type: entry.type, scope, path: target });
@@ -552,4 +610,4 @@ export {
552
610
  importShareArchive,
553
611
  ShareDomainModule
554
612
  };
555
- //# sourceMappingURL=chunk-WR67VIZY.js.map
613
+ //# sourceMappingURL=chunk-GN57SG4G.js.map
@@ -1,18 +1,18 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
- readSettings,
4
- updateSettings
5
- } from "./chunk-AD2SYQYC.js";
3
+ INTEROP_AGENT_KINDS,
4
+ interopAgentKind
5
+ } from "./chunk-IHXBNWMM.js";
6
6
  import {
7
7
  runCommandVector
8
- } from "./chunk-VEZEGCGW.js";
8
+ } from "./chunk-B5CSFE7B.js";
9
+ import {
10
+ readSettings,
11
+ updateSettings
12
+ } from "./chunk-IJ7RPIYJ.js";
9
13
  import {
10
14
  withStateFileLockSync
11
15
  } from "./chunk-IKCO5N3L.js";
12
- import {
13
- INTEROP_AGENT_KINDS,
14
- interopAgentKind
15
- } from "./chunk-IHXBNWMM.js";
16
16
  import {
17
17
  require_dist
18
18
  } from "./chunk-APJ265NV.js";
@@ -478,4 +478,4 @@ export {
478
478
  detectInteropAgents,
479
479
  InteropDomainModule
480
480
  };
481
- //# sourceMappingURL=chunk-RD5U66HV.js.map
481
+ //# sourceMappingURL=chunk-GPIEI3LY.js.map
@@ -1,37 +1,34 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ discoverDeclaredChecks,
4
+ listChecks,
5
+ runProjectCheck,
6
+ runScriptCheck
7
+ } from "./chunk-VAWNZU7Z.js";
2
8
  import {
3
9
  BROWSER_MODES,
4
10
  maxOutputArg,
5
11
  prepareVerifyArguments,
6
- runVectorTool,
7
12
  timeoutArg,
8
13
  verifyToolSurface
9
- } from "./chunk-NILBFAPG.js";
10
- import {
11
- PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
12
- loadProjectVerifierCatalog,
13
- packageDeclaredCheck,
14
- resolveProjectVerifierExecutionCwd
15
- } from "./chunk-FYYLNIL5.js";
16
- import {
17
- VERIFICATION_SCRIPT_FAMILY_HINT,
18
- declaredVerificationScripts,
19
- isVerificationScriptName
20
- } from "./chunk-UL3WSD3F.js";
14
+ } from "./chunk-PMDBGQSJ.js";
21
15
  import {
22
16
  escapeRegExp
23
17
  } from "./chunk-VG7TBQIY.js";
24
18
  import {
25
19
  resolveReadPath
26
20
  } from "./chunk-OQE5J4C6.js";
21
+ import {
22
+ VERIFICATION_SCRIPT_FAMILY_HINT,
23
+ isVerificationScriptName
24
+ } from "./chunk-UL3WSD3F.js";
27
25
  import {
28
26
  truncateUtf8
29
27
  } from "./chunk-6XLNIQDB.js";
30
28
  import {
31
29
  combineSafeOutput,
32
- resolveSafeCwd,
33
30
  runCommandVector
34
- } from "./chunk-VEZEGCGW.js";
31
+ } from "./chunk-B5CSFE7B.js";
35
32
  import {
36
33
  init_esm_shims
37
34
  } from "./chunk-3R73A4XB.js";
@@ -609,167 +606,6 @@ function lineAt(text, index) {
609
606
  return line;
610
607
  }
611
608
 
612
- // src/tools/verify/scripts.ts
613
- init_esm_shims();
614
- import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
615
- import path2 from "node:path";
616
- function repositoryRelativeCwd(workspaceRoot, resolved) {
617
- const relative = path2.relative(workspaceRoot, resolved);
618
- return relative.length === 0 ? "." : relative.split(path2.sep).join("/");
619
- }
620
- function packageTag(id) {
621
- const separator = id.search(/[:.-]/u);
622
- return [separator === -1 ? id : id.slice(0, separator)];
623
- }
624
- function packageCheckSource(packageRoot, workspaceRoot) {
625
- const packagePath = path2.join(packageRoot, "package.json");
626
- if (!existsSync2(packagePath)) return null;
627
- const pkg = parsePackageJson(packagePath);
628
- if (!pkg.ok) return null;
629
- const cwd = repositoryRelativeCwd(workspaceRoot, packageRoot);
630
- const checks = declaredVerificationScripts(pkg.scripts).map(
631
- (id) => packageDeclaredCheck(id, packagePath, cwd, packageTag(id))
632
- );
633
- return { kind: "package.json", path: packagePath, checks };
634
- }
635
- function providerCollision(sources) {
636
- const seen = /* @__PURE__ */ new Map();
637
- for (const source of sources) {
638
- for (const check of source.checks) {
639
- const prior = seen.get(check.id);
640
- if (prior !== void 0) {
641
- return `duplicate declared check id '${check.id}' from ${prior.source.kind} (${prior.source.path}) and ${check.source.kind} (${check.source.path})`;
642
- }
643
- seen.set(check.id, check);
644
- }
645
- }
646
- return null;
647
- }
648
- function discoverDeclaredChecksAtRoot(workspaceRoot, cwdArg) {
649
- let packageRoot;
650
- try {
651
- packageRoot = resolveSafeCwd(cwdArg, workspaceRoot);
652
- } catch (error) {
653
- return { ok: false, reason: error instanceof Error ? error.message : String(error) };
654
- }
655
- const sources = [];
656
- const packageSource = packageCheckSource(packageRoot, workspaceRoot);
657
- if (packageSource !== null) sources.push(packageSource);
658
- const projectCatalog = loadProjectVerifierCatalog(workspaceRoot);
659
- if (!projectCatalog.ok) return projectCatalog;
660
- if (projectCatalog.source !== null) sources.push(projectCatalog.source);
661
- const collision = providerCollision(sources);
662
- if (collision !== null) return { ok: false, reason: collision };
663
- return { ok: true, sources };
664
- }
665
- function discoverDeclaredChecks(cwdArg) {
666
- return discoverDeclaredChecksAtRoot(process.cwd(), cwdArg);
667
- }
668
- function clonedSources(sources) {
669
- return sources.map((source) => ({
670
- kind: source.kind,
671
- path: source.path,
672
- checks: source.checks.map((check) => ({
673
- ...check,
674
- command: [...check.command],
675
- tags: [...check.tags],
676
- source: { ...check.source }
677
- }))
678
- }));
679
- }
680
- function listChecks(cwdArg) {
681
- const discovery = discoverDeclaredChecks(cwdArg);
682
- if (!discovery.ok) return { kind: "error", message: `verify: ${discovery.reason}` };
683
- const lines = [];
684
- if (discovery.sources.length === 0 || discovery.sources.every((source) => source.checks.length === 0)) {
685
- lines.push(
686
- `No declared verification checks found (no package.json verification scripts or ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH} entries).`,
687
- "Run `clio-coder verifiers author` to inspect declared project tooling, preview exact argv checks, and create the catalog after confirmation."
688
- );
689
- } else {
690
- lines.push("Declared verification checks:");
691
- for (const source of discovery.sources) {
692
- lines.push(source.kind === "package.json" ? "package.json:" : `${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}:`);
693
- for (const check of source.checks) {
694
- const tags = check.tags.length > 0 ? ` [${check.tags.join(", ")}]` : "";
695
- lines.push(`- ${check.id}${tags}: ${check.description}`);
696
- }
697
- }
698
- }
699
- lines.push(
700
- "",
701
- 'Run one with verify(check="<id>"). verify(check="frontend", path=<file>) validates an HTML/CSS/JS artifact.'
702
- );
703
- return {
704
- kind: "ok",
705
- output: lines.join("\n"),
706
- details: { sources: clonedSources(discovery.sources) }
707
- };
708
- }
709
- function withDeclaredEvidence(result, check) {
710
- return {
711
- ...result,
712
- details: {
713
- ...result.details,
714
- action: "verify",
715
- check: check.id,
716
- source: { ...check.source },
717
- description: check.description,
718
- declaredCommand: [...check.command],
719
- declaredCwd: check.cwd,
720
- declaredTimeoutMs: check.timeoutMs,
721
- tags: [...check.tags]
722
- }
723
- };
724
- }
725
- async function runProjectCheck(check, options) {
726
- const [file, ...vector] = check.command;
727
- if (file === void 0) return { kind: "error", message: `verify: declared check '${check.id}' has empty argv` };
728
- const cwd = resolveProjectVerifierExecutionCwd(check.cwd, process.cwd());
729
- if (cwd instanceof Error) return { kind: "error", message: `verify: ${cwd.message}` };
730
- const result = await runVectorTool("verify", file, vector, { cwd, timeout_ms: check.timeoutMs }, options);
731
- return withDeclaredEvidence(result, check);
732
- }
733
- async function runScriptCheck(check, args, options) {
734
- let cwd;
735
- try {
736
- cwd = resolveSafeCwd(typeof args.cwd === "string" && args.cwd.length > 0 ? args.cwd : void 0, process.cwd());
737
- } catch (error) {
738
- return { kind: "error", message: `verify: ${error instanceof Error ? error.message : String(error)}` };
739
- }
740
- const packagePath = path2.join(cwd, "package.json");
741
- if (!existsSync2(packagePath)) return { kind: "error", message: `verify: package.json not found in ${cwd}` };
742
- const pkg = parsePackageJson(packagePath);
743
- if (!pkg.ok) return { kind: "error", message: `verify: ${pkg.reason}` };
744
- if (!Object.hasOwn(pkg.scripts, check)) {
745
- const declared = declaredVerificationScripts(pkg.scripts);
746
- const list = declared.length > 0 ? declared.join(", ") : "(none)";
747
- return {
748
- kind: "error",
749
- message: `verify: package.json has no '${check}' script. Declared verification checks: ${list}.`
750
- };
751
- }
752
- const extraArgs = Array.isArray(args.args) ? args.args.filter((entry) => typeof entry === "string") : [];
753
- const vector = ["run", check];
754
- if (extraArgs.length > 0) vector.push("--", ...extraArgs);
755
- return runVectorTool("verify", "npm", vector, { ...args, cwd }, options);
756
- }
757
- function parsePackageJson(packagePath) {
758
- try {
759
- const parsed = JSON.parse(readFileSync2(packagePath, "utf8"));
760
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
761
- return { ok: false, reason: "package.json root must be an object" };
762
- }
763
- const scripts = parsed.scripts;
764
- if (!scripts || typeof scripts !== "object" || Array.isArray(scripts)) {
765
- return { ok: false, reason: "package.json has no scripts object" };
766
- }
767
- return { ok: true, scripts };
768
- } catch (error) {
769
- return { ok: false, reason: error instanceof Error ? error.message : String(error) };
770
- }
771
- }
772
-
773
609
  // src/tools/verify/index.ts
774
610
  var verifyTool = {
775
611
  ...verifyToolSurface,
@@ -795,7 +631,6 @@ var verifyTool = {
795
631
  };
796
632
 
797
633
  export {
798
- discoverDeclaredChecksAtRoot,
799
634
  verifyTool
800
635
  };
801
- //# sourceMappingURL=chunk-PCZJO5TI.js.map
636
+ //# sourceMappingURL=chunk-GU2UIAFZ.js.map
@@ -0,0 +1,195 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ withStateFileLock,
4
+ withStateFileLockSync
5
+ } from "./chunk-IKCO5N3L.js";
6
+ import {
7
+ safeResourceWrite
8
+ } from "./chunk-WEPFGWHJ.js";
9
+ import {
10
+ init_esm_shims
11
+ } from "./chunk-3R73A4XB.js";
12
+
13
+ // src/domains/observability/evidence-index.ts
14
+ init_esm_shims();
15
+ import { readFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ var MAX_EVIDENCE_INDEX_ROWS = 1e3;
18
+ var EVIDENCE_INDEX_FILE = "evidence-index.json";
19
+ var evidenceIndexWriteQueue = Promise.resolve();
20
+ function indexPath(stateDir) {
21
+ return join(stateDir, EVIDENCE_INDEX_FILE);
22
+ }
23
+ function isEvidenceIndexRow(value) {
24
+ if (typeof value !== "object" || value === null) return false;
25
+ const row = value;
26
+ return typeof row.runId === "string" && typeof row.evidenceId === "string" && Array.isArray(row.tags) && row.tags.every((tag) => typeof tag === "string") && typeof row.firstPassSuccess === "boolean" && typeof row.findingCount === "number" && typeof row.generatedAt === "string";
27
+ }
28
+ function readEvidenceIndex(stateDir) {
29
+ let raw;
30
+ try {
31
+ raw = readFileSync(indexPath(stateDir), "utf8");
32
+ } catch {
33
+ return [];
34
+ }
35
+ let parsed;
36
+ try {
37
+ parsed = JSON.parse(raw);
38
+ } catch {
39
+ return [];
40
+ }
41
+ if (!Array.isArray(parsed)) return [];
42
+ return parsed.filter(isEvidenceIndexRow);
43
+ }
44
+ async function writeEvidenceIndexRow(stateDir, row) {
45
+ let bounded = [];
46
+ await withStateFileLock(indexPath(stateDir), () => {
47
+ const existing = readEvidenceIndex(stateDir).filter((entry) => entry.runId !== row.runId);
48
+ existing.push(row);
49
+ bounded = existing.length > MAX_EVIDENCE_INDEX_ROWS ? existing.slice(-MAX_EVIDENCE_INDEX_ROWS) : existing;
50
+ safeResourceWrite(indexPath(stateDir), `${JSON.stringify(bounded, null, 2)}
51
+ `, { encoding: "utf8" });
52
+ });
53
+ return bounded;
54
+ }
55
+ async function writeEvidenceIndexRowQueued(stateDir, row) {
56
+ let written = [];
57
+ const write = evidenceIndexWriteQueue.then(async () => {
58
+ written = await writeEvidenceIndexRow(stateDir, row);
59
+ });
60
+ evidenceIndexWriteQueue = write.catch(() => void 0);
61
+ await write;
62
+ return written;
63
+ }
64
+
65
+ // src/domains/observability/out-of-turn-usage.ts
66
+ init_esm_shims();
67
+ import { closeSync, mkdirSync, openSync, readFileSync as readFileSync2, writeSync } from "node:fs";
68
+ import { dirname, join as join2 } from "node:path";
69
+ var OUT_OF_TURN_USAGE_DIR = "usage";
70
+ var OUT_OF_TURN_USAGE_FILE = "out-of-turn.jsonl";
71
+ var MAX_OUT_OF_TURN_USAGE_ROWS = 1e3;
72
+ var BOUND_CHECK_INTERVAL = 64;
73
+ function outOfTurnUsagePath(stateDir) {
74
+ return join2(stateDir, OUT_OF_TURN_USAGE_DIR, OUT_OF_TURN_USAGE_FILE);
75
+ }
76
+ var appendsSinceBoundCheck = BOUND_CHECK_INTERVAL;
77
+ function appendOutOfTurnUsageRow(stateDir, row) {
78
+ const path = outOfTurnUsagePath(stateDir);
79
+ try {
80
+ mkdirSync(dirname(path), { recursive: true });
81
+ const fd = openSync(path, "a");
82
+ try {
83
+ writeSync(fd, `${JSON.stringify(row)}
84
+ `);
85
+ } finally {
86
+ closeSync(fd);
87
+ }
88
+ } catch (error) {
89
+ process.stderr.write(`[clio:usage] out-of-turn usage row not written: ${messageOf(error)}
90
+ `);
91
+ return;
92
+ }
93
+ appendsSinceBoundCheck += 1;
94
+ if (appendsSinceBoundCheck < BOUND_CHECK_INTERVAL) return;
95
+ appendsSinceBoundCheck = 0;
96
+ try {
97
+ boundOutOfTurnUsageFile(path);
98
+ } catch (error) {
99
+ process.stderr.write(`[clio:usage] out-of-turn usage ring not bounded: ${messageOf(error)}
100
+ `);
101
+ }
102
+ }
103
+ function boundOutOfTurnUsageFile(path) {
104
+ withStateFileLockSync(path, () => {
105
+ let raw;
106
+ try {
107
+ raw = readFileSync2(path, "utf8");
108
+ } catch {
109
+ return;
110
+ }
111
+ const lines = raw.split("\n").filter((line) => line.trim().length > 0);
112
+ if (lines.length <= MAX_OUT_OF_TURN_USAGE_ROWS) return;
113
+ const kept = lines.slice(-MAX_OUT_OF_TURN_USAGE_ROWS);
114
+ safeResourceWrite(path, `${kept.join("\n")}
115
+ `, { encoding: "utf8" });
116
+ });
117
+ }
118
+ function readOutOfTurnUsageRows(stateDir) {
119
+ const path = outOfTurnUsagePath(stateDir);
120
+ let raw;
121
+ try {
122
+ raw = readFileSync2(path, "utf8");
123
+ } catch (error) {
124
+ const err = error;
125
+ if (err.code === "ENOENT" || err.code === "ENOTDIR") return { rows: [], errors: [] };
126
+ return { rows: [], errors: [`out-of-turn usage store unreadable: ${messageOf(error)}`] };
127
+ }
128
+ const rows = [];
129
+ const errors = [];
130
+ const lines = raw.split("\n");
131
+ for (let index = 0; index < lines.length; index += 1) {
132
+ const line = lines[index];
133
+ if (line === void 0 || line.trim().length === 0) continue;
134
+ let parsed;
135
+ try {
136
+ parsed = JSON.parse(line);
137
+ } catch (error) {
138
+ errors.push(`${path}:${index + 1}: invalid JSON: ${messageOf(error)}`);
139
+ continue;
140
+ }
141
+ const row = asOutOfTurnUsageRow(parsed);
142
+ if (row === null) {
143
+ errors.push(`${path}:${index + 1}: not an out-of-turn usage row`);
144
+ continue;
145
+ }
146
+ rows.push(row);
147
+ }
148
+ return { rows, errors };
149
+ }
150
+ function asOutOfTurnUsageRow(value) {
151
+ if (!isRecord(value)) return null;
152
+ const label = value.label;
153
+ if (label !== "side-question" && label !== "handoff") return null;
154
+ if (typeof value.timestamp !== "string" || value.timestamp.length === 0) return null;
155
+ if (!isRecord(value.usage)) return null;
156
+ const usage = value.usage;
157
+ return {
158
+ label,
159
+ sessionId: typeof value.sessionId === "string" ? value.sessionId : null,
160
+ repoIdentity: typeof value.repoIdentity === "string" ? value.repoIdentity : null,
161
+ timestamp: value.timestamp,
162
+ target: typeof value.target === "string" && value.target.length > 0 ? value.target : "unknown",
163
+ attributedModelId: typeof value.attributedModelId === "string" && value.attributedModelId.length > 0 ? value.attributedModelId : "unknown",
164
+ usage: {
165
+ input: numberOr0(usage.input),
166
+ output: numberOr0(usage.output),
167
+ cacheRead: numberOr0(usage.cacheRead),
168
+ cacheWrite: numberOr0(usage.cacheWrite),
169
+ reasoning: numberOr0(usage.reasoning),
170
+ totalTokens: numberOr0(usage.totalTokens),
171
+ costUsd: numberOr0(usage.costUsd),
172
+ costProvenance: asCostProvenance(usage.costProvenance)
173
+ }
174
+ };
175
+ }
176
+ function asCostProvenance(value) {
177
+ return value === "known" || value === "known_free" || value === "estimated" ? value : "unknown";
178
+ }
179
+ function numberOr0(value) {
180
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
181
+ }
182
+ function isRecord(value) {
183
+ return typeof value === "object" && value !== null && !Array.isArray(value);
184
+ }
185
+ function messageOf(error) {
186
+ return error instanceof Error ? error.message : String(error);
187
+ }
188
+
189
+ export {
190
+ readEvidenceIndex,
191
+ writeEvidenceIndexRowQueued,
192
+ appendOutOfTurnUsageRow,
193
+ readOutOfTurnUsageRows
194
+ };
195
+ //# sourceMappingURL=chunk-GWS3VEIW.js.map
@@ -0,0 +1,103 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-3R73A4XB.js";
5
+
6
+ // src/domains/dispatch/execution-role.ts
7
+ init_esm_shims();
8
+ var EXECUTION_ROLES = [
9
+ "builder",
10
+ "reviewer",
11
+ "judge",
12
+ "researcher",
13
+ "verifier",
14
+ "recovery"
15
+ ];
16
+ function isExecutionRole(value) {
17
+ return typeof value === "string" && EXECUTION_ROLES.includes(value);
18
+ }
19
+ function deriveExecutionRole(input) {
20
+ if (input.attempt > 0) return "recovery";
21
+ if (input.gateRole === "reviewer") return "reviewer";
22
+ if (input.gateRole === "judge") return "judge";
23
+ if (input.gateRole === "synthesis") return "judge";
24
+ if (input.gateRole === "member") return "researcher";
25
+ if (input.gateRole === "builder" || input.gateRole === "candidate") return "builder";
26
+ if (input.resultContractKind === "verifier-report") return "verifier";
27
+ if (input.capabilityClass === "read-only") return "researcher";
28
+ return "builder";
29
+ }
30
+ function agentRoleFactsResolver(getSpec) {
31
+ return (agentId) => {
32
+ const spec = getSpec(agentId);
33
+ return spec === null ? null : { capabilityClass: spec.capabilityClass, resultContractKind: spec.resultContract.kind };
34
+ };
35
+ }
36
+ function requestExecutionRole(input) {
37
+ const facts = input.resolveFacts?.(input.agentId) ?? null;
38
+ return deriveExecutionRole({
39
+ attempt: 0,
40
+ ...input.gateRole !== void 0 ? { gateRole: input.gateRole } : {},
41
+ capabilityClass: facts?.capabilityClass ?? "workspace-edit",
42
+ resultContractKind: facts?.resultContractKind ?? null
43
+ });
44
+ }
45
+ function withAttemptRole(requestRole, attempt) {
46
+ return attempt > 0 ? "recovery" : requestRole;
47
+ }
48
+ var DEFAULT_GATE_DECIDER_AGENT_ID = "verifier";
49
+ function gateDeciderAgentId(requested) {
50
+ const trimmed = requested?.trim() ?? "";
51
+ return trimmed.length > 0 ? trimmed : DEFAULT_GATE_DECIDER_AGENT_ID;
52
+ }
53
+ function appliesRecipeResultContract(gateRole) {
54
+ return gateRole !== "reviewer" && gateRole !== "judge" && gateRole !== "synthesis";
55
+ }
56
+ function routeCorrelationFactsForRun(run) {
57
+ return {
58
+ agentId: run.agentId,
59
+ targetId: run.targetId,
60
+ wireModelId: run.wireModelId,
61
+ runtimeId: run.runtimeId,
62
+ nodeId: run.node?.id ?? "local"
63
+ };
64
+ }
65
+ function modelFamily(model) {
66
+ return model.trim().toLowerCase().replace(/[-_:]?\d{4}[-_]?\d{2}[-_]?\d{2}$/u, "");
67
+ }
68
+ function gateRouteCorrelation(subject, decider) {
69
+ const agent = subject.agentId === decider.agentId;
70
+ const target = subject.targetId === decider.targetId;
71
+ const sameModelFamily = modelFamily(subject.wireModelId) === modelFamily(decider.wireModelId);
72
+ const runtime = subject.runtimeId === decider.runtimeId;
73
+ const node = subject.nodeId === decider.nodeId;
74
+ const dimensions = [
75
+ ...agent ? ["agent"] : [],
76
+ ...target ? ["target"] : [],
77
+ ...sameModelFamily ? ["model-family"] : [],
78
+ ...runtime ? ["runtime"] : [],
79
+ ...node ? ["node"] : []
80
+ ].sort();
81
+ return {
82
+ agent,
83
+ target,
84
+ modelFamily: sameModelFamily,
85
+ runtime,
86
+ node,
87
+ independent: !agent && !sameModelFamily,
88
+ dimensions
89
+ };
90
+ }
91
+
92
+ export {
93
+ isExecutionRole,
94
+ deriveExecutionRole,
95
+ agentRoleFactsResolver,
96
+ requestExecutionRole,
97
+ withAttemptRole,
98
+ gateDeciderAgentId,
99
+ appliesRecipeResultContract,
100
+ routeCorrelationFactsForRun,
101
+ gateRouteCorrelation
102
+ };
103
+ //# sourceMappingURL=chunk-H7IXIC72.js.map