@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
@@ -2,6 +2,7 @@ import { readdir, readFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { assertSafeId } from "../../core/safe-id.js";
4
4
  import { type GateDecisionArtifact, verifyGateDecisionArtifact } from "../dispatch/index.js";
5
+ import { isDecisionRecord } from "../session/entries.js";
5
6
  import { compareCodepoints as compareStrings } from "./ordering.js";
6
7
  import { hasRunProvenance, type RunProvenanceView, runProvenanceFromUnknown } from "./provenance.js";
7
8
  import { normalizeTrustStatus } from "./trust-status.js";
@@ -230,6 +231,7 @@ function parseOverview(value: unknown, source: string): EvidenceOverview {
230
231
  tags,
231
232
  files,
232
233
  ...(redactionCount === undefined ? {} : { redactionCount }),
234
+ ...(value.decisions === undefined ? {} : { decisions: readDecisions(value.decisions, `${source}.decisions`) }),
233
235
  };
234
236
  }
235
237
 
@@ -335,3 +337,17 @@ function isRecord(value: unknown): value is Record<string, unknown> {
335
337
  export function findingsFile(evidenceId: string, findings: EvidenceFinding[]): EvidenceFindingsFile {
336
338
  return { version: 1, evidenceId, findings };
337
339
  }
340
+
341
+ function readDecisions(value: unknown, source: string): NonNullable<EvidenceOverview["decisions"]> {
342
+ if (!Array.isArray(value)) throw new Error(`${source}: expected array`);
343
+ return value.map((entry: unknown, index) => {
344
+ const path = `${source}[${index}]`;
345
+ if (!isRecord(entry) || !isDecisionRecord(entry.record)) throw new Error(`${path}: expected recorded decision`);
346
+ return {
347
+ runId: readString(entry, path, "runId"),
348
+ sessionId: readString(entry, path, "sessionId"),
349
+ ref: readString(entry, path, "ref"),
350
+ record: entry.record,
351
+ };
352
+ });
353
+ }
@@ -2,6 +2,7 @@ import type { GateDecisionArtifact, RunEnvelope, RunReceipt, ToolCallStat } from
2
2
  import type { RunPersonaOverride, RunPipelineProvenance, RunReceiptAutonomyEnforcement } from "../dispatch/types.js";
3
3
  import type { EvalCommandPhase, EvalFailureClass, EvalRunRecord } from "../eval/index.js";
4
4
  import type { ProtectedArtifact } from "../safety/protected-artifacts.js";
5
+ import type { DecisionRecord } from "../session/entries.js";
5
6
  import type { RunEscalationCounts } from "./provenance.js";
6
7
  import type { CanonicalTrustStatus } from "./trust-status.js";
7
8
 
@@ -81,7 +82,16 @@ export interface EvidenceTotals {
81
82
  wallTimeMs: number;
82
83
  }
83
84
 
85
+ export interface EvidenceDecision {
86
+ runId: string;
87
+ sessionId: string;
88
+ ref: string;
89
+ record: DecisionRecord;
90
+ }
91
+
84
92
  export interface EvidenceOverview {
93
+ /** Recorded arguments resolved from authenticated receipts on the linked active session path. */
94
+ decisions?: EvidenceDecision[];
85
95
  version: 1;
86
96
  evidenceId: string;
87
97
  source: EvidenceSource;
@@ -137,6 +147,8 @@ export interface EvidenceBuildResult {
137
147
  overview: EvidenceOverview;
138
148
  findings: EvidenceFinding[];
139
149
  trustStatus: EvidenceTrustStatusFile;
150
+ /** Total claims without matching commands, from integrity-verified receipts only. */
151
+ ungroundedClaims: number;
140
152
  }
141
153
 
142
154
  export interface EvidenceInspectable {
@@ -22,6 +22,13 @@ export function extensionSnapshotFor(cwd = process.cwd()): ExtensionSnapshot {
22
22
  return buildExtensionSnapshot({ cwd, generation: 0 });
23
23
  }
24
24
 
25
+ /**
26
+ * The canonical accessor for the enabled roots of one extension resource
27
+ * kind. The agent registry, fleet contract, skill and common resource
28
+ * loaders, and the extensions contract all read through it, so each of them
29
+ * sees the committed snapshot for the booted cwd or the ephemeral
30
+ * generation-0 build otherwise. Returns a fresh array the caller may mutate.
31
+ */
25
32
  export function enabledExtensionResourceRoots(
26
33
  kind: ExtensionResourceKind,
27
34
  cwd = process.cwd(),
@@ -19,7 +19,7 @@ export const INTEROP_AGENT_KINDS: ReadonlyArray<InteropAgentKind> = [
19
19
  instructionFiles: ["CLAUDE.md", ".claude/CLAUDE.md"],
20
20
  acp: {
21
21
  command: "npx",
22
- args: ["-y", "@zed-industries/claude-code-acp"],
22
+ args: ["-y", "@zed-industries/claude-code-acp@0.16.2"],
23
23
  npmPackage: "@zed-industries/claude-code-acp",
24
24
  npmPackageBin: "claude-code-acp",
25
25
  },
@@ -39,7 +39,7 @@ export const INTEROP_AGENT_KINDS: ReadonlyArray<InteropAgentKind> = [
39
39
  instructionFiles: ["AGENTS.md", "CODEX.md", ".codex/AGENTS.md"],
40
40
  acp: {
41
41
  command: "npx",
42
- args: ["-y", "@agentclientprotocol/codex-acp"],
42
+ args: ["-y", "@agentclientprotocol/codex-acp@1.10.0"],
43
43
  npmPackage: "@agentclientprotocol/codex-acp",
44
44
  npmPackageBin: "codex-acp",
45
45
  },
@@ -19,13 +19,18 @@
19
19
  */
20
20
 
21
21
  import { spawnSync } from "node:child_process";
22
- import { readFileSync } from "node:fs";
23
- import { join } from "node:path";
24
22
  import { parse as parseYaml } from "yaml";
25
23
  import {
24
+ gitCommitAttributionEnabled,
26
25
  reportCommitAttributionDiagnostic,
27
26
  withManagedGitCommitAttributionEnvironment,
28
27
  } from "../../core/git-commit-attribution.js";
28
+ import { buildSafeToolEnv } from "../../core/safe-exec.js";
29
+ import {
30
+ captureProjectSurface,
31
+ type ProjectSurfaceSnapshot,
32
+ projectSurfaceTrustNotice,
33
+ } from "../../core/workspace-trust.js";
29
34
  import {
30
35
  type HookReceiptSink,
31
36
  loadUserHooks,
@@ -49,6 +54,7 @@ export interface HookFileIssue {
49
54
  export interface ReadHookSourcesResult {
50
55
  batches: UserHookDeclarationBatch[];
51
56
  fileIssues: HookFileIssue[];
57
+ projectSurface: ProjectSurfaceSnapshot;
52
58
  }
53
59
 
54
60
  /** One package's hook declarations, captured by the supplier from verified bytes. */
@@ -77,15 +83,9 @@ export interface ReadHookSourcesOptions {
77
83
  function readBatch(
78
84
  source: UserHookSource,
79
85
  filePath: string,
86
+ text: string,
80
87
  fileIssues: HookFileIssue[],
81
88
  ): UserHookDeclarationBatch | null {
82
- let text: string;
83
- try {
84
- text = readFileSync(filePath, "utf8");
85
- } catch {
86
- // Missing file: not an error, the source is simply absent.
87
- return null;
88
- }
89
89
  try {
90
90
  const parsed = parseYaml(text) as unknown;
91
91
  return { source, declarations: parsed ?? [] };
@@ -125,21 +125,22 @@ export function readHookSources(options: ReadHookSourcesOptions): ReadHookSource
125
125
  batches.push({ source, declarations: entry.declarations });
126
126
  }
127
127
 
128
- const projectBatch = readBatch(
129
- { origin: "project", sourcePath: ".clio-coder/hooks.yaml" },
130
- join(options.cwd, ".clio-coder", "hooks.yaml"),
131
- fileIssues,
132
- );
133
- if (projectBatch) batches.push(projectBatch);
134
-
135
- const localBatch = readBatch(
136
- { origin: "project.local", sourcePath: ".clio-coder/hooks.local.yaml" },
137
- join(options.cwd, ".clio-coder", "hooks.local.yaml"),
138
- fileIssues,
139
- );
140
- if (localBatch) batches.push(localBatch);
141
-
142
- return { batches, fileIssues };
128
+ const projectSurface = captureProjectSurface(options.cwd, "hooks");
129
+ for (const [index, file] of projectSurface.files.entries()) {
130
+ const source: UserHookSource = {
131
+ origin: index === 0 ? "project" : "project.local",
132
+ sourcePath: index === 0 ? ".clio-coder/hooks.yaml" : ".clio-coder/hooks.local.yaml",
133
+ };
134
+ if (file.error !== undefined) fileIssues.push({ source, message: file.error });
135
+ if (file.text === null) continue;
136
+ if (projectSurface.verdict !== "trusted") {
137
+ fileIssues.push({ source, message: projectSurfaceTrustNotice(projectSurface, file.path) });
138
+ continue;
139
+ }
140
+ const batch = readBatch(source, file.path, file.text, fileIssues);
141
+ if (batch) batches.push(batch);
142
+ }
143
+ return { batches, fileIssues, projectSurface };
143
144
  }
144
145
 
145
146
  export interface BuildUserHookRegistrationsOptions {
@@ -151,6 +152,8 @@ export interface BuildUserHookRegistrationsOptions {
151
152
  /** Injected for tests; defaults to the spawnSync runner. */
152
153
  runCommand?: UserHookCommandRunner;
153
154
  now?: () => number;
155
+ /** Operator notice when an already published project's trust changes. */
156
+ report?: (line: string) => void;
154
157
  }
155
158
 
156
159
  export interface BuildUserHookRegistrationsResult extends UserHookLoadResult {
@@ -173,13 +176,28 @@ export function buildUserHookRegistrations(
173
176
  const workspaceRoot = options.workspaceRoot ?? options.cwd;
174
177
  const readOptions: ReadHookSourcesOptions = { cwd: options.cwd };
175
178
  if (options.capturedSources !== undefined) readOptions.capturedSources = options.capturedSources;
176
- const { batches, fileIssues } = readHookSources(readOptions);
179
+ const { batches, fileIssues, projectSurface } = readHookSources(readOptions);
177
180
  const loaded = loadUserHooks(batches, { workspaceRoot });
178
181
  const runCommand = options.runCommand ?? spawnSyncCommandRunner();
182
+ let reportedUntrusted = false;
183
+ const projectStillTrusted = (): boolean => {
184
+ const current = captureProjectSurface(options.cwd, "hooks");
185
+ if (current.verdict === "trusted" && current.contentHash === projectSurface.contentHash) return true;
186
+ if (!reportedUntrusted) {
187
+ reportedUntrusted = true;
188
+ options.report?.(
189
+ `[clio-coder:hooks] project hooks changed or trust was revoked; hooks skipped. Review with clio-coder config trust hooks, then reload extensions.`,
190
+ );
191
+ }
192
+ return false;
193
+ };
179
194
  const registrations = loaded.hooks.map((hook) =>
180
195
  userHookToRegistration(hook, {
181
196
  recordReceipt: options.recordReceipt,
182
197
  runCommand,
198
+ ...(hook.source.origin === "project" || hook.source.origin === "project.local"
199
+ ? { isTrusted: projectStillTrusted }
200
+ : {}),
183
201
  ...(options.now !== undefined ? { now: options.now } : {}),
184
202
  }),
185
203
  );
@@ -195,8 +213,9 @@ export function spawnSyncCommandRunner(): UserHookCommandRunner {
195
213
  const [command, ...args] = argv;
196
214
  // A user hook is operator automation, not Clio work: the environment is
197
215
  // normalized so a nested seam sees consistent state, but no role is claimed.
198
- const attribution = withManagedGitCommitAttributionEnvironment(process.env, {
216
+ const attribution = withManagedGitCommitAttributionEnvironment(buildSafeToolEnv(), {
199
217
  cwd: options.cwd ?? process.cwd(),
218
+ enabled: gitCommitAttributionEnabled(process.env),
200
219
  evidence: {},
201
220
  });
202
221
  reportCommitAttributionDiagnostic(attribution.diagnostic);
@@ -397,6 +397,8 @@ export interface UserHookRegistrationDeps {
397
397
  /** Synchronous command runner. Injected so tests need no real subprocess. */
398
398
  runCommand: UserHookCommandRunner;
399
399
  now?: () => number;
400
+ /** Published project hooks stop executing after their approved surface changes or is revoked. */
401
+ isTrusted?: () => boolean;
400
402
  }
401
403
 
402
404
  function reminderEffect(message: string, severity: MiddlewareReminderSeverity): MiddlewareEffect {
@@ -441,6 +443,10 @@ export function userHookToRegistration(
441
443
  evaluate: (input) => {
442
444
  if (!hook.enabled) return [];
443
445
  try {
446
+ if (deps.isTrusted?.() === false) {
447
+ deps.recordReceipt({ ...baseReceipt(input), outcome: "skipped" });
448
+ return [];
449
+ }
444
450
  return evaluateHook(hook, deps, baseReceipt(input));
445
451
  } catch {
446
452
  // A hook must never throw into a turn; report a skipped receipt.
@@ -0,0 +1,23 @@
1
+ import { INSTRUCTION_SHAPED_WARNING } from "../../core/untrusted-content.js";
2
+ import type { MiddlewareRuleDefinition } from "./runtime.js";
3
+
4
+ /** Raw-body marker detection is supplied by the registry before result shaping. */
5
+ export const INJECTION_SCREEN_RULE: MiddlewareRuleDefinition = {
6
+ rule: {
7
+ id: "safety.untrusted-instructions",
8
+ source: "builtin",
9
+ description: "Warn when external tool data contains instruction-shaped markers",
10
+ enabled: true,
11
+ hooks: ["after_tool"],
12
+ effectKinds: ["annotate_tool_result"],
13
+ },
14
+ toolNames: ["web_fetch", "read", "bash", "dispatch", "monitor"],
15
+ predicate: (input) => input.metadata?.untrustedInstructionMarkers === true,
16
+ effects: [
17
+ {
18
+ kind: "annotate_tool_result",
19
+ severity: "warn",
20
+ message: INSTRUCTION_SHAPED_WARNING,
21
+ },
22
+ ],
23
+ };
@@ -53,6 +53,8 @@ export interface MarketplaceOfferInstallResult {
53
53
  }
54
54
 
55
55
  export interface MarketplaceOfferDeps {
56
+ /** Whether the session can render ask_user. Defaults to interactive offers. */
57
+ interactive?: boolean;
56
58
  /** Installed skill names the matcher must exclude. */
57
59
  listInstalledSkillNames(): ReadonlyArray<string>;
58
60
  /** The local marketplace lookup (catalog + index); already local-only. */
@@ -80,10 +82,18 @@ export function offerBindingTag(offerTag: string): string {
80
82
  return `[clio-install:${offerTag}]`;
81
83
  }
82
84
 
85
+ function boundedDescription(text: string): string {
86
+ return text
87
+ .replace(/\[[^[\]]*\]/gu, " ")
88
+ .replace(/\s+/gu, " ")
89
+ .trim()
90
+ .slice(0, 200);
91
+ }
92
+
83
93
  export function marketplaceOfferReminder(entry: MarketplaceSkill, offerTag: string): string {
84
94
  return (
85
95
  `[Marketplace] This request may need expertise no installed skill covers. The local marketplace has ` +
86
- `"${entry.name}" (not installed): ${entry.description} ` +
96
+ `"${entry.name}" (not installed): ${boundedDescription(entry.description)} ` +
87
97
  `First check the installed side with context(scope="skills"); if ${entry.name} is genuinely the right fit ` +
88
98
  `and nothing installed serves, ask the operator with ask_user (mode=single_question, header "Install skill") ` +
89
99
  `whether to install ${entry.name}, offering exactly these options in this order: ` +
@@ -299,6 +309,15 @@ export function createMarketplaceOfferRegistration(deps: MarketplaceOfferDeps):
299
309
  const match = bestMatch(input.text ?? "");
300
310
  if (!match) return NO_EFFECTS;
301
311
  offeredNames.add(match.entry.name);
312
+ if (deps.interactive === false) {
313
+ return [
314
+ {
315
+ kind: "inject_reminder",
316
+ severity: "info",
317
+ message: `[Marketplace] Skill "${match.entry.name}" matches this request; install with clio-coder skills install ${match.entry.name}.`,
318
+ },
319
+ ];
320
+ }
302
321
  const tag = newOfferTag();
303
322
  pendingOffer = { entry: match.entry, tag };
304
323
  return [{ kind: "inject_reminder", severity: "info", message: marketplaceOfferReminder(match.entry, tag) }];
@@ -1,3 +1,4 @@
1
+ import { INJECTION_SCREEN_RULE } from "./injection-screen.js";
1
2
  import type { MiddlewareRuleDefinition } from "./runtime.js";
2
3
  import { STALLED_TURN_RULE_DEFINITION } from "./stalled-turn.js";
3
4
  import type { MiddlewareRule } from "./types.js";
@@ -8,7 +9,10 @@ import type { MiddlewareRule } from "./types.js";
8
9
  * channel delivers the declarative half to workers, which resolve payloads
9
10
  * from this table by rule id.
10
11
  */
11
- const BUILTIN_MIDDLEWARE_RULE_DEFINITIONS: ReadonlyArray<MiddlewareRuleDefinition> = [STALLED_TURN_RULE_DEFINITION];
12
+ const BUILTIN_MIDDLEWARE_RULE_DEFINITIONS: ReadonlyArray<MiddlewareRuleDefinition> = [
13
+ STALLED_TURN_RULE_DEFINITION,
14
+ INJECTION_SCREEN_RULE,
15
+ ];
12
16
 
13
17
  export const BUILTIN_MIDDLEWARE_RULE_IDS = BUILTIN_MIDDLEWARE_RULE_DEFINITIONS.map((definition) => definition.rule.id);
14
18
 
@@ -110,9 +110,13 @@ export type MiddlewareDiagnostic =
110
110
  export type MiddlewareDiagnosticSink = (diagnostic: MiddlewareDiagnostic) => void;
111
111
 
112
112
  /**
113
- * Default diagnostic sink. stderr-only for now; once the typed bus lands a
114
- * `middleware.hookFailed` channel, the composition root supplies a sink that
115
- * also emits there.
113
+ * Default diagnostic sink, and the one the domain loader constructs the
114
+ * bundle with. It writes to stderr only. The composition root
115
+ * (src/entry/orchestrator.ts) replaces it through setDiagnosticSink with a
116
+ * sink that publishes every diagnostic on the typed bus as
117
+ * `middleware.hookFailed`, which the interactive warn notice consumes, and
118
+ * that still calls this writer for non-interactive runs, which have no
119
+ * notice subscriber.
116
120
  */
117
121
  export function writeMiddlewareDiagnosticToStderr(diagnostic: MiddlewareDiagnostic): void {
118
122
  if (diagnostic.kind === "hook_failed") {
@@ -9,7 +9,7 @@ export const STALLED_TURN_REQUEST_CONTINUATION_MESSAGE =
9
9
  "You ended your turn after announcing an action without executing it: no tools were called. Continue now and perform the announced action, or state plainly that you are finished and waiting for the user.";
10
10
 
11
11
  export const SKILL_SUGGESTION_WAIT_CONTINUATION_MESSAGE =
12
- "You ended your turn on a skill suggestion without doing the task. The suggestion line has already made the offer and only the operator loads a skill, so nothing is needed from them before you proceed. Continue the task now without the skill.";
12
+ "You ended your turn on a skill suggestion without doing the task. The suggestion line has already made the offer and only the operator loads a skill, so the skill choice needs nothing from them before you proceed. Continue the already-authorized task now without the skill. This continuation is not an operator answer to any other question: if the remaining work is a proposal awaiting an explicit operator go-ahead, park it on the task board and say so instead of implementing.";
13
13
 
14
14
  const INTENT_PATTERN = /\b(let me|i['’]ll|i will|i am going to|i['’]m going to|now i|next i|let's|let us)\b/i;
15
15
 
@@ -110,12 +110,25 @@ const ACTION_OBJECT_CONNECTOR_PATTERN = /^(?:at|for|in|into|on|through|to)\s+/i;
110
110
  const ACTION_OBJECT_DETERMINER_PATTERN = /^(?:a|an|my|our|that|the|their|these|this|those|your)\s+/i;
111
111
  const ACTION_OBJECT_PATTERN = /^(?!(?:again|everyone|later|next|now|soon|then|you)\b)[`"'./~]*[\p{L}\p{N}_-]/iu;
112
112
  const CONDITIONAL_LEAD_IN_PATTERN = /\b(?:if|once|unless|until|when|whenever)\b/i;
113
- const CONDITIONAL_INVITATION_PATTERN = /\b(?:ask|give|point|say|send|share|tell)\b[\s\S]*\b(?:and|then)\s*$/i;
113
+ // "say go and", "confirm and", "reply yes and": the sentence hands the operator
114
+ // the decision and promises work only after it.
115
+ const CONDITIONAL_INVITATION_PATTERN =
116
+ /\b(?:answer|approve|ask|confirm|give|point|reply|respond|say|send|share|tell|type)\b[\s\S]*\b(?:and|then)\s*$/i;
114
117
  // "if needed", and any conditional whose condition is about the user: "if you
115
118
  // want", "if that is what you need". Conditions about the work ("if the config
116
119
  // is valid") stay announcements.
120
+ // Any condition that waits on the operator ("after you approve", "once you
121
+ // confirm", "until you say", "upon your go-ahead") is a proposal awaiting a
122
+ // decision, not an announcement: the operator's answer is the missing input,
123
+ // and an automatic continuation would stand in for it (issue #365).
117
124
  const CONDITIONAL_OFFER_SUFFIX_PATTERN =
118
- /\b(?:if\s+(?:needed|necessary|requested)\b|if\b[^.!?]*\byou\b|when(?:ever)?\s+you\b)/i;
125
+ /\b(?:if\s+(?:needed|necessary|requested|approved|confirmed)\b|(?:if|after|once|until|unless|when(?:ever)?|as\s+soon\s+as|provided|assuming)\b[^.!?]*\byou\b|(?:upon|on|after|with|pending|awaiting|following)\s+(?:your\s+|the\s+operator(?:'s)?\s+)?(?:approval|go-?ahead|confirmation|sign-?off|decision|word|green\s+light|okay|ok)\b)/i;
126
+ // A lead-in that is itself a wait ("Awaiting your go-ahead; I'll then write
127
+ // the test") defers whatever the intent clause goes on to name.
128
+ const OPERATOR_WAIT_LEAD_PATTERN = /\b(?:await(?:ing)?|pending|waiting\s+(?:for|on))\b/i;
129
+ // "I will not edit files" announces a refusal, and "next I would create
130
+ // clamp.py" describes a hypothetical; neither promises an action now.
131
+ const NEGATED_OR_HYPOTHETICAL_CLAUSE_PATTERN = /^\s*(?:not|never|would|could|might|may)\b/i;
119
132
  const LET_ME_KNOW_PATTERN = /\blet me know\b/i;
120
133
  // "I'll wait for your go-ahead before I touch src/cli/index.ts" names a path
121
134
  // and promises nothing now. A clause that opens by deferring is a wait
@@ -199,12 +212,14 @@ function announcesConcreteAction(sentence: string): boolean {
199
212
  if (
200
213
  CONDITIONAL_LEAD_IN_PATTERN.test(leadIn) ||
201
214
  CONDITIONAL_INVITATION_PATTERN.test(leadIn) ||
215
+ OPERATOR_WAIT_LEAD_PATTERN.test(leadIn) ||
202
216
  CONDITIONAL_OFFER_SUFFIX_PATTERN.test(sentence)
203
217
  ) {
204
218
  return false;
205
219
  }
206
220
  const clause = sentence.slice(intent.index + intent[0].length);
207
221
  if (DEFERRAL_LEAD_PATTERN.test(clause)) return false;
222
+ if (NEGATED_OR_HYPOTHETICAL_CLAUSE_PATTERN.test(clause)) return false;
208
223
  if (hasActionWithObject(clause)) return true;
209
224
  // A path or command is evidence of an immediate action only when the
210
225
  // announcement itself is unconditional; "once package.json is updated"
@@ -17,8 +17,10 @@ export const TASK_BOARD_REMINDER_REGISTRATION_ID = "observer.task-board-reminder
17
17
  export function taskBoardReminderMessage(steps: number): string {
18
18
  return (
19
19
  `[Tasks] This request enumerates ${steps} steps. Before the first edit, declare the task board: ` +
20
- 'tasks action="plan" with a title and one task per step, then work them one at a time ' +
21
- '("start", then "done" with an evidence note).'
20
+ 'tasks action="plan" with a title and one task per authorized step, then work them one at a time ' +
21
+ '("start", then "done" with an evidence note). A plan does not authorize implementation: ' +
22
+ 'for proposed work awaiting an operator go-ahead, use action="block" with a note naming the pending operator decision, ' +
23
+ 'or action="drop", and wait.'
22
24
  );
23
25
  }
24
26
 
@@ -36,7 +36,10 @@ export function buildOpenTasksMessage(board: TaskBoardSnapshot): string {
36
36
  return (
37
37
  `[Clio Coder] task board "${board.title}" still has ${open.length} of ${counts.total} task(s) open:\n` +
38
38
  `${rows.join("\n")}\n` +
39
- `Continue working them, or record the honest state on the board: ` +
39
+ `Continue only work already authorized by the operator. This reminder and a self-created plan are not authorization ` +
40
+ `to implement a proposal. If implementation awaits an operator decision, use tasks action="block" with a note ` +
41
+ `naming that pending operator decision, or action="drop"; then wait for an explicit operator go-ahead. ` +
42
+ `A skill-install choice does not authorize implementation. Otherwise record the honest state on the board: ` +
40
43
  `tasks action="done" with an evidence note, action="block" with a reason, or action="drop". ` +
41
44
  `Do not end the turn with a stale board.`
42
45
  );
@@ -61,7 +61,13 @@ const TOKEN_VALUE_MAX = 80;
61
61
  /** How long `available()` stays false after a transport failure before probing again. */
62
62
  const DEGRADE_COOLDOWN_MS = 5_000;
63
63
 
64
+ export type MuxPaneOpenFailure =
65
+ | { source: "mux"; kind: MuxError["kind"]; wireCode: string | null; method: string | null; message: string }
66
+ | { source: "local"; message: string };
67
+
64
68
  export interface MuxOpenUtilityPaneRequest {
69
+ /** Request-scoped diagnostics; the pane-or-null best-effort result is unchanged. */
70
+ onFailure?: (failure: MuxPaneOpenFailure) => void;
65
71
  argv: ReadonlyArray<string>;
66
72
  cwd: string;
67
73
  label: string;
@@ -230,7 +236,12 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
230
236
  * is what the caller sees when the pane layer is not there, which is the same
231
237
  * value it sees in `none` mode.
232
238
  */
233
- const attempt = async <T>(what: string, run: (live: MuxClient) => Promise<T>, fallback: T): Promise<T> => {
239
+ const attempt = async <T>(
240
+ what: string,
241
+ run: (live: MuxClient) => Promise<T>,
242
+ fallback: T,
243
+ onError?: (error: unknown) => void,
244
+ ): Promise<T> => {
234
245
  if (!usable() || client === null) return fallback;
235
246
  try {
236
247
  const value = await run(client);
@@ -238,6 +249,7 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
238
249
  return value;
239
250
  } catch (error) {
240
251
  degrade(what, error);
252
+ onError?.(error);
241
253
  return fallback;
242
254
  }
243
255
  };
@@ -301,6 +313,13 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
301
313
  },
302
314
 
303
315
  async openUtilityPane(request: MuxOpenUtilityPaneRequest): Promise<MuxPaneRef | null> {
316
+ const report = (failure: MuxPaneOpenFailure): void => {
317
+ try {
318
+ request.onFailure?.(failure);
319
+ } catch {
320
+ // Diagnostics must not break the best-effort contract.
321
+ }
322
+ };
304
323
  // Idempotence for docks: a slot that already has a pane answers with it.
305
324
  const dockSlot = request.dock?.slot;
306
325
  if (dockSlot && docks) {
@@ -314,6 +333,7 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
314
333
  let ref: MuxPaneRef;
315
334
  if (request.dock && docks) {
316
335
  const placed = await docks.open(request.dock.slot, {
336
+ onRefused: (message) => report({ source: "local", message }),
317
337
  ...(request.dock.share === undefined ? {} : { share: request.dock.share }),
318
338
  cwd: request.cwd,
319
339
  ...(request.env ? { env: request.env } : {}),
@@ -356,6 +376,19 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
356
376
  return ref;
357
377
  },
358
378
  null,
379
+ (error) => {
380
+ if (error instanceof MuxError) {
381
+ report({
382
+ source: "mux",
383
+ kind: error.kind,
384
+ wireCode: error.wireCode,
385
+ method: error.method,
386
+ message: error.message,
387
+ });
388
+ } else {
389
+ report({ source: "local", message: error instanceof Error ? error.message : String(error) });
390
+ }
391
+ },
359
392
  );
360
393
  },
361
394
 
@@ -126,12 +126,9 @@ export async function detectMux(options: DetectMuxOptions = {}): Promise<MuxDete
126
126
  return { detection: none("panes are turned off"), client: null };
127
127
  }
128
128
  if (enabled === "embedded") {
129
- // Embedded mode (Clio owning the pane host) is not implemented yet. An
130
- // operator who picked it wanted panes, so the rung degrades to guest
131
- // detection instead of refusing everything; the notice below says which
132
- // mode actually runs. When the guest ladder also fails, that failure is
133
- // reported on its own terms.
134
- log("info", "interface.panes.enabled=embedded is not implemented yet; detecting a guest pane host instead");
129
+ const reason = "embedded pane hosting is not implemented; use auto or guest";
130
+ log("warning", reason);
131
+ return { detection: none(reason, [], true), client: null };
135
132
  }
136
133
  if (env.HERDR_ENV !== "1") {
137
134
  return { detection: none("HERDR_ENV is not 1, so Clio is not running inside a pane host"), client: null };
@@ -198,7 +198,12 @@ export interface DockController {
198
198
  */
199
199
  open(
200
200
  slot: DockSlot,
201
- options?: { share?: number; cwd?: string; env?: Readonly<Record<string, string>> },
201
+ options?: {
202
+ share?: number;
203
+ cwd?: string;
204
+ env?: Readonly<Record<string, string>>;
205
+ onRefused?: (reason: string) => void;
206
+ },
202
207
  ): Promise<MuxPaneRef | null>;
203
208
  /** Record an adopted pane (crash recovery) as this slot's dock. */
204
209
  adopt(slot: DockSlot, ref: MuxPaneRef): void;
@@ -265,11 +270,13 @@ export function createDockController(options: DockControllerOptions): DockContro
265
270
  const geometry = await client.paneLayout(anchorPaneId);
266
271
  const anchorRect = geometry.panes.find((pane) => pane.paneId === anchorPaneId)?.rect;
267
272
  if (!anchorRect) {
273
+ openOptions.onRefused?.(`no anchor geometry for ${anchorPaneId}; check the pane host layout before trying again`);
268
274
  log("debug", `mux ${slot} dock open found no anchor rect for ${anchorPaneId}`);
269
275
  return null;
270
276
  }
271
277
  const plan = planDockOpen(anchorRect, spec, openOptions.share);
272
278
  if ("refused" in plan) {
279
+ openOptions.onRefused?.(`${plan.refused}; enlarge the anchor pane before trying again`);
273
280
  log("info", `mux ${slot} dock refused: ${plan.refused}`);
274
281
  return null;
275
282
  }
@@ -21,6 +21,7 @@ export type {
21
21
  MuxContract,
22
22
  MuxNotifyRequest,
23
23
  MuxOpenUtilityPaneRequest,
24
+ MuxPaneOpenFailure,
24
25
  MuxRuntime,
25
26
  MuxRuntimeOptions,
26
27
  } from "./contract.js";
@@ -645,9 +645,19 @@ export function createMuxClient(options: MuxClientOptions): MuxClient {
645
645
  // so an empty-id error line on this connection is still ours.
646
646
  if (responseId !== id && !(responseId === "" && error)) return;
647
647
  if (error) {
648
- const code = typeof error.code === "string" ? error.code : "unknown";
649
- const message = typeof error.message === "string" ? error.message : code;
650
- finish(() => reject(new MuxError(muxErrorKind(code), message, { wireCode: code, method })));
648
+ const code = typeof error.code === "string" ? error.code : undefined;
649
+ // Absence is different from a host literally saying "unknown".
650
+ // Keep supplied text verbatim and make missing text explicit here.
651
+ const message =
652
+ typeof error.message === "string" ? error.message : "no failure message was supplied by the pane host";
653
+ finish(() =>
654
+ reject(
655
+ new MuxError(muxErrorKind(code ?? "unknown"), message, {
656
+ ...(code === undefined ? {} : { wireCode: code }),
657
+ method,
658
+ }),
659
+ ),
660
+ );
651
661
  return;
652
662
  }
653
663
  finish(() => resolve(line.result));
@@ -27,6 +27,8 @@ export interface AccountabilitySummary {
27
27
  totalRuns: number;
28
28
  firstPassRuns: number;
29
29
  firstPassRate: number;
30
+ unverifiedSuccesses: number;
31
+ ungroundedClaims: number;
30
32
  failureCauses: ReadonlyArray<{ tag: EvidenceTag; count: number }>;
31
33
  }
32
34
 
@@ -38,9 +40,19 @@ export interface AccountabilitySummary {
38
40
  export function summarizeEvidenceIndex(rows: ReadonlyArray<EvidenceIndexRow>): AccountabilitySummary {
39
41
  const totalRuns = rows.length;
40
42
  let firstPassRuns = 0;
43
+ let unverifiedSuccesses = 0;
44
+ let ungroundedClaims = 0;
41
45
  const counts = new Map<EvidenceTag, number>();
42
46
  for (const row of rows) {
43
47
  if (row.firstPassSuccess) firstPassRuns += 1;
48
+ if (
49
+ row.succeeded === true &&
50
+ (row.tags.includes("no-validation") ||
51
+ row.tags.includes("proxy-validation") ||
52
+ row.completionEvidenceWarning === true)
53
+ )
54
+ unverifiedSuccesses += 1;
55
+ ungroundedClaims += row.ungroundedClaims ?? 0;
44
56
  for (const tag of row.tags) {
45
57
  if (!FAILURE_CAUSE_TAGS.has(tag)) continue;
46
58
  counts.set(tag, (counts.get(tag) ?? 0) + 1);
@@ -53,6 +65,8 @@ export function summarizeEvidenceIndex(rows: ReadonlyArray<EvidenceIndexRow>): A
53
65
  totalRuns,
54
66
  firstPassRuns,
55
67
  firstPassRate: totalRuns === 0 ? 0 : firstPassRuns / totalRuns,
68
+ unverifiedSuccesses,
69
+ ungroundedClaims,
56
70
  failureCauses,
57
71
  };
58
72
  }
@@ -60,7 +74,7 @@ export function summarizeEvidenceIndex(rows: ReadonlyArray<EvidenceIndexRow>): A
60
74
  /**
61
75
  * Read the sidecar index from the state dir and summarize it. Tolerant by way of
62
76
  * `readEvidenceIndex`: a missing or corrupt index yields the empty summary
63
- * (`{ totalRuns: 0, firstPassRuns: 0, firstPassRate: 0, failureCauses: [] }`).
77
+ * with zero counters and an empty failure-cause histogram.
64
78
  */
65
79
  export function readAccountabilitySummary(stateDir: string): AccountabilitySummary {
66
80
  return summarizeEvidenceIndex(readEvidenceIndex(stateDir));