@iowarp/clio-coder 0.4.2 → 0.4.3

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 (369) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
  5. package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
  8. package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
  9. package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
  10. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  11. package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
  12. package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
  13. package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
  14. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  15. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  16. package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
  17. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  18. package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
  19. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  20. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  21. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  22. package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
  23. package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
  24. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  25. package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
  26. package/dist/chunk-7E7I3WLS.js +3762 -0
  27. package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
  28. package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
  29. package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
  30. package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
  31. package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
  32. package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
  33. package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
  34. package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
  35. package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
  36. package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
  37. package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
  38. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  39. package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
  40. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  41. package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
  42. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  43. package/dist/chunk-GYV6VZOC.js +26 -0
  44. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  45. package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
  46. package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
  47. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  48. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  49. package/dist/chunk-IJNZMHLA.js +101 -0
  50. package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
  51. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  52. package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
  53. package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
  54. package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
  55. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  56. package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
  57. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  58. package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
  59. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  60. package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
  61. package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
  62. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  63. package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
  64. package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
  65. package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
  66. package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
  67. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  68. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  69. package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
  70. package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
  71. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  72. package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
  73. package/dist/chunk-R6Q67RJH.js +134 -0
  74. package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
  75. package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
  76. package/dist/chunk-SKHCAU7K.js +385 -0
  77. package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
  78. package/dist/chunk-UOIZ7DA4.js +41 -0
  79. package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
  80. package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
  81. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  82. package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
  83. package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
  84. package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
  85. package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
  86. package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
  87. package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
  88. package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
  89. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  90. package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
  91. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  92. package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
  93. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  94. package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
  95. package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
  96. package/dist/cli/index.js +38 -37
  97. package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
  98. package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
  99. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  100. package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
  101. package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
  102. package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
  103. package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
  104. package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
  105. package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
  106. package/dist/context-map-COB37XXN.js +505 -0
  107. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
  108. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
  109. package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
  110. package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
  111. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  112. package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
  113. package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
  114. package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
  115. package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
  116. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
  117. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
  118. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
  119. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
  120. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
  121. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
  122. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
  123. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
  124. package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
  125. package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
  126. package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
  127. package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
  128. package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
  129. package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
  130. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
  131. package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
  132. package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
  133. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  134. package/dist/reset-EAJFFJVB.js +344 -0
  135. package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
  136. package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
  137. package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
  138. package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
  139. package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
  140. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
  141. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
  142. package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
  143. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  144. package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
  145. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
  146. package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
  147. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  148. package/dist/uninstall-5PEVOE5B.js +408 -0
  149. package/dist/upgrade-M4WXY6KN.js +303 -0
  150. package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
  151. package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
  152. package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
  153. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
  154. package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
  155. package/dist/worker/entry.js +61 -60
  156. package/docs/architecture/artifact-placement.md +1 -0
  157. package/docs/architecture/artifact-versions.md +1 -1
  158. package/docs/architecture/context-engine.md +4 -0
  159. package/docs/architecture/middleware-and-components.md +1 -1
  160. package/docs/architecture/model-catalog.md +21 -10
  161. package/docs/architecture/observability.md +12 -1
  162. package/docs/architecture/prompt-envelope-and-tools.md +2 -0
  163. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  164. package/docs/architecture/safety-model.md +15 -5
  165. package/docs/guide/built-in-agents.md +17 -3
  166. package/docs/guide/commands-and-modes.md +1 -1
  167. package/docs/guide/configuration-and-targets.md +97 -9
  168. package/docs/guide/configuration-reference.md +7 -2
  169. package/docs/guide/environment-variables.md +2 -0
  170. package/docs/guide/installation-and-lifecycle.md +37 -4
  171. package/docs/guide/proactive-memory.md +66 -55
  172. package/docs/guide/skills-marketplace.md +18 -0
  173. package/docs/process/development-pipeline.md +34 -1
  174. package/docs/process/eval-runner.md +67 -3
  175. package/evals/behavioral-model.yaml +3 -2
  176. package/package.json +2 -2
  177. package/skills/README.md +7 -5
  178. package/skills/coding/ast-grep/SKILL.md +101 -30
  179. package/skills/coding/ast-grep/evals.md +26 -0
  180. package/skills/coding/coding-standards/SKILL.md +40 -5
  181. package/skills/coding/coding-standards/evals.md +23 -0
  182. package/skills/coding/prototype/SKILL.md +87 -28
  183. package/skills/coding/prototype/evals.md +19 -0
  184. package/skills/coding/tdd/SKILL.md +80 -53
  185. package/skills/coding/tdd/evals.md +20 -0
  186. package/skills/context/context-handoff/SKILL.md +43 -2
  187. package/skills/context/context-handoff/evals.md +44 -0
  188. package/skills/context/context-prime/SKILL.md +45 -15
  189. package/skills/context/context-prime/evals.md +45 -0
  190. package/skills/git/branch-closeout/SKILL.md +132 -0
  191. package/skills/git/branch-closeout/evals.md +133 -0
  192. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  193. package/skills/git/file-ticket/SKILL.md +77 -63
  194. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  195. package/skills/git/file-ticket/evals.md +31 -26
  196. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  197. package/skills/git/fix-issue/SKILL.md +87 -64
  198. package/skills/git/fix-issue/evals.md +35 -31
  199. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  200. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  201. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  202. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  203. package/skills/git/ship/SKILL.md +103 -67
  204. package/skills/git/ship/assets/pr-template.md +21 -0
  205. package/skills/git/ship/evals.md +44 -28
  206. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  207. package/skills/git/worktree-create/SKILL.md +80 -50
  208. package/skills/git/worktree-create/evals.md +40 -33
  209. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  210. package/skills/git/worktree-merge/SKILL.md +112 -65
  211. package/skills/git/worktree-merge/evals.md +42 -34
  212. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  213. package/skills/planning/archify/SKILL.md +196 -0
  214. package/skills/planning/archify/evals.md +65 -0
  215. package/skills/planning/architecture/SKILL.md +61 -12
  216. package/skills/planning/architecture/evals.md +65 -0
  217. package/skills/planning/backlog/SKILL.md +130 -14
  218. package/skills/planning/backlog/evals.md +142 -0
  219. package/skills/planning/prd/SKILL.md +46 -6
  220. package/skills/planning/prd/evals.md +54 -0
  221. package/skills/planning/product-intent/SKILL.md +57 -2
  222. package/skills/planning/product-intent/evals.md +70 -0
  223. package/skills/planning/tech-spec/SKILL.md +53 -2
  224. package/skills/planning/tech-spec/evals.md +73 -0
  225. package/skills/registry.yaml +58 -50
  226. package/skills/remote.yaml +13 -0
  227. package/skills/research/arxiv-literature/SKILL.md +76 -18
  228. package/skills/research/arxiv-literature/evals.md +50 -0
  229. package/skills/research/experiment-protocol/SKILL.md +20 -1
  230. package/skills/research/experiment-protocol/evals.md +23 -0
  231. package/skills/research/scientific-debugging/SKILL.md +23 -1
  232. package/skills/research/scientific-debugging/evals.md +18 -0
  233. package/skills/research/scientific-modernization/SKILL.md +26 -1
  234. package/skills/research/scientific-modernization/evals.md +27 -0
  235. package/skills/skill-marketplace.json +63 -28
  236. package/skills/workflow/cut-it/SKILL.md +65 -5
  237. package/skills/workflow/cut-it/evals.md +101 -0
  238. package/skills/workflow/design-council/SKILL.md +117 -27
  239. package/skills/workflow/design-council/evals.md +161 -0
  240. package/skills/workflow/grill-me/SKILL.md +86 -10
  241. package/skills/workflow/grill-me/evals.md +153 -0
  242. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  243. package/skills/workflow/workflow-distiller/evals.md +118 -0
  244. package/src/cli/configure-interop.ts +105 -13
  245. package/src/cli/configure-oauth.ts +57 -0
  246. package/src/cli/configure-onboarding.ts +980 -0
  247. package/src/cli/configure-target.ts +594 -0
  248. package/src/cli/configure.ts +1082 -528
  249. package/src/cli/context-map.ts +114 -0
  250. package/src/cli/context.ts +4 -0
  251. package/src/cli/index.ts +1 -0
  252. package/src/cli/lifecycle-presenter.ts +436 -0
  253. package/src/cli/models.ts +10 -2
  254. package/src/cli/modes/print.ts +5 -1
  255. package/src/cli/reset.ts +228 -106
  256. package/src/cli/run.ts +7 -2
  257. package/src/cli/select.ts +664 -0
  258. package/src/cli/skills.ts +9 -2
  259. package/src/cli/targets.ts +3 -0
  260. package/src/cli/uninstall.ts +233 -165
  261. package/src/cli/upgrade.ts +204 -149
  262. package/src/cli/usage.ts +86 -27
  263. package/src/cli/validate-model.ts +3 -3
  264. package/src/core/config.ts +56 -0
  265. package/src/core/external-diagnostic.ts +44 -0
  266. package/src/core/gateway-routing.ts +157 -0
  267. package/src/core/safe-exec.ts +17 -2
  268. package/src/core/skill-activation.ts +89 -2
  269. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  270. package/src/domains/agents/catalog.ts +1 -1
  271. package/src/domains/agents/result-contract.ts +70 -0
  272. package/src/domains/context/wiki/map-seed.ts +589 -0
  273. package/src/domains/context/wiki/plan.ts +2 -2
  274. package/src/domains/dispatch/admission.ts +29 -0
  275. package/src/domains/dispatch/agent-candidates.ts +10 -0
  276. package/src/domains/dispatch/budget-envelope.ts +86 -1
  277. package/src/domains/dispatch/capability-match.ts +1 -0
  278. package/src/domains/dispatch/capacity-lease.ts +17 -0
  279. package/src/domains/dispatch/contract.ts +11 -1
  280. package/src/domains/dispatch/extension.ts +134 -29
  281. package/src/domains/dispatch/types.ts +3 -0
  282. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  283. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  284. package/src/domains/eval/metrics/token-stream.ts +201 -31
  285. package/src/domains/eval/metrics/tracked.ts +40 -4
  286. package/src/domains/eval/runners/clio-run.ts +5 -2
  287. package/src/domains/eval/schema/suite.ts +28 -0
  288. package/src/domains/eval/schema/verdict.ts +2 -2
  289. package/src/domains/eval/suites/resolve.ts +13 -1
  290. package/src/domains/eval/suites/run.ts +24 -3
  291. package/src/domains/interop/registry.ts +6 -2
  292. package/src/domains/interop/types.ts +4 -0
  293. package/src/domains/lifecycle/migrations/index.ts +4 -0
  294. package/src/domains/memory/task-memory-policy.ts +70 -26
  295. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  296. package/src/domains/middleware/index.ts +0 -1
  297. package/src/domains/middleware/marketplace-offer.ts +3 -35
  298. package/src/domains/middleware/memory-intervention.ts +127 -32
  299. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  300. package/src/domains/middleware/skills-reminder.ts +31 -2
  301. package/src/domains/observability/compaction-usage.ts +118 -0
  302. package/src/domains/observability/cost.ts +1 -1
  303. package/src/domains/observability/extension.ts +6 -1
  304. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  305. package/src/domains/providers/contract.ts +4 -1
  306. package/src/domains/providers/extension.ts +40 -9
  307. package/src/domains/providers/model-capabilities.ts +9 -0
  308. package/src/domains/providers/model-discovery.ts +2 -0
  309. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  310. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
  311. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  312. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  313. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  314. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  315. package/src/domains/providers/support.ts +11 -5
  316. package/src/domains/providers/target-model-cache.ts +25 -2
  317. package/src/domains/providers/types/capability-flags.ts +2 -0
  318. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  319. package/src/domains/providers/types/target-descriptor.ts +19 -0
  320. package/src/domains/resources/index.ts +3 -0
  321. package/src/domains/resources/skills/install.ts +72 -7
  322. package/src/domains/resources/skills/loader.ts +7 -0
  323. package/src/domains/resources/skills/marketplace.ts +63 -11
  324. package/src/domains/safety/autonomy.ts +15 -0
  325. package/src/domains/safety/index.ts +1 -0
  326. package/src/domains/safety/path-policy.ts +1 -1
  327. package/src/domains/safety/policy-engine.ts +34 -11
  328. package/src/domains/safety/protected-artifacts.ts +191 -88
  329. package/src/domains/safety/run-effects.ts +2 -22
  330. package/src/domains/safety/skill-authority.ts +55 -0
  331. package/src/domains/session/compaction/compact.ts +72 -22
  332. package/src/domains/session/entries.ts +6 -0
  333. package/src/domains/session/usage.ts +3 -3
  334. package/src/engine/agent.ts +13 -3
  335. package/src/engine/ai.ts +26 -8
  336. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  337. package/src/engine/api-registry.ts +3 -0
  338. package/src/engine/apis/openai-completions.ts +117 -14
  339. package/src/engine/external-subprocess.ts +114 -6
  340. package/src/entry/background-model-metadata.ts +18 -0
  341. package/src/entry/compaction-prompt.ts +57 -0
  342. package/src/entry/orchestrator.ts +405 -216
  343. package/src/entry/task-memory-lifecycle.ts +35 -0
  344. package/src/interactive/chat-loop-messages.ts +13 -4
  345. package/src/interactive/chat-loop.ts +65 -2
  346. package/src/interactive/chat-renderer.ts +1 -0
  347. package/src/interactive/cost-overlay.ts +26 -2
  348. package/src/interactive/interactive-slash-runtime.ts +2 -1
  349. package/src/interactive/renderers/worker-entry.ts +32 -0
  350. package/src/interactive/slash-commands.ts +24 -6
  351. package/src/interactive/theme/labels.ts +19 -13
  352. package/src/interactive/turn-context.ts +9 -5
  353. package/src/interactive/turn-recovery.ts +8 -0
  354. package/src/interactive/turn-runtime.ts +27 -11
  355. package/src/interactive/turn-state.ts +7 -0
  356. package/src/interactive/worker-receipts.ts +1 -0
  357. package/src/interactive/worker-stream.ts +6 -1
  358. package/src/tools/context/index.ts +30 -9
  359. package/src/tools/dispatch-arguments.ts +1 -0
  360. package/src/tools/dispatch-event-text.ts +10 -0
  361. package/src/tools/dispatch-plan.ts +1 -0
  362. package/src/tools/dispatch-runner.ts +12 -0
  363. package/src/tools/registry.ts +11 -5
  364. package/src/tools/worker-evidence.ts +3 -1
  365. package/src/worker/spec-contract.ts +4 -0
  366. package/dist/chunk-2Z2IKEXI.js +0 -1554
  367. package/dist/reset-OAQP3W4O.js +0 -230
  368. package/dist/uninstall-N34PCTGJ.js +0 -331
  369. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -1,4 +1,16 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ applyTaskWorktree,
