@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
@@ -5,6 +5,8 @@ import {
5
5
  readSettings,
6
6
  removeFleetProfileFromSettings,
7
7
  setFleetProfileInSettings,
8
+ type TargetSelectionRole,
9
+ type UseTargetOptions,
8
10
  updateSettings,
9
11
  useTargetInSettings,
10
12
  } from "../core/config.js";
@@ -24,6 +26,7 @@ import { registerBuiltinRuntimes } from "../domains/providers/runtimes/builtins.
24
26
  import type { CapabilityFlags } from "../domains/providers/types/capability-flags.js";
25
27
  import type { RuntimeTier } from "../domains/providers/types/runtime-descriptor.js";
26
28
  import { runConfigureCommand, runTargetRemove, runTargetRename } from "./configure.js";
29
+ import { resolveSupportedWireModels } from "./configure-target.js";
27
30
  import { printError, printOk } from "./shared.js";
28
31
  import { column, terminalColumns, truncate, wrapPlain } from "./text-layout.js";
29
32
 
@@ -259,7 +262,7 @@ function parseUseArgs(args: ReadonlyArray<string>): UseArgs | null {
259
262
  return parsed;
260
263
  }
261
264
 
262
- function runUse(args: ReadonlyArray<string>): number {
265
+ async function runUse(args: ReadonlyArray<string>): Promise<number> {
263
266
  if (wantsHelp(args)) return printUsage(USE_USAGE);
264
267
  let parsed: UseArgs | null;
265
268
  try {
@@ -281,42 +284,91 @@ function runUse(args: ReadonlyArray<string>): number {
281
284
  }
282
285
  const registry = getRuntimeRegistry();
283
286
  if (registry.list().length === 0) registerBuiltinRuntimes(registry);
284
- const runtime = registry.get(target.runtime);
285
- if (!runtime) {
286
- printError(
287
- `cannot use target '${target.id}' as orchestrator target because runtime '${target.runtime}' is not registered`,
288
- );
287
+ const options: UseTargetOptions = {
288
+ ...(parsed.model !== undefined ? { model: parsed.model } : {}),
289
+ ...(parsed.orchestratorModel !== undefined ? { orchestratorModel: parsed.orchestratorModel } : {}),
290
+ ...(parsed.workerModel !== undefined ? { workerModel: parsed.workerModel } : {}),
291
+ ...(parsed.workerTarget !== undefined ? { workerTargetId: parsed.workerTarget } : {}),
292
+ ...(parsed.backgroundModel !== undefined ? { backgroundModel: parsed.backgroundModel } : {}),
293
+ };
294
+ const candidate = structuredClone(settings);
295
+ const selection = useTargetInSettings(candidate, target.id, options);
296
+ if (!selection) {
297
+ printError(`no target with id ${parsed.workerTarget}`);
289
298
  return 1;
290
299
  }
291
- if (!isOrchestratorEligibleRuntime(runtime)) {
292
- printError(
293
- `cannot use target '${target.id}' as orchestrator target because runtime '${runtime.id}' is not an HTTP/native runtime`,
294
- );
300
+ const labels: Record<TargetSelectionRole, string> = {
301
+ chat: "chat",
302
+ fleet: "fleet dispatch",
303
+ memory: "background memory",
304
+ };
305
+ const routes = { chat: candidate.chat, fleet: candidate.fleet.default, memory: candidate.context.memory };
306
+ const inventories = new Map<string, Awaited<ReturnType<typeof resolveSupportedWireModels>>>();
307
+ const checkedTargets = new Map<string, string>();
308
+ for (const role of selection.roles) {
309
+ const route = routes[role];
310
+ const selectedTarget = candidate.targets.find((entry) => entry.id === route.target);
311
+ if (!selectedTarget) throw new Error("selected target disappeared");
312
+ const runtime = registry.get(selectedTarget.runtime);
313
+ if (!runtime || !(role === "fleet" ? isDispatchEligibleRuntime(runtime) : isOrchestratorEligibleRuntime(runtime))) {
314
+ printError(
315
+ `cannot use target '${selectedTarget.id}' for ${labels[role]}: runtime '${selectedTarget.runtime}' is not eligible`,
316
+ );
317
+ return 1;
318
+ }
319
+ checkedTargets.set(selectedTarget.id, JSON.stringify(selectedTarget));
320
+ if (route.model === null) continue;
321
+ let inventory = inventories.get(selectedTarget.id);
322
+ if (!inventory) {
323
+ inventory = await resolveSupportedWireModels(runtime, selectedTarget, selectedTarget);
324
+ inventories.set(selectedTarget.id, inventory);
325
+ }
326
+ if (inventory.models.length > 0 && !inventory.models.includes(route.model)) {
327
+ printError(
328
+ `target '${selectedTarget.id}' does not list model '${route.model}' for ${labels[role]} (${inventory.source} inventory). Use an exact listed model id: ${inventory.models.slice(0, 10).join(", ")}`,
329
+ );
330
+ return 1;
331
+ }
332
+ if (inventory.models.length === 0) {
333
+ // Keep offline selection possible, but never imply that an unknown id was verified.
334
+ process.stderr.write(
335
+ `warning: could not verify model '${route.model}' for ${labels[role]}: target '${selectedTarget.id}' returned no model list; saving the id as written\n`,
336
+ );
337
+ } else if (inventory.source === "cache" || inventory.source === "legacy") {
338
+ process.stderr.write(
339
+ `warning: using ${inventory.source} model inventory for target '${selectedTarget.id}'; live availability was not verified\n`,
340
+ );
341
+ }
342
+ }
343
+ // Re-read under the settings lock. A changed endpoint/default invalidates the
344
+ // checked inventory; unrelated concurrent role edits are preserved by the scoped mutation.
345
+ let changedRoles: TargetSelectionRole[] = [];
346
+ try {
347
+ updateSettings((fresh) => {
348
+ for (const [id, descriptor] of checkedTargets) {
349
+ if (JSON.stringify(fresh.targets.find((entry) => entry.id === id)) !== descriptor) {
350
+ throw new Error(`target '${id}' changed while checking models; retry targets use`);
351
+ }
352
+ }
353
+ const applied = useTargetInSettings(fresh, target.id, options);
354
+ if (!applied) throw new Error("target changed while checking models; retry targets use");
355
+ changedRoles = applied.changedRoles;
356
+ });
357
+ } catch (error) {
358
+ printError(error instanceof Error ? error.message : String(error));
295
359
  return 1;
296
360
  }
297
- let workerTarget = target;
298
- if (parsed.workerTarget !== undefined && parsed.workerTarget !== target.id) {
299
- const resolved = resolveDispatchProfileTarget(settings, parsed.workerTarget, "fleet worker target");
300
- if ("exitCode" in resolved) return resolved.exitCode;
301
- workerTarget = resolved.target;
361
+ const changedByTarget = new Map<string, string[]>();
362
+ for (const role of changedRoles) {
363
+ const id = routes[role].target as string;
364
+ const names = changedByTarget.get(id) ?? [];
365
+ names.push(labels[role]);
366
+ changedByTarget.set(id, names);
302
367
  }
303
- const backgroundModel = parsed.backgroundModel;
304
- // Locked read-modify-write so a concurrent session's field-level
305
- // write-through (Shift+Tab, Alt+L, …) cannot be lost between our read
306
- // above and this save.
307
- updateSettings((fresh) => {
308
- useTargetInSettings(fresh, target.id, {
309
- ...(parsed.model !== undefined ? { model: parsed.model } : {}),
310
- ...(parsed.orchestratorModel !== undefined ? { orchestratorModel: parsed.orchestratorModel } : {}),
311
- ...(parsed.workerModel !== undefined ? { workerModel: parsed.workerModel } : {}),
312
- workerTargetId: workerTarget.id,
313
- ...(backgroundModel !== undefined ? { backgroundModel } : {}),
314
- });
315
- });
316
- const dispatchWhere = workerTarget === target ? "" : ` and ${workerTarget.id} for fleet dispatch`;
317
- const chatWhere = workerTarget === target ? "for chat and fleet dispatch" : "for chat";
318
368
  printOk(
319
- `using target ${target.id} ${chatWhere}${dispatchWhere}${backgroundModel === undefined ? "" : ", and background memory"}`,
369
+ changedRoles.length === 0
370
+ ? "no role settings changed"
371
+ : `using ${[...changedByTarget].map(([id, names]) => `target ${id} for ${names.join(" and ")}`).join("; ")}`,
320
372
  );
321
373
  return 0;
322
374
  }
@@ -1003,7 +1055,7 @@ function formatUrl(status: TargetStatus): string {
1003
1055
 
1004
1056
  function formatAuth(providers: ProvidersContract, status: TargetStatus): string {
1005
1057
  if (!status.runtime) return "-";
1006
- if (status.runtime.externalAgentLoop !== undefined) return "operator session";
1058
+ if (status.runtime.externalAgentLoop !== undefined && status.runtime.auth !== "claude-cli") return "operator session";
1007
1059
  if (status.runtime.auth !== "api-key" && status.runtime.auth !== "oauth") return status.runtime.auth;
1008
1060
  const auth = providers.auth.statusForTarget(status.target, status.runtime);
1009
1061
  if (!auth.available) return "disconnected";
@@ -0,0 +1,93 @@
1
+ import { normalizeIntentExpectedOutputs, normalizeIntentVerification } from "../domains/dispatch/intent.js";
2
+ import type { UserTaskAcceptance } from "../domains/user-tasks/acceptance.js";
3
+ import { formatUserTaskHandoff } from "../domains/user-tasks/handoff.js";
4
+ import { createUserTasksStore } from "../domains/user-tasks/store.js";
5
+ import { packageDeclaredCheck } from "../tools/verify/catalog.js";
6
+ import { discoverDeclaredChecksAtRoot, discoverDeclaredProjectEntriesAtRoot } from "../tools/verify/scripts.js";
7
+ import { printError } from "./argv.js";
8
+
9
+ /** Operator flags use the same bounds and normalization as dispatch intent. */
10
+ export function acceptanceFromTaskFlags(
11
+ cwd: string,
12
+ expectedOutputs: string[],
13
+ verify: string[],
14
+ ): UserTaskAcceptance | undefined {
15
+ if (expectedOutputs.length === 0 && verify.length === 0) return undefined;
16
+ const discovery = discoverDeclaredChecksAtRoot(cwd, undefined);
17
+ if (!discovery.ok) throw new Error(discovery.reason);
18
+ const checks = new Map(
19
+ discovery.sources.flatMap((source) => source.checks.map((check) => [check.id, check] as const)),
20
+ );
21
+ for (const entry of discoverDeclaredProjectEntriesAtRoot(cwd)) {
22
+ if (entry.kind === "package-script" && !checks.has(entry.id))
23
+ checks.set(entry.id, packageDeclaredCheck(entry.id, entry.path, ".", []));
24
+ }
25
+ const verification = verify.map((value) => {
26
+ const suffix = checks.has(value) ? null : /^(.*):([0-9]+)$/.exec(value);
27
+ const check = suffix?.[1] ?? value;
28
+ if (!checks.has(check))
29
+ throw new Error(
30
+ `Unknown verification check '${check}'. Known ids: ${[...checks.keys()].sort().join(", ") || "(none)"}`,
31
+ );
32
+ return { check, ...(suffix ? { timeout_ms: Number(suffix[2]) } : {}) };
33
+ });
34
+ const outputs = normalizeIntentExpectedOutputs(expectedOutputs);
35
+ if (!Array.isArray(outputs)) throw new Error(outputs.ok ? "invalid expected outputs" : outputs.message);
36
+ const normalized = normalizeIntentVerification(verification, checks);
37
+ if (!Array.isArray(normalized)) throw new Error(normalized.ok ? "invalid verification" : normalized.message);
38
+ return { expectedOutputs: outputs, verification: normalized };
39
+ }
40
+
41
+ const HELP = `Usage:
42
+ clio-coder tasks [list]
43
+ clio-coder tasks add [--expect <path>] [--verify <checkId>[:timeoutMs]] <text>
44
+ clio-coder tasks hand|done|drop <uN>
45
+
46
+ --expect and --verify are repeatable. Check ids must be declared in package.json or .clio-coder/verifiers.yaml.`;
47
+
48
+ export function runTasksCommand(args: string[]): number {
49
+ try {
50
+ if (args.includes("--help") || args.includes("-h")) {
51
+ console.log(HELP);
52
+ return 0;
53
+ }
54
+ const store = createUserTasksStore({ cwd: process.cwd() });
55
+ const [action = "list", ...rest] = args;
56
+ if (action === "add") {
57
+ const expected: string[] = [],
58
+ verify: string[] = [],
59
+ title: string[] = [];
60
+ for (let index = 0; index < rest.length; index++) {
61
+ const token = rest[index] ?? "";
62
+ if (token === "--") {
63
+ title.push(...rest.slice(index + 1));
64
+ break;
65
+ }
66
+ if (token === "--expect" || token === "--verify") {
67
+ const value = rest[++index];
68
+ if (!value || value.startsWith("--")) throw new Error(`${token} requires a value`);
69
+ (token === "--expect" ? expected : verify).push(value);
70
+ } else if (token.startsWith("--")) throw new Error(`Unknown flag ${token}`);
71
+ else title.push(token);
72
+ }
73
+ const task = store.add(title.join(" "), undefined, acceptanceFromTaskFlags(process.cwd(), expected, verify));
74
+ console.log(`logged operator task ${task.id}: ${task.title}`);
75
+ } else if (action === "list" && rest.length === 0) {
76
+ console.log(JSON.stringify(store.snapshot(), null, 2));
77
+ } else if ((action === "hand" || action === "done" || action === "drop") && rest.length === 1) {
78
+ const task = store[action](rest[0] ?? "");
79
+ console.log(JSON.stringify(task, null, 2));
80
+ if (action === "hand") {
81
+ console.error(
82
+ "CLI hand records the inbox state only; it does not start a session or submit the interactive /tasks hand turn. " +
83
+ "Pass this pickup prompt to clio-coder run in the same project:\n" +
84
+ formatUserTaskHandoff(task),
85
+ );
86
+ }
87
+ } else throw new Error(HELP);
88
+ return 0;
89
+ } catch (error) {
90
+ printError(error instanceof Error ? error.message : String(error));
91
+ return 1;
92
+ }
93
+ }
@@ -21,11 +21,12 @@ Flags:
21
21
  --dry-run print planned actions without changing anything
22
22
  --channel=<chan> npm dist-tag to install (latest|beta|dev). npm installs only.
23
23
  --skip-migrations skip migrations after the install step
24
+ --post-install apply local checks after a package-manager update; skip reinstall
24
25
  --json emit machine-readable JSON output
25
26
  --help, -h show this message
26
27
  `;
27
28
 
28
- const SOURCE_UPGRADE_STEPS = ["git pull", "npm run install:local", "hash -r"] as const;
29
+ const SOURCE_UPGRADE_STEPS = ["git pull", "pnpm run install:local", "hash -r"] as const;
29
30
  /** One wording for the source-update advice. Three paths print it; they used to disagree. */
30
31
  const SOURCE_UPGRADE_LEAD = "To update the checkout itself, run:";
31
32
 
@@ -85,15 +86,20 @@ function parseUpgradeArgs(argv: ReadonlyArray<string>): UpgradeOptions {
85
86
  * the installed version is the newest one.
86
87
  */
87
88
  type RegistryLookup =
88
- | { asked: false; reason: "source checkout" | "network checks are disabled" }
89
+ | { asked: false; reason: "source checkout" | "network checks are disabled" | "post-install checks" }
89
90
  | { asked: true; version: string | null };
90
91
 
92
+ function testSeam(name: string): string | undefined {
93
+ if (process.env.NODE_ENV !== "test") return undefined;
94
+ return process.env[name];
95
+ }
96
+
91
97
  async function lookUpAvailableVersion(
92
98
  channel: Channel,
93
99
  method: "source" | "npm",
94
100
  noNetwork: boolean,
95
101
  ): Promise<RegistryLookup> {
96
- const seam = process.env.CLIO_CODER_TEST_UPGRADE_AVAILABLE;
102
+ const seam = testSeam("CLIO_CODER_TEST_UPGRADE_AVAILABLE");
97
103
  // `unreachable` stands in for a registry that answered nothing, which is the
98
104
  // only way to reach that branch without a network in the test.
99
105
  if (seam) return { asked: true, version: seam === "unreachable" ? null : seam };
@@ -143,14 +149,14 @@ async function runChild(command: string, args: ReadonlyArray<string>, label: str
143
149
  }
144
150
 
145
151
  async function runNpmInstall(channel: Channel): Promise<void> {
146
- if (process.env.CLIO_CODER_TEST_UPGRADE_FAIL === "npm") {
152
+ if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "npm") {
147
153
  throw new Error("npm ERR! 404 Not Found (mock failure)");
148
154
  }
149
155
  await runChild("npm", ["install", "-g", `@iowarp/clio-coder@${channel}`], "npm install");
150
156
  }
151
157
 
152
158
  async function runDoctorFixAfterInstall(): Promise<void> {
153
- if (process.env.CLIO_CODER_TEST_UPGRADE_FAIL === "doctor") {
159
+ if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "doctor") {
154
160
  throw new Error("mock doctor fix failure");
155
161
  }
156
162
  await runChild("clio-coder", ["doctor", "--fix"], "clio-coder doctor --fix");
@@ -181,11 +187,13 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
181
187
  const before = getVersionInfo().clio;
182
188
  const stateDir = clioStateDir();
183
189
  const method = detectInstallMethod();
184
- const methodLabel = method === "source" ? "source checkout" : "npm global";
190
+ const methodLabel = method === "source" ? "source checkout" : opts.postInstall ? "package install" : "npm global";
185
191
  presenter.setMethod(methodLabel);
186
192
 
187
- const noNetwork = Boolean(process.env.CLIO_CODER_TEST_UPGRADE_NO_NETWORK);
188
- const lookup = await lookUpAvailableVersion(opts.channel, method, noNetwork);
193
+ const noNetwork = Boolean(testSeam("CLIO_CODER_TEST_UPGRADE_NO_NETWORK"));
194
+ const lookup: RegistryLookup = opts.postInstall
195
+ ? { asked: false, reason: "post-install checks" }
196
+ : await lookUpAvailableVersion(opts.channel, method, noNetwork);
189
197
  const availableVersion = lookup.asked ? lookup.version : null;
190
198
 
191
199
  presenter.step(`Installation method: ${methodLabel}`);
@@ -196,7 +204,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
196
204
  if (availableVersion !== null) presenter.step(`Available version: ${availableVersion}`);
197
205
  else if (!lookup.asked) presenter.step(`Available version: not checked (${lookup.reason})`);
198
206
  else presenter.step("Available version: unknown (the registry could not be reached)");
199
- if (method === "npm") presenter.step(`Channel: ${opts.channel}`);
207
+ if (method === "npm" && !opts.postInstall) presenter.step(`Channel: ${opts.channel}`);
200
208
  presenter.step(`State dir: ${shortenPath(stateDir)}`);
201
209
 
202
210
  const migrations = listMigrations();
@@ -231,7 +239,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
231
239
 
232
240
  if (opts.dryRun) {
233
241
  if (method === "source") presenter.commandAdvice(SOURCE_UPGRADE_LEAD, SOURCE_UPGRADE_STEPS.join("\n"));
234
- else presenter.note(`Would run: npm install -g @iowarp/clio-coder@${opts.channel}`);
242
+ else if (!opts.postInstall) presenter.note(`Would run: npm install -g @iowarp/clio-coder@${opts.channel}`);
235
243
  if (opts.skipMigrations) presenter.note("Would skip migrations (--skip-migrations).");
236
244
  else if (pendingMigrationIds.length === 0) presenter.note("No pending migrations.");
237
245
  else {
@@ -285,7 +293,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
285
293
  } else {
286
294
  let result: Awaited<ReturnType<typeof runPending>>;
287
295
  try {
288
- if (process.env.CLIO_CODER_TEST_UPGRADE_FAIL === "migration") {
296
+ if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "migration") {
289
297
  throw new Error("mock migration failure in 2026-09-01-settings-v2");
290
298
  }
291
299
  result = await runPending(stateDir);
package/src/cli/usage.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  } from "../core/response-model-id.js";
9
9
  import { clioDataDir, clioStateDir } from "../core/xdg.js";
10
10
  import { loadMemoryRecordsSync, type MemoryRecord } from "../domains/memory/index.js";
11
+ import { summarizeEvidenceIndex } from "../domains/observability/accountability.js";
11
12
  import { summarizeFailedCompactionUsage } from "../domains/observability/compaction-usage.js";
12
13
  import { readEvidenceIndex } from "../domains/observability/evidence-index.js";
13
14
  import { type OutOfTurnUsageRow, readOutOfTurnUsageRows } from "../domains/observability/out-of-turn-usage.js";
@@ -353,11 +354,15 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
353
354
  diagnostics.malformedAuditRows = auditRows.errors.length;
354
355
  const auditInWindow = auditRows.rows.filter((row) => row.ts !== null && inWindow(row.ts, windowStart, now));
355
356
  const auditToolCalls = auditInWindow.filter((row) => row.auditKind === "tool_call");
357
+ const permissions = summarizePermissionDecisions(
358
+ auditInWindow.filter((row) => row.auditKind === "permission").map((row) => row.row),
359
+ );
356
360
  const auditBlocked = auditToolCalls.filter((row) => {
357
361
  const decision = typeof row.row.decision === "string" ? row.row.decision : "";
358
362
  return decision === "blocked" || decision === "denied";
359
363
  });
360
364
  const evidenceRows = readEvidenceIndex(stateDir).filter((row) => inWindow(row.generatedAt, windowStart, now));
365
+ const accountability = summarizeEvidenceIndex(evidenceRows);
361
366
  let memoryRecords: MemoryRecord[] = [];
362
367
  try {
363
368
  memoryRecords = loadMemoryRecordsSync(clioDataDir());
@@ -559,7 +564,10 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
559
564
  else emit({ kind: "fact", fact: "session-store-missing", path: presence.sessionsPath });
560
565
  if (presence.receiptsPresent) emit({ kind: "fact", fact: "dispatch-runs", value: receipts.length });
561
566
  else emit({ kind: "fact", fact: "receipt-store-missing", path: presence.receiptsPath });
567
+ emit({ kind: "fact", fact: "unverified-successes", value: accountability.unverifiedSuccesses });
568
+ emit({ kind: "fact", fact: "ungrounded-claims", value: accountability.ungroundedClaims });
562
569
  emit({ kind: "fact", fact: "audit-tool-calls", value: auditToolCalls.length, blocked: auditBlocked.length });
570
+ emit({ kind: "fact", fact: "permission-approval", ...permissions });
563
571
  if (usageMeasurable) {
564
572
  // The origin split is emitted only when something out of turn was
565
573
  // recorded, so a report over an archive with no `/btw`, `/handoff`, or
@@ -652,6 +660,9 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
652
660
  } else {
653
661
  out(` receipt store missing at ${presence.receiptsPath}`);
654
662
  }
663
+ out(
664
+ ` permission decisions: ${permissions.requested} requested, ${permissions.granted} granted, ${permissions.denied} denied, ${permissions.expired} expired; approval rate ${permissions.approvalRate === null ? "n/a" : `${(permissions.approvalRate * 100).toFixed(1)}%`}`,
665
+ );
655
666
  out(` audited tool calls in window: ${auditToolCalls.length} (${auditBlocked.length} blocked/denied)`);
656
667
  if (usageMeasurable) {
657
668
  out(
@@ -806,6 +817,8 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
806
817
  ),
807
818
  );
808
819
  }
820
+ out(` unverified successes: ${accountability.unverifiedSuccesses}`);
821
+ out(` ungrounded claims: ${accountability.ungroundedClaims}`);
809
822
  if (tagCounts.size > 0) {
810
823
  out("");
811
824
  out(" failure tags (from evidence index)");
@@ -1122,3 +1135,20 @@ function numberOr0(value: unknown): number {
1122
1135
  function isRecord(value: unknown): value is Record<string, unknown> {
1123
1136
  return typeof value === "object" && value !== null && !Array.isArray(value);
1124
1137
  }
1138
+
1139
+ /** Event-window approval rate. Resolutions can belong to requests outside the window. */
1140
+ export function summarizePermissionDecisions(rows: ReadonlyArray<Record<string, unknown>>): {
1141
+ requested: number;
1142
+ granted: number;
1143
+ denied: number;
1144
+ expired: number;
1145
+ approvalRate: number | null;
1146
+ } {
1147
+ const counts = { requested: 0, granted: 0, denied: 0, expired: 0 };
1148
+ for (const row of rows) {
1149
+ const status = row.status;
1150
+ if (status === "requested" || status === "granted" || status === "denied" || status === "expired")
1151
+ counts[status] += 1;
1152
+ }
1153
+ return { ...counts, approvalRate: counts.requested === 0 ? null : counts.granted / counts.requested };
1154
+ }
@@ -6,8 +6,15 @@ import {
6
6
  runVerifierAuthoringWorkflow,
7
7
  type VerifierRevision,
8
8
  } from "../tools/verify/authoring.js";
9
- import { loadProjectVerifierCatalog, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH } from "../tools/verify/catalog.js";
9
+ import {
10
+ DECLARED_CHECK_KINDS,
11
+ type DeclaredCheckKind,
12
+ loadProjectVerifierCatalog,
13
+ PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
14
+ } from "../tools/verify/catalog.js";
10
15
  import { verifyTool } from "../tools/verify/index.js";
16
+ import { normalizeNumericTolerance } from "../tools/verify/numeric.js";
17
+ import { recordPerfBaseline } from "../tools/verify/scripts.js";
11
18
  import { printError, printOk } from "./argv.js";
12
19
  import { runVerifiersInspect } from "./verifiers-inspect.js";
13
20
 
@@ -23,11 +30,22 @@ Usage:
23
30
  clio-coder verifiers edit <id> [--description <text>] [--command <json-argv>] [fields] [--yes]
24
31
  clio-coder verifiers rename <old> <new> [--yes]
25
32
  clio-coder verifiers remove <id> [--yes]
33
+ clio-coder verifiers baseline <id>
26
34
 
27
35
  Fields:
28
36
  --cwd <path> repository-relative working directory (default .)
29
37
  --timeout-ms <number> bounded timeout in milliseconds (default 120000)
30
38
  --tags <a,b> comma-separated catalog tags
39
+ --kind <kind> command (default), numeric-compare, or perf-budget
40
+ --reference <path> numeric-compare: repository-relative reference JSON of string -> number | number[]
41
+ --tolerance <json> numeric-compare: {"relative"?,"absolute"?,"ulp"?}, at least one;
42
+ perf-budget with --baseline: {"relative"} headroom over the baseline
43
+ --budget-ms <number> perf-budget: wall-time bound in milliseconds
44
+ --budget-relative <r> perf-budget with --budget-ms: fractional headroom over the bound
45
+ --baseline <path> perf-budget: repository-relative baseline JSON written by 'verifiers baseline <id>'
46
+
47
+ baseline runs a perf-budget check once and records its wall time at the check's
48
+ baseline path; a failing or timed-out command records nothing.
31
49
 
32
50
  Discovery and every preview are read-only. Mutating commands write only with
33
51
  --yes after printing the exact argv, cwd, timeout, tags, source provenance, and
@@ -48,6 +66,12 @@ const VALUE_OPTIONS = new Set([
48
66
  "--exclude",
49
67
  "--rename",
50
68
  "--dry-run",
69
+ "--kind",
70
+ "--reference",
71
+ "--tolerance",
72
+ "--budget-ms",
73
+ "--budget-relative",
74
+ "--baseline",
51
75
  ]);
52
76
 
53
77
  interface ParsedAuthoringArgs {
@@ -124,6 +148,93 @@ function tags(value: string | undefined): string[] {
124
148
  .filter((tag) => tag.length > 0);
125
149
  }
126
150
 
151
+ type KindFields = Pick<Extract<VerifierRevision, { kind: "add" }>["check"], "kind" | "numeric" | "perf">;
152
+
153
+ function parseJsonObject(value: string, option: string): Record<string, unknown> | Error {
154
+ try {
155
+ const parsed = JSON.parse(value) as unknown;
156
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
157
+ return new Error(`${option} must be a JSON object`);
158
+ }
159
+ return parsed as Record<string, unknown>;
160
+ } catch (error) {
161
+ return new Error(`${option} must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);
162
+ }
163
+ }
164
+
165
+ /**
166
+ * The kind and its parameters from the option set. Returns `{}` when no kind
167
+ * option was given so a plain command check keeps the version-1 shape, and an
168
+ * Error when the options disagree with the kind the way the catalog parser
169
+ * would refuse them, so the operator reads one message here instead of a
170
+ * rejected preview.
171
+ */
172
+ function kindFieldsFromArgs(parsed: ParsedAuthoringArgs): KindFields | Error {
173
+ const kindValue = oneValue(parsed, "--kind") ?? "command";
174
+ if (!(DECLARED_CHECK_KINDS as ReadonlyArray<string>).includes(kindValue)) {
175
+ return new Error(`--kind must be one of ${DECLARED_CHECK_KINDS.join(", ")}`);
176
+ }
177
+ const kind = kindValue as DeclaredCheckKind;
178
+ const reference = oneValue(parsed, "--reference");
179
+ const toleranceValue = oneValue(parsed, "--tolerance");
180
+ const budgetMs = oneValue(parsed, "--budget-ms");
181
+ const budgetRelative = oneValue(parsed, "--budget-relative");
182
+ const baseline = oneValue(parsed, "--baseline");
183
+ if (kind === "command") {
184
+ const stray = [
185
+ ["--reference", reference],
186
+ ["--tolerance", toleranceValue],
187
+ ["--budget-ms", budgetMs],
188
+ ["--budget-relative", budgetRelative],
189
+ ["--baseline", baseline],
190
+ ].filter(([, value]) => value !== undefined);
191
+ if (stray.length > 0)
192
+ return new Error(`${stray.map(([name]) => name).join(", ")} require --kind numeric-compare or perf-budget`);
193
+ return {};
194
+ }
195
+ if (kind === "numeric-compare") {
196
+ if (budgetMs !== undefined || budgetRelative !== undefined || baseline !== undefined) {
197
+ return new Error("--budget-ms, --budget-relative, and --baseline belong to --kind perf-budget");
198
+ }
199
+ if (reference === undefined) return new Error("--reference is required for --kind numeric-compare");
200
+ if (toleranceValue === undefined) return new Error("--tolerance is required for --kind numeric-compare");
201
+ const toleranceJson = parseJsonObject(toleranceValue, "--tolerance");
202
+ if (toleranceJson instanceof Error) return toleranceJson;
203
+ const tolerance = normalizeNumericTolerance(toleranceJson);
204
+ if (tolerance instanceof Error) return new Error(`--tolerance ${tolerance.message}`);
205
+ return { kind, numeric: { reference, tolerance } };
206
+ }
207
+ if (reference !== undefined) return new Error("--reference belongs to --kind numeric-compare");
208
+ if ((budgetMs === undefined) === (baseline === undefined)) {
209
+ return new Error("--kind perf-budget requires exactly one of --budget-ms or --baseline");
210
+ }
211
+ if (budgetMs !== undefined) {
212
+ if (toleranceValue !== undefined) return new Error("use --budget-relative for headroom over --budget-ms");
213
+ const wallTimeMs = Number(budgetMs);
214
+ if (!Number.isFinite(wallTimeMs) || wallTimeMs <= 0) return new Error("--budget-ms must be a positive number");
215
+ const budget: NonNullable<KindFields["perf"]>["budget"] = { wallTimeMs };
216
+ if (budgetRelative !== undefined) {
217
+ const relative = Number(budgetRelative);
218
+ if (!Number.isFinite(relative) || relative < 0) return new Error("--budget-relative must be a non-negative number");
219
+ budget.tolerance = { relative };
220
+ }
221
+ return { kind, perf: { budget } };
222
+ }
223
+ if (budgetRelative !== undefined)
224
+ return new Error("--budget-relative belongs with --budget-ms; use --tolerance with --baseline");
225
+ const perf: NonNullable<KindFields["perf"]> = { baseline: baseline as string };
226
+ if (toleranceValue !== undefined) {
227
+ const toleranceJson = parseJsonObject(toleranceValue, "--tolerance");
228
+ if (toleranceJson instanceof Error) return toleranceJson;
229
+ const relative = toleranceJson.relative;
230
+ if (typeof relative !== "number" || !Number.isFinite(relative) || relative < 0) {
231
+ return new Error('--tolerance for a baseline must be {"relative": <non-negative number>}');
232
+ }
233
+ perf.tolerance = { relative };
234
+ }
235
+ return { kind, perf };
236
+ }
237
+
127
238
  function requiredValue(parsed: ParsedAuthoringArgs, option: string): string | Error {
128
239
  const value = oneValue(parsed, option);
129
240
  return value === undefined || value.length === 0 ? new Error(`${option} is required`) : value;
@@ -151,6 +262,8 @@ function addRevision(parsed: ParsedAuthoringArgs): VerifierRevision | Error {
151
262
  if (command instanceof Error) return command;
152
263
  const timeoutMs = parseTimeout(oneValue(parsed, "--timeout-ms"));
153
264
  if (timeoutMs instanceof Error) return timeoutMs;
265
+ const kindFields = kindFieldsFromArgs(parsed);
266
+ if (kindFields instanceof Error) return kindFields;
154
267
  return {
155
268
  kind: "add",
156
269
  check: {
@@ -160,6 +273,7 @@ function addRevision(parsed: ParsedAuthoringArgs): VerifierRevision | Error {
160
273
  cwd: oneValue(parsed, "--cwd") ?? ".",
161
274
  timeoutMs,
162
275
  tags: tags(oneValue(parsed, "--tags")),
276
+ ...kindFields,
163
277
  },
164
278
  };
165
279
  }
@@ -186,6 +300,13 @@ function editRevision(parsed: ParsedAuthoringArgs): VerifierRevision | Error {
186
300
  }
187
301
  const tagValue = oneValue(parsed, "--tags");
188
302
  if (tagValue !== undefined) changes.tags = tags(tagValue);
303
+ if (oneValue(parsed, "--kind") !== undefined) {
304
+ const kindFields = kindFieldsFromArgs(parsed);
305
+ if (kindFields instanceof Error) return kindFields;
306
+ changes.kind = kindFields.kind ?? "command";
307
+ if (kindFields.numeric !== undefined) changes.numeric = kindFields.numeric;
308
+ if (kindFields.perf !== undefined) changes.perf = kindFields.perf;
309
+ }
189
310
  if (Object.keys(changes).length === 0) return new Error("edit requires at least one changed field");
190
311
  return { kind: "edit", id, changes };
191
312
  }
@@ -260,6 +381,30 @@ async function executeWorkflow(
260
381
  return code;
261
382
  }
262
383
 
384
+ async function baselineCommand(id: string | undefined): Promise<number> {
385
+ if (id === undefined) {
386
+ printError("baseline requires a check ID");
387
+ return 2;
388
+ }
389
+ const loaded = loadProjectVerifierCatalog(process.cwd());
390
+ if (!loaded.ok) {
391
+ printError(`production catalog parser rejected ${loaded.reason}`);
392
+ return 1;
393
+ }
394
+ const check = loaded.source?.checks.find((candidate) => candidate.id === id);
395
+ if (check === undefined) {
396
+ printError(`no catalog check '${id}' in ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}`);
397
+ return 1;
398
+ }
399
+ const recorded = await recordPerfBaseline(check);
400
+ if (!recorded.ok) {
401
+ printError(`baseline '${id}' not recorded: ${recorded.message}`);
402
+ return 1;
403
+ }
404
+ printOk(`recorded baseline for '${id}': ${Math.round(recorded.wallTimeMs)}ms at ${recorded.path}`);
405
+ return 0;
406
+ }
407
+
263
408
  async function discoverCommand(): Promise<number> {
264
409
  const discovery = discoverVerifierAuthoring();
265
410
  if (!discovery.ok) {
@@ -304,6 +449,7 @@ export async function runVerifiersCommand(argv: string[]): Promise<number> {
304
449
  const command = parsed.positional[0];
305
450
  if (command === "discover") return discoverCommand();
306
451
  if (command === "validate") return validateCommand();
452
+ if (command === "baseline") return baselineCommand(parsed.positional[1]);
307
453
  if (command === "dry-run") {
308
454
  const id = parsed.positional[1];
309
455
  if (id === undefined) {