@iowarp/clio-coder 0.4.9 → 0.5.0

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 (1172) hide show
  1. package/.claude-plugin/marketplace.json +11 -3
  2. package/CHANGELOG.md +153 -0
  3. package/CODE_OF_CONDUCT.md +10 -0
  4. package/CONTRIBUTING.md +208 -382
  5. package/NOTICE +8 -2
  6. package/README.md +199 -418
  7. package/ROADMAP.md +82 -0
  8. package/SECURITY.md +14 -11
  9. package/dist/acp-KS7ARGV6.js +132 -0
  10. package/dist/agents-YOGJ2YEJ.js +163 -0
  11. package/dist/assets/codewiki.json +1 -1
  12. package/dist/auth-CEDCO6O6.js +557 -0
  13. package/dist/background-YWTBPSQU.js +39 -0
  14. package/dist/builtins-GDYO4RTR.js +23 -0
  15. package/dist/chunk-27YTM2CV.js +175 -0
  16. package/dist/chunk-2AF6YC7Q.js +75 -0
  17. package/dist/chunk-2DTIWSAW.js +381 -0
  18. package/dist/chunk-2EMLKSCX.js +262 -0
  19. package/dist/chunk-2OJ3YZQP.js +665 -0
  20. package/dist/chunk-2VLYHHFT.js +35 -0
  21. package/dist/chunk-2WVPJF3Z.js +204 -0
  22. package/dist/chunk-33OASOS6.js +176 -0
  23. package/dist/chunk-3BD2LXYJ.js +19 -0
  24. package/dist/chunk-3JHUFKG7.js +30 -0
  25. package/dist/chunk-3JLTRPN7.js +711 -0
  26. package/dist/chunk-3LT34CAM.js +2796 -0
  27. package/dist/chunk-3O5JWP4L.js +1670 -0
  28. package/dist/chunk-3UW3KU4A.js +21 -0
  29. package/dist/chunk-4A6YRGV4.js +569 -0
  30. package/dist/chunk-4D2BRCZ3.js +67 -0
  31. package/dist/chunk-4SYHGVDE.js +668 -0
  32. package/dist/chunk-4VDHLCF5.js +66 -0
  33. package/dist/chunk-4WOOTKFD.js +637 -0
  34. package/dist/chunk-4WV4PI66.js +80 -0
  35. package/dist/chunk-53OXPRI6.js +195 -0
  36. package/dist/chunk-55RMDDFM.js +1347 -0
  37. package/dist/chunk-56XP4FJU.js +2025 -0
  38. package/dist/chunk-5B3RTYAK.js +123 -0
  39. package/dist/chunk-5CD243WE.js +45 -0
  40. package/dist/chunk-5JQR5B4D.js +709 -0
  41. package/dist/chunk-5KQEUIWM.js +597 -0
  42. package/dist/chunk-5LP5FNNR.js +915 -0
  43. package/dist/chunk-62UK7AGW.js +9344 -0
  44. package/dist/chunk-6CTHLZFB.js +563 -0
  45. package/dist/chunk-6EJYVCTN.js +23 -0
  46. package/dist/chunk-6OWUM2NC.js +12289 -0
  47. package/dist/chunk-6RJMYYIE.js +1023 -0
  48. package/dist/chunk-6W75D37F.js +643 -0
  49. package/dist/chunk-733ZBT5P.js +1721 -0
  50. package/dist/chunk-77DCC6JZ.js +3710 -0
  51. package/dist/chunk-7QXCO3AF.js +156 -0
  52. package/dist/chunk-7RET77VB.js +481 -0
  53. package/dist/chunk-A4MVRV4C.js +65 -0
  54. package/dist/chunk-ALJWT6O6.js +93 -0
  55. package/dist/chunk-AVSR2HKI.js +232 -0
  56. package/dist/chunk-B7GY6QER.js +42 -0
  57. package/dist/chunk-BFOSV5EZ.js +178 -0
  58. package/dist/chunk-BGOIM7NB.js +103 -0
  59. package/dist/chunk-BJH6WFIB.js +372 -0
  60. package/dist/chunk-BOBCCDJ6.js +1533 -0
  61. package/dist/chunk-BRCOSE7O.js +117 -0
  62. package/dist/chunk-BYFHHCFV.js +601 -0
  63. package/dist/chunk-C2CPOIH2.js +83 -0
  64. package/dist/chunk-C7AQTPCE.js +694 -0
  65. package/dist/chunk-CBAQPTDU.js +165 -0
  66. package/dist/chunk-CDQ2UC6W.js +125 -0
  67. package/dist/chunk-CN6SW5DC.js +177 -0
  68. package/dist/chunk-CRHPCPZP.js +132 -0
  69. package/dist/chunk-CTFPFW3H.js +44 -0
  70. package/dist/chunk-D3KWFOUT.js +103 -0
  71. package/dist/chunk-D65E25JG.js +185 -0
  72. package/dist/chunk-DCGHJQ2U.js +236 -0
  73. package/dist/chunk-DE2LU267.js +106 -0
  74. package/dist/chunk-DF6PI6GN.js +97 -0
  75. package/dist/chunk-DGC6X6XR.js +53 -0
  76. package/dist/chunk-DOUISWEE.js +526 -0
  77. package/dist/chunk-DR3TAEUA.js +188 -0
  78. package/dist/chunk-DVTBERFY.js +33 -0
  79. package/dist/chunk-DXSETN72.js +1051 -0
  80. package/dist/chunk-DZLR4UEH.js +128 -0
  81. package/dist/chunk-E6IPKW2E.js +77 -0
  82. package/dist/chunk-EG4ARXPC.js +139 -0
  83. package/dist/chunk-EKV4UBCM.js +652 -0
  84. package/dist/chunk-EOJPDNUP.js +1325 -0
  85. package/dist/chunk-EX57VVWW.js +4157 -0
  86. package/dist/chunk-EYTLV3W3.js +5937 -0
  87. package/dist/chunk-EZD2BXGP.js +475 -0
  88. package/dist/chunk-EZDCA34W.js +314 -0
  89. package/dist/chunk-FD2I4KBR.js +33 -0
  90. package/dist/chunk-FD3IAHQM.js +27 -0
  91. package/dist/chunk-FFYTC2KQ.js +416 -0
  92. package/dist/chunk-FGSQHUCK.js +110 -0
  93. package/dist/chunk-GCQFN7YI.js +32 -0
  94. package/dist/chunk-GGPF6LLE.js +38 -0
  95. package/dist/chunk-GGWI3OVM.js +215 -0
  96. package/dist/chunk-GLIQT7SU.js +172 -0
  97. package/dist/chunk-GN7QBEEI.js +95 -0
  98. package/dist/chunk-GRHOXDKB.js +1104 -0
  99. package/dist/chunk-HMN2C6YL.js +54 -0
  100. package/dist/chunk-HOEDA42N.js +310 -0
  101. package/dist/chunk-HOYZUKG7.js +192 -0
  102. package/dist/chunk-HQVN7G4F.js +1021 -0
  103. package/dist/chunk-HSQQFDB3.js +519 -0
  104. package/dist/chunk-I4ELN5BX.js +47 -0
  105. package/dist/chunk-I4Y4WKZR.js +386 -0
  106. package/dist/chunk-IFPDAD7R.js +797 -0
  107. package/dist/chunk-IN7DGBVS.js +582 -0
  108. package/dist/chunk-ISHUS7HC.js +396 -0
  109. package/dist/chunk-JPXLJSGR.js +191 -0
  110. package/dist/chunk-JQCLXSFI.js +69 -0
  111. package/dist/chunk-KBUTSJSR.js +61 -0
  112. package/dist/chunk-KW5HXKLJ.js +56 -0
  113. package/dist/chunk-L4APUGCT.js +139 -0
  114. package/dist/chunk-L7G7K4I2.js +505 -0
  115. package/dist/chunk-LAR7DX5E.js +1840 -0
  116. package/dist/chunk-LAVUQX3B.js +462 -0
  117. package/dist/chunk-LJRBX7QR.js +116 -0
  118. package/dist/chunk-LNOXCGN2.js +1864 -0
  119. package/dist/chunk-LTWH2ACR.js +23002 -0
  120. package/dist/chunk-LYJJ6546.js +661 -0
  121. package/dist/chunk-M2IPMWCN.js +457 -0
  122. package/dist/chunk-MGLRTOCK.js +101 -0
  123. package/dist/chunk-MZF5IKZT.js +160 -0
  124. package/dist/chunk-N24R6KWS.js +386 -0
  125. package/dist/chunk-NASYVWDB.js +604 -0
  126. package/dist/chunk-NBXFPI7U.js +195 -0
  127. package/dist/chunk-NDPF2N2L.js +400 -0
  128. package/dist/chunk-NFSK2VNU.js +446 -0
  129. package/dist/chunk-NG3QQSXY.js +43 -0
  130. package/dist/chunk-NOCSM22Y.js +63 -0
  131. package/dist/chunk-NVPXXW2H.js +1143 -0
  132. package/dist/chunk-O63U2I6I.js +30 -0
  133. package/dist/chunk-OJXOA6YU.js +98 -0
  134. package/dist/chunk-OPD7GL6F.js +1196 -0
  135. package/dist/chunk-OQ2EOAHA.js +14399 -0
  136. package/dist/chunk-OV62D6KO.js +688 -0
  137. package/dist/chunk-OZ76TLGU.js +740 -0
  138. package/dist/chunk-P4GNZPXO.js +1156 -0
  139. package/dist/chunk-PS6JAWJZ.js +78 -0
  140. package/dist/chunk-PXRCXGLK.js +1865 -0
  141. package/dist/chunk-QDUUOZ3S.js +108 -0
  142. package/dist/chunk-QG6I2T5E.js +1416 -0
  143. package/dist/chunk-QHSBROEW.js +308 -0
  144. package/dist/chunk-QNUQ7K7D.js +46 -0
  145. package/dist/chunk-QZTTRSJE.js +333 -0
  146. package/dist/chunk-R2UUNSNQ.js +1605 -0
  147. package/dist/chunk-R7FGRZNF.js +1794 -0
  148. package/dist/chunk-RNDCROSG.js +199 -0
  149. package/dist/chunk-S36CXHO2.js +302 -0
  150. package/dist/chunk-SJGS3GDI.js +575 -0
  151. package/dist/chunk-SQZHXUB3.js +510 -0
  152. package/dist/chunk-SUTLW6ND.js +686 -0
  153. package/dist/chunk-SYF7FVBL.js +179 -0
  154. package/dist/chunk-T2MDZES3.js +1577 -0
  155. package/dist/chunk-T33IYTZM.js +1146 -0
  156. package/dist/chunk-TDGYTWM6.js +49 -0
  157. package/dist/chunk-TGL5FZVD.js +132 -0
  158. package/dist/chunk-TGWZXJ7L.js +1205 -0
  159. package/dist/chunk-TKDRT2DF.js +114 -0
  160. package/dist/chunk-TV2EBCSQ.js +152 -0
  161. package/dist/chunk-U26XXPJS.js +367 -0
  162. package/dist/chunk-U5QU5ZOD.js +419 -0
  163. package/dist/chunk-U6YTUVOX.js +1011 -0
  164. package/dist/chunk-UCINIRHW.js +188 -0
  165. package/dist/chunk-UJD5MPP6.js +52 -0
  166. package/dist/chunk-URCXX7WJ.js +146 -0
  167. package/dist/chunk-UX2L5CUD.js +898 -0
  168. package/dist/chunk-UZVYEF57.js +114 -0
  169. package/dist/chunk-V35KZDUZ.js +218 -0
  170. package/dist/chunk-VESL6DQY.js +1058 -0
  171. package/dist/chunk-VKHLUZNO.js +986 -0
  172. package/dist/chunk-VOYUCAQF.js +584 -0
  173. package/dist/chunk-VYRQHORQ.js +414 -0
  174. package/dist/chunk-W53XSRQE.js +245 -0
  175. package/dist/chunk-X4CEFOSG.js +226 -0
  176. package/dist/chunk-XDHUDE5K.js +380 -0
  177. package/dist/chunk-XISLDHEL.js +1290 -0
  178. package/dist/chunk-XM34YQ2Y.js +169 -0
  179. package/dist/chunk-XMDBTYCH.js +661 -0
  180. package/dist/chunk-XS2QPZJE.js +449 -0
  181. package/dist/chunk-YBUECLAF.js +618 -0
  182. package/dist/chunk-YQ6XEFVK.js +332 -0
  183. package/dist/chunk-YYLCPDCC.js +990 -0
  184. package/dist/chunk-Z4GLJ6J4.js +1035 -0
  185. package/dist/chunk-ZARZ4POR.js +210 -0
  186. package/dist/chunk-ZJPORZTC.js +119 -0
  187. package/dist/chunk-ZNUZ3EXD.js +243 -0
  188. package/dist/chunk-ZPST2KQO.js +49 -0
  189. package/dist/chunk-ZR5YA6ZF.js +512 -0
  190. package/dist/chunk-ZU4JPCPR.js +319 -0
  191. package/dist/chunk-ZUKUCZYZ.js +39 -0
  192. package/dist/cli/index.js +56 -45
  193. package/dist/clio-K2PBVCEM.js +27 -0
  194. package/dist/clio-context-tools-GR4OHFSO.js +145 -0
  195. package/dist/code-nav-4X3OI6DK.js +715 -0
  196. package/dist/codewiki/build-worker.js +4 -4
  197. package/dist/compile-cache-YRB6QRO7.js +18 -0
  198. package/dist/components-RQOJ6NUR.js +675 -0
  199. package/dist/config-Q5J7UBAB.js +291 -0
  200. package/dist/config-XE7XYZLU.js +38 -0
  201. package/dist/config-graph-P3555574.js +175 -0
  202. package/dist/configure-KIJ32ZO6.js +104 -0
  203. package/dist/context-LFBQOSXT.js +344 -0
  204. package/dist/context-NNLBES2Y.js +82 -0
  205. package/dist/context-WBH3KSVR.js +302 -0
  206. package/dist/context-clear-YOHMQ6SQ.js +208 -0
  207. package/dist/context-index-X2N5UAIF.js +120 -0
  208. package/dist/context-map-HOSMGUG2.js +555 -0
  209. package/dist/context-working-set-MRAEVDNV.js +1564 -0
  210. package/dist/data-tool-JJPBGMQJ.js +2986 -0
  211. package/dist/detail-RHJOTGN4.js +139 -0
  212. package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
  213. package/dist/docs-K4GBWRUX.js +342 -0
  214. package/dist/doctor-S5KZ2GTN.js +1138 -0
  215. package/dist/doctor-deep-2EJQSHIZ.js +130 -0
  216. package/dist/domain-loader-MB34FDPD.js +13 -0
  217. package/dist/eval-3D6M36N7.js +5220 -0
  218. package/dist/eval-inventory-SM3HNM47.js +260 -0
  219. package/dist/evals-FO6JEUCN.js +104 -0
  220. package/dist/evidence-6IYN52ET.js +262 -0
  221. package/dist/evidence-JVECPI3F.js +250 -0
  222. package/dist/evidence-XNVPPLVK.js +410 -0
  223. package/dist/evolve-TLPUDJDM.js +634 -0
  224. package/dist/extensions-ROZJ5X3J.js +311 -0
  225. package/dist/fleet-6RJWIOEO.js +284 -0
  226. package/dist/fleet-WKVBF5SZ.js +942 -0
  227. package/dist/fleet-commands-L6WFT7KZ.js +76 -0
  228. package/dist/fleet-decisions-BTQMWU5A.js +55 -0
  229. package/dist/fleet-graph-553DZ67Q.js +141 -0
  230. package/dist/fleet-inspect-236FZPRB.js +329 -0
  231. package/dist/fleet-new-CKUXP3CO.js +48 -0
  232. package/dist/fleet-preflight-NZQHABWO.js +95 -0
  233. package/dist/fleet-validate-7NLAE26R.js +96 -0
  234. package/dist/fleet-verify-E3RO6A5W.js +226 -0
  235. package/dist/fleet-view-KMZQY7YJ.js +144 -0
  236. package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
  237. package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
  238. package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
  239. package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
  240. package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
  241. package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
  242. package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
  243. package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
  244. package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
  245. package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
  246. package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
  247. package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
  248. package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
  249. package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
  250. package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
  251. package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
  252. package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
  253. package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
  254. package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
  255. package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
  256. package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
  257. package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
  258. package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
  259. package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
  260. package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
  261. package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
  262. package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
  263. package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
  264. package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
  265. package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
  266. package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
  267. package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
  268. package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
  269. package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
  270. package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
  271. package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
  272. package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
  273. package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
  274. package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
  275. package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
  276. package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
  277. package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
  278. package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
  279. package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
  280. package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
  281. package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
  282. package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
  283. package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
  284. package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
  285. package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
  286. package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
  287. package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
  288. package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
  289. package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
  290. package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
  291. package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
  292. package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
  293. package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
  294. package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
  295. package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
  296. package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
  297. package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
  298. package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
  299. package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
  300. package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
  301. package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
  302. package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
  303. package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
  304. package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
  305. package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
  306. package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
  307. package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
  308. package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
  309. package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
  310. package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
  311. package/dist/gui/client/index.html +6 -0
  312. package/dist/gui/ops-worker.js +167 -0
  313. package/dist/gui/reads-worker.js +473 -0
  314. package/dist/gui/server.js +9780 -0
  315. package/dist/gui-QJS7XQMV.js +16 -0
  316. package/dist/init-DV5B6HQG.js +354 -0
  317. package/dist/install-6C45YXFP.js +19 -0
  318. package/dist/install-O7NSRU2W.js +13 -0
  319. package/dist/interactive-OXGYZYAS.js +22381 -0
  320. package/dist/interop-J7UOBOSF.js +254 -0
  321. package/dist/inventory-OEGIL6PY.js +144 -0
  322. package/dist/library-B3UPGY4V.js +83 -0
  323. package/dist/library-MXQA5DLT.js +309 -0
  324. package/dist/library-ROZAMUIL.js +496 -0
  325. package/dist/library-import-2LTWOVBD.js +190 -0
  326. package/dist/library-inventory-LJ3XHLWO.js +60 -0
  327. package/dist/library-validation-DARHHUNW.js +46 -0
  328. package/dist/mcp-2GSPYQ54.js +28 -0
  329. package/dist/memory-J3STUUIK.js +537 -0
  330. package/dist/models-Y3GMFJ2V.js +314 -0
  331. package/dist/monitor-LHNH577J.js +811 -0
  332. package/dist/orchestrator-DTAPXULA.js +12117 -0
  333. package/dist/panes-A743ONZ5.js +103 -0
  334. package/dist/panes-CTNO57ZY.js +76 -0
  335. package/dist/paths-3SBYJQDP.js +68 -0
  336. package/dist/preload-OJBMAIXF.js +140 -0
  337. package/dist/providers-CMETPZNS.js +232 -0
  338. package/dist/registry-37T4U6X2.js +15 -0
  339. package/dist/reset-O7EUCYWO.js +346 -0
  340. package/dist/resources-FY6XYFN2.js +189 -0
  341. package/dist/run-H64MEVTA.js +1067 -0
  342. package/dist/run-script-PQ5NRU3X.js +42 -0
  343. package/dist/settings-SNIQNXCW.js +73 -0
  344. package/dist/settings-controls-X6GMCPVG.js +202 -0
  345. package/dist/share-CAFMMQLM.js +299 -0
  346. package/dist/skills-ERKQUC7L.js +114 -0
  347. package/dist/skills-eval-CQ23MYQK.js +1099 -0
  348. package/dist/skills-inventory-TVUYJDVN.js +142 -0
  349. package/dist/slash-commands-ROG3KIFJ.js +107 -0
  350. package/dist/startup-background-KDWCQMWT.js +247 -0
  351. package/dist/steer-KKYXJSH4.js +77 -0
  352. package/dist/support-M3RCUUEL.js +40 -0
  353. package/dist/system-ZDW44ZGX.js +142 -0
  354. package/dist/target-runtimes-PWA22WVW.js +73 -0
  355. package/dist/targets-AJWA6E7Z.js +1207 -0
  356. package/dist/tasks-6L2JJRC5.js +39 -0
  357. package/dist/terminal-lease-YFUSDPAD.js +432 -0
  358. package/dist/tools-5XJUABRD.js +30 -0
  359. package/dist/trace-LA5MVR4Y.js +527 -0
  360. package/dist/tree-sitter-TQW3Y52T.js +4673 -0
  361. package/dist/tui-primitives-IUCVWLH5.js +19 -0
  362. package/dist/uninstall-SAWGGXAB.js +448 -0
  363. package/dist/upgrade-HSNSVTZG.js +300 -0
  364. package/dist/usage-XSILDHKF.js +1083 -0
  365. package/dist/verifiers-ECA5GIHL.js +633 -0
  366. package/dist/verify-R6QQCCEB.js +31 -0
  367. package/dist/version-PLZYB5KW.js +22 -0
  368. package/dist/web-fetch-PVZNMBOB.js +803 -0
  369. package/dist/wiki-generate-RP22WP5K.js +647 -0
  370. package/dist/with-panes-W3PAZPRF.js +629 -0
  371. package/dist/worker/entry.js +324 -284
  372. package/dist/workspace-check-3764ZKC2.js +83 -0
  373. package/docs/README.md +26 -10
  374. package/docs/architecture/acp.md +179 -12
  375. package/docs/architecture/artifact-placement.md +1 -1
  376. package/docs/architecture/capacity-and-scheduling.md +7 -8
  377. package/docs/architecture/context-engine.md +350 -95
  378. package/docs/architecture/model-catalog.md +18 -11
  379. package/docs/architecture/observability.md +1 -1
  380. package/docs/architecture/pi-boundary.md +59 -6
  381. package/docs/architecture/prompt-envelope-and-tools.md +147 -39
  382. package/docs/architecture/provider-adapter-cookbook.md +2 -2
  383. package/docs/architecture/safety-model.md +18 -4
  384. package/docs/architecture/trace-store.md +2 -2
  385. package/docs/architecture/tui-design.md +41 -81
  386. package/docs/architecture/worker-dispatch-mechanics.md +9 -1
  387. package/docs/gui/README.md +69 -0
  388. package/docs/gui/boundary-doctrine.md +104 -0
  389. package/docs/gui/chat-rendering-spec.md +1440 -0
  390. package/docs/gui/cli-surface-routing.md +148 -0
  391. package/docs/gui/delivery-order.md +53 -0
  392. package/docs/gui/event-bus-coverage.md +103 -0
  393. package/docs/gui/inspector-presentation.md +71 -0
  394. package/docs/gui/parity/01-cli-surface.md +74 -0
  395. package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
  396. package/docs/gui/parity/03-domains-and-plan.md +69 -0
  397. package/docs/gui/performance-baseline.md +76 -0
  398. package/docs/gui/settings-write-surface.md +267 -0
  399. package/docs/gui/workflow-coverage.md +64 -0
  400. package/docs/guide/built-in-agents.md +1 -1
  401. package/docs/guide/commands-and-modes.md +256 -99
  402. package/docs/guide/configuration-and-targets.md +485 -124
  403. package/docs/guide/configuration-reference.md +165 -82
  404. package/docs/guide/doctor.md +127 -0
  405. package/docs/guide/environment-variables.md +1 -1
  406. package/docs/guide/exit-codes-and-output.md +3 -1
  407. package/docs/guide/extensions-and-sharing.md +3 -14
  408. package/docs/guide/fleet-dispatch.md +231 -45
  409. package/docs/guide/glossary.md +1 -1
  410. package/docs/guide/installation-and-lifecycle.md +27 -16
  411. package/docs/guide/interop.md +2 -2
  412. package/docs/guide/proactive-memory.md +154 -68
  413. package/docs/guide/resource-library.md +4 -0
  414. package/docs/guide/skills-marketplace.md +8 -4
  415. package/docs/guide/slurm.md +88 -0
  416. package/docs/guide/tool-usage.md +134 -11
  417. package/docs/guide/troubleshooting.md +4 -2
  418. package/docs/process/battletest-2026-09-20-fixes.md +161 -0
  419. package/docs/process/configure-tree-proposal.md +637 -0
  420. package/docs/process/documentation-coverage.md +8 -0
  421. package/docs/process/documentation-guide.md +18 -1
  422. package/docs/process/eval-runner.md +58 -14
  423. package/docs/process/performance-methodology.md +11 -3
  424. package/docs/process/release-cut-checklist.md +29 -3
  425. package/docs/process/tool-audit-v0.4.9.md +3 -0
  426. package/examples/extensions/README.md +1 -3
  427. package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
  428. package/examples/extensions/measurements/clio-coder-extension.json +1 -1
  429. package/library/registry.yaml +30 -5
  430. package/library/skills/git/fix-issue/SKILL.md +2 -1
  431. package/library/skills/git/fix-issue/plugin.json +1 -1
  432. package/library/skills/git/ship/SKILL.md +2 -1
  433. package/library/skills/git/ship/plugin.json +1 -1
  434. package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
  435. package/library/skills/meta/clio-coder-test/evals.md +2 -2
  436. package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
  437. package/library/skills/registry.yaml +9 -5
  438. package/library/skills/research/slurm-jobs/SKILL.md +110 -0
  439. package/library/skills/research/slurm-jobs/evals.md +39 -0
  440. package/library/skills/research/slurm-jobs/plugin.json +23 -0
  441. package/library/skills/skill-marketplace.json +18 -2
  442. package/package.json +15 -10
  443. package/src/cli/args.ts +59 -0
  444. package/src/cli/argv.ts +7 -0
  445. package/src/cli/clio.ts +9 -1
  446. package/src/cli/configure-controls.ts +136 -0
  447. package/src/cli/configure-onboarding.ts +24 -7
  448. package/src/cli/configure-quick.ts +32 -7
  449. package/src/cli/configure-target.ts +11 -1
  450. package/src/cli/configure.ts +253 -256
  451. package/src/cli/docs-server.ts +290 -0
  452. package/src/cli/docs.ts +60 -15
  453. package/src/cli/doctor-deep.ts +126 -0
  454. package/src/cli/doctor-hpc.ts +122 -0
  455. package/src/cli/doctor-slurm.ts +130 -0
  456. package/src/cli/doctor-task-worktrees.ts +88 -0
  457. package/src/cli/doctor.ts +165 -16
  458. package/src/cli/fleet-verify.ts +3 -2
  459. package/src/cli/gui.ts +111 -0
  460. package/src/cli/index.ts +14 -4
  461. package/src/cli/library.ts +2 -7
  462. package/src/cli/modes/json-stream.ts +4 -2
  463. package/src/cli/modes/print.ts +252 -25
  464. package/src/cli/run.ts +199 -71
  465. package/src/cli/skills.ts +25 -7
  466. package/src/cli/targets.ts +87 -9
  467. package/src/cli/uninstall.ts +28 -8
  468. package/src/cli/usage.ts +2 -1
  469. package/src/cli/workspace-check.ts +71 -0
  470. package/src/core/bash-exec.ts +8 -2
  471. package/src/core/bus-events.ts +32 -3
  472. package/src/core/cache-telemetry.ts +3 -2
  473. package/src/core/compile-cache.ts +11 -1
  474. package/src/core/config.ts +59 -6
  475. package/src/core/defaults.ts +27 -5
  476. package/src/core/diagnostics.ts +25 -0
  477. package/src/core/event-bus.ts +2 -1
  478. package/src/core/gateway-routing.ts +10 -3
  479. package/src/core/git-commit-attribution.ts +2 -1
  480. package/src/core/naming-compat.ts +6 -4
  481. package/src/core/package-root.ts +0 -9
  482. package/src/core/path-canonical.ts +143 -24
  483. package/src/core/residency-target-key.ts +2 -6
  484. package/src/core/run-overrides.ts +1 -1
  485. package/src/core/settings-awareness.ts +108 -0
  486. package/src/core/settings-controls.ts +673 -0
  487. package/src/core/settings-navigation.ts +116 -0
  488. package/src/core/theme-token-hex.ts +19 -9
  489. package/src/core/turn-constraints.ts +52 -0
  490. package/src/domains/agents/builtins/scout.md +7 -17
  491. package/src/domains/agents/catalog.ts +5 -1
  492. package/src/domains/agents/extension.ts +2 -1
  493. package/src/domains/agents/registry.ts +4 -3
  494. package/src/domains/agents/result-contract.ts +132 -1
  495. package/src/domains/config/classify.ts +11 -7
  496. package/src/domains/config/extension.ts +5 -1
  497. package/src/domains/config/keybindings.ts +2 -2
  498. package/src/domains/context/codewiki/coordinator.ts +10 -0
  499. package/src/domains/context/worker/snapshot.ts +6 -3
  500. package/src/domains/dispatch/active-route-planner.ts +2 -0
  501. package/src/domains/dispatch/agent-candidates.ts +5 -1
  502. package/src/domains/dispatch/capability-match.ts +1 -1
  503. package/src/domains/dispatch/contract.ts +28 -0
  504. package/src/domains/dispatch/event-pump.ts +37 -3
  505. package/src/domains/dispatch/extension.ts +391 -48
  506. package/src/domains/dispatch/failure-classification.ts +37 -2
  507. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  508. package/src/domains/dispatch/run-identity.ts +10 -3
  509. package/src/domains/dispatch/target-breaker.ts +163 -0
  510. package/src/domains/dispatch/types.ts +29 -2
  511. package/src/domains/dispatch/worker-model-loads.ts +66 -0
  512. package/src/domains/dispatch/worker-protocol.ts +20 -1
  513. package/src/domains/dispatch/worker-spawn.ts +28 -2
  514. package/src/domains/eval/artifacts/redact.ts +9 -0
  515. package/src/domains/eval/metrics/noop.ts +61 -0
  516. package/src/domains/eval/reports/junit.ts +5 -1
  517. package/src/domains/eval/reports/text.ts +7 -0
  518. package/src/domains/eval/runners/clio-run.ts +19 -8
  519. package/src/domains/eval/runners/external-command.ts +29 -4
  520. package/src/domains/eval/schema/adapter.ts +6 -2
  521. package/src/domains/eval/schema/suite.ts +2 -0
  522. package/src/domains/eval/schema/validate.ts +3 -0
  523. package/src/domains/eval/suites/run.ts +167 -26
  524. package/src/domains/evidence/detail.ts +3 -2
  525. package/src/domains/extensions/operator-runtime.ts +11 -4
  526. package/src/domains/gateway/mcp/client.ts +1 -1
  527. package/src/domains/lifecycle/doctor.ts +42 -26
  528. package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
  529. package/src/domains/lifecycle/migrations/index.ts +2 -0
  530. package/src/domains/middleware/demo-guidance.ts +36 -0
  531. package/src/domains/middleware/dispatch-nudge.ts +1 -1
  532. package/src/domains/middleware/memory-intervention.ts +51 -4
  533. package/src/domains/middleware/runtime.ts +5 -4
  534. package/src/domains/middleware/skills-reminder.ts +29 -52
  535. package/src/domains/middleware/task-nudge.ts +1 -0
  536. package/src/domains/middleware/watchdog.ts +4 -0
  537. package/src/domains/observability/extension.ts +2 -1
  538. package/src/domains/observability/out-of-turn-usage.ts +3 -2
  539. package/src/domains/observability/projection.ts +3 -2
  540. package/src/domains/observability/worker-progress.ts +48 -0
  541. package/src/domains/prompts/compiler.ts +148 -52
  542. package/src/domains/prompts/contract.ts +3 -3
  543. package/src/domains/prompts/demo-guidance.ts +8 -0
  544. package/src/domains/prompts/extension.ts +12 -7
  545. package/src/domains/prompts/fragments/identity/clio.md +2 -1
  546. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
  547. package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
  548. package/src/domains/prompts/fragments/operating/contract.md +16 -7
  549. package/src/domains/prompts/fragments/operating/delegation.md +29 -13
  550. package/src/domains/prompts/fragments/operating/skills.md +18 -10
  551. package/src/domains/prompts/fragments/operating/worker.md +2 -0
  552. package/src/domains/providers/cache-deployment.ts +45 -2
  553. package/src/domains/providers/contract.ts +52 -11
  554. package/src/domains/providers/extension.ts +230 -53
  555. package/src/domains/providers/model-discovery.ts +22 -8
  556. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
  557. package/src/domains/providers/plugins.ts +3 -4
  558. package/src/domains/providers/probe/fingerprint.ts +2 -2
  559. package/src/domains/providers/probe/reasoning.ts +9 -16
  560. package/src/domains/providers/probe/tool-call.ts +236 -0
  561. package/src/domains/providers/registry.ts +51 -8
  562. package/src/domains/providers/runtime-resolution.ts +60 -12
  563. package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
  564. package/src/domains/providers/runtimes/builtins.ts +2 -2
  565. package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
  566. package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
  567. package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
  568. package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
  569. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
  570. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
  571. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
  572. package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
  573. package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
  574. package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
  575. package/src/domains/providers/support.ts +1 -1
  576. package/src/domains/providers/types/local-model-quirks.ts +2 -3
  577. package/src/domains/providers/types/runtime-descriptor.ts +23 -3
  578. package/src/domains/providers/types/target-descriptor.ts +15 -3
  579. package/src/domains/resources/collision.ts +7 -2
  580. package/src/domains/resources/index.ts +1 -0
  581. package/src/domains/resources/library-actions.ts +4 -2
  582. package/src/domains/resources/library-inventory.ts +6 -2
  583. package/src/domains/resources/prompts/loader.ts +20 -7
  584. package/src/domains/resources/skills/availability.ts +56 -0
  585. package/src/domains/resources/skills/loader.ts +20 -9
  586. package/src/domains/safety/action-classifier.ts +282 -31
  587. package/src/domains/safety/audit.ts +2 -1
  588. package/src/domains/safety/autonomy.ts +54 -11
  589. package/src/domains/safety/decision-presentation.ts +17 -4
  590. package/src/domains/safety/finish-contract-registration.ts +25 -1
  591. package/src/domains/safety/finish-contract.ts +20 -5
  592. package/src/domains/safety/path-policy.ts +6 -2
  593. package/src/domains/safety/policy-engine.ts +168 -48
  594. package/src/domains/safety/protected-artifacts.ts +527 -16
  595. package/src/domains/safety/read-scope.ts +120 -0
  596. package/src/domains/safety/skill-authority.ts +52 -16
  597. package/src/domains/scheduling/cluster.ts +14 -3
  598. package/src/domains/scheduling/contract.ts +7 -0
  599. package/src/domains/scheduling/extension.ts +20 -9
  600. package/src/domains/scheduling/local-capacity.ts +160 -0
  601. package/src/domains/session/context-accounting.ts +44 -31
  602. package/src/domains/session/context-ledger.ts +10 -3
  603. package/src/domains/session/entries.ts +4 -0
  604. package/src/domains/session/history.ts +1 -1
  605. package/src/domains/session/prompt-cache.ts +1 -0
  606. package/src/domains/session/prompt-manifest.ts +3 -1
  607. package/src/domains/session/retry.ts +4 -6
  608. package/src/domains/session/task-board.ts +19 -4
  609. package/src/domains/session/tree/preview.ts +3 -2
  610. package/src/engine/acp/commands.ts +653 -0
  611. package/src/engine/acp/server.ts +639 -20
  612. package/src/engine/acp/tool-mediator.ts +30 -7
  613. package/src/engine/acp/types.ts +58 -0
  614. package/src/engine/agent.ts +55 -10
  615. package/src/engine/ai.ts +11 -2
  616. package/src/engine/api-registry.ts +5 -4
  617. package/src/engine/apis/degraded-inference.ts +243 -0
  618. package/src/engine/apis/llamacpp-residency.ts +50 -6
  619. package/src/engine/apis/lmstudio-residency.ts +3 -5
  620. package/src/engine/apis/lmstudio.ts +137 -31
  621. package/src/engine/apis/ollama-http.ts +118 -0
  622. package/src/engine/apis/ollama-native.ts +216 -97
  623. package/src/engine/apis/openai-completions.ts +191 -189
  624. package/src/engine/apis/output-budget.ts +3 -1
  625. package/src/engine/apis/residency-lock.ts +2 -1
  626. package/src/engine/apis/residency.ts +339 -89
  627. package/src/engine/apis/sampling-overrides.ts +23 -2
  628. package/src/engine/apis/types.ts +1 -2
  629. package/src/engine/claude/tool-safety.ts +30 -5
  630. package/src/engine/context.ts +13 -0
  631. package/src/engine/env-api-keys.ts +2 -1
  632. package/src/engine/gemma-channel-filter.ts +3 -2
  633. package/src/engine/instrumented-tui.ts +25 -0
  634. package/src/engine/loop-guard.ts +172 -6
  635. package/src/engine/pi-mono-names.ts +16 -0
  636. package/src/engine/prewarm.ts +44 -15
  637. package/src/engine/provider-payload.ts +52 -14
  638. package/src/engine/session.ts +4 -2
  639. package/src/engine/worker-events.ts +9 -1
  640. package/src/engine/worker-runtime.ts +269 -42
  641. package/src/engine/worker-tools.ts +8 -3
  642. package/src/entry/boot-options.ts +23 -0
  643. package/src/entry/orchestrator.ts +207 -36
  644. package/src/interactive/assistant-generation-timing.ts +52 -0
  645. package/src/interactive/chat-loop-messages.ts +4 -1
  646. package/src/interactive/chat-loop.ts +59 -9
  647. package/src/interactive/chat-panel.ts +10 -1
  648. package/src/interactive/clio-editor.ts +51 -79
  649. package/src/interactive/context-meter.ts +1 -0
  650. package/src/interactive/context-overlay.ts +21 -8
  651. package/src/interactive/cost-overlay.ts +1 -1
  652. package/src/interactive/dispatch-board.ts +39 -8
  653. package/src/interactive/editor-bash.ts +0 -34
  654. package/src/interactive/editor-rails.ts +43 -0
  655. package/src/interactive/editor-submit.ts +34 -2
  656. package/src/interactive/footer/dashboard.ts +67 -38
  657. package/src/interactive/footer/demo-hints.ts +40 -0
  658. package/src/interactive/footer/key-hints.ts +21 -0
  659. package/src/interactive/footer/notifications.ts +1 -1
  660. package/src/interactive/footer/pages.ts +486 -0
  661. package/src/interactive/footer/system-metrics.ts +147 -0
  662. package/src/interactive/footer/widgets.ts +158 -63
  663. package/src/interactive/footer-panel.ts +29 -7
  664. package/src/interactive/interactive-application.ts +109 -21
  665. package/src/interactive/interactive-event-projection.ts +6 -2
  666. package/src/interactive/interactive-presentation.ts +25 -29
  667. package/src/interactive/interactive-slash-runtime.ts +32 -18
  668. package/src/interactive/interactive-subscriptions.ts +25 -5
  669. package/src/interactive/interactive-tickers.ts +21 -5
  670. package/src/interactive/keybinding-manager.ts +9 -0
  671. package/src/interactive/overlay-frame.ts +29 -7
  672. package/src/interactive/overlay-lifecycle.ts +5 -3
  673. package/src/interactive/overlay-model-selectors.ts +4 -0
  674. package/src/interactive/overlay-permission-lifecycle.ts +6 -5
  675. package/src/interactive/overlays/ask-user.ts +103 -110
  676. package/src/interactive/overlays/help-reference.ts +1 -0
  677. package/src/interactive/overlays/message-picker.ts +3 -29
  678. package/src/interactive/overlays/session-selector.ts +3 -2
  679. package/src/interactive/overlays/settings-sections.ts +2 -30
  680. package/src/interactive/overlays/settings.ts +310 -607
  681. package/src/interactive/permission-hint.ts +3 -3
  682. package/src/interactive/permission-overlay.ts +45 -27
  683. package/src/interactive/renderers/doctor-report.ts +43 -0
  684. package/src/interactive/renderers/tool-execution.ts +87 -62
  685. package/src/interactive/renderers/worker-entry.ts +76 -3
  686. package/src/interactive/side-question.ts +3 -1
  687. package/src/interactive/slash-commands.ts +78 -23
  688. package/src/interactive/startup-background.ts +131 -0
  689. package/src/interactive/startup-diagnostics.ts +16 -0
  690. package/src/interactive/status/state-machine.ts +16 -3
  691. package/src/interactive/status/types.ts +2 -0
  692. package/src/interactive/status/verbs.ts +1 -1
  693. package/src/interactive/terminal-lease.ts +26 -22
  694. package/src/interactive/theme/components.ts +1 -1
  695. package/src/interactive/theme/rules.ts +1 -1
  696. package/src/interactive/theme/tokens.ts +16 -10
  697. package/src/interactive/transcript-detail.ts +4 -0
  698. package/src/interactive/turn-context.ts +56 -20
  699. package/src/interactive/turn-middleware.ts +57 -9
  700. package/src/interactive/turn-prewarm.ts +121 -18
  701. package/src/interactive/turn-recovery.ts +10 -8
  702. package/src/interactive/turn-runtime.ts +74 -29
  703. package/src/interactive/turn-state.ts +3 -0
  704. package/src/interactive/welcome-art.ts +36 -0
  705. package/src/interactive/welcome-dashboard.ts +209 -49
  706. package/src/interactive/worker-replay.ts +4 -0
  707. package/src/interactive/worker-stream.ts +17 -2
  708. package/src/tools/agent-tools.ts +22 -1
  709. package/src/tools/builtin-tool-catalog.ts +2 -2
  710. package/src/tools/codewiki/code-nav.ts +1 -1
  711. package/src/tools/codewiki/shared.ts +39 -1
  712. package/src/tools/compete-worktrees.ts +8 -91
  713. package/src/tools/context/docs-engine.ts +44 -12
  714. package/src/tools/context/index.ts +126 -22
  715. package/src/tools/context/library.ts +1 -1
  716. package/src/tools/context/surface.ts +12 -7
  717. package/src/tools/core-bootstrap.ts +3 -0
  718. package/src/tools/dispatch-runner.ts +18 -0
  719. package/src/tools/dispatch-schema.ts +187 -206
  720. package/src/tools/edit.ts +46 -42
  721. package/src/tools/file-mutation-queue.ts +25 -26
  722. package/src/tools/gateway/clio-context-surface.ts +1 -1
  723. package/src/tools/gateway/index.ts +7 -3
  724. package/src/tools/gateway/mcp-capabilities.ts +5 -3
  725. package/src/tools/grep.ts +14 -2
  726. package/src/tools/ls.ts +1 -4
  727. package/src/tools/monitor.ts +14 -1
  728. package/src/tools/observation.ts +1 -3
  729. package/src/tools/path-utils.ts +51 -18
  730. package/src/tools/process-lease.ts +99 -0
  731. package/src/tools/read.ts +1 -1
  732. package/src/tools/registry.ts +71 -9
  733. package/src/tools/task-worktree.ts +296 -17
  734. package/src/tools/tasks.ts +29 -7
  735. package/src/tools/worker-evidence.ts +60 -1
  736. package/src/tools/worktree-root.ts +252 -0
  737. package/src/tools/write.ts +34 -30
  738. package/src/worker/entry.ts +18 -1
  739. package/src/worker/protocol.ts +54 -1
  740. package/src/worker/spec-contract.ts +22 -2
  741. package/dist/acp-ZWZCPS2A.js +0 -130
  742. package/dist/agents-LYSOWZUE.js +0 -150
  743. package/dist/auth-WBQGKWQ5.js +0 -551
  744. package/dist/background-BUMOBAQN.js +0 -37
  745. package/dist/builtins-ODRJOEDI.js +0 -22
  746. package/dist/chunk-2DRRZ57Q.js +0 -571
  747. package/dist/chunk-2JBZYUPY.js +0 -105
  748. package/dist/chunk-2VBWFXYE.js +0 -198
  749. package/dist/chunk-2X2R3UTH.js +0 -1018
  750. package/dist/chunk-32KJPXAM.js +0 -75
  751. package/dist/chunk-37LW32LZ.js +0 -32
  752. package/dist/chunk-3A3CUMKA.js +0 -54
  753. package/dist/chunk-3AND2EFU.js +0 -215
  754. package/dist/chunk-3RDHGNU7.js +0 -647
  755. package/dist/chunk-3SUDBGEI.js +0 -1323
  756. package/dist/chunk-3TQN67I2.js +0 -396
  757. package/dist/chunk-3U4BL2EV.js +0 -103
  758. package/dist/chunk-3UQADNG2.js +0 -302
  759. package/dist/chunk-434LRQ6Z.js +0 -13441
  760. package/dist/chunk-4ATBOFRP.js +0 -7802
  761. package/dist/chunk-4DNL43EZ.js +0 -139
  762. package/dist/chunk-4HFJKRGZ.js +0 -5250
  763. package/dist/chunk-555E2WVV.js +0 -322
  764. package/dist/chunk-5GZICIYO.js +0 -462
  765. package/dist/chunk-5PHVPU4G.js +0 -160
  766. package/dist/chunk-5RTEFNBP.js +0 -197
  767. package/dist/chunk-64XJW7NT.js +0 -380
  768. package/dist/chunk-6TKOFFGE.js +0 -1058
  769. package/dist/chunk-6UJ7RDI7.js +0 -1143
  770. package/dist/chunk-7FBCRWVT.js +0 -1801
  771. package/dist/chunk-7JSOSVLP.js +0 -283
  772. package/dist/chunk-7N3OLLSL.js +0 -637
  773. package/dist/chunk-7QQRPB2E.js +0 -915
  774. package/dist/chunk-A6DULIMH.js +0 -986
  775. package/dist/chunk-AB3QXXBC.js +0 -123
  776. package/dist/chunk-ACCECAH4.js +0 -49
  777. package/dist/chunk-AM6CEP2K.js +0 -2120
  778. package/dist/chunk-AUHVBIDW.js +0 -19
  779. package/dist/chunk-AY4XE6GN.js +0 -665
  780. package/dist/chunk-BBA2TAWV.js +0 -667
  781. package/dist/chunk-BFPHMSK7.js +0 -169
  782. package/dist/chunk-BMNVVKEW.js +0 -604
  783. package/dist/chunk-CKK25WN3.js +0 -72
  784. package/dist/chunk-CTGZCEI6.js +0 -33
  785. package/dist/chunk-DIAJYJYG.js +0 -446
  786. package/dist/chunk-DVNAPPXU.js +0 -27
  787. package/dist/chunk-DXVMLM3Z.js +0 -92
  788. package/dist/chunk-E3LEPLQ2.js +0 -68
  789. package/dist/chunk-EHZRAB4U.js +0 -63
  790. package/dist/chunk-EM2DIQAJ.js +0 -179
  791. package/dist/chunk-EM2WNQS2.js +0 -93
  792. package/dist/chunk-ETF4ROKH.js +0 -595
  793. package/dist/chunk-F2YM3JY4.js +0 -22513
  794. package/dist/chunk-FEBQWHJT.js +0 -1023
  795. package/dist/chunk-FPS4R2RN.js +0 -1975
  796. package/dist/chunk-GD55RTIW.js +0 -33
  797. package/dist/chunk-GJDRMBDI.js +0 -573
  798. package/dist/chunk-GREYLTZ5.js +0 -658
  799. package/dist/chunk-H2WSCZZT.js +0 -238
  800. package/dist/chunk-H6IUCY6Q.js +0 -117
  801. package/dist/chunk-H72DCH3E.js +0 -563
  802. package/dist/chunk-H7TXJR23.js +0 -705
  803. package/dist/chunk-HBJQQTKM.js +0 -40
  804. package/dist/chunk-HCVKSGNZ.js +0 -990
  805. package/dist/chunk-HVCAY2FH.js +0 -67
  806. package/dist/chunk-I47EJPYL.js +0 -1377
  807. package/dist/chunk-IALGWTLO.js +0 -36
  808. package/dist/chunk-IALZJE37.js +0 -1710
  809. package/dist/chunk-IC7JXLOM.js +0 -1577
  810. package/dist/chunk-IOSVTTCD.js +0 -108
  811. package/dist/chunk-IPTPMLA6.js +0 -475
  812. package/dist/chunk-IZZI3SKQ.js +0 -128
  813. package/dist/chunk-JABWPKFY.js +0 -27
  814. package/dist/chunk-JIYWMQZ5.js +0 -175
  815. package/dist/chunk-JKU34ACI.js +0 -693
  816. package/dist/chunk-JOBN2YQQ.js +0 -176
  817. package/dist/chunk-JOL2QRLE.js +0 -152
  818. package/dist/chunk-JTR3VSV3.js +0 -44
  819. package/dist/chunk-JU6MAMRJ.js +0 -362
  820. package/dist/chunk-JURMQWVJ.js +0 -15
  821. package/dist/chunk-K2BLQC5E.js +0 -262
  822. package/dist/chunk-K3XN4LZ4.js +0 -402
  823. package/dist/chunk-KIVFXGBM.js +0 -688
  824. package/dist/chunk-KKRXONXG.js +0 -43
  825. package/dist/chunk-KOAHT3N2.js +0 -395
  826. package/dist/chunk-KP5BPXR3.js +0 -73
  827. package/dist/chunk-KQ6IDQIB.js +0 -39
  828. package/dist/chunk-KRJQG47M.js +0 -1289
  829. package/dist/chunk-KW6OJ7IY.js +0 -221
  830. package/dist/chunk-L3NBWLSN.js +0 -314
  831. package/dist/chunk-L4RUTLRL.js +0 -59
  832. package/dist/chunk-LGTVWPRN.js +0 -47
  833. package/dist/chunk-LSQW6KZO.js +0 -200
  834. package/dist/chunk-LTR5QCLS.js +0 -446
  835. package/dist/chunk-LWJYOHT3.js +0 -165
  836. package/dist/chunk-M6YLF66Z.js +0 -2687
  837. package/dist/chunk-MJ4QEJVT.js +0 -185
  838. package/dist/chunk-MO65K5CH.js +0 -1148
  839. package/dist/chunk-MTOZEQHL.js +0 -637
  840. package/dist/chunk-MZDPF35R.js +0 -45
  841. package/dist/chunk-MZKYVIWW.js +0 -188
  842. package/dist/chunk-NBPA5QM6.js +0 -386
  843. package/dist/chunk-NMBEW4PP.js +0 -688
  844. package/dist/chunk-NPLLK3HO.js +0 -3610
  845. package/dist/chunk-NSYGPIVW.js +0 -39
  846. package/dist/chunk-NXTV5OI5.js +0 -1020
  847. package/dist/chunk-NYDG4QP4.js +0 -689
  848. package/dist/chunk-OA2GDACN.js +0 -146
  849. package/dist/chunk-PJI57EC6.js +0 -236
  850. package/dist/chunk-PJJBUGMR.js +0 -4484
  851. package/dist/chunk-PNJE7JPS.js +0 -50
  852. package/dist/chunk-PP23PZEV.js +0 -1347
  853. package/dist/chunk-PPIFDSBK.js +0 -409
  854. package/dist/chunk-PTFISXQO.js +0 -319
  855. package/dist/chunk-QB33Z5S7.js +0 -1865
  856. package/dist/chunk-QGNII5VC.js +0 -110
  857. package/dist/chunk-QH3ZTUOA.js +0 -113
  858. package/dist/chunk-QI72X67S.js +0 -481
  859. package/dist/chunk-QJMRYTCX.js +0 -56
  860. package/dist/chunk-QKHZZFKH.js +0 -98
  861. package/dist/chunk-RDKX2PME.js +0 -66
  862. package/dist/chunk-RL7LJYN4.js +0 -66
  863. package/dist/chunk-RPMNIFRY.js +0 -65
  864. package/dist/chunk-RQROVOV3.js +0 -670
  865. package/dist/chunk-S34A7BSP.js +0 -97
  866. package/dist/chunk-SJETVJHX.js +0 -119
  867. package/dist/chunk-SJMNU4ZS.js +0 -634
  868. package/dist/chunk-SL2RDHKO.js +0 -19
  869. package/dist/chunk-SLLG2G44.js +0 -85
  870. package/dist/chunk-SQAZN2V3.js +0 -2744
  871. package/dist/chunk-SQBT46OF.js +0 -814
  872. package/dist/chunk-SRCEQKQS.js +0 -165
  873. package/dist/chunk-TCUOGIL2.js +0 -52
  874. package/dist/chunk-TIWPKCVO.js +0 -42
  875. package/dist/chunk-U44YYLVV.js +0 -1529
  876. package/dist/chunk-UIU7MGZ3.js +0 -486
  877. package/dist/chunk-USBBEKHW.js +0 -177
  878. package/dist/chunk-VHKTOLEW.js +0 -1416
  879. package/dist/chunk-VPWGADBG.js +0 -3151
  880. package/dist/chunk-VQD7NH7Z.js +0 -356
  881. package/dist/chunk-VWFCAK34.js +0 -697
  882. package/dist/chunk-W5RM7YAH.js +0 -78
  883. package/dist/chunk-W72LLZAV.js +0 -243
  884. package/dist/chunk-WGRDABW7.js +0 -207
  885. package/dist/chunk-WWRV5RJI.js +0 -165
  886. package/dist/chunk-XCUDZQLX.js +0 -195
  887. package/dist/chunk-XFLSL7BT.js +0 -386
  888. package/dist/chunk-XJZEDCNT.js +0 -391
  889. package/dist/chunk-XLLEL3K7.js +0 -709
  890. package/dist/chunk-XNZWWDC3.js +0 -686
  891. package/dist/chunk-XRECG65F.js +0 -308
  892. package/dist/chunk-XTQ7MEJG.js +0 -457
  893. package/dist/chunk-XW2UZICE.js +0 -372
  894. package/dist/chunk-Y3M2T5RO.js +0 -891
  895. package/dist/chunk-YGDMBK7O.js +0 -567
  896. package/dist/chunk-YJCCMYYT.js +0 -125
  897. package/dist/chunk-YPQOPFP7.js +0 -797
  898. package/dist/chunk-YQYINEJI.js +0 -132
  899. package/dist/chunk-ZF6CV4WZ.js +0 -5614
  900. package/dist/chunk-ZKJU55MX.js +0 -326
  901. package/dist/chunk-ZKQ63XZ5.js +0 -1196
  902. package/dist/chunk-ZKVMDNAN.js +0 -962
  903. package/dist/chunk-ZST3FRCV.js +0 -132
  904. package/dist/clio-JUDCLNHC.js +0 -26
  905. package/dist/clio-context-tools-FT672MNZ.js +0 -136
  906. package/dist/code-nav-7OVCTP2Z.js +0 -688
  907. package/dist/compile-cache-WJEPUZEJ.js +0 -16
  908. package/dist/components-OZXZMDWU.js +0 -674
  909. package/dist/config-P3ZQVF63.js +0 -275
  910. package/dist/config-graph-GKAOBAS5.js +0 -160
  911. package/dist/configure-25LRYZJG.js +0 -86
  912. package/dist/context-72VQV7JX.js +0 -73
  913. package/dist/context-COWRWXP3.js +0 -286
  914. package/dist/context-WB3D474G.js +0 -344
  915. package/dist/context-clear-Y4LYMWC6.js +0 -192
  916. package/dist/context-index-W6A4V7OC.js +0 -120
  917. package/dist/context-map-DKL3QT6D.js +0 -555
  918. package/dist/context-working-set-TMZYVC7A.js +0 -1560
  919. package/dist/data-tool-KMBWKKWR.js +0 -2987
  920. package/dist/detail-4GLROGY5.js +0 -123
  921. package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
  922. package/dist/docs-ZK777W2G.js +0 -101
  923. package/dist/doctor-WC4OV2OB.js +0 -814
  924. package/dist/eval-FUNWJNUJ.js +0 -5050
  925. package/dist/eval-inventory-CX24K2JT.js +0 -260
  926. package/dist/evals-L73EBHSU.js +0 -104
  927. package/dist/evidence-AVJ2RTHX.js +0 -392
  928. package/dist/evidence-P4NZOAK7.js +0 -233
  929. package/dist/evidence-Y55WKYHH.js +0 -246
  930. package/dist/evolve-MAWKRYWF.js +0 -617
  931. package/dist/extensions-PYQH3H47.js +0 -308
  932. package/dist/fleet-M4H2QBWT.js +0 -268
  933. package/dist/fleet-ULBXXRDR.js +0 -923
  934. package/dist/fleet-commands-7NNC4JZU.js +0 -76
  935. package/dist/fleet-decisions-EHEY7KPU.js +0 -52
  936. package/dist/fleet-graph-LQ2AHZT3.js +0 -136
  937. package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
  938. package/dist/fleet-new-RCKGSRDV.js +0 -48
  939. package/dist/fleet-preflight-UTTNOKMG.js +0 -27
  940. package/dist/fleet-validate-YGILJKA6.js +0 -91
  941. package/dist/fleet-verify-AUWTCDKR.js +0 -210
  942. package/dist/fleet-view-TGUFCY5A.js +0 -127
  943. package/dist/init-GFN2Z7NF.js +0 -333
  944. package/dist/install-3RZDDP23.js +0 -13
  945. package/dist/install-6PIF6F6W.js +0 -19
  946. package/dist/interop-EF5JUWWK.js +0 -246
  947. package/dist/inventory-I6VJDDYF.js +0 -127
  948. package/dist/library-3J5IO2OJ.js +0 -75
  949. package/dist/library-IJTOFTDS.js +0 -307
  950. package/dist/library-Z3KZSHPE.js +0 -492
  951. package/dist/library-import-IMKFLDHX.js +0 -183
  952. package/dist/library-inventory-CQP5D6GU.js +0 -56
  953. package/dist/library-validation-33UTX7AI.js +0 -42
  954. package/dist/mcp-5FWZKUS6.js +0 -26
  955. package/dist/memory-36CWN67Y.js +0 -520
  956. package/dist/models-KQ6PQJJQ.js +0 -302
  957. package/dist/monitor-XX6ZD6KC.js +0 -785
  958. package/dist/orchestrator-SK6HDAOP.js +0 -42067
  959. package/dist/panes-L27QRXUH.js +0 -74
  960. package/dist/panes-LXZIWNOZ.js +0 -103
  961. package/dist/paths-7DJDU4P4.js +0 -67
  962. package/dist/preload-K2TDYI4Y.js +0 -124
  963. package/dist/registry-DESGAXWK.js +0 -11
  964. package/dist/reset-73VU3XNT.js +0 -345
  965. package/dist/resources-3BYJYVYL.js +0 -181
  966. package/dist/run-AR7PY6GW.js +0 -896
  967. package/dist/run-script-H2KUDIII.js +0 -41
  968. package/dist/settings-3VMBMWID.js +0 -72
  969. package/dist/share-HVWH4FPF.js +0 -293
  970. package/dist/skills-5TYEY75Q.js +0 -100
  971. package/dist/skills-eval-CK3MD63Z.js +0 -1083
  972. package/dist/skills-inventory-KSFYG3I6.js +0 -138
  973. package/dist/slash-commands-DMVHML7P.js +0 -98
  974. package/dist/steer-XCD6V3EW.js +0 -77
  975. package/dist/support-JAZL6VBR.js +0 -38
  976. package/dist/system-3TDQRMZZ.js +0 -116
  977. package/dist/targets-EZKHAYRN.js +0 -1117
  978. package/dist/tasks-SNEFHWYW.js +0 -36
  979. package/dist/terminal-lease-BNLFA4OF.js +0 -419
  980. package/dist/tools-7IM6BDCE.js +0 -28
  981. package/dist/trace-C3MBGD4S.js +0 -524
  982. package/dist/tree-sitter-AQUUOSYM.js +0 -4673
  983. package/dist/tui-primitives-36BY2774.js +0 -18
  984. package/dist/uninstall-WWLOSZ42.js +0 -432
  985. package/dist/upgrade-ETK2JNSJ.js +0 -297
  986. package/dist/usage-S2HOB7BZ.js +0 -1065
  987. package/dist/verifiers-QDTEVH7R.js +0 -632
  988. package/dist/verify-SUKUK6XM.js +0 -31
  989. package/dist/version-RFPKO6T7.js +0 -21
  990. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
  991. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
  992. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
  993. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
  994. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
  995. package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
  996. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
  997. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
  998. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
  999. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
  1000. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
  1001. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
  1002. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
  1003. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
  1004. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
  1005. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
  1006. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
  1007. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
  1008. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
  1009. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
  1010. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
  1011. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
  1012. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
  1013. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
  1014. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
  1015. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
  1016. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
  1017. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
  1018. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
  1019. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
  1020. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
  1021. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
  1022. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
  1023. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
  1024. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
  1025. package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
  1026. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
  1027. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
  1028. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
  1029. package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
  1030. package/dist/web/client/assets/index-Dsi52apB.css +0 -1
  1031. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
  1032. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
  1033. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
  1034. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
  1035. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
  1036. package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
  1037. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
  1038. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
  1039. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
  1040. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
  1041. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
  1042. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
  1043. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
  1044. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
  1045. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
  1046. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
  1047. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
  1048. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
  1049. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
  1050. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
  1051. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
  1052. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
  1053. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
  1054. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
  1055. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
  1056. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
  1057. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
  1058. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
  1059. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
  1060. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
  1061. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
  1062. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
  1063. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
  1064. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
  1065. package/dist/web/client/index.html +0 -6
  1066. package/dist/web/ops-worker.js +0 -37
  1067. package/dist/web/reads-worker.js +0 -1726
  1068. package/dist/web/server.js +0 -8499
  1069. package/dist/web-EMGUGGEI.js +0 -13
  1070. package/dist/web-fetch-6BRRVQON.js +0 -805
  1071. package/dist/wiki-generate-XHSJTDOP.js +0 -627
  1072. package/dist/with-panes-Z6BTEHMZ.js +0 -628
  1073. package/evals/README.md +0 -9
  1074. package/evals/behavioral-corpus-grader.mjs +0 -236
  1075. package/evals/behavioral-machinery-baseline.json +0 -2276
  1076. package/evals/behavioral-machinery-driver.ts +0 -250
  1077. package/evals/behavioral-machinery-support.ts +0 -254
  1078. package/evals/behavioral-machinery.yaml +0 -614
  1079. package/evals/behavioral-model-negative-control.yaml +0 -69
  1080. package/evals/behavioral-model.yaml +0 -482
  1081. package/evals/fixtures/behavioral-facts.txt +0 -3
  1082. package/evals/fixtures/behavioral-main.ts +0 -7
  1083. package/evals/fixtures/decoy/note.txt +0 -2
  1084. package/evals/fixtures/docs-retrieval.json +0 -102
  1085. package/evals/fixtures/private/credentials.txt +0 -1
  1086. package/evals/fixtures/scalar-decision.json +0 -17
  1087. package/evals/fixtures/scout-citation-pipeline.json +0 -55
  1088. package/evals/fixtures/source-explanation.json +0 -74
  1089. package/evals/fixtures/tool-arguments.json +0 -18
  1090. package/evals/fixtures/tool-surface/read.txt +0 -4
  1091. package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
  1092. package/evals/no-edit-memory-grader.mjs +0 -149
  1093. package/evals/scalar-decision-grader.py +0 -41
  1094. package/evals/scalar-decision-machinery.ts +0 -145
  1095. package/evals/source-explanation-grader.mjs +0 -118
  1096. package/evals/tool-surface-grader.mjs +0 -53
  1097. package/evals/tool-surface-model.yaml +0 -274
  1098. package/evals/tracked-metrics-baseline.yaml +0 -229
  1099. package/evals/tracked-metrics-grader.mjs +0 -129
  1100. package/src/cli/web.ts +0 -79
  1101. package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
  1102. /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
  1103. /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
  1104. /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
  1105. /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
  1106. /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
  1107. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  1108. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  1109. /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
  1110. /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
  1111. /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
  1112. /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
  1113. /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
  1114. /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
  1115. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  1116. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  1117. /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
  1118. /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
  1119. /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
  1120. /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
  1121. /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
  1122. /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
  1123. /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
  1124. /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
  1125. /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
  1126. /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  1127. /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  1128. /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  1129. /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
  1130. /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
  1131. /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
  1132. /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
  1133. /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
  1134. /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
  1135. /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
  1136. /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
  1137. /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
  1138. /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
  1139. /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
  1140. /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
  1141. /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
  1142. /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
  1143. /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
  1144. /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
  1145. /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
  1146. /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
  1147. /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
  1148. /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
  1149. /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
  1150. /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
  1151. /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
  1152. /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
  1153. /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
  1154. /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
  1155. /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
  1156. /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
  1157. /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
  1158. /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
  1159. /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
  1160. /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
  1161. /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
  1162. /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
  1163. /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
  1164. /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
  1165. /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
  1166. /package/dist/{web → gui}/client/icon-192.png +0 -0
  1167. /package/dist/{web → gui}/client/icon-512.png +0 -0
  1168. /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
  1169. /package/dist/{web → gui}/client/offline.css +0 -0
  1170. /package/dist/{web → gui}/client/offline.html +0 -0
  1171. /package/dist/{web → gui}/client/offline.js +0 -0
  1172. /package/dist/{web → gui}/client/sw.js +0 -0