4
+ captureWorkspaceSnapshot,
5
+ cleanupTaskWorktree,
6
+ createTaskWorktree,
7
+ createWriteBoundaryEnforcer,
8
+ gitCheckoutRoot
9
+ } from "./chunk-B4VEBZKF.js";
10
+ import {
11
+ executionPlanAncestors,
12
+ spliceExecutionPlan
13
+ } from "./chunk-E3TPLWFX.js";
2
14
  import {
3
15
  decideReviewGate,
4
16
  materializePendingGateDecision,
@@ -6,7 +18,7 @@ import {
6
18
  readGateDecisionArtifactsForRunIds,
7
19
  stagePendingGateDecision,
8
20
  verifyGateDecisionArtifact
9
- } from "./chunk-ZGNYYXQ6.js";
21
+ } from "./chunk-WRBAGUNF.js";
10
22
  import {
11
23
  RUN_RECEIPT_INTEGRITY_ALGORITHM,
12
24
  RUN_RECEIPT_INTEGRITY_VERSION,
@@ -24,40 +36,28 @@ import {
24
36
  trustVerdict,
25
37
  verifyReceiptIntegrity,
26
38
  withReceiptIntegrity
27
- } from "./chunk-B74PXLU7.js";
39
+ } from "./chunk-IWT4SF4R.js";
28
40
  import {
29
41
  protectedArtifactFromSessionEntry,
30
42
  protectedArtifactStateFromSessionEntries,
31
43
  readAuditRows,
32
44
  readSessionEntriesForId,
33
45
  responseModelIdObservationFromRecord
34
- } from "./chunk-X7IARSHT.js";
46
+ } from "./chunk-JKKCYP3C.js";
47
+ import {
48
+ loadEvalArtifact,
49
+ parseEvalArtifactV4,
50
+ redactArtifactForStorage,
51
+ sumEvalHarnessMetrics
52
+ } from "./chunk-FTMGRKEF.js";
35
53
  import {
36
54
  codeStepDir,
37
55
  writeCodeStepRecord
38
- } from "./chunk-KPXDY6QF.js";
39
- import {
40
- applyTaskWorktree,
41
- captureWorkspaceSnapshot,
42
- cleanupTaskWorktree,
43
- createTaskWorktree,
44
- createWriteBoundaryEnforcer,
45
- gitCheckoutRoot
46
- } from "./chunk-W6NIE6OW.js";
47
- import {
48
- executionPlanAncestors,
49
- spliceExecutionPlan
50
- } from "./chunk-DZAW46HP.js";
56
+ } from "./chunk-XRZT5WY5.js";
51
57
  import {
52
58
  parseRigorOverride,
53
59
  resolveRigor
54
60
  } from "./chunk-RVG5JXAL.js";
