@iowarp/clio-coder 0.4.3 → 0.4.5

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 (670) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/CONTRIBUTING.md +25 -15
  3. package/README.md +340 -27
  4. package/dist/{acp-H2NGRPWO.js → acp-H3CU2HBQ.js} +25 -25
  5. package/dist/{agents-TL5LLUQP.js → agents-IXQQZ7BD.js} +77 -75
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-E5SW4HMS.js → auth-R7KYF7N3.js} +38 -39
  8. package/dist/builtins-CRFDQUVP.js +22 -0
  9. package/dist/{chunk-7DRAWPTZ.js → chunk-22PQ4TX4.js} +4 -4
  10. package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
  11. package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
  12. package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
  13. package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
  14. package/dist/{chunk-5TSRNF4G.js → chunk-3T4DXWP6.js} +170 -12
  15. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  16. package/dist/{chunk-XIVNBFZS.js → chunk-4SVIVOMC.js} +208 -39
  17. package/dist/{chunk-NMJXSHBJ.js → chunk-5A6XR3RJ.js} +44 -19
  18. package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
  19. package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
  20. package/dist/chunk-5DDOTTG4.js +402 -0
  21. package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
  22. package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
  23. package/dist/{chunk-PUVDKJ2Y.js → chunk-5VTJP36Q.js} +5 -7
  24. package/dist/{chunk-JGRC33J2.js → chunk-5ZMXGW7P.js} +90 -9
  25. package/dist/chunk-5ZSZEYJK.js +119 -0
  26. package/dist/chunk-633EXGZA.js +44 -0
  27. package/dist/{chunk-IWT4SF4R.js → chunk-6CDNRHWH.js} +361 -89
  28. package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
  29. package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
  30. package/dist/{chunk-INY6HTFL.js → chunk-6SYEGZI3.js} +12 -12
  31. package/dist/{chunk-SKHCAU7K.js → chunk-6YA46L5A.js} +5 -4
  32. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  33. package/dist/{chunk-L47TF46W.js → chunk-7HBHHVCK.js} +24 -3
  34. package/dist/{chunk-DWUOQKRU.js → chunk-7TKWWPD7.js} +5 -4
  35. package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
  36. package/dist/chunk-7WUZEB2M.js +165 -0
  37. package/dist/{chunk-6PTFB5VS.js → chunk-7YJWEF2L.js} +59 -28
  38. package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
  39. package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
  40. package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
  41. package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
  42. package/dist/chunk-B6UM3OZC.js +15 -0
  43. package/dist/{chunk-MCEPRMZW.js → chunk-BBV5TKE6.js} +5 -5
  44. package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
  45. package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
  46. package/dist/{chunk-42FMPA75.js → chunk-CBSKDFWL.js} +3 -3
  47. package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
  48. package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
  49. package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
  50. package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
  51. package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
  52. package/dist/{chunk-WCXUNS7U.js → chunk-DIMRLNIC.js} +35 -66
  53. package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
  54. package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
  55. package/dist/{chunk-2UG5F4C5.js → chunk-DRD2A54W.js} +116 -52
  56. package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
  57. package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
  58. package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
  59. package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
  60. package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
  61. package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
  62. package/dist/chunk-ECOMVOHP.js +139 -0
  63. package/dist/chunk-EFSEIZE6.js +56 -0
  64. package/dist/{chunk-IJNZMHLA.js → chunk-EHCPSZJF.js} +4 -4
  65. package/dist/{chunk-K6BSR66V.js → chunk-EHOSNVVM.js} +6 -2
  66. package/dist/{chunk-RRNP2ANY.js → chunk-EQEJJ53P.js} +10 -10
  67. package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
  68. package/dist/{chunk-JKKCYP3C.js → chunk-F34AR6O3.js} +21 -15
  69. package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
  70. package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
  71. package/dist/{chunk-MWUZBSAQ.js → chunk-FSTIBAGM.js} +358 -63
  72. package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
  73. package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
  74. package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
  75. package/dist/{chunk-JSC3U7TI.js → chunk-GJ24ODAX.js} +5 -5
  76. package/dist/{chunk-B4VEBZKF.js → chunk-GNQRWTMY.js} +139 -52
  77. package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
  78. package/dist/chunk-GXCCHKN6.js +59 -0
  79. package/dist/{chunk-V2ANDPVT.js → chunk-HGSLRG33.js} +170 -8
  80. package/dist/{chunk-LLDJM5XK.js → chunk-HHVJNVUJ.js} +6 -6
  81. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  82. package/dist/{chunk-VA5FNYMT.js → chunk-HR3HPQ76.js} +42 -5
  83. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  84. package/dist/{chunk-OML5D5V5.js → chunk-I7VLWRK2.js} +8 -8
  85. package/dist/{chunk-VW6DOEDG.js → chunk-ICO4TQ2F.js} +16 -5
  86. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  87. package/dist/{chunk-WBKFA554.js → chunk-ILJ7DWGE.js} +9 -9
  88. package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
  89. package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
  90. package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
  91. package/dist/{chunk-EKCHAPYA.js → chunk-K2HL3GBL.js} +4 -4
  92. package/dist/{chunk-N2Z7HLVY.js → chunk-K6RDB7IA.js} +28 -28
  93. package/dist/{chunk-TM6LQDI3.js → chunk-KDWLXVMN.js} +85 -335
  94. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  95. package/dist/{chunk-RSJ25QSL.js → chunk-KF6GFW6O.js} +217 -50
  96. package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
  97. package/dist/chunk-KPRLAMP4.js +32 -0
  98. package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
  99. package/dist/{chunk-IUE3Y34X.js → chunk-KTFSFCVN.js} +20 -9
  100. package/dist/{chunk-7E7I3WLS.js → chunk-KYKNBD4Y.js} +36 -34
  101. package/dist/chunk-L4N3DWNW.js +539 -0
  102. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  103. package/dist/{chunk-JIEGK6UF.js → chunk-LTR5QCLS.js} +51 -7
  104. package/dist/chunk-LUL5Z66S.js +221 -0
  105. package/dist/chunk-LVFANMOH.js +466 -0
  106. package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
  107. package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
  108. package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
  109. package/dist/{chunk-I7ZPNEJM.js → chunk-M6TAYK66.js} +8 -8
  110. package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
  111. package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
  112. package/dist/chunk-MDU3C27C.js +674 -0
  113. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  114. package/dist/{chunk-4UVU7BJ5.js → chunk-NC4KV7EL.js} +6 -6
  115. package/dist/{chunk-JEQ3XTHC.js → chunk-NF3BK5WR.js} +5 -5
  116. package/dist/chunk-NTK3WTHM.js +141 -0
  117. package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
  118. package/dist/{chunk-UPZU6GE4.js → chunk-NY6IWDVU.js} +6 -6
  119. package/dist/chunk-O2RQ7LCK.js +283 -0
  120. package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
  121. package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
  122. package/dist/{chunk-WRBAGUNF.js → chunk-ODUTYZIU.js} +5 -5
  123. package/dist/{chunk-E3TPLWFX.js → chunk-ONRTXOZY.js} +4 -4
  124. package/dist/{chunk-B4OAX3SI.js → chunk-OQM5IVJY.js} +118 -225
  125. package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
  126. package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
  127. package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
  128. package/dist/{chunk-64I3JVYM.js → chunk-PWWSIB2A.js} +5 -5
  129. package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
  130. package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
  131. package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
  132. package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
  133. package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
  134. package/dist/chunk-R6MAYTMS.js +108 -0
  135. package/dist/{chunk-MUW2BDDH.js → chunk-R6MICQYU.js} +6 -6
  136. package/dist/{chunk-JDAY6FIL.js → chunk-RLTT5GVY.js} +132 -17
  137. package/dist/{chunk-ZWPRK62N.js → chunk-RXIOCVBZ.js} +24 -6
  138. package/dist/{chunk-NIQJ66N4.js → chunk-S32UQ5GL.js} +62 -35
  139. package/dist/{chunk-AX2THNSA.js → chunk-SBZX6ARC.js} +12 -12
  140. package/dist/{chunk-TXOTCRLG.js → chunk-SD7SHNDW.js} +2 -2
  141. package/dist/{chunk-AF4YM7Z4.js → chunk-SDWNDICN.js} +10284 -3756
  142. package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
  143. package/dist/chunk-SL2RDHKO.js +19 -0
  144. package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
  145. package/dist/{chunk-KKOJXO6R.js → chunk-SRZOW5L2.js} +46 -14
  146. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  147. package/dist/chunk-T52TPHYC.js +318 -0
  148. package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
  149. package/dist/{chunk-LDJG7DW3.js → chunk-T7FDXNRU.js} +13 -13
  150. package/dist/{chunk-XPWWI35G.js → chunk-TEG3RYVZ.js} +59 -41
  151. package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
  152. package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
  153. package/dist/{chunk-PAJQJ7BS.js → chunk-TZ7MFRG4.js} +1263 -835
  154. package/dist/{chunk-GI7YYQ3F.js → chunk-U2JOLB7O.js} +415 -83
  155. package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
  156. package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
  157. package/dist/{chunk-CE5AX47J.js → chunk-U7H5WRG5.js} +5 -5
  158. package/dist/{chunk-G76U63X4.js → chunk-U7VQ4NI4.js} +22 -22
  159. package/dist/{chunk-7ZYNNDKC.js → chunk-UFYNOQK4.js} +7 -7
  160. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  161. package/dist/{chunk-QWGDJJYJ.js → chunk-UL36QJX6.js} +14 -14
  162. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  163. package/dist/{chunk-HEQY7ZFI.js → chunk-URBGEOH3.js} +5 -5
  164. package/dist/chunk-USZA7GWL.js +341 -0
  165. package/dist/{chunk-W6RRQCPQ.js → chunk-UTUNT5QL.js} +48 -579
  166. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  167. package/dist/{chunk-F5JHEYZM.js → chunk-UXAC2FX4.js} +73 -41
  168. package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
  169. package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
  170. package/dist/chunk-VLPTKCKT.js +396 -0
  171. package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
  172. package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
  173. package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
  174. package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
  175. package/dist/{chunk-2UH2KFUP.js → chunk-WFKDPU7U.js} +4 -4
  176. package/dist/{chunk-ZDN3Y73Y.js → chunk-WJIMKGD6.js} +9 -51
  177. package/dist/{chunk-YQWYVTMC.js → chunk-WLMSOT73.js} +59 -12
  178. package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
  179. package/dist/chunk-WXA2CFJO.js +23 -0
  180. package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
  181. package/dist/{chunk-2APPQIER.js → chunk-XXBQKW32.js} +11 -11
  182. package/dist/{chunk-2VIKGWFZ.js → chunk-YEJIG7LN.js} +332 -332
  183. package/dist/chunk-YGDMBK7O.js +567 -0
  184. package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
  185. package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
  186. package/dist/{chunk-54CBCGIR.js → chunk-ZMZQEBKI.js} +136 -81
  187. package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
  188. package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
  189. package/dist/cli/index.js +45 -44
  190. package/dist/clio-5I2IBFYL.js +26 -0
  191. package/dist/{code-nav-MDZNQS33.js → code-nav-YXIAEZVS.js} +48 -32
  192. package/dist/codewiki/build-worker.js +76 -29
  193. package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
  194. package/dist/{components-UCUQ4QXW.js → components-TNIKXCBH.js} +13 -14
  195. package/dist/{config-SVM5P5YI.js → config-Y2JDJ3JJ.js} +210 -119
  196. package/dist/configure-SML6UBZ5.js +55 -0
  197. package/dist/{context-2OHRKS42.js → context-P5YSEO55.js} +125 -115
  198. package/dist/{context-VNCR7KAG.js → context-QQ53HSGJ.js} +91 -62
  199. package/dist/{context-E3VC7RX5.js → context-S2EEC3EJ.js} +62 -31
  200. package/dist/context-clear-TMEQCOTH.js +183 -0
  201. package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
  202. package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
  203. package/dist/{context-working-set-VDS25HXZ.js → context-working-set-CNLSQN5K.js} +31 -31
  204. package/dist/detail-5572VLBO.js +114 -0
  205. package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-FRHD6P2O.js} +214 -126
  206. package/dist/{docs-PD3EXDKU.js → docs-BL7ROUFN.js} +5 -7
  207. package/dist/{doctor-WNNVO6FY.js → doctor-N3LCM2LG.js} +89 -66
  208. package/dist/{eval-7G7SGAYO.js → eval-BUU3ZOUZ.js} +493 -197
  209. package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
  210. package/dist/evidence-DTGEN456.js +224 -0
  211. package/dist/{evidence-VD6736FQ.js → evidence-SQ5DNFEN.js} +114 -195
  212. package/dist/{evolve-AL3NGVRL.js → evolve-IJNUFZDS.js} +107 -88
  213. package/dist/{extensions-MOVJ32NM.js → extensions-YVRHX6ZI.js} +16 -17
  214. package/dist/{fleet-QZHUMAGI.js → fleet-ZNNVSYFO.js} +147 -141
  215. package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-5YE7NPJL.js} +27 -23
  216. package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-3SBSCTCW.js} +16 -15
  217. package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-6HHPWF5T.js} +39 -38
  218. package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-JEYMGCGC.js} +107 -87
  219. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  220. package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-QRSHIIDE.js} +10 -10
  221. package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-4PM4GDDL.js} +46 -42
  222. package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-NJDTHTO3.js} +105 -85
  223. package/dist/fleet-view-UP2BWQQY.js +117 -0
  224. package/dist/{init-J477LKZH.js → init-S3GZQ5ZF.js} +123 -117
  225. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  226. package/dist/{interop-3FCM6XLG.js → interop-YOTGXFJM.js} +25 -26
  227. package/dist/inventory-K2OZ36YJ.js +117 -0
  228. package/dist/{library-QUQEIUG6.js → library-GJI6W6OK.js} +45 -45
  229. package/dist/{memory-SGGSEP65.js → memory-OQOXQGYD.js} +107 -90
  230. package/dist/{models-HEKUAXXK.js → models-3IK2Y5WE.js} +64 -65
  231. package/dist/{monitor-HKU57TYQ.js → monitor-FTJLTKCQ.js} +136 -101
  232. package/dist/{orchestrator-VDFAEFAI.js → orchestrator-N47O7SFD.js} +1442 -1671
  233. package/dist/{panes-DN2SSFOH.js → panes-7BTYH3XQ.js} +8 -8
  234. package/dist/{panes-TALGNPZT.js → panes-WPOMEMRH.js} +22 -23
  235. package/dist/{paths-NBMFAIEZ.js → paths-J3KN7UAO.js} +12 -13
  236. package/dist/preload-65U34NG6.js +115 -0
  237. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  238. package/dist/{reset-EAJFFJVB.js → reset-MUVQDLNL.js} +20 -21
  239. package/dist/{resources-OVKSEFVE.js → resources-LM76COAO.js} +41 -40
  240. package/dist/{run-7DP7ZF2J.js → run-3VFZQ33N.js} +168 -166
  241. package/dist/{share-WML67FT3.js → share-4JUB4BL7.js} +43 -43
  242. package/dist/{skills-SG662R2K.js → skills-S36AAJHU.js} +47 -47
  243. package/dist/{skills-eval-VVZEUU46.js → skills-eval-G6T57L7M.js} +127 -104
  244. package/dist/{skills-inventory-I2E23GET.js → skills-inventory-WLM46PJH.js} +41 -40
  245. package/dist/slash-commands-GBARG3Y7.js +91 -0
  246. package/dist/{steer-2LQOMCPB.js → steer-S7D7IKPU.js} +7 -7
  247. package/dist/{support-CC2UJBJ6.js → support-5VAEC32W.js} +14 -14
  248. package/dist/{targets-4QC3HIEW.js → targets-N5REUETU.js} +147 -98
  249. package/dist/tasks-6BVY5YZF.js +36 -0
  250. package/dist/{terminal-lease-TUHIJ6Y2.js → terminal-lease-57UEOJKS.js} +12 -11
  251. package/dist/tools-6OCQ6SVB.js +28 -0
  252. package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
  253. package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
  254. package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
  255. package/dist/{uninstall-5PEVOE5B.js → uninstall-FXYMFFRT.js} +19 -20
  256. package/dist/{upgrade-M4WXY6KN.js → upgrade-4HD5HAIV.js} +49 -45
  257. package/dist/{usage-N7ZNVLEM.js → usage-4GWM2WWP.js} +143 -103
  258. package/dist/{verifiers-DJTP4XX6.js → verifiers-GSKWKWVG.js} +162 -28
  259. package/dist/verify-3AS3ULCY.js +30 -0
  260. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  261. package/dist/{web-fetch-MPARV2K7.js → web-fetch-MQN4FH3X.js} +169 -18
  262. package/dist/wiki-generate-7BV7XWIY.js +614 -0
  263. package/dist/{with-panes-4GCGSL7J.js → with-panes-OFTNAR4Y.js} +34 -20
  264. package/dist/worker/entry.js +99 -85
  265. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  266. package/docs/README.md +10 -8
  267. package/docs/architecture/acp.md +27 -0
  268. package/docs/architecture/architecture.md +5 -5
  269. package/docs/architecture/artifact-versions.md +1 -1
  270. package/docs/architecture/context-engine.md +44 -59
  271. package/docs/architecture/context-working-set.md +7 -9
  272. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  273. package/docs/architecture/dispatch-typed-intent.md +1 -1
  274. package/docs/architecture/evidence-and-memory.md +11 -1
  275. package/docs/architecture/observability.md +7 -1
  276. package/docs/architecture/pi-boundary.md +37 -7
  277. package/docs/architecture/prompt-envelope-and-tools.md +22 -12
  278. package/docs/architecture/safety-model.md +10 -17
  279. package/docs/architecture/session-lifecycle.md +4 -4
  280. package/docs/architecture/tui-design.md +1 -1
  281. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  282. package/docs/guide/built-in-agents.md +8 -8
  283. package/docs/guide/commands-and-modes.md +66 -38
  284. package/docs/guide/configuration-and-targets.md +10 -3
  285. package/docs/guide/configuration-reference.md +23 -8
  286. package/docs/guide/environment-variables.md +8 -4
  287. package/docs/guide/fleet-dispatch.md +12 -0
  288. package/docs/guide/installation-and-lifecycle.md +35 -9
  289. package/docs/guide/proactive-memory.md +1 -1
  290. package/docs/guide/skills-marketplace.md +11 -3
  291. package/docs/guide/tool-usage.md +87 -5
  292. package/docs/history/config-knobs-audit.md +2 -2
  293. package/docs/process/development-pipeline.md +15 -10
  294. package/docs/process/documentation-guide.md +2 -2
  295. package/docs/process/eval-runner.md +15 -0
  296. package/docs/process/evals-internal.md +1 -1
  297. package/docs/process/git-commit-provenance.md +15 -0
  298. package/docs/process/release-cut-checklist.md +207 -0
  299. package/docs/process/scientific-validation.md +18 -17
  300. package/evals/README.md +4 -0
  301. package/evals/behavioral-corpus-grader.mjs +147 -14
  302. package/evals/behavioral-machinery-support.ts +1 -0
  303. package/evals/behavioral-machinery.yaml +1 -1
  304. package/evals/behavioral-model-negative-control.yaml +1 -0
  305. package/evals/behavioral-model.yaml +266 -1
  306. package/evals/fixtures/docs-retrieval.json +102 -0
  307. package/evals/fixtures/scalar-decision.json +17 -0
  308. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  309. package/evals/fixtures/source-explanation.json +74 -0
  310. package/evals/fixtures/tool-arguments.json +18 -0
  311. package/evals/fixtures/tool-surface/read.txt +4 -0
  312. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  313. package/evals/no-edit-memory-grader.mjs +149 -0
  314. package/evals/scalar-decision-grader.py +41 -0
  315. package/evals/scalar-decision-machinery.ts +145 -0
  316. package/evals/source-explanation-grader.mjs +118 -0
  317. package/evals/tool-surface-grader.mjs +53 -0
  318. package/evals/tool-surface-model.yaml +274 -0
  319. package/package.json +14 -14
  320. package/skills/README.md +6 -6
  321. package/skills/coding/coding-standards/SKILL.md +14 -4
  322. package/skills/context/context-handoff/SKILL.md +3 -3
  323. package/skills/context/context-prime/SKILL.md +3 -3
  324. package/skills/planning/architecture/SKILL.md +5 -5
  325. package/skills/planning/backlog/SKILL.md +4 -4
  326. package/skills/planning/prd/SKILL.md +4 -3
  327. package/skills/planning/product-intent/SKILL.md +8 -8
  328. package/skills/planning/tech-spec/SKILL.md +4 -4
  329. package/skills/registry.yaml +33 -33
  330. package/skills/research/arxiv-literature/SKILL.md +3 -3
  331. package/skills/research/experiment-protocol/SKILL.md +3 -3
  332. package/skills/research/scientific-debugging/SKILL.md +3 -2
  333. package/skills/research/scientific-modernization/SKILL.md +3 -3
  334. package/skills/skill-marketplace.json +17 -17
  335. package/skills/workflow/cut-it/SKILL.md +3 -4
  336. package/skills/workflow/design-council/SKILL.md +5 -10
  337. package/skills/workflow/grill-me/SKILL.md +14 -15
  338. package/skills/workflow/workflow-distiller/SKILL.md +4 -4
  339. package/src/cli/args.ts +0 -8
  340. package/src/cli/bootstrap-generate.ts +6 -0
  341. package/src/cli/config-inspect.ts +24 -7
  342. package/src/cli/config-trust.ts +62 -0
  343. package/src/cli/config.ts +8 -0
  344. package/src/cli/configure.ts +2 -1
  345. package/src/cli/context-map.ts +75 -14
  346. package/src/cli/context.ts +46 -17
  347. package/src/cli/doctor-state-size.ts +1 -12
  348. package/src/cli/doctor-validation-contract.ts +28 -0
  349. package/src/cli/doctor.ts +5 -0
  350. package/src/cli/eval.ts +17 -3
  351. package/src/cli/evidence-detail.ts +1 -75
  352. package/src/cli/evidence-inventory.ts +1 -167
  353. package/src/cli/index.ts +2 -0
  354. package/src/cli/modes/print.ts +32 -4
  355. package/src/cli/run.ts +16 -16
  356. package/src/cli/skills-eval.ts +10 -8
  357. package/src/cli/steer-channel.ts +31 -18
  358. package/src/cli/targets.ts +84 -32
  359. package/src/cli/tasks.ts +93 -0
  360. package/src/cli/upgrade.ts +19 -11
  361. package/src/cli/usage.ts +30 -0
  362. package/src/cli/verifiers.ts +147 -1
  363. package/src/cli/wiki-generate.ts +240 -96
  364. package/src/core/bash-exec.ts +43 -15
  365. package/src/core/bus-events.ts +15 -0
  366. package/src/core/commit-attribution.ts +41 -1
  367. package/src/core/config.ts +33 -14
  368. package/src/core/defaults.ts +5 -4
  369. package/src/core/file-references.ts +11 -1
  370. package/src/core/git-commit-attribution.ts +46 -3
  371. package/src/core/incomplete-installation.ts +3 -1
  372. package/src/core/run-overrides.ts +0 -5
  373. package/src/core/settings-layers.ts +21 -5
  374. package/src/core/skill-activation.ts +3 -0
  375. package/src/core/termination.ts +26 -9
  376. package/src/core/tool-names.ts +5 -2
  377. package/src/core/untrusted-content.ts +16 -0
  378. package/src/core/workspace-trust.ts +179 -0
  379. package/src/domains/agents/builtins/architect.md +1 -1
  380. package/src/domains/agents/builtins/coder.md +5 -3
  381. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  382. package/src/domains/agents/builtins/documenter.md +8 -5
  383. package/src/domains/agents/builtins/git-master.md +1 -1
  384. package/src/domains/agents/builtins/provenance.md +7 -7
  385. package/src/domains/agents/builtins/researcher.md +1 -0
  386. package/src/domains/agents/builtins/scout.md +7 -1
  387. package/src/domains/agents/builtins/tester.md +1 -1
  388. package/src/domains/agents/builtins/verifier.md +2 -2
  389. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  390. package/src/domains/agents/result-contract.ts +199 -26
  391. package/src/domains/context/bootstrap-prompt.ts +11 -9
  392. package/src/domains/context/bootstrap.ts +74 -39
  393. package/src/domains/context/clio-md.ts +88 -26
  394. package/src/domains/context/codewiki/build-operation.ts +121 -0
  395. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  396. package/src/domains/context/codewiki/build-worker.ts +3 -35
  397. package/src/domains/context/codewiki/coordinator.ts +36 -6
  398. package/src/domains/context/codewiki/indexer.ts +59 -19
  399. package/src/domains/context/contract.ts +6 -2
  400. package/src/domains/context/extension.ts +97 -11
  401. package/src/domains/context/fingerprint.ts +39 -34
  402. package/src/domains/context/index.ts +7 -1
  403. package/src/domains/context/prompt-context.ts +55 -14
  404. package/src/domains/context/refresh.ts +12 -57
  405. package/src/domains/context/wiki/assemble.ts +14 -10
  406. package/src/domains/context/wiki/evidence.ts +209 -0
  407. package/src/domains/context/wiki/frontmatter.ts +5 -2
  408. package/src/domains/context/wiki/generate.ts +207 -67
  409. package/src/domains/context/wiki/meta.ts +10 -2
  410. package/src/domains/context/wiki/plan-store.ts +70 -14
  411. package/src/domains/context/wiki/plan.ts +71 -14
  412. package/src/domains/context/wiki/prompts.ts +85 -1
  413. package/src/domains/context/wiki/source-content.ts +106 -0
  414. package/src/domains/context/wiki/staleness.ts +33 -22
  415. package/src/domains/context/working-set/contract.ts +8 -2
  416. package/src/domains/context/working-set/engine.ts +17 -4
  417. package/src/domains/context/working-set/fold.ts +15 -2
  418. package/src/domains/context/working-set/marker.ts +2 -1
  419. package/src/domains/context/working-set/project.ts +18 -7
  420. package/src/domains/context/working-set/recall.ts +82 -56
  421. package/src/domains/dispatch/active-route-planner.ts +10 -3
  422. package/src/domains/dispatch/admission-queue.ts +19 -7
  423. package/src/domains/dispatch/admission.ts +3 -3
  424. package/src/domains/dispatch/budget-envelope.ts +47 -82
  425. package/src/domains/dispatch/capacity-lease.ts +57 -19
  426. package/src/domains/dispatch/code-step.ts +11 -4
  427. package/src/domains/dispatch/contract.ts +41 -9
  428. package/src/domains/dispatch/event-pump.ts +28 -7
  429. package/src/domains/dispatch/execution-role.ts +49 -2
  430. package/src/domains/dispatch/execution-scheduler.ts +4 -0
  431. package/src/domains/dispatch/extension.ts +240 -132
  432. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  433. package/src/domains/dispatch/fleet-run.ts +21 -0
  434. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  435. package/src/domains/dispatch/host-verification.ts +114 -13
  436. package/src/domains/dispatch/intent.ts +28 -18
  437. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  438. package/src/domains/dispatch/parallel-writers.ts +34 -0
  439. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  440. package/src/domains/dispatch/reservation-store.ts +13 -37
  441. package/src/domains/dispatch/route-approval.ts +3 -3
  442. package/src/domains/dispatch/route-observer.ts +4 -2
  443. package/src/domains/dispatch/route-quality.ts +6 -1
  444. package/src/domains/dispatch/state.ts +15 -2
  445. package/src/domains/dispatch/types.ts +21 -5
  446. package/src/domains/dispatch/worker-spawn.ts +58 -21
  447. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  448. package/src/domains/eval/compare/behavioral.ts +81 -14
  449. package/src/domains/eval/compare/compare.ts +15 -5
  450. package/src/domains/eval/compare/envelope.ts +12 -5
  451. package/src/domains/eval/metrics/context.ts +24 -1
  452. package/src/domains/eval/metrics/tracked.ts +4 -28
  453. package/src/domains/eval/reports/comparison.ts +9 -9
  454. package/src/domains/eval/runners/clio-run.ts +17 -10
  455. package/src/domains/eval/runners/context-index.ts +2 -7
  456. package/src/domains/eval/runners/context-init.ts +3 -6
  457. package/src/domains/eval/runners/external-command.ts +29 -11
  458. package/src/domains/eval/schema/suite.ts +2 -0
  459. package/src/domains/eval/schema/validate.ts +1 -0
  460. package/src/domains/eval/suites/run.ts +189 -13
  461. package/src/domains/eval/verifiers/integrity.ts +39 -0
  462. package/src/domains/eval/verifiers/patch.ts +58 -2
  463. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  464. package/src/domains/evidence/build.ts +106 -17
  465. package/src/domains/evidence/detail.ts +69 -0
  466. package/src/domains/evidence/eval.ts +13 -1
  467. package/src/domains/evidence/finish-contract-map.ts +5 -1
  468. package/src/domains/evidence/inventory.ts +167 -0
  469. package/src/domains/evidence/store.ts +16 -0
  470. package/src/domains/evidence/types.ts +12 -0
  471. package/src/domains/extensions/resources.ts +7 -0
  472. package/src/domains/interop/registry.ts +2 -2
  473. package/src/domains/middleware/hooks-io.ts +45 -26
  474. package/src/domains/middleware/hooks.ts +6 -0
  475. package/src/domains/middleware/injection-screen.ts +23 -0
  476. package/src/domains/middleware/marketplace-offer.ts +20 -1
  477. package/src/domains/middleware/rules.ts +5 -1
  478. package/src/domains/middleware/runtime.ts +7 -3
  479. package/src/domains/middleware/stalled-turn.ts +18 -3
  480. package/src/domains/middleware/task-board-reminder.ts +4 -2
  481. package/src/domains/middleware/task-nudge.ts +4 -1
  482. package/src/domains/mux/contract.ts +34 -1
  483. package/src/domains/mux/detect.ts +3 -6
  484. package/src/domains/mux/dock-controller.ts +8 -1
  485. package/src/domains/mux/index.ts +1 -0
  486. package/src/domains/mux/socket-client.ts +13 -3
  487. package/src/domains/observability/accountability.ts +15 -1
  488. package/src/domains/observability/contract.ts +54 -9
  489. package/src/domains/observability/evidence-index.ts +10 -0
  490. package/src/domains/observability/extension.ts +9 -5
  491. package/src/domains/observability/projection.ts +423 -53
  492. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  493. package/src/domains/prompts/compiler.ts +10 -2
  494. package/src/domains/prompts/contract.ts +7 -4
  495. package/src/domains/prompts/extension.ts +28 -64
  496. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  497. package/src/domains/prompts/fragments/operating/contract.md +12 -0
  498. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  499. package/src/domains/prompts/fragments/wiki/page.md +36 -15
  500. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  501. package/src/domains/prompts/preload-prefix.ts +31 -0
  502. package/src/domains/prompts/preload.ts +135 -61
  503. package/src/domains/providers/auth/backend-file.ts +15 -11
  504. package/src/domains/providers/auth/storage.ts +3 -5
  505. package/src/domains/providers/catalog.ts +18 -3
  506. package/src/domains/providers/model-discovery.ts +1 -4
  507. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
  508. package/src/domains/providers/runtime-resolution.ts +11 -9
  509. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  510. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  511. package/src/domains/providers/support.ts +1 -1
  512. package/src/domains/providers/types/runtime-descriptor.ts +1 -1
  513. package/src/domains/resources/skills/promotion.ts +8 -1
  514. package/src/domains/safety/action-classifier.ts +16 -0
  515. package/src/domains/safety/autonomy.ts +10 -1
  516. package/src/domains/safety/contract.ts +5 -1
  517. package/src/domains/safety/default-path-policy.ts +13 -0
  518. package/src/domains/safety/extension.ts +11 -2
  519. package/src/domains/safety/finish-contract-registration.ts +29 -14
  520. package/src/domains/safety/finish-contract.ts +252 -40
  521. package/src/domains/safety/index.ts +20 -1
  522. package/src/domains/safety/policy-engine.ts +211 -34
  523. package/src/domains/safety/project-policy.ts +7 -2
  524. package/src/domains/safety/rigor.ts +53 -39
  525. package/src/domains/safety/validation-contract.ts +388 -0
  526. package/src/domains/safety/workspace-trust.ts +43 -0
  527. package/src/domains/session/archive-readers.ts +10 -1
  528. package/src/domains/session/compaction/compact.ts +384 -21
  529. package/src/domains/session/compaction/cut-point.ts +42 -5
  530. package/src/domains/session/compaction/tokens.ts +9 -1
  531. package/src/domains/session/decision-board.ts +137 -28
  532. package/src/domains/session/entries.ts +213 -11
  533. package/src/domains/session/extension.ts +4 -4
  534. package/src/domains/session/handoff.ts +2 -1
  535. package/src/domains/session/manager.ts +2 -3
  536. package/src/domains/session/prompt-manifest.ts +47 -8
  537. package/src/domains/session/task-board.ts +32 -1
  538. package/src/domains/session/tree/fork.ts +1 -2
  539. package/src/domains/session/tree/navigator.ts +1 -1
  540. package/src/domains/user-tasks/acceptance.ts +56 -0
  541. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  542. package/src/domains/user-tasks/handoff.ts +16 -0
  543. package/src/domains/user-tasks/store.ts +34 -3
  544. package/src/engine/acp/adapter.ts +60 -10
  545. package/src/engine/acp/server.ts +22 -4
  546. package/src/engine/acp/transport.ts +55 -9
  547. package/src/engine/acp/types.ts +9 -0
  548. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  549. package/src/engine/api-registry.ts +19 -2
  550. package/src/engine/apis/ollama-native.ts +15 -0
  551. package/src/engine/apis/openai-completions.ts +13 -6
  552. package/src/engine/apis/output-budget.ts +26 -10
  553. package/src/engine/claude/sdk-runtime.ts +4 -3
  554. package/src/engine/claude/subprocess-runtime.ts +107 -60
  555. package/src/engine/env-api-keys.ts +2 -1
  556. package/src/engine/external-subprocess.ts +26 -7
  557. package/src/engine/loop-guard.ts +19 -2
  558. package/src/engine/provider-diagnostics.ts +129 -0
  559. package/src/engine/provider-payload.ts +3 -1
  560. package/src/engine/worker-runtime.ts +13 -2
  561. package/src/engine/worker-tools.ts +5 -1
  562. package/src/entry/extension-reload.ts +1 -0
  563. package/src/entry/orchestrator.ts +64 -17
  564. package/src/interactive/chat-loop-messages.ts +12 -4
  565. package/src/interactive/chat-loop.ts +115 -45
  566. package/src/interactive/chat-renderer.ts +60 -0
  567. package/src/interactive/context-recall-command.ts +2 -1
  568. package/src/interactive/dispatch-board.ts +58 -714
  569. package/src/interactive/editor-submit.ts +13 -0
  570. package/src/interactive/fleet-run-preview.ts +2 -1
  571. package/src/interactive/interactive-application.ts +11 -4
  572. package/src/interactive/interactive-event-projection.ts +7 -1
  573. package/src/interactive/interactive-presentation.ts +63 -12
  574. package/src/interactive/interactive-slash-runtime.ts +4 -1
  575. package/src/interactive/layout.ts +2 -1
  576. package/src/interactive/model-session-replay.ts +2 -2
  577. package/src/interactive/oracle.ts +5 -2
  578. package/src/interactive/overlay-frame.ts +1 -0
  579. package/src/interactive/overlay-general-openers.ts +3 -1
  580. package/src/interactive/overlay-session-lifecycle.ts +6 -0
  581. package/src/interactive/overlays/ask-user.ts +1 -0
  582. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  583. package/src/interactive/overlays/message-picker.ts +3 -3
  584. package/src/interactive/overlays/settings.ts +2 -2
  585. package/src/interactive/overlays/tree-selector.ts +2 -2
  586. package/src/interactive/renderers/branch-summary.ts +1 -1
  587. package/src/interactive/renderers/tool-execution.ts +17 -1
  588. package/src/interactive/renderers/worker-entry.ts +25 -10
  589. package/src/interactive/slash-autocomplete.ts +4 -6
  590. package/src/interactive/slash-commands.ts +31 -43
  591. package/src/interactive/slash-spec.ts +28 -0
  592. package/src/interactive/turn-context.ts +221 -53
  593. package/src/interactive/turn-middleware.ts +3 -1
  594. package/src/interactive/turn-persistence.ts +3 -0
  595. package/src/interactive/turn-runtime.ts +11 -2
  596. package/src/interactive/turn-state.ts +10 -9
  597. package/src/interactive/view/artifacts.ts +2 -0
  598. package/src/interactive/watch-pane.ts +18 -4
  599. package/src/interactive/worker-stream.ts +14 -10
  600. package/src/tools/agent-tools.ts +6 -3
  601. package/src/tools/bash.ts +1 -1
  602. package/src/tools/bootstrap.ts +4 -0
  603. package/src/tools/builtin-tool-catalog.ts +40 -2
  604. package/src/tools/codewiki/code-nav.ts +4 -10
  605. package/src/tools/compete-judge-task.ts +71 -0
  606. package/src/tools/compete-worktrees.ts +41 -1
  607. package/src/tools/context/index.ts +32 -7
  608. package/src/tools/context/surface.ts +15 -4
  609. package/src/tools/core-bootstrap.ts +16 -0
  610. package/src/tools/decide.ts +136 -0
  611. package/src/tools/dispatch-admission.ts +33 -1
  612. package/src/tools/dispatch-arguments.ts +38 -1
  613. package/src/tools/dispatch-plan.ts +12 -9
  614. package/src/tools/dispatch-runner.ts +63 -33
  615. package/src/tools/dispatch-schema.ts +30 -23
  616. package/src/tools/dispatch-scout-admission.ts +10 -44
  617. package/src/tools/dispatch-scout.ts +2 -3
  618. package/src/tools/dispatch-types.ts +6 -0
  619. package/src/tools/evidence.ts +96 -0
  620. package/src/tools/find.ts +13 -4
  621. package/src/tools/grep.ts +13 -1
  622. package/src/tools/limitation.ts +76 -0
  623. package/src/tools/ls.ts +7 -1
  624. package/src/tools/monitor.ts +26 -11
  625. package/src/tools/network-policy.ts +11 -24
  626. package/src/tools/observation.ts +39 -2
  627. package/src/tools/policy.ts +9 -0
  628. package/src/tools/presentation.ts +3 -0
  629. package/src/tools/read.ts +112 -15
  630. package/src/tools/registry.ts +55 -18
  631. package/src/tools/result-shaping.ts +127 -7
  632. package/src/tools/task-worktree.ts +13 -3
  633. package/src/tools/tasks.ts +40 -5
  634. package/src/tools/verify/authoring.ts +170 -83
  635. package/src/tools/verify/catalog.ts +122 -5
  636. package/src/tools/verify/frontend.ts +67 -30
  637. package/src/tools/verify/index.ts +2 -1
  638. package/src/tools/verify/numeric.ts +303 -0
  639. package/src/tools/verify/perf.ts +143 -0
  640. package/src/tools/verify/scripts.ts +229 -2
  641. package/src/tools/web-fetch-network.ts +179 -0
  642. package/src/tools/web-fetch-surface.ts +2 -1
  643. package/src/tools/web-fetch.ts +15 -13
  644. package/src/tools/worker-evidence.ts +27 -0
  645. package/src/worker/spec-contract.ts +12 -8
  646. package/dist/builtins-IA7V7FUC.js +0 -22
  647. package/dist/chunk-2WZ546HR.js +0 -792
  648. package/dist/chunk-5PSMVOLM.js +0 -56
  649. package/dist/chunk-7DICMOS6.js +0 -313
  650. package/dist/chunk-BEPZRGGU.js +0 -1560
  651. package/dist/chunk-JVCV3ICN.js +0 -47
  652. package/dist/chunk-KK4JZPBQ.js +0 -3982
  653. package/dist/chunk-MNJGS2IN.js +0 -33
  654. package/dist/chunk-NDINPTJ4.js +0 -641
  655. package/dist/chunk-O5CVSAG5.js +0 -122
  656. package/dist/chunk-OQE5J4C6.js +0 -73
  657. package/dist/chunk-RVG5JXAL.js +0 -41
  658. package/dist/chunk-T56WDKA5.js +0 -183
  659. package/dist/chunk-UUVG37B4.js +0 -244
  660. package/dist/chunk-VPKWYKEY.js +0 -169
  661. package/dist/chunk-Y3CBHOR6.js +0 -228
  662. package/dist/clio-CMMK4KRR.js +0 -25
  663. package/dist/configure-LE3IK2TJ.js +0 -56
  664. package/dist/context-clear-BW4O37TG.js +0 -176
  665. package/dist/fleet-view-SWBR3VGQ.js +0 -97
  666. package/dist/preload-P6DGH2PZ.js +0 -13
  667. package/dist/slash-commands-S7MBJDQK.js +0 -83
  668. package/dist/tools-TFGJICCU.js +0 -29
  669. package/dist/verify-RWE4PPEK.js +0 -27
  670. package/dist/wiki-generate-C7IQOXSP.js +0 -469