@@ -1,1377 +0,0 @@
1
- import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
- import {
3
- classify
4
- } from "./chunk-H2WSCZZT.js";
5
- import {
6
- ToolNames,
7
- isBuiltinToolName
8
- } from "./chunk-V4XJWDHR.js";
9
- import {
10
- init_esm_shims
11
- } from "./chunk-ECBHH7LU.js";
12
-
13
- // src/core/json-payload.ts
14
- init_esm_shims();
15
- function jsonPayloadCandidates(text) {
16
- const trimmed = text.trim();
17
- const candidates = [trimmed];
18
- const fenced = /```[A-Za-z0-9_-]*\s*\n?([\s\S]*?)```/.exec(trimmed)?.[1]?.trim();
19
- if (fenced !== void 0 && fenced.length > 0) candidates.push(fenced);
20
- const start = trimmed.indexOf("{");
21
- const end = trimmed.lastIndexOf("}");
22
- if (start >= 0 && end > start) candidates.push(trimmed.slice(start, end + 1));
23
- return candidates;
24
- }
25
- function parseJsonObjectPayload(text) {
26
- let parsedSomething = false;
27
- for (const candidate of jsonPayloadCandidates(text)) {
28
- let value;
29
- try {
30
- value = JSON.parse(candidate);
31
- } catch {
32
- continue;
33
- }
34
- parsedSomething = true;
35
- if (value === null || typeof value !== "object" || Array.isArray(value)) continue;
36
- return { ok: true, value };
37
- }
38
- return { ok: false, reason: parsedSomething ? "not-object" : "not-json" };
39
- }
40
-
41
- // src/domains/agents/spec.ts
42
- init_esm_shims();
43
- import { createHash } from "node:crypto";
44
- var AGENT_AUTOMATION_AUTHORITIES = ["read-only", "verification", "artifact-write", "workspace-edit"];
45
- var AGENT_PRODUCTS = ["orientation"];
46
- var AGENT_CATEGORIES = [
47
- "explore",
48
- "plan",
49
- "research",
50
- "implement",
51
- "quality",
52
- "science",
53
- "evolution",
54
- "operations",
55
- "internal"
56
- ];
57
- var AGENT_CAPABILITY_CLASSES = [
58
- "read-only",
59
- "artifact-write",
60
- "workspace-edit",
61
- "verification",
62
- "orchestration",
63
- "internal"
64
- ];
65
- var AGENT_LATENCY_CLASSES = ["fast", "balanced", "deep"];
66
- var AGENT_AUDIENCES = ["base", "shadow", "custom", "internal"];
67
- var AGENT_PROJECT_CONTEXT_TIERS = ["none", "bounded"];
68
- function includes(values, value) {
69
- return typeof value === "string" && values.includes(value);
70
- }
71
- function isAgentCategory(value) {
72
- return includes(AGENT_CATEGORIES, value);
73
- }
74
- function isAgentCapabilityClass(value) {
75
- return includes(AGENT_CAPABILITY_CLASSES, value);
76
- }
77
- function isAgentLatencyClass(value) {
78
- return includes(AGENT_LATENCY_CLASSES, value);
79
- }
80
- function isAgentAudience(value) {
81
- return includes(AGENT_AUDIENCES, value);
82
- }
83
- function isAgentProjectContextTier(value) {
84
- return includes(AGENT_PROJECT_CONTEXT_TIERS, value);
85
- }
86
- function isAgentProduct(value) {
87
- return includes(AGENT_PRODUCTS, value);
88
- }
89
- function actionClassesForTools(tools) {
90
- const actions = /* @__PURE__ */ new Set();
91
- for (const tool of tools) actions.add(classify({ tool }).actionClass);
92
- return actions;
93
- }
94
- function normalizeTools(recipe) {
95
- const seen = /* @__PURE__ */ new Set();
96
- const tools = [];
97
- for (const tool of recipe.tools) {
98
- if (typeof tool !== "string" || tool.trim().length === 0) {
99
- throw new Error(`agent recipe '${recipe.id}' declares an invalid tool name`);
100
- }
101
- if (seen.has(tool)) continue;
102
- seen.add(tool);
103
- tools.push(isBuiltinToolName(tool) ? tool : tool);
104
- }
105
- return tools;
106
- }
107
- function asToolName(tool) {
108
- return isBuiltinToolName(tool) ? tool : tool;
109
- }
110
- function normalizeToolRequirements(recipe, tools) {
111
- if (!recipe.toolRequirements) {
112
- throw new Error(`agent recipe '${recipe.id}' must declare tools.required and tools.optional`);
113
- }
114
- const declared = new Set(tools);
115
- const required = recipe.toolRequirements.required.map((requirement, index) => {
116
- if (typeof requirement === "string") return asToolName(requirement);
117
- if (!Array.isArray(requirement.anyOf) || requirement.anyOf.length === 0) {
118
- throw new Error(`agent recipe '${recipe.id}' tools.required[${index}].anyOf must be non-empty`);
119
- }
120
- return { anyOf: requirement.anyOf.map(asToolName) };
121
- });
122
- const optional = recipe.toolRequirements.optional.map(asToolName);
123
- const mentioned = required.flatMap(
124
- (requirement) => typeof requirement === "string" ? [requirement] : requirement.anyOf
125
- );
126
- for (const tool of [...mentioned, ...optional]) {
127
- if (!declared.has(tool)) throw new Error(`agent recipe '${recipe.id}' requirement '${tool}' is not declared`);
128
- }
129
- if ((/* @__PURE__ */ new Set([...mentioned, ...optional])).size !== mentioned.length + optional.length) {
130
- throw new Error(`agent recipe '${recipe.id}' contains duplicate tool requirements`);
131
- }
132
- if ((/* @__PURE__ */ new Set([...mentioned, ...optional])).size !== tools.length) {
133
- throw new Error(`agent recipe '${recipe.id}' has declared tools without required/optional semantics`);
134
- }
135
- return { required, optional };
136
- }
137
- function resolveAgentToolCompatibility(spec, effectiveTools, options) {
138
- const available = new Set(effectiveTools);
139
- const missingRequired = [];
140
- for (const requirement of spec.toolRequirements.required) {
141
- if (typeof requirement === "string") {
142
- if (!available.has(requirement)) missingRequired.push(requirement);
143
- continue;
144
- }
145
- if (!requirement.anyOf.some((tool) => available.has(tool))) {
146
- missingRequired.push(`anyOf(${requirement.anyOf.join("|")})`);
147
- }
148
- }
149
- if (available.has(ToolNames.Dispatch) && !options.mediatesDispatch) {
150
- missingRequired.push("dispatch(runtime mediation unavailable)");
151
- }
152
- return {
153
- compatible: missingRequired.length === 0,
154
- missingRequired,
155
- lostOptional: spec.toolRequirements.optional.filter((tool) => !available.has(tool))
156
- };
157
- }
158
- function normalizeAgentSpec(recipe) {
159
- const tools = normalizeTools(recipe);
160
- const toolRequirements = normalizeToolRequirements(recipe, tools);
161
- return {
162
- version: recipe.version,
163
- id: recipe.id,
164
- name: recipe.name,
165
- description: recipe.description,
166
- source: recipe.source,
167
- filepath: recipe.filepath,
168
- tools,
169
- toolRequirements,
170
- category: recipe.category,
171
- capabilityClass: recipe.capabilityClass,
172
- latencyClass: recipe.latencyClass,
173
- projectContextTier: recipe.projectContextTier,
174
- audience: recipe.audience,
175
- tags: recipe.tags,
176
- skills: recipe.skills,
177
- resultContract: recipe.resultContract,
178
- ...recipe.product !== void 0 ? { product: recipe.product } : {},
179
- budget: recipe.budget,
180
- body: recipe.body
181
- };
182
- }
183
- function agentSpecFingerprint(spec) {
184
- const requirement = (entry) => typeof entry === "string" ? entry : `anyOf(${[...entry.anyOf].sort().join("|")})`;
185
- const payload = JSON.stringify({
186
- id: spec.id,
187
- tools: [...spec.tools].sort(),
188
- required: spec.toolRequirements.required.map(requirement).sort(),
189
- optional: [...spec.toolRequirements.optional].sort(),
190
- capabilityClass: spec.capabilityClass,
191
- latencyClass: spec.latencyClass,
192
- projectContextTier: spec.projectContextTier,
193
- audience: spec.audience,
194
- skills: [...spec.skills].sort(),
195
- resultContract: spec.resultContract,
196
- budget: spec.budget,
197
- body: createHash("sha256").update(spec.body, "utf8").digest("hex")
198
- });
199
- return createHash("sha256").update(payload, "utf8").digest("hex");
200
- }
201
- function isUserVisibleAgent(spec) {
202
- return spec.audience === "base" || spec.audience === "custom";
203
- }
204
- function isShadowAgent(spec) {
205
- return spec.audience === "shadow" || spec.audience === "internal";
206
- }
207
- function agentSpecPolicyErrors(spec) {
208
- const errors = [];
209
- const actions = actionClassesForTools(spec.tools);
210
- const requiredGroups = spec.toolRequirements.required.map(
211
- (requirement) => typeof requirement === "string" ? [requirement] : requirement.anyOf
212
- );
213
- const requiresTool = (tool) => requiredGroups.some((group) => group.length > 0 && group.every((candidate) => candidate === tool));
214
- const requiresMutation = requiredGroups.some(
215
- (group) => group.length > 0 && group.every((tool) => tool === ToolNames.Write || tool === ToolNames.Edit)
216
- );
217
- if (spec.capabilityClass === "workspace-edit" && (!requiresTool(ToolNames.Read) || !requiresMutation)) {
218
- errors.push(`workspace-edit agent '${spec.id}' must require read and write|edit`);
219
- }
220
- if (spec.capabilityClass === "verification" && !requiresTool(ToolNames.Verify)) {
221
- errors.push(`verification agent '${spec.id}' must require verify`);
222
- }
223
- if (spec.capabilityClass === "artifact-write" && !requiresTool(ToolNames.Artifact)) {
224
- errors.push(`artifact-write agent '${spec.id}' must require artifact`);
225
- }
226
- if (spec.skills.length > 0 && !requiresTool(ToolNames.Context)) {
227
- errors.push(`agent '${spec.id}' must require context for bound skills`);
228
- }
229
- if (spec.capabilityClass === "orchestration" && spec.tools.includes(ToolNames.Dispatch) && !requiresTool(ToolNames.Dispatch)) {
230
- errors.push(`orchestration agent '${spec.id}' must require dispatch when it is declared`);
231
- }
232
- const toolList = spec.tools.join(", ");
233
- if (spec.capabilityClass === "read-only") {
234
- for (const action of actions) {
235
- if (action !== "read") errors.push(`read-only agent '${spec.id}' requests ${action} tools (${toolList})`);
236
- }
237
- }
238
- if (spec.capabilityClass === "artifact-write") {
239
- for (const tool of spec.tools) {
240
- const action = classify({ tool }).actionClass;
241
- if (action === "execute" || action === "dispatch" || action === "system_modify" || action === "git_destructive") {
242
- errors.push(`artifact-write agent '${spec.id}' requests ${action} tool '${tool}'`);
243
- }
244
- if (action === "write" && tool !== ToolNames.Artifact) {
245
- errors.push(`artifact-write agent '${spec.id}' can only write terminal artifacts; got '${tool}'`);
246
- }
247
- }
248
- }
249
- if (spec.capabilityClass === "verification") {
250
- for (const tool of spec.tools) {
251
- const action = classify({ tool }).actionClass;
252
- if (action === "write" || action === "dispatch" || action === "system_modify" || action === "git_destructive") {
253
- errors.push(`verification agent '${spec.id}' must not request ${action} tool '${tool}'`);
254
- }
255
- if (tool === ToolNames.Bash)
256
- errors.push(`verification agent '${spec.id}' must use typed validation tools, not bash`);
257
- }
258
- }
259
- if (spec.capabilityClass !== "orchestration" && spec.tools.includes(ToolNames.Dispatch)) {
260
- errors.push(`agent '${spec.id}' exposes dispatch without orchestration capability`);
261
- }
262
- if (spec.tools.includes(ToolNames.AskUser)) {
263
- errors.push(`agent '${spec.id}' exposes ask_user, which is only available to the orchestrator`);
264
- }
265
- if (spec.skills.length > 0 && !spec.tools.includes(ToolNames.Context)) {
266
- errors.push(`agent '${spec.id}' declares skills but does not expose context`);
267
- }
268
- return errors;
269
- }
270
- function assertAgentSpecPolicy(spec) {
271
- const errors = agentSpecPolicyErrors(spec);
272
- if (errors.length > 0) throw new Error(`agent policy violation:
273
- ${errors.map((error) => `- ${error}`).join("\n")}`);
274
- }
275
-
276
- // src/domains/agents/result-contract.ts
277
- init_esm_shims();
278
- import { createHash as createHash2 } from "node:crypto";
279
- import path from "node:path";
280
- function parseDelegationPlanResult(output) {
281
- const parsed = parseJson(output);
282
- if (!parsed.ok || !hasOnlyKeys(parsed.value, ["tasks"]) || !Array.isArray(parsed.value.tasks) || parsed.value.tasks.length === 0)
283
- return null;
284
- const tasks = [];
285
- for (const raw of parsed.value.tasks) {
286
- if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return null;
287
- const task = raw;
288
- if (!hasOnlyKeys(task, ["id", "agent", "description", "depends_on", "writes", "mode"]) || !string(task.id) || !string(task.agent) || !string(task.description) || !Array.isArray(task.depends_on) || task.depends_on.some((entry) => !string(entry)) || !Array.isArray(task.writes) || task.writes.some((entry) => !string(entry)) || task.mode !== void 0 && task.mode !== "sequential" && task.mode !== "parallel")
289
- return null;
290
- tasks.push({
291
- id: task.id,
292
- agent: task.agent,
293
- description: task.description,
294
- depends_on: [...task.depends_on],
295
- writes: [...task.writes],
296
- ...task.mode !== void 0 ? { mode: task.mode } : {}
297
- });
298
- }
299
- return { tasks };
300
- }
301
- var COUNCIL_BALLOT_VERDICT_MAX_BYTES = 64;
302
- var COUNCIL_BALLOT_SHAPE = '{"verdict":"yes","text":"the answer and the evidence behind it"}';
303
- function parseCouncilBallot(output) {
304
- const parsed = parseJson(output);
305
- if (!parsed.ok) return null;
306
- const value = parsed.value;
307
- if (!hasOnlyKeys(value, ["verdict", "text"]) || !string(value.verdict) || !string(value.text)) return null;
308
- const verdict = value.verdict.trim();
309
- if (verdict.includes("\n") || Buffer.byteLength(verdict, "utf8") > COUNCIL_BALLOT_VERDICT_MAX_BYTES) return null;
310
- return { verdict, text: value.text.trim() };
311
- }
312
- function validateCouncilBallot(contract, output) {
313
- const parsed = parseJson(output);
314
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
315
- const ballot = parseCouncilBallot(output);
316
- if (ballot === null) {
317
- return failure(
318
- contract,
319
- "unmeasured",
320
- `A council ballot must carry only verdict and text, both non-empty strings, with verdict a single line of at most ${COUNCIL_BALLOT_VERDICT_MAX_BYTES} bytes so the tally can match it against the other members`
321
- );
322
- }
323
- return success(contract, "unmeasured", ballot);
324
- }
325
- function parseCouncilReport(output) {
326
- if (output === null) return null;
327
- const parsed = parseJsonObjectPayload(output);
328
- if (!parsed.ok) return null;
329
- const value = parsed.value;
330
- if (!hasOnlyKeys(value, ["members", "synthesis"]) || !Array.isArray(value.members) || value.members.length === 0) {
331
- return null;
332
- }
333
- const members = [];
334
- for (const raw of value.members) {
335
- if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return null;
336
- const member = raw;
337
- if (!hasOnlyKeys(member, ["label", "runId", "round", "answer", "verdict", "failed"]) || !string(member.label) || !string(member.runId) || !Number.isInteger(member.round) || Number(member.round) < 1 || typeof member.answer !== "string" || member.verdict !== void 0 && !string(member.verdict))
338
- return null;
339
- let failed;
340
- if (member.failed !== void 0) {
341
- if (member.failed === null || typeof member.failed !== "object" || Array.isArray(member.failed) || !hasOnlyKeys(member.failed, ["reason"]) || !string(member.failed.reason))
342
- return null;
343
- failed = { reason: member.failed.reason };
344
- }
345
- members.push({
346
- label: member.label,
347
- runId: member.runId,
348
- round: Number(member.round),
349
- answer: member.answer,
350
- ...member.verdict !== void 0 ? { verdict: member.verdict } : {},
351
- ...failed !== void 0 ? { failed } : {}
352
- });
353
- }
354
- if (value.synthesis === null || typeof value.synthesis !== "object" || Array.isArray(value.synthesis)) return null;
355
- const rawSynthesis = value.synthesis;
356
- if (!hasOnlyKeys(rawSynthesis, ["kind", "text", "verdict", "tally", "judgeRunId"])) return null;
357
- if (rawSynthesis.kind !== "none" && rawSynthesis.kind !== "judge" && rawSynthesis.kind !== "vote") return null;
358
- for (const key of ["text", "verdict", "judgeRunId"]) {
359
- if (rawSynthesis[key] !== void 0 && !string(rawSynthesis[key])) return null;
360
- }
361
- let tally;
362
- if (rawSynthesis.tally !== void 0) {
363
- if (rawSynthesis.tally === null || typeof rawSynthesis.tally !== "object" || Array.isArray(rawSynthesis.tally))
364
- return null;
365
- tally = {};
366
- for (const [key, count] of Object.entries(rawSynthesis.tally)) {
367
- if (!key || !Number.isInteger(count) || Number(count) < 0) return null;
368
- tally[key] = Number(count);
369
- }
370
- }
371
- return {
372
- members,
373
- synthesis: {
374
- kind: rawSynthesis.kind,
375
- ...rawSynthesis.text !== void 0 ? { text: rawSynthesis.text } : {},
376
- ...rawSynthesis.verdict !== void 0 ? { verdict: rawSynthesis.verdict } : {},
377
- ...tally !== void 0 ? { tally } : {},
378
- ...rawSynthesis.judgeRunId !== void 0 ? { judgeRunId: rawSynthesis.judgeRunId } : {}
379
- }
380
- };
381
- }
382
- function canonical(value) {
383
- if (value === null) return "null";
384
- if (typeof value === "string" || typeof value === "boolean") return JSON.stringify(value);
385
- if (typeof value === "number") {
386
- if (!Number.isFinite(value)) throw new Error("result contract cannot digest non-finite numbers");
387
- return JSON.stringify(value);
388
- }
389
- if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
390
- if (typeof value === "object") {
391
- const record = value;
392
- return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonical(record[key])}`).join(",")}}`;
393
- }
394
- throw new Error(`result contract cannot digest ${typeof value}`);
395
- }
396
- function digest(value) {
397
- return createHash2("sha256").update(canonical(value), "utf8").digest("hex");
398
- }
399
- function resultContractDigest(contract) {
400
- return digest(contract);
401
- }
402
- function resultContractSourceId(contract) {
403
- return `agent-result-contract:${contract.kind}:${resultContractDigest(contract)}`;
404
- }
405
- function failure(contract, quality, reason) {
406
- return {
407
- conformance: "fail",
408
- quality,
409
- sourceId: resultContractSourceId(contract),
410
- validatorDigest: digest({ contract, reason }),
411
- reason
412
- };
413
- }
414
- function success(contract, quality, value, extra = {}) {
415
- return {
416
- conformance: "pass",
417
- quality,
418
- sourceId: resultContractSourceId(contract),
419
- validatorDigest: digest({ contract, value }),
420
- ...extra
421
- };
422
- }
423
- function parseJson(output) {
424
- if (output === null || output.trim().length === 0) return { ok: false, reason: "missing final result" };
425
- const parsed = parseJsonObjectPayload(output);
426
- if (parsed.ok) return parsed;
427
- return {
428
- ok: false,
429
- reason: parsed.reason === "not-object" ? "result must be a JSON object" : "result must be valid JSON"
430
- };
431
- }
432
- function hasOnlyKeys(value, keys) {
433
- const allowed = new Set(keys);
434
- return Object.keys(value).every((key) => allowed.has(key));
435
- }
436
- function string(value) {
437
- return typeof value === "string" && value.trim().length > 0;
438
- }
439
- function parseFindings(value) {
440
- if (!Array.isArray(value)) return null;
441
- const findings = [];
442
- for (const entry of value) {
443
- if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return null;
444
- const finding = entry;
445
- const line = finding.line;
446
- if (!hasOnlyKeys(finding, ["claim", "path", "line"]) || !string(finding.claim) || !string(finding.path) || typeof line !== "number" || !Number.isSafeInteger(line) || line < 1) {
447
- return null;
448
- }
449
- findings.push({ claim: finding.claim, path: finding.path, line });
450
- }
451
- return findings;
452
- }
453
- var RESULT_CONTRACT_KINDS = [
454
- "architect-plan",
455
- "scout-report",
456
- "verifier-report",
457
- "council-report",
458
- "debugger-report",
459
- "research-report",
460
- "world-knowledge-report",
461
- "mutation-report",
462
- "provenance-report",
463
- "external-delegation"
464
- ];
465
- function parseSubtasks(value) {
466
- if (!Array.isArray(value) || value.length > 4) return null;
467
- const subtasks = [];
468
- const ids = /* @__PURE__ */ new Set();
469
- for (const entry of value) {
470
- if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return null;
471
- const subtask = entry;
472
- if (!hasOnlyKeys(subtask, ["id", "task", "dependencies", "expectedResultContract", "requestedAuthority"]) || !string(subtask.id) || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(subtask.id) || ids.has(subtask.id) || !string(subtask.task) || Buffer.byteLength(subtask.task, "utf8") > 4096 || !Array.isArray(subtask.dependencies) || subtask.dependencies.length > 4 || subtask.dependencies.some((dependency) => !string(dependency)) || new Set(subtask.dependencies).size !== subtask.dependencies.length || !RESULT_CONTRACT_KINDS.includes(subtask.expectedResultContract) || !AGENT_AUTOMATION_AUTHORITIES.includes(subtask.requestedAuthority)) {
473
- return null;
474
- }
475
- ids.add(subtask.id);
476
- subtasks.push({
477
- id: subtask.id,
478
- task: subtask.task,
479
- dependencies: [...subtask.dependencies],
480
- expectedResultContract: subtask.expectedResultContract,
481
- requestedAuthority: subtask.requestedAuthority
482
- });
483
- }
484
- for (const subtask of subtasks) {
485
- if (subtask.dependencies.some((dependency) => dependency === subtask.id || !ids.has(dependency))) return null;
486
- }
487
- const remaining = new Set(ids);
488
- const completed = /* @__PURE__ */ new Set();
489
- while (remaining.size > 0) {
490
- const ready = subtasks.filter(
491
- (subtask) => remaining.has(subtask.id) && subtask.dependencies.every((dependency) => completed.has(dependency))
492
- );
493
- if (ready.length === 0) return null;
494
- for (const subtask of ready) {
495
- remaining.delete(subtask.id);
496
- completed.add(subtask.id);
497
- }
498
- }
499
- return subtasks;
500
- }
501
- function isContextHandbookResult(value) {
502
- if (!hasOnlyKeys(value, ["projectName", "identity", "conventions", "invariants", "sections"])) return false;
503
- if (!string(value.projectName) || !string(value.identity)) return false;
504
- if (!Array.isArray(value.conventions) || value.conventions.some((entry) => !string(entry))) return false;
505
- if (!Array.isArray(value.invariants) || value.invariants.some((entry) => !string(entry))) return false;
506
- if (!Array.isArray(value.sections)) return false;
507
- return value.sections.every((entry) => {
508
- if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return false;
509
- const section = entry;
510
- return hasOnlyKeys(section, ["title", "body"]) && string(section.title) && string(section.body);
511
- });
512
- }
513
- function validateContextHandbook(contract, output) {
514
- const parsed = parseJson(output);
515
- if (!parsed.ok) return failure(contract, "fail", parsed.reason);
516
- if (!isContextHandbookResult(parsed.value)) {
517
- return failure(
518
- contract,
519
- "fail",
520
- "context handbook result must carry projectName, identity, conventions[], invariants[], and sections[{title, body}] and nothing else"
521
- );
522
- }
523
- return success(contract, "unmeasured", parsed.value);
524
- }
525
- function salvageScoutClaims(value) {
526
- const grounded = [];
527
- const ungrounded = [];
528
- if (!Array.isArray(value)) return { grounded, ungrounded };
529
- for (const entry of value) {
530
- if (entry === null || typeof entry !== "object" || Array.isArray(entry)) continue;
531
- const finding = entry;
532
- if (!string(finding.claim)) continue;
533
- const line = finding.line;
534
- if (string(finding.path) && typeof line === "number" && Number.isSafeInteger(line) && line >= 1) {
535
- grounded.push({ claim: finding.claim, path: finding.path, line });
536
- continue;
537
- }
538
- ungrounded.push(finding.claim);
539
- }
540
- return { grounded, ungrounded };
541
- }
542
- function degradedScout(contract, value, reason) {
543
- const salvaged = salvageScoutClaims(value.findings);
544
- if (salvaged.grounded.length === 0 && salvaged.ungrounded.length === 0) return null;
545
- const degradedReason = `${reason} (accepted as a degraded reconnaissance result; findings are leads, not validation evidence)`;
546
- const scout = {
547
- findings: salvaged.grounded,
548
- citations: salvaged.grounded.map(({ path: citedPath, line }) => ({ path: citedPath, line })),
549
- needsSplit: false,
550
- proposedSubtasks: [],
551
- ungroundedClaims: salvaged.ungrounded,
552
- degradedReason
553
- };
554
- return success(contract, "unmeasured", scout, { scout, reason: degradedReason });
555
- }
556
- function validateScout(contract, output) {
557
- const parsed = parseJson(output);
558
- if (!parsed.ok) return failure(contract, "fail", parsed.reason);
559
- const value = parsed.value;
560
- const degrade = (reason) => degradedScout(contract, value, reason) ?? failure(contract, "fail", reason);
561
- if (!hasOnlyKeys(value, ["findings", "needsSplit", "proposedSubtasks"])) {
562
- return degrade("Scout result has unknown fields");
563
- }
564
- const findings = parseFindings(value.findings);
565
- const proposedSubtasks = parseSubtasks(value.proposedSubtasks);
566
- if (findings === null || typeof value.needsSplit !== "boolean" || proposedSubtasks === null) {
567
- return degrade(
568
- "Scout result must carry findings as {claim, path, line} objects, needsSplit, and 0..4 typed proposed subtasks"
569
- );
570
- }
571
- if (value.needsSplit !== proposedSubtasks.length > 0) {
572
- return degrade("Scout needsSplit must agree with proposedSubtasks");
573
- }
574
- if (findings.length === 0 && !value.needsSplit) {
575
- return degrade("Scout result must carry at least one cited finding, or set needsSplit");
576
- }
577
- if (value.needsSplit && findings.length > 0) {
578
- return degrade("Scout split recommendations carry typed subtasks instead of findings");
579
- }
580
- const scout = {
581
- findings,
582
- citations: findings.map(({ path: citedPath, line }) => ({ path: citedPath, line })),
583
- needsSplit: value.needsSplit,
584
- proposedSubtasks
585
- };
586
- return success(contract, "pass", scout, { scout });
587
- }
588
- function parseChecks(value) {
589
- if (!Array.isArray(value) || value.length === 0) return null;
590
- const checks = [];
591
- for (const entry of value) {
592
- if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return null;
593
- const check = entry;
594
- if (!hasOnlyKeys(check, ["name", "passed", "evidence"]) || !string(check.name) || typeof check.passed !== "boolean" || !string(check.evidence)) {
595
- return null;
596
- }
597
- checks.push({ name: check.name, passed: check.passed, evidence: check.evidence });
598
- }
599
- return checks;
600
- }
601
- function citationWithinWorkspace(cwd, citedPath) {
602
- const relative = path.relative(cwd, citedPath);
603
- if (relative === "") return true;
604
- return !(relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative));
605
- }
606
- function directoryCitationDigest(cwd, citedPath) {
607
- const relative = path.relative(cwd, citedPath);
608
- return createHash2("sha256").update(`directory:${relative === "" ? "." : relative}`, "utf8").digest("hex");
609
- }
610
- function validateScoutCitation(input, citation) {
611
- const cwd = path.resolve(input.cwd);
612
- const citedPath = path.resolve(cwd, citation.path);
613
- if (!citationWithinWorkspace(cwd, citedPath)) {
614
- return { ok: false, reason: `Scout citation path escapes the workspace: ${citation.path}` };
615
- }
616
- if (input.filesystem.isDirectory?.(citedPath) === true) {
617
- return { ok: true, evidence: { ...citation, contentDigest: directoryCitationDigest(cwd, citedPath) } };
618
- }
619
- const content = input.filesystem.readFile(citedPath);
620
- if (content === null) return { ok: false, reason: `Scout citation cannot be read: ${citation.path}` };
621
- const lineCount = content.split(/\r\n|\r|\n/u).length;
622
- if (citation.line > lineCount) {
623
- return { ok: false, reason: `Scout citation is past end of file: ${citation.path}:${citation.line}` };
624
- }
625
- if (input.observedReadRanges !== void 0) {
626
- const spans = input.observedReadRanges.get(citedPath) ?? [];
627
- if (!spans.some(([start, end]) => citation.line >= start && citation.line <= end)) {
628
- const observed = spans.length === 0 ? "this run never read that file" : `this run read only ${spans.map(([start, end]) => `${start}-${end}`).join(", ")}`;
629
- return {
630
- ok: false,
631
- reason: `Scout citation is not grounded in a live read: ${citation.path}:${citation.line} (${observed})`
632
- };
633
- }
634
- }
635
- return {
636
- ok: true,
637
- evidence: { ...citation, contentDigest: createHash2("sha256").update(content, "utf8").digest("hex") }
638
- };
639
- }
640
- function validateScoutCitations(input, citations) {
641
- const evidence = [];
642
- for (const citation of citations) {
643
- const checked = validateScoutCitation(input, citation);
644
- if (!checked.ok) return checked;
645
- evidence.push(checked.evidence);
646
- }
647
- return { ok: true, evidence };
648
- }
649
- function groundDegradedScout(contract, input, scout, degradedReason) {
650
- const grounded = [];
651
- const evidence = [];
652
- const demoted = [];
653
- for (const finding of scout.findings) {
654
- const checked = validateScoutCitation(input, { path: finding.path, line: finding.line });
655
- if (checked.ok) {
656
- grounded.push(finding);
657
- evidence.push(checked.evidence);
658
- continue;
659
- }
660
- demoted.push(finding.claim);
661
- }
662
- const degraded = {
663
- findings: grounded,
664
- citations: grounded.map(({ path: citedPath, line }) => ({ path: citedPath, line })),
665
- needsSplit: false,
666
- proposedSubtasks: [],
667
- ungroundedClaims: [...scout.ungroundedClaims ?? [], ...demoted],
668
- degradedReason
669
- };
670
- return success(contract, "unmeasured", { scout: degraded, evidence }, { scout: degraded, reason: degradedReason });
671
- }
672
- function validateVerifier(contract, output) {
673
- const parsed = parseJson(output);
674
- if (!parsed.ok) return failure(contract, "fail", `Verifier result payload failed: ${parsed.reason}`);
675
- const value = parsed.value;
676
- const unknown = Object.keys(value).filter((key) => key !== "verdict" && key !== "checks");
677
- if (unknown.length > 0) {
678
- return failure(
679
- contract,
680
- "fail",
681
- `Verifier result field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} ${unknown.length === 1 ? "is" : "are"} not legal; legal top-level fields are verdict and checks`
682
- );
683
- }
684
- if (value.verdict !== "pass" && value.verdict !== "fail") {
685
- return failure(contract, "fail", 'Verifier field "verdict" must be one of: pass | fail');
686
- }
687
- if (!Array.isArray(value.checks) || value.checks.length === 0) {
688
- return failure(
689
- contract,
690
- "fail",
691
- 'Verifier field "checks" must be a non-empty array of {name, passed, evidence}; each checks[].passed value must be one of: true | false'
692
- );
693
- }
694
- const checks = [];
695
- for (const [index, raw] of value.checks.entries()) {
696
- if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
697
- return failure(contract, "fail", `Verifier field "checks[${index}]" must be an object`);
698
- }
699
- const check = raw;
700
- const checkUnknown = Object.keys(check).filter((key) => key !== "name" && key !== "passed" && key !== "evidence");
701
- if (checkUnknown.length > 0) {
702
- return failure(
703
- contract,
704
- "fail",
705
- `Verifier field "checks[${index}].${checkUnknown[0]}" is not legal; legal check fields are name, passed, and evidence`
706
- );
707
- }
708
- if (!string(check.name)) {
709
- return failure(contract, "fail", `Verifier field "checks[${index}].name" must be a non-empty string`);
710
- }
711
- if (typeof check.passed !== "boolean") {
712
- return failure(contract, "fail", `Verifier field "checks[${index}].passed" must be one of: true | false`);
713
- }
714
- if (!string(check.evidence)) {
715
- return failure(contract, "fail", `Verifier field "checks[${index}].evidence" must be a non-empty string`);
716
- }
717
- checks.push({ name: check.name, passed: check.passed, evidence: check.evidence });
718
- }
719
- if (value.verdict === "pass" !== checks.every((check) => check.passed)) {
720
- return failure(
721
- contract,
722
- "fail",
723
- 'Verifier field "verdict" must agree with every checks[].passed value; verdict legal values are pass | fail and checks[].passed legal values are true | false'
724
- );
725
- }
726
- const verifier = { verdict: value.verdict, checks };
727
- return success(contract, value.verdict, verifier, { verifier });
728
- }
729
- function parseVerifierResult(output) {
730
- const validation = validateVerifier({ kind: "verifier-report" }, output);
731
- return validation.verifier ?? null;
732
- }
733
- function validateOracle(contract, output) {
734
- const parsed = parseJson(output);
735
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
736
- const value = parsed.value;
737
- if (!hasOnlyKeys(value, ["verdict", "challenge", "changesMyMind", "citedDecisions"]) || !string(value.verdict) || !string(value.challenge) || !string(value.changesMyMind) || !Array.isArray(value.citedDecisions) || value.citedDecisions.some((entry) => !string(entry))) {
738
- return failure(
739
- contract,
740
- "unmeasured",
741
- 'Oracle result must carry verdict, challenge, changesMyMind, and a citedDecisions array of strings, for example {"verdict":"consistent with decision routing.target","challenge":"...","changesMyMind":"...","citedDecisions":["routing.target"]}'
742
- );
743
- }
744
- return success(contract, "unmeasured", value);
745
- }
746
- function parseOracleResult(output) {
747
- const validation = validateOracle({ kind: "oracle-report" }, output);
748
- if (validation.conformance !== "pass") return null;
749
- const parsed = parseJson(output);
750
- if (!parsed.ok) return null;
751
- return {
752
- verdict: String(parsed.value.verdict),
753
- challenge: String(parsed.value.challenge),
754
- changesMyMind: String(parsed.value.changesMyMind),
755
- citedDecisions: parsed.value.citedDecisions.map((entry) => String(entry))
756
- };
757
- }
758
- function validateCodeReport(contract, output) {
759
- const parsed = parseJson(output);
760
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
761
- const value = parsed.value;
762
- if (!hasOnlyKeys(value, ["passed", "exitCode", "checks", "artifactPaths", "outputExcerpt"]) || typeof value.passed !== "boolean" || typeof value.exitCode !== "number" || !Number.isSafeInteger(value.exitCode) || typeof value.outputExcerpt !== "string" || !Array.isArray(value.artifactPaths) || value.artifactPaths.some((entry) => !string(entry))) {
763
- return failure(
764
- contract,
765
- "unmeasured",
766
- "Code result must carry passed, integer exitCode, checks, artifactPaths, and outputExcerpt"
767
- );
768
- }
769
- const checks = parseChecks(value.checks);
770
- if (checks === null) return failure(contract, "unmeasured", "Code result must carry typed checks");
771
- if (value.passed !== (value.exitCode === 0) || value.passed !== checks.every((check) => check.passed)) {
772
- return failure(contract, "unmeasured", "Code result passed must agree with its exit code and every check");
773
- }
774
- return success(contract, "unmeasured", value);
775
- }
776
- var RESULT_COMMIT_MESSAGE_MAX_BYTES = 1e3;
777
- var RESULT_SUMMARY_DEFAULT_MAX_BYTES = 16384;
778
- var RESULT_SUMMARY_MAX_BYTES_CEILING = 32768;
779
- var RESULT_OUTPUT_ENVELOPE_HEADROOM_BYTES = 4096;
780
- function resultSummaryMaxBytes(contract) {
781
- if (contract.kind !== "mutation-report") return RESULT_COMMIT_MESSAGE_MAX_BYTES;
782
- return contract.maxSummaryBytes ?? RESULT_SUMMARY_DEFAULT_MAX_BYTES;
783
- }
784
- function parseResultSummaryMaxBytes(value, label) {
785
- if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1 || value > RESULT_SUMMARY_MAX_BYTES_CEILING) {
786
- throw new Error(`${label} must be an integer between 1 and ${RESULT_SUMMARY_MAX_BYTES_CEILING}`);
787
- }
788
- return value;
789
- }
790
- function withResultSummaryAllowance(contract, maxSummaryBytes) {
791
- if (contract.kind !== "mutation-report") return contract;
792
- return { kind: "mutation-report", maxSummaryBytes: parseResultSummaryMaxBytes(maxSummaryBytes, "maxSummaryBytes") };
793
- }
794
- function resultContractOutputBytes(contract) {
795
- if (contract === null || contract === void 0 || contract.kind !== "mutation-report") return null;
796
- return 2 * resultSummaryMaxBytes(contract) + 2 * RESULT_COMMIT_MESSAGE_MAX_BYTES + RESULT_OUTPUT_ENVELOPE_HEADROOM_BYTES;
797
- }
798
- var AUTHORSHIP_FIELDS = ["commitMessage", "summary"];
799
- function hasControlCharacters(value) {
800
- for (const character of value) {
801
- const code = character.codePointAt(0) ?? 0;
802
- if (code === 127) return true;
803
- if (code < 32 && character !== "\n" && character !== "\r" && character !== " ") return true;
804
- }
805
- return false;
806
- }
807
- function normalizeAuthored(value) {
808
- return value.replace(/\r\n/gu, "\n").replace(/\r/gu, "\n").trim();
809
- }
810
- function validateAuthorship(value, summaryMaxBytes) {
811
- for (const field of AUTHORSHIP_FIELDS) {
812
- const maxBytes = field === "summary" ? summaryMaxBytes : RESULT_COMMIT_MESSAGE_MAX_BYTES;
813
- const raw = value[field];
814
- if (raw === void 0 || raw === null) continue;
815
- if (typeof raw !== "string") return `${field} must be a string when present`;
816
- if (raw.trim().length === 0) continue;
817
- const bytes = Buffer.byteLength(raw, "utf8");
818
- if (bytes > maxBytes) return `${field} must be at most ${maxBytes} UTF-8 bytes (${bytes} given)`;
819
- if (hasControlCharacters(raw)) return `${field} must not contain control characters`;
820
- }
821
- return null;
822
- }
823
- function resultContractAuthorship(contract, output) {
824
- const empty = { commitMessage: null, summary: null };
825
- if (contract.kind !== "mutation-report" && contract.kind !== "architect-plan") return empty;
826
- const parsed = parseJson(output);
827
- if (!parsed.ok || validateAuthorship(parsed.value, resultSummaryMaxBytes(contract)) !== null) return empty;
828
- const read = (field) => {
829
- const raw = parsed.value[field];
830
- if (typeof raw !== "string") return null;
831
- const normalized = normalizeAuthored(raw);
832
- return normalized.length === 0 ? null : normalized;
833
- };
834
- return { commitMessage: read("commitMessage"), summary: read("summary") };
835
- }
836
- function validateDebugger(contract, output) {
837
- const parsed = parseJson(output);
838
- if (!parsed.ok) return failure(contract, "unmeasured", `Debugger result payload failed: ${parsed.reason}`);
839
- const value = parsed.value;
840
- const unknown = Object.keys(value).filter(
841
- (key) => key !== "diagnosis" && key !== "reproduction" && key !== "evidence"
842
- );
843
- if (unknown.length > 0) {
844
- return failure(
845
- contract,
846
- "unmeasured",
847
- `Debugger result field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} ${unknown.length === 1 ? "is" : "are"} not legal; legal top-level fields are diagnosis, reproduction, and evidence`
848
- );
849
- }
850
- if (!string(value.diagnosis)) {
851
- return failure(contract, "unmeasured", 'Debugger field "diagnosis" must be a non-empty string');
852
- }
853
- if (value.reproduction !== "reproduced" && value.reproduction !== "not-reproduced" && value.reproduction !== "unknown") {
854
- return failure(
855
- contract,
856
- "unmeasured",
857
- 'Debugger field "reproduction" must be one of: reproduced | not-reproduced | unknown'
858
- );
859
- }
860
- if (!Array.isArray(value.evidence)) {
861
- return failure(contract, "unmeasured", 'Debugger field "evidence" must be an array of strings');
862
- }
863
- const malformedEvidence = value.evidence.findIndex((entry) => !string(entry));
864
- if (malformedEvidence >= 0) {
865
- return failure(contract, "unmeasured", `Debugger field "evidence[${malformedEvidence}]" must be a non-empty string`);
866
- }
867
- return success(contract, "unmeasured", value);
868
- }
869
- function validateResearch(contract, output, networkAllowed) {
870
- const parsed = parseJson(output);
871
- if (!parsed.ok) return failure(contract, "unmeasured", `Research result payload failed: ${parsed.reason}`);
872
- const value = parsed.value;
873
- const unknown = Object.keys(value).filter((key) => key !== "source" && key !== "findings");
874
- if (unknown.length > 0) {
875
- return failure(
876
- contract,
877
- "unmeasured",
878
- `Research result field${unknown.length === 1 ? "" : "s"} ${unknown.join(", ")} ${unknown.length === 1 ? "is" : "are"} not legal; legal top-level fields are source and findings`
879
- );
880
- }
881
- if (value.source !== "local" && value.source !== "external") {
882
- return failure(contract, "unmeasured", 'Research field "source" must be one of: local | external');
883
- }
884
- if (!Array.isArray(value.findings)) {
885
- return failure(contract, "unmeasured", 'Research field "findings" must be an array of {claim, evidence} objects');
886
- }
887
- if (value.source === "external" && !networkAllowed) {
888
- return failure(
889
- contract,
890
- "unmeasured",
891
- 'Research field "source" is external but the run has no allowed network posture; legal values are local | external, and use local for workspace-only evidence'
892
- );
893
- }
894
- for (const [index, finding] of value.findings.entries()) {
895
- if (finding === null || typeof finding !== "object" || Array.isArray(finding)) {
896
- return failure(contract, "unmeasured", `Research field "findings[${index}]" must be an object`);
897
- }
898
- const record = finding;
899
- const findingUnknown = Object.keys(record).filter((key) => key !== "claim" && key !== "evidence");
900
- if (findingUnknown.length > 0) {
901
- return failure(
902
- contract,
903
- "unmeasured",
904
- `Research field "findings[${index}].${findingUnknown[0]}" is not legal; legal finding fields are claim and evidence`
905
- );
906
- }
907
- if (!string(record.claim)) {
908
- return failure(contract, "unmeasured", `Research field "findings[${index}].claim" must be a non-empty string`);
909
- }
910
- if (!string(record.evidence)) {
911
- return failure(contract, "unmeasured", `Research field "findings[${index}].evidence" must be a non-empty string`);
912
- }
913
- }
914
- return success(contract, "unmeasured", value);
915
- }
916
- function validateWorldKnowledge(contract, output, externalSourcesAllowed) {
917
- const parsed = parseJson(output);
918
- if (!parsed.ok) return failure(contract, "unmeasured", `World-knowledge payload failed: ${parsed.reason}`);
919
- const value = parsed.value;
920
- const legal = ["discovery", "facts", "synthesis", "uncertainties", "followUpVerification"];
921
- const unknown = Object.keys(value).filter((key) => !legal.includes(key));
922
- if (unknown.length > 0) {
923
- return failure(contract, "unmeasured", `World-knowledge field '${unknown[0]}' is not legal`);
924
- }
925
- if (value.discovery !== "performed" && value.discovery !== "caller-supplied-only" && value.discovery !== "unavailable") {
926
- return failure(
927
- contract,
928
- "unmeasured",
929
- 'World-knowledge field "discovery" must be one of: performed | caller-supplied-only | unavailable'
930
- );
931
- }
932
- if (value.discovery === "performed" && !externalSourcesAllowed) {
933
- return failure(
934
- contract,
935
- "unmeasured",
936
- 'World-knowledge field "discovery" is performed but this run had no external-source posture'
937
- );
938
- }
939
- if (!Array.isArray(value.facts)) {
940
- return failure(contract, "unmeasured", 'World-knowledge field "facts" must be an array');
941
- }
942
- for (const [index, finding] of value.facts.entries()) {
943
- if (!finding || typeof finding !== "object" || Array.isArray(finding)) {
944
- return failure(contract, "unmeasured", `World-knowledge field "facts[${index}]" must be an object`);
945
- }
946
- const fact = finding;
947
- const factUnknown = Object.keys(fact).filter((key) => !["claim", "evidence", "sources"].includes(key));
948
- if (factUnknown.length > 0) {
949
- return failure(contract, "unmeasured", `World-knowledge field "facts[${index}].${factUnknown[0]}" is not legal`);
950
- }
951
- if (!string(fact.claim) || !string(fact.evidence) || !Array.isArray(fact.sources)) {
952
- return failure(
953
- contract,
954
- "unmeasured",
955
- `World-knowledge field "facts[${index}]" requires non-empty claim/evidence strings and a sources array`
956
- );
957
- }
958
- if (fact.sources.some((source) => !string(source))) {
959
- return failure(contract, "unmeasured", `World-knowledge field "facts[${index}].sources" must contain strings`);
960
- }
961
- }
962
- for (const field of ["synthesis", "uncertainties", "followUpVerification"]) {
963
- const entries = value[field];
964
- if (!Array.isArray(entries) || entries.some((entry) => !string(entry))) {
965
- return failure(contract, "unmeasured", `World-knowledge field "${field}" must be an array of non-empty strings`);
966
- }
967
- }
968
- return success(contract, "unmeasured", value);
969
- }
970
- function describeWriteSet(effects, cwd) {
971
- if (effects.mutatedPaths.size === 0) return "this run wrote nothing";
972
- const written = [...effects.mutatedPaths].map((target) => path.relative(cwd, target) || target).sort().slice(0, MUTATION_WRITE_SET_REASON_LIMIT);
973
- const more = effects.mutatedPaths.size - written.length;
974
- return `this run wrote ${written.join(", ")}${more > 0 ? ` (+${more} more)` : ""}`;
975
- }
976
- var MUTATION_WRITE_SET_REASON_LIMIT = 8;
977
- function pathIsPresent(filesystem, target) {
978
- if (filesystem.pathExists === void 0) return true;
979
- return filesystem.pathExists(target);
980
- }
981
- var MUTATION_VALIDATION_EXAMPLE = '{"name":"npm test","passed":true,"evidence":"exit 0"}';
982
- function mutationValidationsReason(value) {
983
- const empty = Array.isArray(value) && value.length === 0;
984
- if (empty) {
985
- return `Mutation result must carry typed validation results: validations was empty. Emit one entry per check this run actually made, each shaped like ${MUTATION_VALIDATION_EXAMPLE}. A run that only read files still names the read and cites what it saw.`;
986
- }
987
- return `Mutation result must carry typed validation results: every validations entry is shaped like ${MUTATION_VALIDATION_EXAMPLE}, with a string name, a boolean passed, a string evidence, and no other keys.`;
988
- }
989
- function validateMutation(contract, input) {
990
- if (input.outputTruncated === true && input.output !== null) {
991
- const bound = resultContractOutputBytes(contract) ?? Buffer.byteLength(input.output, "utf8");
992
- return failure(
993
- contract,
994
- "unmeasured",
995
- `result exceeded the sealed output bound of ${bound} bytes and was truncated; keep summary within ${resultSummaryMaxBytes(contract)} UTF-8 bytes or state the limitation`
996
- );
997
- }
998
- const parsed = parseJson(input.output);
999
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
1000
- const value = parsed.value;
1001
- if (!hasOnlyKeys(value, ["mutatedPaths", "validations", "commitMessage", "summary"]) || !Array.isArray(value.mutatedPaths) || value.mutatedPaths.some((entry) => !string(entry))) {
1002
- return failure(contract, "unmeasured", "Mutation result must carry mutatedPaths and validations");
1003
- }
1004
- const authorship = validateAuthorship(value, resultSummaryMaxBytes(contract));
1005
- if (authorship !== null) return failure(contract, "unmeasured", authorship);
1006
- const validations = parseChecks(value.validations);
1007
- if (validations === null) return failure(contract, "unmeasured", mutationValidationsReason(value.validations));
1008
- const reportedFailure = !validations.every((check) => check.passed);
1009
- const effects = input.observedRunEffects;
1010
- if (effects === void 0) return success(contract, reportedFailure ? "fail" : "pass", value);
1011
- const cwd = path.resolve(input.cwd);
1012
- let unverifiedMutation = false;
1013
- for (const reported of value.mutatedPaths) {
1014
- const target = path.resolve(cwd, reported);
1015
- if (effects.mutatedPaths.has(target)) continue;
1016
- if (effects.failedMutationPaths.has(target)) {
1017
- return failure(
1018
- contract,
1019
- "unmeasured",
1020
- `Mutation result names a path whose only write this run attempted was refused: ${reported} (${describeWriteSet(effects, cwd)})`
1021
- );
1022
- }
1023
- if (pathIsPresent(input.filesystem, target)) {
1024
- unverifiedMutation = true;
1025
- continue;
1026
- }
1027
- return failure(
1028
- contract,
1029
- "unmeasured",
1030
- `Mutation result names a path this run never wrote and that does not exist: ${reported} (${describeWriteSet(effects, cwd)})`
1031
- );
1032
- }
1033
- if (reportedFailure) return success(contract, "fail", value);
1034
- const measured = !unverifiedMutation && effects.validationCommands.size > 0;
1035
- return success(contract, measured ? "pass" : "unmeasured", value);
1036
- }
1037
- function validateProvenance(contract, output) {
1038
- const parsed = parseJson(output);
1039
- if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
1040
- const value = parsed.value;
1041
- if (!hasOnlyKeys(value, ["confirmedFacts", "missingEvidence", "nextInspections"]) || ![value.confirmedFacts, value.missingEvidence, value.nextInspections].every(
1042
- (entry) => Array.isArray(entry) && entry.every((item) => string(item))
1043
- )) {
1044
- return failure(
1045
- contract,
1046
- "unmeasured",
1047
- "Provenance result must carry confirmedFacts, missingEvidence, and nextInspections"
1048
- );
1049
- }
1050
- return success(contract, "unmeasured", value);
1051
- }
1052
- function validateArchitect(contract, input) {
1053
- const artifactPath = path.resolve(input.cwd, contract.path);
1054
- const content = input.filesystem.readFile(artifactPath);
1055
- if (content === null || content.trim().length === 0) {
1056
- return failure(contract, "unmeasured", `required plan artifact is missing or empty: ${contract.path}`);
1057
- }
1058
- return success(contract, "unmeasured", {
1059
- path: contract.path,
1060
- artifactDigest: createHash2("sha256").update(content, "utf8").digest("hex")
1061
- });
1062
- }
1063
- function parseScoutResult(output) {
1064
- const validation = validateScout({ kind: "scout-report" }, output);
1065
- if (validation.conformance !== "pass" || validation.scout === void 0) return null;
1066
- return validation.scout.degradedReason === void 0 ? validation.scout : null;
1067
- }
1068
- function validateResultContract(input) {
1069
- switch (input.contract.kind) {
1070
- case "architect-plan":
1071
- return validateArchitect(input.contract, input);
1072
- case "scout-report": {
1073
- const validation = validateScout(input.contract, input.output);
1074
- if (validation.scout === void 0) return validation;
1075
- const degradedReason = validation.scout.degradedReason;
1076
- if (degradedReason !== void 0) {
1077
- return groundDegradedScout(input.contract, input, validation.scout, degradedReason);
1078
- }
1079
- const citations = validateScoutCitations(input, validation.scout.citations);
1080
- return citations.ok ? success(
1081
- input.contract,
1082
- "pass",
1083
- { scout: validation.scout, evidence: citations.evidence },
1084
- { scout: validation.scout }
1085
- ) : failure(input.contract, "fail", citations.reason);
1086
- }
1087
- case "verifier-report":
1088
- return validateVerifier(input.contract, input.output);
1089
- case "council-report": {
1090
- const report = parseCouncilReport(input.output);
1091
- return report === null ? failure(input.contract, "fail", "council-report is malformed") : success(input.contract, "unmeasured", { council: report });
1092
- }
1093
- case "council-ballot":
1094
- return validateCouncilBallot(input.contract, input.output);
1095
- case "debugger-report":
1096
- return validateDebugger(input.contract, input.output);
1097
- case "research-report":
1098
- return validateResearch(input.contract, input.output, input.networkAllowed);
1099
- case "world-knowledge-report":
1100
- return validateWorldKnowledge(input.contract, input.output, input.networkAllowed);
1101
- case "mutation-report":
1102
- return validateMutation(input.contract, input);
1103
- case "provenance-report":
1104
- return validateProvenance(input.contract, input.output);
1105
- case "delegation-plan": {
1106
- const plan = parseDelegationPlanResult(input.output);
1107
- return plan === null ? failure(
1108
- input.contract,
1109
- "fail",
1110
- "delegation-plan must carry tasks with id, agent, description, depends_on, writes, and optional mode"
1111
- ) : success(input.contract, "unmeasured", plan, { delegationPlan: plan });
1112
- }
1113
- case "oracle-report":
1114
- return validateOracle(input.contract, input.output);
1115
- case "external-delegation":
1116
- return success(input.contract, "unmeasured", { external: true });
1117
- case "artifact-report": {
1118
- if (input.contract.path !== void 0) {
1119
- const content = input.filesystem.readFile(path.resolve(input.cwd, input.contract.path));
1120
- if (content === null) {
1121
- return failure(
1122
- input.contract,
1123
- "unmeasured",
1124
- `Required artifact is missing or unreadable: ${JSON.stringify(input.contract.path)}`
1125
- );
1126
- }
1127
- if (content.trim().length === 0) {
1128
- return failure(input.contract, "unmeasured", `Required artifact is empty: ${JSON.stringify(input.contract.path)}`);
1129
- }
1130
- }
1131
- return success(input.contract, "unmeasured", { artifact: true });
1132
- }
1133
- case "context-handbook":
1134
- return validateContextHandbook(input.contract, input.output);
1135
- case "code-report":
1136
- return validateCodeReport(input.contract, input.output);
1137
- }
1138
- }
1139
- function validateRecipeResult(input) {
1140
- if (input.contract === null) return null;
1141
- if (!input.reachedTerminalResult) {
1142
- return {
1143
- applicable: false,
1144
- fact: {
1145
- sourceId: resultContractSourceId(input.contract),
1146
- validatorDigest: digest({ contract: input.contract, reached: false }),
1147
- conformance: "not-reached",
1148
- quality: "unmeasured"
1149
- }
1150
- };
1151
- }
1152
- const validation = validateResultContract({
1153
- contract: input.contract,
1154
- output: input.output,
1155
- cwd: input.cwd,
1156
- networkAllowed: input.networkAllowed,
1157
- filesystem: input.filesystem,
1158
- ...input.observedRunEffects !== void 0 ? { observedRunEffects: input.observedRunEffects } : {},
1159
- ...input.outputTruncated !== void 0 ? { outputTruncated: input.outputTruncated } : {}
1160
- });
1161
- return {
1162
- applicable: true,
1163
- validation,
1164
- fact: {
1165
- sourceId: validation.sourceId,
1166
- validatorDigest: validation.validatorDigest,
1167
- conformance: validation.conformance,
1168
- quality: validation.quality
1169
- }
1170
- };
1171
- }
1172
- var RESULT_CONTRACT_REPAIR_LIMIT = 2;
1173
- var RESULT_CONTRACT_ANCHOR_LIMIT = 12;
1174
- function resultContractShape(contract) {
1175
- switch (contract.kind) {
1176
- case "architect-plan":
1177
- return `a plan artifact written to ${contract.path}, then optionally {"commitMessage":"...","summary":"..."} describing it`;
1178
- case "scout-report":
1179
- return '{"findings":[{"claim":"what you observed","path":"src/file.ts","line":1}],"needsSplit":false,"proposedSubtasks":[]} or {"findings":[],"needsSplit":true,"proposedSubtasks":[{"id":"inspect","task":"Inspect the boundary","dependencies":[],"expectedResultContract":"scout-report","requestedAuthority":"read-only"}]} or, if you cannot produce a citation you are sure of, at least {"findings":[{"claim":"what you observed"}]}, which is accepted as an ungrounded lead rather than losing the run';
1180
- case "verifier-report":
1181
- return 'one of {"verdict":"pass","checks":[{"name":"npm run typecheck","passed":true,"evidence":"exit 0"}]} or {"verdict":"fail","checks":[{"name":"npm run typecheck","passed":false,"evidence":"exit 1"}]}; verdict legal values are pass | fail and checks[].passed legal values are true | false';
1182
- case "council-report":
1183
- return '{"members":[{"label":"alpha","runId":"run-1","round":1,"answer":"..."}],"synthesis":{"kind":"none"}}';
1184
- case "council-ballot":
1185
- return COUNCIL_BALLOT_SHAPE;
1186
- case "debugger-report":
1187
- return 'one of {"diagnosis":"...","reproduction":"reproduced","evidence":["..."]}, {"diagnosis":"...","reproduction":"not-reproduced","evidence":["..."]}, or {"diagnosis":"...","reproduction":"unknown","evidence":["..."]}; reproduction legal values are reproduced | not-reproduced | unknown';
1188
- case "research-report":
1189
- return 'one of {"source":"local","findings":[{"claim":"...","evidence":"..."}]} or {"source":"external","findings":[{"claim":"...","evidence":"..."}]}; source legal values are local | external';
1190
- case "world-knowledge-report":
1191
- return '{"discovery":"performed|caller-supplied-only|unavailable","facts":[{"claim":"...","evidence":"...","sources":["URL or document id"]}],"synthesis":["comparison or advisory conclusion"],"uncertainties":["..."],"followUpVerification":["..."]}';
1192
- case "mutation-report":
1193
- return `{"mutatedPaths":["src/file.ts"],"validations":[{"name":"npm test","passed":true,"evidence":"exit 0"}],"commitMessage":"optional: the commit message for this change","summary":"the requested explanation or deliverable, or a specific limitation; otherwise optional"}. summary allows at most ${resultSummaryMaxBytes(contract)} UTF-8 bytes and commitMessage at most ${RESULT_COMMIT_MESSAGE_MAX_BYTES} UTF-8 bytes. Preserve the requested explanation and citations in summary when repairing the report; if they cannot fit or be grounded, state that specific limitation. Report only actual mutations and checks; a read-only task has mutatedPaths:[] and names the source read in validations, never a command that did not run`;
1194
- case "provenance-report":
1195
- return '{"confirmedFacts":["..."],"missingEvidence":["..."],"nextInspections":["..."]}';
1196
- case "delegation-plan":
1197
- return '{"tasks":[{"id":"build","agent":"coder","description":"Implement the change","depends_on":[],"writes":["src"],"mode":"parallel"}]}';
1198
- case "oracle-report":
1199
- return '{"verdict":"one line","challenge":"the strongest objection you can mount","changesMyMind":"the evidence that would reverse the verdict","citedDecisions":["decision key or task id you relied on"]}';
1200
- case "external-delegation":
1201
- return "any final text";
1202
- case "artifact-report":
1203
- return contract.path === void 0 ? "any final text; the artifact you wrote at the location the task named is the result" : `any final text; the required artifact at ${JSON.stringify(contract.path)} must be readable and non-empty on disk`;
1204
- case "context-handbook":
1205
- return '{"projectName":"string","identity":"one sentence","conventions":[],"invariants":[],"sections":[{"title":"Architecture","body":"markdown that cites `real/path.ts` tokens"}]}';
1206
- case "code-report":
1207
- return '{"passed":false,"exitCode":1,"checks":[{"name":"test","passed":false,"evidence":"exit 1"}],"artifactPaths":["/path/command.log"],"outputExcerpt":"..."}';
1208
- }
1209
- }
1210
- function resultContractRepairMessage(input) {
1211
- const last = input.attempt >= RESULT_CONTRACT_REPAIR_LIMIT;
1212
- const boundArtifact = input.contract.kind === "artifact-report" && input.contract.path !== void 0;
1213
- const lines = [
1214
- last ? "FINAL RESULT REQUIRED IN THIS RESPONSE. Your previous response still did not satisfy this run's result contract." : "Your previous response did not satisfy this run's result contract.",
1215
- `Validator reason: ${input.reason}`,
1216
- input.toolsAvailable === true ? "You may use the admitted tools to repair this validator failure, then emit the required terminal result." : "Tool use is over. Answer from the evidence you already gathered.",
1217
- ...boundArtifact ? [
1218
- `Required result: ${resultContractShape(input.contract)}`,
1219
- input.toolsAvailable === true ? "Repair the required artifact on disk, then give a brief final status. Literal tool-call markup in final text does not write a file." : "State the limitation in a brief final status; the required artifact remains unsatisfied."
1220
- ] : [
1221
- `Emit exactly this shape and nothing else: ${resultContractShape(input.contract)}`,
1222
- "Do not add prose, code fences, or commentary around it. Do not describe work you intend to do next."
1223
- ]
1224
- ];
1225
- if (input.anchors.length > 0) {
1226
- lines.push(
1227
- "",
1228
- "Source ranges you read successfully in this run (path:start-end, inclusive):",
1229
- ...input.anchors.slice(-RESULT_CONTRACT_ANCHOR_LIMIT).map((anchor) => `- ${anchor}`)
1230
- );
1231
- }
1232
- if (input.contract.kind === "scout-report") {
1233
- lines.push(
1234
- "For each finding, use the exact source line that supports its claim inside a listed read range. Range endpoints are not suggested citations.",
1235
- "If a finding's supporting line cannot be confirmed from the source already returned, remove that finding and keep the confirmed findings. Never shift a rejected citation into range just to pass validation."
1236
- );
1237
- }
1238
- return lines.join("\n");
1239
- }
1240
- var RESULT_CONTRACT_REPAIR_TOOL = "result_contract";
1241
- function resultContractRepairMessages(input, origin) {
1242
- const id = `clio-result-contract-repair-${input.attempt}`;
1243
- const timestamp = Date.now();
1244
- return [
1245
- {
1246
- role: "assistant",
1247
- content: [{ type: "toolCall", id, name: RESULT_CONTRACT_REPAIR_TOOL, arguments: {} }],
1248
- stopReason: "toolUse",
1249
- usage: {
1250
- input: 0,
1251
- output: 0,
1252
- cacheRead: 0,
1253
- cacheWrite: 0,
1254
- totalTokens: 0,
1255
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
1256
- },
1257
- ...origin,
1258
- timestamp
1259
- },
1260
- {
1261
- role: "toolResult",
1262
- toolCallId: id,
1263
- toolName: RESULT_CONTRACT_REPAIR_TOOL,
1264
- content: [{ type: "text", text: resultContractRepairMessage(input) }],
1265
- isError: true,
1266
- timestamp
1267
- }
1268
- ];
1269
- }
1270
- var RECIPE_DECLARABLE_KINDS = [
1271
- "scout-report",
1272
- "verifier-report",
1273
- "council-report",
1274
- "debugger-report",
1275
- "research-report",
1276
- "world-knowledge-report",
1277
- "mutation-report",
1278
- "provenance-report",
1279
- "oracle-report",
1280
- "external-delegation",
1281
- "artifact-report",
1282
- "context-handbook",
1283
- "delegation-plan"
1284
- ];
1285
- var COORDINATOR_AUTHORED_KINDS = ["council-ballot"];
1286
- function parseContract(value, sourcePath, kinds, callerBoundArtifacts = false) {
1287
- if (value === null || typeof value !== "object" || Array.isArray(value)) {
1288
- throw new Error(`agent recipe: ${sourcePath}: resultContract must be an object`);
1289
- }
1290
- const record = value;
1291
- if (typeof record.kind !== "string") throw new Error(`agent recipe: ${sourcePath}: resultContract.kind is required`);
1292
- const keys = Object.keys(record);
1293
- const only = (...allowed) => keys.every((key) => allowed.includes(key));
1294
- if (record.kind === "architect-plan") {
1295
- if (!only("kind", "path") || !string(record.path)) {
1296
- throw new Error(`agent recipe: ${sourcePath}: architect-plan requires only non-empty path`);
1297
- }
1298
- if (path.isAbsolute(record.path) || record.path.split(/[\\/]/u).includes("..")) {
1299
- throw new Error(`agent recipe: ${sourcePath}: architect-plan path must be workspace-relative`);
1300
- }
1301
- return { kind: "architect-plan", path: record.path };
1302
- }
1303
- if (record.kind === "artifact-report" && callerBoundArtifacts) {
1304
- if (!only("kind", "path")) {
1305
- throw new Error(`agent recipe: ${sourcePath}: artifact-report admits only kind and path`);
1306
- }
1307
- if (record.path === void 0) return { kind: "artifact-report" };
1308
- if (!string(record.path) || record.path.includes("\0")) {
1309
- throw new Error(`agent recipe: ${sourcePath}: artifact-report requires a non-empty path without NUL`);
1310
- }
1311
- if (path.posix.isAbsolute(record.path) || path.win32.isAbsolute(record.path) || /^[a-z]:/iu.test(record.path) || record.path.split(/[\\/]/u).includes("..")) {
1312
- throw new Error(`agent recipe: ${sourcePath}: artifact-report path must be workspace-relative`);
1313
- }
1314
- return { kind: "artifact-report", path: record.path };
1315
- }
1316
- if (record.kind === "mutation-report") {
1317
- if (!only("kind", "maxSummaryBytes")) {
1318
- throw new Error(`agent recipe: ${sourcePath}: mutation-report admits only kind and maxSummaryBytes`);
1319
- }
1320
- if (record.maxSummaryBytes === void 0) return { kind: "mutation-report" };
1321
- try {
1322
- return {
1323
- kind: "mutation-report",
1324
- maxSummaryBytes: parseResultSummaryMaxBytes(record.maxSummaryBytes, "maxSummaryBytes")
1325
- };
1326
- } catch (error) {
1327
- throw new Error(`agent recipe: ${sourcePath}: ${error instanceof Error ? error.message : String(error)}`);
1328
- }
1329
- }
1330
- if (!kinds.includes(record.kind) || !only("kind")) {
1331
- throw new Error(`agent recipe: ${sourcePath}: resultContract.kind is unsupported or has unknown keys`);
1332
- }
1333
- return { kind: record.kind };
1334
- }
1335
- function parseResultContract(value, sourcePath) {
1336
- return parseContract(value, sourcePath, RECIPE_DECLARABLE_KINDS);
1337
- }
1338
- function parseWorkerResultContract(value, sourcePath) {
1339
- return parseContract(value, sourcePath, [...RECIPE_DECLARABLE_KINDS, ...COORDINATOR_AUTHORED_KINDS], true);
1340
- }
1341
-
1342
- export {
1343
- parseJsonObjectPayload,
1344
- AGENT_AUTOMATION_AUTHORITIES,
1345
- isAgentCategory,
1346
- isAgentCapabilityClass,
1347
- isAgentLatencyClass,
1348
- isAgentAudience,
1349
- isAgentProjectContextTier,
1350
- isAgentProduct,
1351
- resolveAgentToolCompatibility,
1352
- normalizeAgentSpec,
1353
- agentSpecFingerprint,
1354
- isUserVisibleAgent,
1355
- isShadowAgent,
1356
- assertAgentSpecPolicy,
1357
- COUNCIL_BALLOT_VERDICT_MAX_BYTES,
1358
- COUNCIL_BALLOT_SHAPE,
1359
- parseCouncilReport,
1360
- resultContractSourceId,
1361
- parseVerifierResult,
1362
- parseOracleResult,
1363
- RESULT_SUMMARY_MAX_BYTES_CEILING,
1364
- parseResultSummaryMaxBytes,
1365
- withResultSummaryAllowance,
1366
- resultContractOutputBytes,
1367
- resultContractAuthorship,
1368
- parseScoutResult,
1369
- validateResultContract,
1370
- validateRecipeResult,
1371
- RESULT_CONTRACT_REPAIR_LIMIT,
1372
- resultContractShape,
1373
- resultContractRepairMessages,
1374
- parseResultContract,
1375
- parseWorkerResultContract
1376
- };
1377
- //# sourceMappingURL=chunk-I47EJPYL.js.map