55
- import {
56
- loadEvalArtifact,
57
- parseEvalArtifactV4,
58
- redactArtifactForStorage,
59
- sumEvalHarnessMetrics
60
- } from "./chunk-5PFYMY2V.js";
61
61
  import {
62
62
  defaultRunEventJournal,
63
63
  removeRunEventJournals
@@ -69,6 +69,10 @@ import {
69
69
  durableAssistantTextFromEvent,
70
70
  startDispatchEventPump
71
71
  } from "./chunk-T56WDKA5.js";
72
+ import {
73
+ FLEET_COMMAND_BASE_ENV,
74
+ normalizeWriteBoundary
75
+ } from "./chunk-2VIKGWFZ.js";
72
76
  import {
73
77
  LOCAL_NODE_ID,
74
78
  computeSettingsFingerprint,
@@ -79,11 +83,7 @@ import {
79
83
  receiptAttestationFields,
80
84
  routeFactVerdict,
81
85
  spawnNativeWorker
82
- } from "./chunk-4JDLP6ZS.js";
83
- import {
84
- FLEET_COMMAND_BASE_ENV,
85
- normalizeWriteBoundary
86
- } from "./chunk-3F7VUY77.js";
86
+ } from "./chunk-6PTFB5VS.js";
87
87
  import {
88
88
  AGENT_LEDGER_PROMPT_MAX_CHARS,
89
89
  COUNCIL_MIN_MEMBERS,
@@ -126,7 +126,7 @@ import {
126
126
  serializeWorkerRuntimeDescriptor,
127
127
  toolPromptHintsForNames,
128
128
  validateJobSpec
129
- } from "./chunk-IKSLQ4XV.js";
129
+ } from "./chunk-PAJQJ7BS.js";
130
130
  import {
131
131
  decideRoute,
132
132
  defaultRoutingIntent,
@@ -144,13 +144,13 @@ import {
144
144
  routingIntentRejection,
145
145
  sameRouteIdentity,
146
146
  toRouteCandidate
147
- } from "./chunk-HIICAHCJ.js";
147
+ } from "./chunk-EKCHAPYA.js";
148
148
  import {
149
149
  assessFinishContract
150
- } from "./chunk-IDNA72AH.js";
150
+ } from "./chunk-RSJ25QSL.js";
151
151
  import {
152
152
  WRITE_ROOT_REFUSED_TOOLS
153
- } from "./chunk-FVDGR2ZL.js";
153
+ } from "./chunk-XIVNBFZS.js";
154
154
  import {
155
155
  describeCallAction
156
156
  } from "./chunk-NEDJ26B5.js";
@@ -168,26 +168,7 @@ import {
168
168
  } from "./chunk-H7IXIC72.js";