@@ -3,7 +3,7 @@ import { existsSync, readFileSync } from "node:fs";
3
3
  import { hostname } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { BIRTH_TOKEN_SOURCE_AVAILABLE, processAlive, processBirthToken } from "../../core/process-identity.js";
6
- import { FILE_LOCK_ACQUIRE_TIMEOUT_MS, withStateFileLockSync } from "../../core/state-file-lock.js";
6
+ import { FILE_LOCK_ACQUIRE_TIMEOUT_MS, withStateFileLock, withStateFileLockSync } from "../../core/state-file-lock.js";
7
7
  import { clioStateDir } from "../../core/xdg.js";
8
8
  import { atomicWrite } from "../../engine/session.js";
9
9
  import { endpointLabel, foregroundStreamUsage } from "../providers/endpoint-capacity.js";
@@ -187,7 +187,10 @@ const MEMBER_STATUSES = new Set(["held", "consumed", "released"]);
187
187
  * rejected here as well: silently skipping an unreadable record would under-count
188
188
  * capacity and admit past the cap.
189
189
  */
190
- function heldReservationUsage(values: ReadonlyArray<unknown>): {
190
+ function heldReservationUsage(
191
+ values: ReadonlyArray<unknown>,
192
+ transferring?: { ownerId: string; memberId: string },
193
+ ): {
191
194
  global: number;
192
195
  nodes: Record<string, number>;
193
196
  endpoints: Record<string, number>;
@@ -198,13 +201,24 @@ function heldReservationUsage(values: ReadonlyArray<unknown>): {
198
201
  for (const value of values) {
199
202
  if (typeof value !== "object" || value === null)
200
203
  throw new Error("dispatch capacity store has invalid reservation records");
201
- const record = value as { status?: unknown; members?: unknown };
204
+ const record = value as { ownerId?: unknown; status?: unknown; members?: unknown };
202
205
  if (typeof record.status !== "string" || !RESERVATION_STATUSES.has(record.status) || !Array.isArray(record.members))
203
206
  throw new Error("dispatch capacity store has invalid reservation records");
204
207
  if (record.status !== "active") continue;
205
208
  const byWave = new Map<number, number>();
206
209
  const byNodeWave = new Map<string, Map<number, number>>();
207
210
  const byEndpointWave = new Map<string, Map<number, number>>();
211
+ let transferringWave: number | undefined;
212
+ if (transferring !== undefined && record.ownerId === transferring.ownerId) {
213
+ const member = record.members.find(
214
+ (raw) => typeof raw === "object" && raw !== null && raw.memberId === transferring.memberId,
215
+ );
216
+ // Transfer validates and consumes the member under this same lock.
217
+ // A retry's existing lease also carries that validated identity.
218
+ if (member?.status !== "consumed" || !Number.isInteger(member.wave))
219
+ throw new Error("dispatch: capacity transfer requires a consumed reservation member");
220
+ transferringWave = member.wave;
221
+ }
208
222
  for (const raw of record.members) {
209
223
  if (typeof raw !== "object" || raw === null)
210
224
  throw new Error("dispatch capacity store has invalid reservation records");
@@ -218,12 +232,16 @@ function heldReservationUsage(values: ReadonlyArray<unknown>): {
218
232
  throw new Error("dispatch capacity store has invalid reservation records");
219
233
  if (member.status !== "held") continue;
220
234
  const wave = member.wave as number;
235
+ if (member.endpointKey !== undefined && typeof member.endpointKey !== "string")
236
+ throw new Error("dispatch capacity store has invalid reservation records");
237
+ // Waves reuse the owner's reserved slots. Only its same-wave peers
238
+ // compete with this lease; other waves stay held in durable state and
239
+ // still count at their full peak against every other owner.
240
+ if (transferringWave !== undefined && wave !== transferringWave) continue;
221
241
  byWave.set(wave, (byWave.get(wave) ?? 0) + 1);
222
242
  const nodeWaves = byNodeWave.get(member.nodeId) ?? new Map<number, number>();
223
243
  nodeWaves.set(wave, (nodeWaves.get(wave) ?? 0) + 1);
224
244
  byNodeWave.set(member.nodeId, nodeWaves);
225
- if (member.endpointKey !== undefined && typeof member.endpointKey !== "string")
226
- throw new Error("dispatch capacity store has invalid reservation records");
227
245
  if (typeof member.endpointKey === "string") {
228
246
  const endpointWaves = byEndpointWave.get(member.endpointKey) ?? new Map<number, number>();
229
247
  endpointWaves.set(wave, (endpointWaves.get(wave) ?? 0) + 1);
@@ -288,8 +306,9 @@ function assertCapacity(
288
306
  nodeId: string,
289
307
  endpointKey: string | undefined,
290
308
  limits: CapacityLimits,
309
+ transferring?: { ownerId: string; memberId: string },
291
310
  ): void {
292
- const held = heldReservationUsage(file.reservations);
311
+ const held = heldReservationUsage(file.reservations, transferring);
293
312
  const globalUsed = file.leases.length + held.global;
294
313
  // The denial names the compliant next move, not just the gate. A model told
295
314
  // only that it is full re-dispatches with a different agent; the work it is
@@ -350,7 +369,15 @@ export function acquireCapacityLease(input: {
350
369
  if (existing) {
351
370
  if (existing.nodeId !== input.nodeId || existing.endpointKey !== input.endpointKey) {
352
371
  const without = { ...file, leases: file.leases.filter((lease) => lease !== existing) };
353
- assertCapacity(without, input.nodeId, input.endpointKey, input.limits);
372
+ assertCapacity(
373
+ without,
374
+ input.nodeId,
375
+ input.endpointKey,
376
+ input.limits,
377
+ existing.reservationOwnerId !== null && existing.reservationMemberId !== null
378
+ ? { ownerId: existing.reservationOwnerId, memberId: existing.reservationMemberId }
379
+ : undefined,
380
+ );
354
381
  existing.nodeId = input.nodeId;
355
382
  if (input.endpointKey === undefined) delete existing.endpointKey;
356
383
  else existing.endpointKey = input.endpointKey;
@@ -361,7 +388,7 @@ export function acquireCapacityLease(input: {
361
388
  return clone(existing);
362
389
  }
363
390
  input.onAcquiredUnderLock?.(file);
364
- assertCapacity(file, input.nodeId, input.endpointKey, input.limits);
391
+ assertCapacity(file, input.nodeId, input.endpointKey, input.limits, input.reservation);
365
392
  const token = input.processBirthToken ?? processBirthToken(input.ownerPid ?? process.pid);
366
393
  if (!token) throw new Error("dispatch: cannot establish process birth token");
367
394
  const at = new Date(nowMs).toISOString();
@@ -454,13 +481,34 @@ export function capacityDrain(nowMs = Date.now()): CapacityDrain | null {
454
481
  return drain;
455
482
  });
456
483
  }
484
+ /** Synchronous usage read for admission planners whose host API cannot yield. */
457
485
  export function capacityLeaseUsage(options?: { nowMs?: number; probe?: LeaseOwnerProbe }): {
458
486
  global: number;
459
487
  nodes: Readonly<Record<string, number>>;
460
488
  endpoints: Readonly<Record<string, number>>;
461
489
  endpointHolders: Readonly<Record<string, EndpointCapacityHolders>>;
462
490
  } {
463
- const leases = listCapacityLeases(options);
491
+ return withStateFileLockSync(capacityStateLockPath(), () => capacityLeaseUsageUnsafe(options));
492
+ }
493
+
494
+ /** Fresh usage for async admission: wait for the same lock without blocking callbacks. */
495
+ export function capacityLeaseUsageAsync(options?: {
496
+ nowMs?: number;
497
+ probe?: LeaseOwnerProbe;
498
+ }): Promise<ReturnType<typeof capacityLeaseUsage>> {
499
+ return withStateFileLock(capacityStateLockPath(), () => capacityLeaseUsageUnsafe(options));
500
+ }
501
+
502
+ /** The caller holds the capacity state lock for this read and any reclamation write. */
503
+ function capacityLeaseUsageUnsafe(options?: {
504
+ nowMs?: number;
505
+ probe?: LeaseOwnerProbe;
506
+ }): ReturnType<typeof capacityLeaseUsage> {
507
+ const file = readCapacityStateUnsafe();
508
+ const before = file.leases.length;
509
+ reclaim(file, options?.nowMs ?? Date.now(), options?.probe ?? defaultProbe);
510
+ if (before !== file.leases.length) writeCapacityStateUnsafe(file);
511
+ const leases = file.leases;
464
512
  const nodes: Record<string, number> = {};
465
513
  const foreground = foregroundStreamUsage();
466
514
  const endpoints: Record<string, number> = { ...foreground };
@@ -524,13 +572,3 @@ export function createNodeLeaseUsageReader(options: {
524
572
  return cache.nodes[nodeId] ?? 0;
525
573
  };
526
574
  }
527
-
528
- function listCapacityLeases(options?: { nowMs?: number; probe?: LeaseOwnerProbe }): ReadonlyArray<CapacityLease> {
529
- return withStateFileLockSync(capacityStateLockPath(), () => {
530
- const file = readCapacityStateUnsafe();
531
- const before = file.leases.length;
532
- reclaim(file, options?.nowMs ?? Date.now(), options?.probe ?? defaultProbe);
533
- if (before !== file.leases.length) writeCapacityStateUnsafe(file);
534
- return file.leases.map(clone);
535
- });
536
- }
@@ -107,6 +107,8 @@ export interface CodeStepRecord {
107
107
  export interface CodeStepOutcome {
108
108
  report: CodeReportResult;
109
109
  record: CodeStepRecord;
110
+ /** Stdout retained within the shared capture cap, for structured command judgments. */
111
+ stdout: string;
110
112
  /** Canonical JSON of the report; this is the text that crosses plan edges. */
111
113
  output: string;
112
114
  }
@@ -210,6 +212,7 @@ interface SpawnOutcome {
210
212
  signal: string | null;
211
213
  timedOut: boolean;
212
214
  captured: Buffer;
215
+ stdout: Buffer;
213
216
  outputBytes: number;
214
217
  spawnError: string | null;
215
218
  }
@@ -226,6 +229,7 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
226
229
  });
227
230
  reportCommitAttributionDiagnostic(attribution.diagnostic);
228
231
  const chunks: Buffer[] = [];
232
+ const stdoutChunks: Buffer[] = [];
229
233
  let outputBytes = 0;
230
234
  let captured = 0;
231
235
  let settled = false;
@@ -239,16 +243,17 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
239
243
  // whole tree rather than orphaning a test runner's children.
240
244
  detached: process.platform !== "win32",
241
245
  });
242
- const collect = (chunk: Buffer): void => {
246
+ const collect = (chunk: Buffer, stdout: boolean): void => {
243
247
  outputBytes += chunk.length;
244
248
  if (captured >= CODE_STEP_CAPTURE_MAX_BYTES) return;
245
249
  const room = CODE_STEP_CAPTURE_MAX_BYTES - captured;
246
250
  const slice = chunk.length <= room ? chunk : chunk.subarray(0, room);
247
251
  chunks.push(slice);
252
+ if (stdout) stdoutChunks.push(slice);
248
253
  captured += slice.length;
249
254
  };
250
- child.stdout?.on("data", collect);
251
- child.stderr?.on("data", collect);
255
+ child.stdout?.on("data", (chunk: Buffer) => collect(chunk, true));
256
+ child.stderr?.on("data", (chunk: Buffer) => collect(chunk, false));
252
257
  const kill = (): void => {
253
258
  if (child.pid === undefined) return;
254
259
  try {
@@ -276,6 +281,7 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
276
281
  signal,
277
282
  timedOut,
278
283
  captured: Buffer.concat(chunks),
284
+ stdout: Buffer.concat(stdoutChunks),
279
285
  outputBytes,
280
286
  spawnError,
281
287
  });
@@ -317,6 +323,7 @@ export async function runCodeStep(input: CodeStepRunInput): Promise<CodeStepOutc
317
323
  signal: null,
318
324
  timedOut: false,
319
325
  captured: Buffer.from(`${CODE_STEP_EMPTY_DIFF_MESSAGE}\n`, "utf8"),
326
+ stdout: Buffer.alloc(0),
320
327
  outputBytes: 0,
321
328
  spawnError: null,
322
329
  }
@@ -383,5 +390,5 @@ export async function runCodeStep(input: CodeStepRunInput): Promise<CodeStepOutc
383
390
  artifactPaths,
384
391
  reportDigest: codeReportDigest(report),
385
392
  };
386
- return { report, record, output: canonicalCodeReport(report) };
393
+ return { report, record, stdout: spawned.stdout.toString("utf8"), output: canonicalCodeReport(report) };
387
394
  }
@@ -1,4 +1,7 @@
1
1
  import type { SafeEventBus } from "../../core/event-bus.js";
2
+ import type { DeclaredCheckKind } from "../../tools/verify/catalog.js";
3
+ import type { NumericTolerance } from "../../tools/verify/numeric.js";
4
+ import type { PerfBudgetSpec } from "../../tools/verify/perf.js";
2
5
  import type { ResultContract } from "../agents/result-contract.js";
3
6
  import type { AgentAutomationAuthority, AgentSpec } from "../agents/spec.js";
4
7
  import type { CostProvenance } from "../providers/index.js";
@@ -7,7 +10,7 @@ import type { AssignmentId, DispatchAssignment } from "./assignment.js";
7
10
  import type { DurableAssignmentRecord } from "./assignment-store.js";
8
11
  import type { DetachedBatchRecord, RegisterDetachedBatchInput } from "./batch-store.js";
9
12
  import type { RunToolBudgetEnvelope } from "./budget-envelope.js";
10
- import type { ExecutionRole } from "./execution-role.js";
13
+ import type { DispatchResultSummaryAllowance, ExecutionRole } from "./execution-role.js";
11
14
  import type { DispatchReservationRecord, ReservationTopology } from "./reservation-store.js";
12
15
  import type { ApprovedAssignmentRoute } from "./route-approval.js";
13
16
  import type { RouteDecisionV1 } from "./route-decision.js";
@@ -15,9 +18,28 @@ import type { RunEnvelope, RunLineage, RunNodeIdentity, RunPhaseDurations, RunRe
15
18
  import type { DispatchFailoverCandidate, JobSpec } from "./validation.js";
16
19
  import type { WriteBoundaryAttribution } from "./write-boundary.js";
17
20
 
21
+ export interface ResolvedVerificationCheck {
22
+ check: string;
23
+ argv: ReadonlyArray<string>;
24
+ cwd: string;
25
+ timeoutMs: number;
26
+ /** Absent means `command`, the exit-code check every receipt carried before kinds existed. */
27
+ kind?: DeclaredCheckKind;
28
+ /** Sealed at admission with the reference as an absolute path. */
29
+ numeric?: { reference: string; tolerance: NumericTolerance };
30
+ /** Sealed at admission with the baseline as an absolute path. */
31
+ perf?: { budget?: PerfBudgetSpec; baseline?: string; tolerance?: { relative?: number } };
32
+ }
33
+
18
34
  export interface DispatchRequest extends JobSpec {
19
35
  /** Coordinator-owned result contract override for a fleet plan step. */
20
36
  resultContractOverride?: ResultContract;
37
+ /**
38
+ * Caller's inline-summary allowance for a mutation-report worker, applied
39
+ * by `dispatchResultContract`. Parsed and range-checked at the tool
40
+ * boundary; never model-authored past that point.
41
+ */
42
+ resultSummary?: DispatchResultSummaryAllowance;
21
43
  /** Gate path whose post-run hash is sealed into this step's receipt. */
22
44
  fleetGateReceipt?: { path: string };
23
45
  /** Orchestrator-prepared task worktree state. Model arguments cannot author it. */
@@ -33,13 +55,13 @@ export interface DispatchRequest extends JobSpec {
33
55
  runIdHint?: string;
34
56
  /** Parent checkout frozen by plan approval for task worktree application. */
35
57
  taskWorktreeDestination?: string;
36
- /** Admission-resolved commands. Model text never enters these argv vectors. */
37
- resolvedVerification?: ReadonlyArray<{
38
- check: string;
39
- argv: ReadonlyArray<string>;
40
- cwd: string;
41
- timeoutMs: number;
42
- }>;
58
+ /**
59
+ * Admission-resolved commands. Model text never enters these argv vectors.
60
+ * A numeric-compare or perf-budget check also seals its kind and the
61
+ * absolute reference or baseline path it will judge against, so host
62
+ * verification runs exactly the check the catalog declared at admission.
63
+ */
64
+ resolvedVerification?: ReadonlyArray<ResolvedVerificationCheck>;
43
65
  /**
44
66
  * Semantic role this request's first attempt runs under. Derived once by
45
67
  * `execution-role.ts` at request construction, never authored by a model, and
@@ -68,7 +90,7 @@ export interface DispatchRequest extends JobSpec {
68
90
  * strips the ledger tool from this run's admitted surface.
69
91
  */
70
92
  ledger?: { id: string; sequence: number };
71
- /** Absolute root-assignment deadline derived once from the approved duration. */
93
+ /** Explicit absolute root-assignment deadline, preserved through retries; absent for advisory estimates. */
72
94
  assignmentDeadlineAt?: number;
73
95
  /**
74
96
  * Tool call the caller was executing when it built this request. Stamped by
@@ -79,6 +101,14 @@ export interface DispatchRequest extends JobSpec {
79
101
  * validation projection strips it like the reservation and ledger refs.
80
102
  */
81
103
  parentToolCallId?: string;
104
+ /**
105
+ * Decision refs (`<interviewId>/<key>`) active on the parent session's
106
+ * decision board when this request was built. Sealed by the orchestrator
107
+ * from the board snapshot, never by model arguments: the validation
108
+ * projection strips it like `reservation` and `ledger`. Copied onto the run
109
+ * envelope and receipt so a receipt names the decisions it worked under.
110
+ */
111
+ decisionRefs?: ReadonlyArray<string>;
82
112
  }
83
113
 
84
114
  /** Internal, non-serializable admission hook for transactional resource owners. */
@@ -88,6 +118,8 @@ export interface DispatchAdmissionObserver {
88
118
 
89
119
  /** Invocation-owned admission bounds; never serialized into model-authored requests. */
90
120
  export interface DispatchPreparationOptions {
121
+ /** Host ancestry for publication; kept separate from logical assignment/retry identity. */
122
+ hostRun?: { readonly runId: string; readonly lineage: Readonly<RunLineage> };
91
123
  signal?: AbortSignal;
92
124
  deadlineAt?: number;
93
125
  }
@@ -17,6 +17,7 @@
17
17
  */
18
18
 
19
19
  import { truncateUtf8 } from "../../tools/truncate-utf8.js";
20
+ import { type ResultContract, resultContractOutputBytes } from "../agents/result-contract.js";
20
21
  import type { RunReceiptOutput } from "./types.js";
21
22
 
22
23
  /** Bounded replay capacity for the external consumer tee. */
@@ -137,15 +138,33 @@ export function startDispatchEventPump(
137
138
  * Byte bound on the assistant output text sealed into a receipt. Large enough
138
139
  * for a substantive final answer, small enough that receipts stay cheap to
139
140
  * read and render; overflow is recorded explicitly via `truncated`/`bytes`.
141
+ * A run whose result contract implies a larger conforming result raises its
142
+ * own bound through `workerOutputCaptureBytes`; this is the floor.
140
143
  */
141
144
  export const WORKER_OUTPUT_MAX_BYTES = 8192;
142
145
  const WORKER_OUTPUT_TRUNCATION_MARKER = "\n[worker output truncated]";
143
146
 
147
+ /**
148
+ * The capture bound for one run. A mutation report with a 16 KB summary
149
+ * allowance cannot be sealed in 8 KB, and clipping it produced a receipt whose
150
+ * only readable fact was "result must be valid JSON" for a result that was
151
+ * valid (#350). The contract's own whole-result bound wins when it is larger;
152
+ * every other contract keeps the floor.
153
+ */
154
+ export function workerOutputCaptureBytes(contract: ResultContract | null | undefined): number {
155
+ return Math.max(WORKER_OUTPUT_MAX_BYTES, resultContractOutputBytes(contract) ?? 0);
156
+ }
157
+
144
158
  export interface WorkerOutputCapture {
145
159
  observe(event: unknown): void;
146
160
  snapshot(): RunReceiptOutput | undefined;
147
161
  }
148
162
 
163
+ export interface WorkerOutputCaptureOptions {
164
+ /** Byte bound for the sealed text; defaults to WORKER_OUTPUT_MAX_BYTES. */
165
+ maxBytes?: number;
166
+ }
167
+
149
168
  function isRecord(value: unknown): value is Record<string, unknown> {
150
169
  return typeof value === "object" && value !== null && !Array.isArray(value);
151
170
  }
@@ -184,9 +203,9 @@ export function durableAssistantTextFromEvent(event: unknown): string {
184
203
  return assistantTextFromContent(event.message.content);
185
204
  }
186
205
 
187
- function boundedOutput(state: RunReceiptOutput["state"], text: string): RunReceiptOutput {
206
+ function boundedOutput(state: RunReceiptOutput["state"], text: string, maxBytes: number): RunReceiptOutput {
188
207
  const bytes = Buffer.byteLength(text, "utf8");
189
- const bounded = truncateUtf8(text, WORKER_OUTPUT_MAX_BYTES, WORKER_OUTPUT_TRUNCATION_MARKER);
208
+ const bounded = truncateUtf8(text, maxBytes, WORKER_OUTPUT_TRUNCATION_MARKER);
190
209
  return { state, text: bounded, bytes, truncated: bounded !== text };
191
210
  }
192
211
 
@@ -199,9 +218,11 @@ function boundedOutput(state: RunReceiptOutput["state"], text: string): RunRecei
199
218
  * partial and are discarded when their message completes. A run that ends
200
219
  * with unflushed deltas (abort, stall, kill mid-message) therefore snapshots
201
220
  * as `partial`, never as final. Accumulation is bounded in memory by the same
202
- * byte cap the receipt uses; overflow only marks truncation.
221
+ * byte cap the receipt uses; overflow only marks truncation. The cap is the
222
+ * run's own (`workerOutputCaptureBytes`), never below the module floor.
203
223
  */
204
- export function createWorkerOutputCapture(): WorkerOutputCapture {
224
+ export function createWorkerOutputCapture(options: WorkerOutputCaptureOptions = {}): WorkerOutputCapture {
225
+ const maxBytes = Math.max(WORKER_OUTPUT_MAX_BYTES, Math.floor(options.maxBytes ?? WORKER_OUTPUT_MAX_BYTES));
205
226
  let finalText: string | null = null;
206
227
  let partialText = "";
207
228
  let partialBytes = 0;
@@ -229,14 +250,14 @@ export function createWorkerOutputCapture(): WorkerOutputCapture {
229
250
  const delta = assistantEvent.delta;
230
251
  if (typeof delta !== "string" || delta.length === 0) return;
231
252
  partialBytes += Buffer.byteLength(delta, "utf8");
232
- if (partialStored < WORKER_OUTPUT_MAX_BYTES) {
253
+ if (partialStored < maxBytes) {
233
254
  partialText += delta;
234
255
  partialStored += Buffer.byteLength(delta, "utf8");
235
256
  }
236
257
  },
237
258
  snapshot(): RunReceiptOutput | undefined {
238
259
  if (partialBytes > 0 && partialText.trim().length > 0) {
239
- const bounded = truncateUtf8(partialText.trim(), WORKER_OUTPUT_MAX_BYTES, WORKER_OUTPUT_TRUNCATION_MARKER);
260
+ const bounded = truncateUtf8(partialText.trim(), maxBytes, WORKER_OUTPUT_TRUNCATION_MARKER);
240
261
  return {
241
262
  state: "partial",
242
263
  text: bounded,
@@ -244,7 +265,7 @@ export function createWorkerOutputCapture(): WorkerOutputCapture {
244
265
  truncated: bounded !== partialText.trim() || partialBytes > partialStored,
245
266
  };
246
267
  }
247
- if (finalText !== null) return boundedOutput("final", finalText);
268
+ if (finalText !== null) return boundedOutput("final", finalText, maxBytes);
248
269
  return undefined;
249
270
  },
250
271
  };
@@ -14,7 +14,7 @@
14
14
  * clock, no engine state.
15
15
  */
16
16
 
17
- import type { ResultContract } from "../agents/result-contract.js";
17
+ import { type ResultContract, withResultSummaryAllowance } from "../agents/result-contract.js";
18
18
  import type { AgentCapabilityClass } from "../agents/spec.js";
19
19
 
20
20
  /**
@@ -181,10 +181,57 @@ export function gateDeciderAgentId(requested: string | undefined): string {
181
181
  * the recipe postcondition on the slot sealed a contract failure on every
182
182
  * correct synthesis and burned the configured retries reproducing it.
183
183
  */
184
- export function appliesRecipeResultContract(gateRole: GateTopologyRole | undefined): boolean {
184
+ function appliesRecipeResultContract(gateRole: GateTopologyRole | undefined): boolean {
185
185
  return gateRole !== "reviewer" && gateRole !== "judge" && gateRole !== "synthesis";
186
186
  }
187
187
 
188
+ /** A caller's summary allowance for one dispatch, with where it was set. */
189
+ export interface DispatchResultSummaryAllowance {
190
+ maxBytes: number;
191
+ /**
192
+ * `task` is an explicit setting on this one assignment; `batch` is the
193
+ * shared default every member of a batch or pipeline inherits. Only the
194
+ * explicit form can be a caller error on a recipe with no summary field.
195
+ */
196
+ scope: "task" | "batch";
197
+ }
198
+
199
+ /** The request fields the applied result contract is resolved from. */
200
+ export interface DispatchResultContractRequest {
201
+ agentId: string;
202
+ gate?: { role?: GateTopologyRole } | undefined;
203
+ resultContractOverride?: ResultContract;
204
+ resultSummary?: DispatchResultSummaryAllowance;
205
+ }
206
+
207
+ /**
208
+ * The one resolution of the contract a run is validated and sealed against.
209
+ * Every reader (the worker spec, the capture bound, the seal) calls this so
210
+ * the worker repairs against exactly the contract the receipt will name.
211
+ *
212
+ * Precedence: a gate role that answers its topology has no recipe contract at
213
+ * all; otherwise the coordinator's override, else the seated recipe's. A
214
+ * caller's summary allowance then applies to a mutation report only. A
215
+ * topology-owned override (ballot, plan, artifact) and a batch-level default
216
+ * inherited by a non-mutation step ignore it, because the allowance was never
217
+ * about that step. An explicit per-task allowance on a recipe with no summary
218
+ * field is a caller error and fails here, before any model boots.
219
+ */
220
+ export function dispatchResultContract(
221
+ req: DispatchResultContractRequest,
222
+ recipe: { resultContract: ResultContract } | null | undefined,
223
+ ): ResultContract | undefined {
224
+ if (!appliesRecipeResultContract(req.gate?.role)) return undefined;
225
+ const base = req.resultContractOverride ?? recipe?.resultContract;
226
+ const allowance = req.resultSummary;
227
+ if (allowance === undefined) return base;
228
+ if (base?.kind === "mutation-report") return withResultSummaryAllowance(base, allowance.maxBytes);
229
+ if (req.resultContractOverride !== undefined || allowance.scope === "batch") return base;
230
+ throw new Error(
231
+ `dispatch: result_summary_max_bytes applies only to a mutation-report result contract; agent '${req.agentId}' declares ${base === undefined ? "no result contract" : base.kind}`,
232
+ );
233
+ }
234
+
188
235
  /** The route dimensions a gate correlation is measured across. */
189
236
  export interface RouteCorrelationFacts {
190
237
  agentId: string;
@@ -11,8 +11,12 @@ import {
11
11
  } from "./execution-plan.js";
12
12
 
13
13
  export interface ExecutionStepResult extends ExecutionHandoff {
14
+ /** Coordinator-owned immutable recovery reference captured before loop repair. */
15
+ workspaceCheckpoint?: string;
14
16
  succeeded: boolean;
15
17
  integrityValid: boolean;
18
+ /** Decision refs the step's sealed receipt was made under; absent for code steps and decision-free runs. */
19
+ decisionRefs?: ReadonlyArray<string>;
16
20
  /**
17
21
  * The step changed the workspace outside its declared boundary. Sealed by
18
22
  * the orchestrator after the fact, never by the step: a run that reports on