169
169
  import {
170
170
  compareCodepoints
171
- } from "./chunk-VN3SHNBN.js";
172
- import {
173
- DEFAULT_AUTONOMY_LEVEL,
174
- autonomyDenyRejection,
175
- isSkillActivation,
176
- mapAutonomy
177
- } from "./chunk-FSP7CMNU.js";
178
- import {
179
- createRedactionTally,
180
- redactSecretsDeep,
181
- redactSecretsText
182
- } from "./chunk-4BJ5BYCE.js";
183
- import {
184
- truncateUtf8
185
- } from "./chunk-6XLNIQDB.js";
186
- import {
187
- canonicalJson,
188
- endpointIdentityHash,
189
- parseAgentLedgerBody
190
- } from "./chunk-VAVR4IJY.js";
171
+ } from "./chunk-7DICMOS6.js";
191
172
  import {
192
173
  PATH_BOUNDARY_MAX_ENTRIES,
193
174
  pathBoundaryCovers,
@@ -203,10 +184,10 @@ import {
203
184
  resolveAgentToolCompatibility,
204
185
  resultContractAuthorship,
205
186
  validateRecipeResult
206
- } from "./chunk-PGF63K6I.js";
187
+ } from "./chunk-B4OAX3SI.js";
207
188
  import {
208
189
  detectValidationCommand
209
- } from "./chunk-IKOZFYBN.js";
190
+ } from "./chunk-I7ZPNEJM.js";
210
191
  import {
211
192
  isProjectVerifierCheckId,
212
193
  isVerificationScriptName
@@ -214,6 +195,25 @@ import {
214
195
  import {
215
196
  canonicalizeExistingPath
216
197
  } from "./chunk-ECH6PKUQ.js";
198
+ import {
199
+ truncateUtf8
200
+ } from "./chunk-6XLNIQDB.js";
201
+ import {
202
+ canonicalJson,
203
+ endpointIdentityHash,
204
+ parseAgentLedgerBody
205
+ } from "./chunk-VAVR4IJY.js";
206
+ import {
207
+ DEFAULT_AUTONOMY_LEVEL,
208
+ autonomyDenyRejection,
209
+ isSkillActivation,
210
+ mapAutonomy
211
+ } from "./chunk-JGRC33J2.js";
212
+ import {
213
+ createRedactionTally,
214
+ redactSecretsDeep,
215
+ redactSecretsText
216
+ } from "./chunk-4BJ5BYCE.js";
217
217
  import {
218
218
  ToolNames,
219
219
  isBuiltinToolName
@@ -226,6 +226,8 @@ import {
226
226
  endpointLabel,
227
227
  firstRuntimeResolutionError,
228
228
  foregroundStreamUsage,
229
+ gatewayRoutingObservationFromRecord,
230
+ gatewayRoutingObservationLabel,
229
231
  isDispatchEligibleRuntime,
230
232
  normalizeCostProvenance,
231
233
  resolveEndpointCapacities,
@@ -233,13 +235,13 @@ import {
233
235
  resolveRuntimeTarget,
234
236
  runtimeResolutionWarnings,
235
237
  runtimeTargetSnapshot
236
- } from "./chunk-BYMNWQ7O.js";
238
+ } from "./chunk-XPWWI35G.js";
237
239
  import {
238
240
  ceilChars
239
- } from "./chunk-CWVRRIEI.js";
241
+ } from "./chunk-NZMNUPZZ.js";
240
242
  import {
241
243
  atomicWrite
242
- } from "./chunk-MQXIVJ35.js";
244
+ } from "./chunk-HAXOFFRH.js";
243
245
  import {
244
246
  assertSafeId
245
247
  } from "./chunk-R346GLFC.js";
@@ -250,19 +252,6 @@ import {
250
252
  import {
251
253
  BusChannels
252
254
  } from "./chunk-F4EKGO4N.js";
253
- import {
254
- attributeCommitMessage,
255
- gitCommitAttributionEnabled,
256
- reportCommitAttributionDiagnostic,
257
- withManagedGitCommitAttributionEnvironment
258
- } from "./chunk-JIEGK6UF.js";
259
- import {
260
- MAX_TIMER_DELAY_MS,
261
- rawDurationMs
262
- } from "./chunk-EBY63B7G.js";
263
- import {
264
- AI_AGENT_NAME
265
- } from "./chunk-6EJMN2Y3.js";
266
255
  import {
267
256
  readClioVersion,
268
257
  readPiMonoVersion,
@@ -278,9 +267,22 @@ import {
278
267
  GUARDRAIL_DEFAULTS,
279
268
  resolveGuardrail
280
269
  } from "./chunk-S66XZJOF.js";
270
+ import {
271
+ attributeCommitMessage,
272
+ gitCommitAttributionEnabled,
273
+ reportCommitAttributionDiagnostic,
274
+ withManagedGitCommitAttributionEnvironment
275
+ } from "./chunk-JIEGK6UF.js";
276
+ import {
277
+ MAX_TIMER_DELAY_MS,
278
+ rawDurationMs
279
+ } from "./chunk-EBY63B7G.js";
280
+ import {
281
+ AI_AGENT_NAME
282
+ } from "./chunk-6EJMN2Y3.js";
281
283
  import {
282
284
  targetRequiresAuth
283
- } from "./chunk-WNP7O5WZ.js";
285
+ } from "./chunk-ID64D7PE.js";
284
286
  import {
285
287
  FILE_LOCK_ACQUIRE_TIMEOUT_MS,
286
288
  withStateFileLock,
@@ -291,15 +293,15 @@ import {
291
293
  processAlive,
292
294
  processBirthToken
293
295
  } from "./chunk-3I7MS7N2.js";
296
+ import {
297
+ resolveEffectivePricing
298
+ } from "./chunk-5OIVVPHF.js";
294
299
  import {
295
300
  clioDataDir,
296
301
  clioStateDir,
297
302
  resolveClioDirs,
298
303
  stateRootRemoved
299
304
  } from "./chunk-BYP5D4HI.js";
300
- import {
301
- resolveEffectivePricing
302
- } from "./chunk-O42A54GG.js";
303
305
  import {
304
306
  init_esm_shims
305
307
  } from "./chunk-3R73A4XB.js";
@@ -1239,6 +1241,19 @@ function capacityLeaseUsage(options) {
1239
1241
  }
1240
1242
  return { global: leases.length, nodes, endpoints, endpointHolders };
1241
1243
  }
1244
+ function endpointCapacityUsage() {
1245
+ return withStateFileLockSync(capacityStateLockPath(), () => {
1246
+ const file = readCapacityStateUnsafe();
1247
+ reclaim(file, Date.now(), defaultProbe);
1248
+ const held2 = heldReservationUsage(file.reservations);
1249
+ const usage = { ...foregroundStreamUsage() };
1250
+ for (const [key, count] of Object.entries(held2.endpoints)) usage[key] = (usage[key] ?? 0) + count;
1251
+ for (const lease of file.leases) {
1252
+ if (lease.endpointKey !== void 0) usage[lease.endpointKey] = (usage[lease.endpointKey] ?? 0) + 1;
1253
+ }
1254
+ return usage;
1255
+ });
1256
+ }
1242
1257
  function createNodeLeaseUsageReader(options) {
1243
1258
  const cacheMs = options.cacheMs ?? 200;
1244
1259
  let cache = null;
@@ -3715,6 +3730,19 @@ function createLeaseSlotGuard(controller, leaseId, ownedByAssignment) {
3715
3730
  }
3716
3731
  var PUMP_MIN_MS = 10;
3717
3732
  var PUMP_MAX_MS = 500;
3733
+ function foregroundEndpointBlock(input) {
3734
+ if (input.endpointKey === void 0) return null;
3735
+ const limit = input.limits.endpoints[input.endpointKey];
3736
+ const active = input.usage.endpoints[input.endpointKey] ?? 0;
3737
+ const holders = input.usage.endpointHolders?.[input.endpointKey];
3738
+ if (limit === void 0 || active < limit || !holders || holders.foregroundStreams < 1) return null;
3739
+ return [
3740
+ `dispatch: admission denied: endpoint '${endpointLabel(input.endpointKey)}' cannot open a worker slot`,
3741
+ ` while ${describeEndpointCapacityHolders(holders)} (${active}/${limit} slots).`,
3742
+ " The foreground agent cannot release its slot until this tool call returns, so waiting here would deadlock.",
3743
+ " Point workers at a second endpoint or raise this target's maxConcurrentRequests to the server's actual slot count."
3744
+ ].join("");
3745
+ }
3718
3746
  function describeAdmissionFailure(input) {
3719
3747
  if (input.state === "canceled") return "dispatch: admission canceled before a capacity slot opened";
3720
3748
  if (input.endpointKey !== void 0) {
@@ -3805,6 +3833,14 @@ function createCapacityAdmissionController(options) {
3805
3833
  const controller = {
3806
3834
  async admit(input) {
3807
3835
  if (draining) throw new Error("dispatch: admission denied: this process is shutting down");
3836
+ const limits = options.limits();
3837
+ const usage = options.usage?.() ?? capacityLeaseUsage({ nowMs: now() });
3838
+ const foregroundBlock = foregroundEndpointBlock({
3839
+ ...input.endpointKey !== void 0 ? { endpointKey: input.endpointKey } : {},
3840
+ limits,
3841
+ usage
3842
+ });
3843
+ if (foregroundBlock !== null) throw new Error(foregroundBlock);
3808
3844
  const queuedAt = now();
3809
3845
  const requestId = `admit-${queuedAt.toString(36)}-${randomBytes3(5).toString("hex")}`;
3810
3846
  pending.set(input.assignmentId, requestId);
@@ -4367,6 +4403,7 @@ var REPORTING_CONTRACT_KINDS = /* @__PURE__ */ new Set([
4367
4403
  "scout-report",
4368
4404
  "verifier-report",
4369
4405
  "research-report",
4406
+ "world-knowledge-report",
4370
4407
  "provenance-report",
4371
4408
  "debugger-report",
4372
4409
  "oracle-report"
@@ -6529,6 +6566,11 @@ function receiptResponseModelIdObservationLabel(receipt) {
6529
6566
  });
6530
6567
  return `response_model_id_observation=${labels.join(",")}`;
6531
6568
  }
6569
+ function receiptGatewayRoutingLabel(receipt) {
6570
+ const observations = (receipt.upstreamResponses ?? []).map((response) => gatewayRoutingObservationFromRecord(response)).filter((observation) => observation !== null);
6571
+ if (observations.length === 0) return null;
6572
+ return observations.map(gatewayRoutingObservationLabel).join(" | ");
6573
+ }
6532
6574
 
6533
6575
  // src/tools/dispatch-run-events.ts
6534
6576
  var RUN_TAIL_ENTRY_LIMIT = 100;
@@ -7225,6 +7267,36 @@ function describeUngroundedValidations(grounding) {
7225
7267
  return grounding.basis === "no-command-executed" ? `unverifiable validation: this run claimed ${named} passed and executed no command at all (${grounding.grounded}/${grounding.claimed} claims grounded)` : `unmatched validation: this run claimed ${named} passed; it did run commands, but none the harness recognizes as that check (${grounding.grounded}/${grounding.claimed} claims grounded)`;
7226
7268
  }
7227
7269
 
7270
+ // src/domains/dispatch/worker-model-metadata.ts
7271
+ init_esm_shims();
7272
+ async function prepareWorkerModelMetadata(providers, targetId, deadlineAt, signal, now = Date.now) {
7273
+ signal?.throwIfAborted();
7274
+ const status = providers.list().find((entry) => entry.target.id === targetId);
7275
+ if (status?.target.runtime !== "litellm" || status.health.lastCheckAt !== null) return;
7276
+ const remainingMs = deadlineAt - now();
7277
+ const deadlineError = new Error("dispatch: admission deadline expired during worker model metadata preparation");
7278
+ if (remainingMs <= 0) throw deadlineError;
7279
+ const controller = new AbortController();
7280
+ const abort = () => controller.abort(signal?.reason);
7281
+ signal?.addEventListener("abort", abort, { once: true });
7282
+ const timer = setTimeout(() => controller.abort(deadlineError), Math.min(remainingMs, 2147483647));
7283
+ let rejectAborted;
7284
+ const aborted = new Promise((_resolve, reject) => {
7285
+ rejectAborted = reject;
7286
+ });
7287
+ const onAbort = () => rejectAborted(controller.signal.reason);
7288
+ controller.signal.addEventListener("abort", onAbort, { once: true });
7289
+ try {
7290
+ await Promise.race([providers.probeTarget(targetId, { reasoning: false, signal: controller.signal }), aborted]);
7291
+ controller.signal.throwIfAborted();
7292
+ if (now() >= deadlineAt) throw deadlineError;
7293
+ } finally {
7294
+ clearTimeout(timer);
7295
+ signal?.removeEventListener("abort", abort);
7296
+ controller.signal.removeEventListener("abort", onAbort);
7297
+ }
7298
+ }
7299
+
7228
7300
  // src/domains/dispatch/extension.ts
7229
7301
  var DEFAULT_HEARTBEAT_INTERVAL_MS = 1e3;
7230
7302
  var DEFAULT_RESILIENCE_COOLDOWN_MS = 15e3;
@@ -7750,6 +7822,13 @@ function runtimeLimitations(runtimeKind, runtimeId) {
7750
7822
  "Claude CLI subprocess executes Claude Code tools; Clio constrains permission mode and forbids dangerous bypass unless explicitly gated"
7751
7823
  ];
7752
7824
  }
7825
+ if (runtimeKind === "subprocess" && runtimeId === "antigravity-code") {
7826
+ return [
7827
+ "Antigravity CLI owns its internal tools, network activity, prompts, and approvals; Clio observes only structured stream output and does not provide per-tool mediation or complete tool telemetry",
7828
+ "Antigravity conversation ids are recorded only as opaque provider observations; Clio does not resume them",
7829
+ "Antigravity runs are one-shot and never retried automatically"
7830
+ ];
7831
+ }
7753
7832
  return [];
7754
7833
  }
7755
7834
  function assertRuntimeCanHonorWorkerPermissionMode(runtime, onPermission) {
@@ -7772,12 +7851,6 @@ function assertWriteRootsEnforceable(runtime, writeRoots) {
7772
7851
  `dispatch: runtime '${runtime.id}' cannot enforce writeRoots: subprocess workers run their own tool surface without Clio per-tool mediation. Dispatch to a native or claude-sdk worker.`
7773
7852
  );
7774
7853
  }
7775
- function assertWorkerBudgetEnforceable(runtime, hasDeclaredBudget) {
7776
- if (!hasDeclaredBudget || runtime.kind !== "subprocess") return;
7777
- throw new Error(
7778
- `dispatch: runtime '${runtime.id}' cannot enforce an explicit dispatch budget because subprocess workers do not expose per-tool mediation; choose a native or claude-sdk worker`
7779
- );
7780
- }
7781
7854
  var TOOL_CARRYING_API_FAMILIES = /* @__PURE__ */ new Set([
7782
7855
  "openai-completions",
7783
7856
  "openai-responses",
@@ -7828,7 +7901,17 @@ function assertPostRuntimeToolCompatibility(agentId, spec, effectiveTools, targe
7828
7901
  function workerToolCallHardCap(settings) {
7829
7902
  return settings?.fleet.limits.toolCallsPerRun ?? GUARDRAIL_DEFAULTS.workerToolCallCap;
7830
7903
  }
7904
+ function assertWorkerBudgetEnforceable(runtime, hasDeclaredBudget) {
7905
+ if (!hasDeclaredBudget || runtime.kind !== "subprocess" || runtime.externalAgentLoop !== void 0) return;
7906
+ throw new Error(
7907
+ `dispatch: runtime '${runtime.id}' cannot enforce an explicit dispatch budget because subprocess workers do not expose per-tool mediation; choose a native or claude-sdk worker`
7908
+ );
7909
+ }
7910
+ function budgetEnforcementForRuntime(runtime) {
7911
+ return runtime.kind === "subprocess" ? "external-one-shot" : "native-per-tool";
7912
+ }
7831
7913
  function resolveEffectiveWorkerBudget(input) {
7914
+ assertWorkerBudgetEnforceable(input.runtime, input.declared !== null || input.req.budget !== void 0);
7832
7915
  const hardCap = workerToolCallHardCap(input.settings);
7833
7916
  const declared = input.declared ?? {
7834
7917
  toolCalls: hardCap,
@@ -7842,7 +7925,8 @@ function resolveEffectiveWorkerBudget(input) {
7842
7925
  hardCap,
7843
7926
  hasReadTool: input.allowedTools.includes(ToolNames.Read),
7844
7927
  retry: (input.req.lineage?.attempt ?? 0) > 0,
7845
- revision: input.req.gate?.role === "builder" && input.req.gate.cycle > 1 && input.req.gate.verdict === "revise"
7928
+ revision: input.req.gate?.role === "builder" && input.req.gate.cycle > 1 && input.req.gate.verdict === "revise",
7929
+ enforcement: budgetEnforcementForRuntime(input.runtime)
7846
7930
  });
7847
7931
  }
7848
7932
  function frozenProtectedArtifactState(state) {
@@ -8100,6 +8184,9 @@ function clampWorkerAutonomy(session, requested) {
8100
8184
  if (requested === void 0) return session;
8101
8185
  return AUTONOMY_ORDER[requested] < AUTONOMY_ORDER[session] ? requested : session;
8102
8186
  }
8187
+ function effectiveWorkerAutonomy(session, requested, capabilityClass) {
8188
+ return clampWorkerAutonomy(session, capabilityClass === "read-only" ? "read-only" : requested);
8189
+ }
8103
8190
  function requestedAutonomyEvidence(sessionAutonomy, requestedAutonomy) {
8104
8191
  return requestedAutonomy === void 0 ? {} : { requestedAutonomy, sessionAutonomy };
8105
8192
  }
@@ -8624,7 +8711,7 @@ function createDispatchBundle(context, options) {
8624
8711
  reason: outcome
8625
8712
  });
8626
8713
  }
8627
- async function admitAssignmentCapacity(req, nodeId, timing, endpoint) {
8714
+ async function admitAssignmentCapacity(req, nodeId, timing, endpoint, signal) {
8628
8715
  const queuedAt = now();
8629
8716
  timing.queuedAt = new Date(queuedAt).toISOString();
8630
8717
  const assignmentId = req.lineage?.rootRunId ?? req.runIdHint ?? `pending-${queuedAt.toString(36)}-${randomBytes5(6).toString("hex")}`;
@@ -8636,7 +8723,12 @@ function createDispatchBundle(context, options) {
8636
8723
  req.reservation.memberId,
8637
8724
  (error) => reportDispatchDiagnostic("read plan queue identity", error)
8638
8725
  );
8726
+ const cancel = () => {
8727
+ capacityAdmission.cancel(assignmentId);
8728
+ };
8729
+ signal?.addEventListener("abort", cancel, { once: true });
8639
8730
  try {
8731
+ signal?.throwIfAborted();
8640
8732
  const admitted = await capacityAdmission.admit({
8641
8733
  assignmentId,
8642
8734
  nodeId,
@@ -8657,6 +8749,8 @@ function createDispatchBundle(context, options) {
8657
8749
  else await failQueuedAssignment(assignmentId);
8658
8750
  }
8659
8751
  throw error;
8752
+ } finally {
8753
+ signal?.removeEventListener("abort", cancel);
8660
8754
  }
8661
8755
  }
8662
8756
  function rebindReservationSlot(req, nodeId, endpoint, costUsd, settings) {
@@ -8749,6 +8843,13 @@ function createDispatchBundle(context, options) {
8749
8843
  if (draining) return { scheduled: false };
8750
8844
  const rootRunId = run.lineage.rootRunId;
8751
8845
  if (!retryChainIsLive(run)) return { scheduled: false };
8846
+ if (providers.getRuntime(run.runtimeId)?.externalAgentLoop?.generatingRetry === "forbidden") {
8847
+ retryBackoff.delete(rootRunId);
8848
+ return {
8849
+ scheduled: false,
8850
+ settlementDetail: "automatic retry suppressed because this external agent loop is one-shot and Clio cannot prove replay is side-effect-free"
8851
+ };
8852
+ }
8752
8853
  if (!RETRYABLE_OUTCOMES.has(outcome)) {
8753
8854
  retryBackoff.delete(rootRunId);
8754
8855
  return { scheduled: false };
@@ -9043,6 +9144,7 @@ function createDispatchBundle(context, options) {
9043
9144
  const tickMonotonic = monotonicNow();
9044
9145
  for (const run of active.values()) {
9045
9146
  if (run.aborted || run.stallKilled || !run.heartbeatAt) continue;
9147
+ if (ledger.get(run.runId)?.endedAt !== null) continue;
9046
9148
  const heartbeatMonotonic = heartbeatMonotonicAt(run.heartbeatAt);
9047
9149
  if (!Number.isFinite(heartbeatMonotonic) || !Number.isFinite(run.heartbeatAt.current)) continue;
9048
9150
  if (run.runtimeKind === "acp-delegation") {
@@ -9192,7 +9294,7 @@ function createDispatchBundle(context, options) {
9192
9294
  });
9193
9295
  }
9194
9296
  }
9195
- async function resolveLifecycle(req, settings) {
9297
+ async function resolveLifecycle(req, settings, metadataDeadlineAt, signal) {
9196
9298
  const recipe = agents.get(req.agentId);
9197
9299
  if (!recipe) {
9198
9300
  throw new Error(`dispatch: unknown agent recipe: ${req.agentId}`);
@@ -9220,7 +9322,7 @@ function createDispatchBundle(context, options) {
9220
9322
  publishDispatchPathScope(req, pathScope);
9221
9323
  const admission = resolveDispatchAdmissionStage(req, recipe, safety, pathScope);
9222
9324
  const targets = readWorkerTargets(settings);
9223
- const target = resolveDispatchTarget(
9325
+ const resolveTarget = () => resolveDispatchTarget(
9224
9326
  req,
9225
9327
  recipe,
9226
9328
  targets.workerDefault,
@@ -9229,12 +9331,24 @@ function createDispatchBundle(context, options) {
9229
9331
  targets.targetOrder,
9230
9332
  providers
9231
9333
  );
9334
+ let target = resolveTarget();
9335
+ const identity = (resolved) => JSON.stringify([
9336
+ resolved.target.id,
9337
+ resolved.runtime.id,
9338
+ resolved.wireModelId,
9339
+ endpointIdentityHash(resolved.target.url)
9340
+ ]);
9341
+ const selectedIdentity = identity(target);
9342
+ await prepareWorkerModelMetadata(providers, target.target.id, metadataDeadlineAt, signal, now);
9343
+ target = resolveTarget();
9344
+ if (identity(target) !== selectedIdentity) {
9345
+ throw new Error("dispatch: worker route changed during model metadata preparation; request a fresh admission");
9346
+ }
9232
9347
  enforceCapabilityGate(target.target.id, target.modelCapabilities, req.requiredCapabilities);
9233
9348
  assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
9234
- assertWorkerBudgetEnforceable(target.runtime, spec.budget !== null || req.budget !== void 0);
9235
9349
  const cwd = req.cwd ?? process.cwd();
9236
9350
  const sessionAutonomy = settings?.safety.autonomy ?? "auto-edit";
9237
- const effectiveAutonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
9351
+ const effectiveAutonomy = effectiveWorkerAutonomy(sessionAutonomy, req.autonomy, spec.capabilityClass);
9238
9352
  const effectiveTools = withLedgerToolNarrowing(
9239
9353
  effectiveToolNames(admission.allowedTools, target, pathScope.writeBoundaries.length > 0, deniedToolNames(req)),
9240
9354
  req
@@ -9271,7 +9385,8 @@ function createDispatchBundle(context, options) {
9271
9385
  recipeId: recipe.id,
9272
9386
  declared: spec.budget,
9273
9387
  allowedTools: effectiveTools,
9274
- settings
9388
+ settings,
9389
+ runtime: target.runtime
9275
9390
  });
9276
9391
  const tier = spec.projectContextTier;
9277
9392
  const project = projectContext && tier === "bounded" ? projectContext.projectStructuredContext(cwd) : null;
@@ -9521,11 +9636,13 @@ function createDispatchBundle(context, options) {
9521
9636
  const responseModelIdObservation = responseModelIdObservationFromRecord(event.message, "not-observed");
9522
9637
  const differingResponseModelId = readStringOrNull(event.message.responseModel);
9523
9638
  const providerResponseId = readStringOrNull(event.message.responseId);
9639
+ const gatewayRouting = gatewayRoutingObservationFromRecord(event.message);
9524
9640
  upstreamResponses.push({
9525
9641
  requestedModelId,
9526
9642
  responseModelIdObservation,
9527
9643
  differingResponseModelId,
9528
- providerResponseId
9644
+ providerResponseId,
9645
+ ...gatewayRouting !== null ? { gatewayRouting } : {}
9529
9646
  });
9530
9647
  if (event.message.stopReason === "error") {
9531
9648
  const message = readStringOrNull(event.message.errorMessage);
@@ -10031,7 +10148,7 @@ function createDispatchBundle(context, options) {
10031
10148
  finalPromise
10032
10149
  };
10033
10150
  }
10034
- async function dispatchAttempt(req, observer, settlement) {
10151
+ async function dispatchAttempt(req, observer, preparation, settlement) {
10035
10152
  const requestedAt = new Date(now()).toISOString();
10036
10153
  const timing = { requestedAt, decisionStartedAt: requestedAt };
10037
10154
  const settings = getEffectiveSettings();
@@ -10117,7 +10234,9 @@ function createDispatchBundle(context, options) {
10117
10234
  return attachRouteObservation({ ...delegated, effectiveRequest: req });
10118
10235
  }
10119
10236
  req = routeAroundCoolingTarget(req, settings) ?? req;
10120
- const lifecycle = await resolveLifecycle(req, settings);
10237
+ const metadataDeadlineAt = req.assignmentDeadlineAt ?? Date.parse(requestedAt) + (req.routingIntent?.deadlineMs ?? 6e4);
10238
+ const lifecycle = await resolveLifecycle(req, settings, metadataDeadlineAt, preparation?.signal);
10239
+ preparation?.signal?.throwIfAborted();
10121
10240
  timing.decisionCompletedAt = new Date(now()).toISOString();
10122
10241
  assertResponseSchemaEnforceable(
10123
10242
  lifecycle.target.runtime,
@@ -10184,7 +10303,13 @@ function createDispatchBundle(context, options) {
10184
10303
  if (queuedIdentity !== null) publishCapacityQueued(queuedIdentity, timing, placement?.node ?? null);
10185
10304
  let capacityLease;
10186
10305
  try {
10187
- capacityLease = await admitAssignmentCapacity(req, placement?.node.id ?? "local", timing, endpoint);
10306
+ capacityLease = await admitAssignmentCapacity(
10307
+ req,
10308
+ placement?.node.id ?? "local",
10309
+ timing,
10310
+ endpoint,
10311
+ preparation?.signal
10312
+ );
10188
10313
  } catch (error) {
10189
10314
  if (queuedIdentity !== null) publishCapacityAdmissionFailure(queuedIdentity, error);
10190
10315
  throw error;
@@ -10194,6 +10319,7 @@ function createDispatchBundle(context, options) {
10194
10319
  const leaseSlot = createLeaseSlotGuard(capacityAdmission, capacityLease.leaseId, req.lineage !== void 0);
10195
10320
  const ledgerRef = (() => {
10196
10321
  try {
10322
+ preparation?.signal?.throwIfAborted();
10197
10323
  return requireLedger();
10198
10324
  } catch (error) {
10199
10325
  leaseSlot.release();
@@ -10246,6 +10372,7 @@ function createDispatchBundle(context, options) {
10246
10372
  };
10247
10373
  let worker;
10248
10374
  try {
10375
+ preparation?.signal?.throwIfAborted();
10249
10376
  worker = (placement?.spawn ?? spawnWorker)(spec, {
10250
10377
  cwd: lifecycle.cwd,
10251
10378
  now,
@@ -10403,11 +10530,13 @@ function createDispatchBundle(context, options) {
10403
10530
  const responseModelIdObservation = responseModelIdObservationFromRecord(event.message, "not-observed");
10404
10531
  const differingResponseModelId = readStringOrNull(event.message.responseModel);
10405
10532
  const providerResponseId = readStringOrNull(event.message.responseId);
10533
+ const gatewayRouting = gatewayRoutingObservationFromRecord(event.message);
10406
10534
  upstreamResponses.push({
10407
10535
  requestedModelId,
10408
10536
  responseModelIdObservation,
10409
10537
  differingResponseModelId,
10410
- providerResponseId
10538
+ providerResponseId,
10539
+ ...gatewayRouting !== null ? { gatewayRouting } : {}
10411
10540
  });
10412
10541
  if (event.message.stopReason === "error") {
10413
10542
  const message = readStringOrNull(event.message.errorMessage);
@@ -10926,7 +11055,7 @@ function createDispatchBundle(context, options) {
10926
11055
  reachedTerminalResult: resultContractWasDue(finalOutcome, outcomeCode),
10927
11056
  output: capturedOutput?.state === "final" ? capturedOutput.text : null,
10928
11057
  cwd: lifecycle.cwd,
10929
- networkAllowed: lifecycle.admission.allowedTools.includes(ToolNames.WebFetch),
11058
+ networkAllowed: lifecycle.admission.allowedTools.includes(ToolNames.WebFetch) || lifecycle.target.runtime.externalAgentLoop?.network === "externally-governed-unobserved",
10930
11059
  observedRunEffects,
10931
11060
  filesystem: nodeResultContractFilesystem()
10932
11061
  });
@@ -11129,8 +11258,11 @@ function createDispatchBundle(context, options) {
11129
11258
  effectiveRequest: req
11130
11259
  });
11131
11260
  }
11132
- async function dispatch(req, observer, settlement) {
11133
- let prepared = req;
11261
+ async function dispatch(req, observer, preparation, settlement) {
11262
+ let prepared = preparation?.deadlineAt === void 0 ? req : {
11263
+ ...req,
11264
+ assignmentDeadlineAt: Math.min(req.assignmentDeadlineAt ?? Number.POSITIVE_INFINITY, preparation.deadlineAt)
11265
+ };
11134
11266
  let createdWorktree;
11135
11267
  let writerLease;
11136
11268
  const writerRecipe = agents.get(req.agentId);
@@ -11162,7 +11294,7 @@ function createDispatchBundle(context, options) {
11162
11294
  return rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute2(rel) ? entry : resolvePath(taskWorktree.path, rel);
11163
11295
  });
11164
11296
  prepared = {
11165
- ...req,
11297
+ ...prepared,
11166
11298
  runIdHint: runId,
11167
11299
  taskWorktree,
11168
11300
  cwd: workerCwd,
@@ -11172,7 +11304,8 @@ function createDispatchBundle(context, options) {
11172
11304
  }
11173
11305
  let handle;
11174
11306
  try {
11175
- handle = await dispatchAttempt(prepared, observer, settlement);
11307
+ preparation?.signal?.throwIfAborted();
11308
+ handle = await dispatchAttempt(prepared, observer, preparation, settlement);
11176
11309
  } catch (error) {
11177
11310
  writerLease?.release();
11178
11311
  if (createdWorktree !== void 0) {
@@ -11278,7 +11411,6 @@ function createDispatchBundle(context, options) {
11278
11411
  );
11279
11412
  assertPostRuntimeToolCompatibility(req.agentId, agentSpec, effectiveTools, target);
11280
11413
  assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
11281
- assertWorkerBudgetEnforceable(target.runtime, agentSpec.budget !== null || req.budget !== void 0);
11282
11414
  assertResponseSchemaEnforceable(target.runtime, target.modelCapabilities, req.responseSchema, effectiveTools.length);
11283
11415
  assertWriteRootsEnforceable(target.runtime, pathScope.writeBoundaries);
11284
11416
  assertProtectedArtifactsEnforceable(
@@ -11291,7 +11423,8 @@ function createDispatchBundle(context, options) {
11291
11423
  recipeId: recipe.id,
11292
11424
  declared: agentSpec.budget,
11293
11425
  allowedTools: effectiveTools,
11294
- settings
11426
+ settings,
11427
+ runtime: target.runtime
11295
11428
  });
11296
11429
  const endpoint = endpointCapacityForTarget(target.target.id);
11297
11430
  return {
@@ -11494,13 +11627,13 @@ function createDispatchBundle(context, options) {
11494
11627
  yield { type: "batch_events_drained", batch: snapshotBatch(batchRef.current) };
11495
11628
  })();
11496
11629
  }
11497
- async function dispatchBatch(reqs) {
11630
+ async function dispatchBatch(reqs, preparation) {
11498
11631
  if (reqs.length === 0) throw new Error("dispatch: batch requires at least one request");
11499
11632
  const settlement = reqs.length > 1 && reqs.some((req) => (req.resolvedVerification?.length ?? 0) > 0) ? createBatchVerificationGate() : void 0;
11500
11633
  const handles = [];
11501
11634
  try {
11502
11635
  for (const req of reqs) {
11503
- const handle = await dispatch(req, void 0, settlement);
11636
+ const handle = await dispatch(req, void 0, preparation, settlement);
11504
11637
  handles.push({ ...handle, agentId: req.agentId });
11505
11638
  }
11506
11639
  } catch (err) {
@@ -15941,6 +16074,7 @@ export {
15941
16074
  setCapacityDraining,
15942
16075
  capacityDrain,
15943
16076
  capacityLeaseUsage,
16077
+ endpointCapacityUsage,
15944
16078
  openAgentLedger,
15945
16079
  renderAgentLedgerBoard,
15946
16080
  closeAgentLedger,
@@ -15949,6 +16083,7 @@ export {
15949
16083
  UNVERIFIABLE_RECEIPT_VERIFICATION,
15950
16084
  assistantTextFromEvent,
15951
16085
  receiptResponseModelIdObservationLabel,
16086
+ receiptGatewayRoutingLabel,
15952
16087
  createDispatchRunEventRegistry,
15953
16088
  readFleetRun,
15954
16089
  listFleetRuns,
@@ -15980,4 +16115,4 @@ export {
15980
16115
  summarizeEvalResults,
15981
16116
  buildEvalEvidence
15982
16117
  };
15983
- //# sourceMappingURL=chunk-I66ZTYNP.js.map
16118
+ //# sourceMappingURL=chunk-AF4YM7Z4.js.map