@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
@@ -441,6 +441,8 @@ export interface CreateLoopGuardRegistrationOptions {
441
441
  * operator who can intervene; workers do not).
442
442
  */
443
443
  toolCallCap?: number;
444
+ /** Observe estimated work without disabling tools; fault-loop detection remains active. */
445
+ toolBudgetAdvisory?: boolean;
444
446
  /**
445
447
  * Worker only: successful exploration attempts allowed before a graceful,
446
448
  * text-only synthesis phase. Unlike {@link toolCallCap}, crossing this soft
@@ -523,8 +525,10 @@ export interface LoopGuardRegistration extends MiddlewareHookRegistration {
523
525
 
524
526
  export function createLoopGuardRegistration(options: CreateLoopGuardRegistrationOptions): LoopGuardRegistration {
525
527
  const budget = options.turnBlockBudget ?? INTERACTIVE_LOOP_BLOCK_BUDGET;
526
- const cap = options.toolCallCap;
528
+ const cap = options.toolBudgetAdvisory ? undefined : options.toolCallCap;
529
+ let advisoryEmitted = false;
527
530
  let softLimit =
531
+ !options.toolBudgetAdvisory &&
528
532
  options.toolCallSoftLimit !== undefined &&
529
533
  Number.isSafeInteger(options.toolCallSoftLimit) &&
530
534
  options.toolCallSoftLimit > 0 &&
@@ -561,7 +565,8 @@ export function createLoopGuardRegistration(options: CreateLoopGuardRegistration
561
565
  * has no cap and no bound here; it has an operator instead.
562
566
  */
563
567
  let deniedAttempts = 0;
564
- const denialBudget = cap === undefined ? undefined : Math.max(cap, WIDE_BATCH_DENIAL_FLOOR);
568
+ const denialBudget =
569
+ options.toolCallCap === undefined ? undefined : Math.max(options.toolCallCap, WIDE_BATCH_DENIAL_FLOOR);
565
570
  const boundRunDenials = (
566
571
  effects: ReadonlyArray<MiddlewareEffect>,
567
572
  input: MiddlewareHookInput,
@@ -948,6 +953,18 @@ export function createLoopGuardRegistration(options: CreateLoopGuardRegistration
948
953
  recordSuccessfulResult(input);
949
954
  recordResultForStagnation(input);
950
955
  const effects = [...crossArgumentResultEffects(input)];
956
+ if (
957
+ options.toolBudgetAdvisory &&
958
+ !advisoryEmitted &&
959
+ count >= (options.toolCallSoftLimit ?? options.toolCallCap ?? Infinity)
960
+ ) {
961
+ advisoryEmitted = true;
962
+ effects.push({
963
+ kind: "annotate_tool_result",
964
+ message: `Advisory tool estimate reached (${count} calls). Reassess remaining work and finish the assignment; tools remain available. Explicit task requirements still apply.`,
965
+ severity: "warn",
966
+ });
967
+ }
951
968
  if (
952
969
  softReadReserveEntered &&
953
970
  softLockout === null &&
@@ -0,0 +1,129 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { closeSync, constants, fstatSync, openSync, writeFileSync } from "node:fs";
3
+ import { isAbsolute } from "node:path";
4
+ import type { Api, AssistantMessageEventStream, Model, StreamOptions } from "@earendil-works/pi-ai";
5
+ import { findEngineEnvKeys } from "./env-api-keys.js";
6
+
7
+ /** Process-owned opt-in reaches every native engine call, including prewarm and workers. */
8
+ export function instrumentProviderCall<T extends StreamOptions>(
9
+ model: Model<Api>,
10
+ options: T | undefined,
11
+ invoke: (options: T | undefined) => AssistantMessageEventStream,
12
+ ): AssistantMessageEventStream {
13
+ let effective = options;
14
+ if (model.api === "anthropic-messages" && options?.cacheRetention === undefined) {
15
+ const retention = process.env.CLIO_CODER_ANTHROPIC_CACHE_RETENTION;
16
+ if (retention !== undefined && retention !== "") {
17
+ if (retention !== "none" && retention !== "short" && retention !== "long") {
18
+ throw new Error("CLIO_CODER_ANTHROPIC_CACHE_RETENTION must be none, short, or long");
19
+ }
20
+ effective = { ...options, cacheRetention: retention } as T;
21
+ }
22
+ }
23
+ const path = process.env.CLIO_CODER_PROVIDER_DUMP_PATH;
24
+ if (!path) return invoke(effective);
25
+ const sink = openDump(path);
26
+ const payloads: unknown[] = [];
27
+ const redact = diagnosticSerializer(model, effective);
28
+ const callId = randomUUID();
29
+ const onPayload = effective?.onPayload;
30
+ const instrumented = {
31
+ ...effective,
32
+ onPayload: async (payload: unknown, currentModel: Model<Api>) => {
33
+ // Caller-owned thinking/tool/schema patches finish first. Snapshot now:
34
+ // providers and callbacks can retain or mutate their objects afterward.
35
+ const replacement = await onPayload?.(payload, currentModel);
36
+ try {
37
+ payloads.push(JSON.parse(redact(replacement === undefined ? payload : replacement)));
38
+ } catch {
39
+ payloads.push({ diagnosticError: "payload could not be serialized" });
40
+ }
41
+ return replacement;
42
+ },
43
+ } as T;
44
+ const finish = (terminal: { response: unknown } | { error: string }) => {
45
+ try {
46
+ writeFileSync(sink, `${redact({ callId, api: model.api, model: model.id, payloads, ...terminal })}\n`, "utf8");
47
+ } catch {
48
+ // Diagnostics must not turn a completed provider call into a retry or
49
+ // inject content into the ledger. Report only the sink failure category.
50
+ process.emitWarning("Provider diagnostic dump could not be written", { code: "CLIO_CODER_PROVIDER_DUMP_FAILED" });
51
+ } finally {
52
+ try {
53
+ closeSync(sink);
54
+ } catch {
55
+ process.emitWarning("Provider diagnostic dump could not be closed", { code: "CLIO_CODER_PROVIDER_DUMP_FAILED" });
56
+ }
57
+ }
58
+ };
59
+ try {
60
+ const stream = invoke(instrumented);
61
+ // result() observes the existing terminal promise; it never consumes the
62
+ // event iterator that the agent and durable ledger projection own.
63
+ void stream.result().then(
64
+ (response) => finish({ response }),
65
+ (error) => finish({ error: String(error) }),
66
+ );
67
+ return stream;
68
+ } catch (error) {
69
+ finish({ error: error instanceof Error ? error.message : String(error) });
70
+ throw error;
71
+ }
72
+ }
73
+
74
+ /** Refuse insecure existing files instead of silently changing their permissions. */
75
+ function openDump(path: string): number {
76
+ if (!isAbsolute(path)) throw new Error("CLIO_CODER_PROVIDER_DUMP_PATH must be an absolute file path");
77
+ const fd = openSync(
78
+ path,
79
+ constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | constants.O_NOFOLLOW | constants.O_NONBLOCK,
80
+ 0o600,
81
+ );
82
+ try {
83
+ const stat = fstatSync(fd);
84
+ if (
85
+ !stat.isFile() ||
86
+ (stat.mode & 0o777) !== 0o600 ||
87
+ (process.getuid !== undefined && stat.uid !== process.getuid())
88
+ ) {
89
+ throw new Error("CLIO_CODER_PROVIDER_DUMP_PATH must be an operator-owned regular file with mode 0600");
90
+ }
91
+ return fd;
92
+ } catch (error) {
93
+ closeSync(fd);
94
+ throw error;
95
+ }
96
+ }
97
+
98
+ function diagnosticSerializer(model: Model<Api>, options: StreamOptions | undefined): (value: unknown) => string {
99
+ const secrets = new Set<string>();
100
+ const ambientKeys = (findEngineEnvKeys(model.provider, options?.env) ?? []).map(
101
+ (name) => options?.env?.[name] || process.env[name],
102
+ );
103
+ for (const key of [options?.apiKey, ...ambientKeys]) {
104
+ if (key && key !== "<authenticated>") secrets.add(key);
105
+ }
106
+ for (const headers of [options?.headers, model.headers]) {
107
+ for (const [key, value] of Object.entries(headers ?? {})) {
108
+ if (typeof value === "string" && value.length > 0 && /auth|api[-_]?key|cookie|token|secret/iu.test(key)) {
109
+ secrets.add(value);
110
+ const token = value.match(/^(?:Bearer|Basic)\s+(.+)$/iu)?.[1];
111
+ if (token) secrets.add(token);
112
+ }
113
+ }
114
+ }
115
+ return (value) => {
116
+ // This is a body-level diagnostic, never an HTTP/auth/options dump. Keep
117
+ // nested tool schemas intact, including tools with a parameter named headers.
118
+ const body =
119
+ typeof value === "object" && value !== null && !Array.isArray(value)
120
+ ? Object.fromEntries(
121
+ Object.entries(value).filter(([key]) => !/^(?:headers|env|apiKey|api_key|authorization)$/iu.test(key)),
122
+ )
123
+ : value;
124
+ let serialized = JSON.stringify(body);
125
+ if (serialized === undefined) serialized = "null";
126
+ for (const secret of secrets) serialized = serialized.replaceAll(JSON.stringify(secret).slice(1, -1), "[REDACTED]");
127
+ return serialized;
128
+ };
129
+ }
@@ -150,7 +150,9 @@ export function patchToolChoiceNamedPayload(
150
150
  if (Object.keys(outputConfig).length > 0) patched.output_config = outputConfig;
151
151
  else delete patched.output_config;
152
152
  }
153
- return { ...patched, tools, tool_choice: { type: "tool", name: toolName } };
153
+ // Keep the cacheable schema prefix intact. The request-level choice
154
+ // already identifies the required tool; narrowing changes it twice.
155
+ return { ...patched, tool_choice: { type: "tool", name: toolName } };
154
156
  }
155
157
  if (model.api === "google-generative-ai" || model.api === "google-vertex") {
156
158
  if (!isRecord(payload.config) || payload.config.tools === undefined || payload.config.tools === null)
@@ -215,6 +215,14 @@ function assistantMessageText(message: AgentMessage | undefined): string | null
215
215
  */
216
216
  function isTerminalAssistantMessage(message: AgentMessage | undefined): boolean {
217
217
  if (!isAssistantMessage(message)) return false;
218
+ // pi refuses truncated tool calls and continues with their error results.
219
+ // That turn has no final artifact/report to repair yet.
220
+ if (
221
+ message.stopReason === "length" &&
222
+ Array.isArray(message.content) &&
223
+ message.content.some((block) => block.type === "toolCall")
224
+ )
225
+ return false;
218
226
  return message.stopReason !== "toolUse" && message.stopReason !== "error";
219
227
  }
220
228
 
@@ -442,6 +450,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
442
450
  const loopGuardRegistration = createLoopGuardRegistration({
443
451
  safety,
444
452
  toolCallCap: workerBudget.hardCap,
453
+ toolBudgetAdvisory: workerBudget.mode === "advisory",
445
454
  toolCallSoftLimit: workerBudget.toolCalls,
446
455
  // A worker's blocks all land in one run-long bucket, so the bound on
447
456
  // them is a statement about this run's length, not about a turn.
@@ -600,6 +609,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
600
609
  invokeOptions: () => ({
601
610
  correlationId: `worker-model-round-${workerModelRound}`,
602
611
  toolResultMaxBytes: workerSettings.context.toolResultMaxBytes,
612
+ supportsImages: model.input.includes("image"),
603
613
  ...(agentSkillPolicy ? { pendingSkillPolicy: agentSkillPolicy } : {}),
604
614
  }),
605
615
  });
@@ -724,8 +734,9 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
724
734
  stopAfterToolResultCallId = null;
725
735
  }
726
736
  }
727
- const revisionToolsAvailable = resultContractRevisionActive && !synthesisToolLock;
728
- // A repair without preauthorized growth remains terminal and text-only.
737
+ const revisionToolsAvailable =
738
+ (workerBudget.mode === "advisory" || resultContractRevisionActive) && !synthesisToolLock;
739
+ // Legacy enforced budgets need preauthorized growth to retain repair tools.
729
740
  if (!revisionToolsAvailable) synthesisToolLock = true;
730
741
  // Delivered as a paired tool exchange, never a user turn. Templates
731
742
  // that key history rendering off the last `user` message re-render
@@ -114,7 +114,11 @@ export function createWorkerSafety(options: WorkerSafetyOptions = {}): SafetyCon
114
114
  },
115
115
  scopes: { readonly: READONLY_SCOPE, workspace: WORKSPACE_SCOPE, confirmed: CONFIRMED_SCOPE },
116
116
  isSubset,
117
- policy: { metadata: (posture) => policyEngine.metadata(posture) },
117
+ policy: {
118
+ metadata: (posture) => policyEngine.metadata(posture),
119
+ allowsObservationPath: (path) =>
120
+ policyEngine.evaluate({ tool: "read", args: { path } }).reasonCode !== "path-policy:zeroAccessPaths",
121
+ },
118
122
  audit: { recordCount: () => 0 },
119
123
  };
120
124
  }
@@ -125,6 +125,7 @@ export function createExtensionReloadCoordinator(deps: ExtensionReloadCoordinato
125
125
  workspaceRoot: workspace,
126
126
  ...(captured !== null ? { capturedSources: captured } : {}),
127
127
  recordReceipt: deps.recordReceipt,
128
+ report: deps.report,
128
129
  ...(deps.runCommand !== undefined ? { runCommand: deps.runCommand } : {}),
129
130
  ...(deps.now !== undefined ? { now: deps.now } : {}),
130
131
  });
@@ -12,7 +12,7 @@ import { DEFAULT_DELEGATION_PERMISSION_TIMEOUT_MS } from "../core/defaults.js";
12
12
  import { loadDomains } from "../core/domain-loader.js";
13
13
  import type { SafeEventBus } from "../core/event-bus.js";
14
14
  import { expandInlineFileReferencesAsync } from "../core/file-references.js";
15
- import { setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
15
+ import { setCommitDecisionRefsProvider, setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
16
16
  import { configureGuardrails, guardrailValuesFromSettings } from "../core/guardrails.js";
17
17
  import { HEADLESS_PERMISSION_DENIED_REASON } from "../core/headless-permission.js";
18
18
  import { rememberRecentModel } from "../core/recent-models.js";
@@ -37,6 +37,7 @@ import { getSharedBus } from "../core/shared-bus.js";
37
37
  import { isSkillActivation } from "../core/skill-activation.js";
38
38
  import { StartupTimer } from "../core/startup-timer.js";
39
39
  import { getTerminationCoordinator } from "../core/termination.js";
40
+ import { captureProjectSurface, projectSurfaceTrustNotice } from "../core/workspace-trust.js";
40
41
  import { clioDataDir, clioStateDir } from "../core/xdg.js";
41
42
  import { renderAgentCatalogSectionsFromSpecs } from "../domains/agents/catalog.js";
42
43
  import type { AgentsContract } from "../domains/agents/contract.js";
@@ -157,12 +158,11 @@ import {
157
158
  import type { SchedulingContract } from "../domains/scheduling/contract.js";
158
159
  import { SchedulingDomainModule } from "../domains/scheduling/index.js";
159
160
  import type { CompactionCallObservation } from "../domains/session/compaction/compact.js";
160
- import { type CompactResult, compact } from "../domains/session/compaction/compact.js";
161
+ import { type CompactInput, type CompactResult, compact } from "../domains/session/compaction/compact.js";
161
162
  import { collectSessionEntries } from "../domains/session/compaction/session-entries.js";
162
163
  import { estimateTokens } from "../domains/session/compaction/tokens.js";
163
- import { ceilChars } from "../domains/session/context-accounting.js";
164
164
  import type { SessionContract, SessionMeta } from "../domains/session/contract.js";
165
- import { createDecisionBoardStore } from "../domains/session/decision-board.js";
165
+ import { activeDecisionRefs, createDecisionBoardStore } from "../domains/session/decision-board.js";
166
166
  import type { CompactionSummaryEntry, CompactionTrigger, SessionEntry } from "../domains/session/entries.js";
167
167
  import { SessionDomainModule } from "../domains/session/index.js";
168
168
  import {
@@ -178,6 +178,7 @@ import { createTaskBoardStore } from "../domains/session/task-board.js";
178
178
  import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
179
179
  import { type ShareContract, ShareDomainModule } from "../domains/share/index.js";
180
180
  import { ToolchainDomainModule } from "../domains/toolchain/index.js";
181
+ import { activeUserTaskAcceptance } from "../domains/user-tasks/active-acceptance.js";
181
182
  import { createUserTasksStore } from "../domains/user-tasks/store.js";
182
183
  import { type AcpSafeSettingsPatch, type AcpSafeSettingsSnapshot, serveClioAcpAgent } from "../engine/acp/server.js";
183
184
  import { createStdioServerTransport } from "../engine/acp/transport.js";
@@ -614,6 +615,7 @@ function agentRoleToolWarnings(providers: ProvidersContract, settings: Readonly<
614
615
  async function resolveCompactionModel(
615
616
  settings: ClioSettings,
616
617
  providers: ProvidersContract,
618
+ signal?: AbortSignal,
617
619
  ): Promise<CompactionResolution | null> {
618
620
  const override = settings.context.compaction.model;
619
621
  let targetId = settings.chat.target;
@@ -634,7 +636,7 @@ async function resolveCompactionModel(
634
636
  wireModelId = selected.ref.model;
635
637
  }
636
638
  if (!targetId || !wireModelId) return null;
637
- await prepareBackgroundModelMetadata(providers, targetId);
639
+ await prepareBackgroundModelMetadata(providers, targetId, signal);
638
640
  const status = providers.list().find((entry) => entry.target.id === targetId);
639
641
  if (!status?.available) {
640
642
  throw new Error("context.compaction.model target is unavailable; check the selected target with clio-coder targets");
@@ -673,7 +675,7 @@ async function resolveCompactionModel(
673
675
  applyModelCapabilityPatch(model, refined.capabilities);
674
676
  let apiKey: string | undefined = LOCAL_API_KEY_FALLBACK;
675
677
  if (targetRequiresAuth(route.target, route.runtime)) {
676
- const auth = await providers.auth.resolveForTarget(route.target, route.runtime);
678
+ const auth = await providers.auth.resolveForTarget(route.target, route.runtime, signal ? { signal } : undefined);
677
679
  if (!auth.available || !auth.apiKey) {
678
680
  throw new Error(
679
681
  "context.compaction.model authentication is unavailable; authenticate the selected target with clio-coder auth",
@@ -794,6 +796,8 @@ async function runCompactionFlow(
794
796
  instructions?: string,
795
797
  trigger?: CompactionTrigger,
796
798
  observability?: BackgroundMemoryUsageSink,
799
+ budget?: Pick<CompactInput, "keepRecentTokens" | "preserveUserTurnId" | "skillContextState" | "signal">,
800
+ summarize?: CompactInput["summarize"],
797
801
  ): Promise<CompactResult | null> {
798
802
  const meta = session.current();
799
803
  if (!meta) {
@@ -805,8 +809,11 @@ async function runCompactionFlow(
805
809
  session.current()?.id === meta.id && (session.tree(meta.id).leafId ?? undefined) === activeLeafTurnId;
806
810
  const entries = filterEntriesToActivePath(readSessionEntriesForCompact(meta.id), activeLeafTurnId);
807
811
  if (entries.length === 0) return null;
812
+ budget?.signal?.throwIfAborted();
808
813
  const systemPrompt = await readCompactionSystemPrompt(settings.context.compaction.systemPrompt, meta.cwd);
809
- const resolved = await resolveCompactionModel(settings, providers);
814
+ budget?.signal?.throwIfAborted();
815
+ const resolved = await resolveCompactionModel(settings, providers, budget?.signal);
816
+ budget?.signal?.throwIfAborted();
810
817
  if (!resolved) {
811
818
  throw new Error("no model configured; set chat.target + chat.model");
812
819
  }
@@ -841,6 +848,8 @@ async function runCompactionFlow(
841
848
  try {
842
849
  result = await compact({
843
850
  entries,
851
+ ...budget,
852
+ ...(summarize ? { summarize } : {}),
844
853
  onCall: (call) => calls.push(call),
845
854
  model: resolved.model,
846
855
  ...(systemPrompt !== undefined ? { systemPrompt } : {}),
@@ -858,6 +867,10 @@ async function runCompactionFlow(
858
867
  } finally {
859
868
  releaseEndpointSlot();
860
869
  }
870
+ if (budget?.signal?.aborted) {
871
+ preserveCalls();
872
+ budget.signal.throwIfAborted();
873
+ }
861
874
  if (!isOriginCurrent()) {
862
875
  preserveCalls();
863
876
  throw new Error("compaction session or branch changed; summary discarded and originating usage retained");
@@ -876,6 +889,8 @@ async function runCompactionFlow(
876
889
  turnId: randomUUID(),
877
890
  parentTurnId: result.firstKeptTurnId ?? null,
878
891
  summary: result.summary,
892
+ ...(result.skillContext ? { skillContext: result.skillContext } : {}),
893
+ ...(result.userContext ? { userContext: result.userContext } : {}),
879
894
  tokensBefore: result.tokensBefore,
880
895
  firstKeptTurnId: result.firstKeptTurnId ?? "",
881
896
  messagesSummarized: result.messagesSummarized,
@@ -939,17 +954,28 @@ export function createProductionAutoCompact(
939
954
  getSettings: () => ClioSettings,
940
955
  providers: ProvidersContract,
941
956
  observability?: BackgroundMemoryUsageSink,
942
- ): (instructions?: string, trigger?: CompactionTrigger) => Promise<CompactResult | null> {
943
- return (instructions, trigger) =>
944
- runCompactionFlow(session, getSettings(), providers, instructions, trigger, observability);
957
+ summarize?: CompactInput["summarize"],
958
+ ): (
959
+ instructions?: string,
960
+ trigger?: CompactionTrigger,
961
+ budget?: Pick<CompactInput, "keepRecentTokens" | "preserveUserTurnId" | "skillContextState" | "signal">,
962
+ ) => Promise<CompactResult | null> {
963
+ return (instructions, trigger, budget) =>
964
+ runCompactionFlow(session, getSettings(), providers, instructions, trigger, observability, budget, summarize);
945
965
  }
946
966
 
947
- function estimateTokensFromSummary(summary: string): number {
948
- // Mirrors the rough byte/4 heuristic the rest of the compaction stack
949
- // uses for unmeasured payloads. Kept inline because this is the only
950
- // caller; pi-mono's token estimator is provider-specific and we do not
951
- // have a model handle at the persistence layer.
952
- return Math.max(1, ceilChars(summary.length));
967
+ function estimateTokensFromSummary(result: CompactResult): number {
968
+ return estimateTokens({
969
+ kind: "compactionSummary",
970
+ turnId: "estimate",
971
+ parentTurnId: null,
972
+ timestamp: "",
973
+ summary: result.summary,
974
+ firstKeptTurnId: result.firstKeptTurnId ?? "",
975
+ tokensBefore: result.tokensBefore,
976
+ ...(result.skillContext ? { skillContext: result.skillContext } : {}),
977
+ ...(result.userContext ? { userContext: result.userContext } : {}),
978
+ });
953
979
  }
954
980
 
955
981
  /**
@@ -972,7 +998,7 @@ function estimateTokensFromSummary(summary: string): number {
972
998
  function estimateTokensAfterCompaction(entries: ReadonlyArray<SessionEntry>, result: CompactResult): number {
973
999
  let droppedTokens = 0;
974
1000
  for (const entry of entries.slice(0, result.firstKeptEntryIndex)) droppedTokens += estimateTokens(entry);
975
- const summaryTokens = estimateTokensFromSummary(result.summary);
1001
+ const summaryTokens = estimateTokensFromSummary(result);
976
1002
  // The summary alone is the floor: a session whose dropped estimate exceeds
977
1003
  // the measured anchor must not report a negative or sub-summary context.
978
1004
  return Math.max(summaryTokens, result.tokensBefore - droppedTokens + summaryTokens);
@@ -1041,6 +1067,15 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1041
1067
  termination.installSignalHandlers();
1042
1068
 
1043
1069
  ensureClioState();
1070
+ for (const surface of ["safety", "settings"] as const) {
1071
+ const snapshot = captureProjectSurface(process.cwd(), surface);
1072
+ if (snapshot.verdict === "trusted") continue;
1073
+ for (const file of snapshot.files) {
1074
+ if (file.text !== null || file.error !== undefined) {
1075
+ bootStderr(`[clio-coder:trust] ${projectSurfaceTrustNotice(snapshot, file.path)}\n`);
1076
+ }
1077
+ }
1078
+ }
1044
1079
  sweepExpiredToolOffloads();
1045
1080
  timer.mark("install check");
1046
1081
 
@@ -1499,6 +1534,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1499
1534
  // different generation. The owner slot is anchored here, so user hooks
1500
1535
  // keep evaluating after the guards and before the assessors below.
1501
1536
  const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
1537
+ let bootHookNotices = true;
1502
1538
  const extensionReload = createExtensionReloadCoordinator({
1503
1539
  extensions,
1504
1540
  middleware,
@@ -1506,10 +1542,13 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1506
1542
  recordReceipt: (receipt) => hookReceiptLog.record(receipt),
1507
1543
  report: (line) => {
1508
1544
  if (!interactive) process.stderr.write(`${line}\n`);
1545
+ else if (bootHookNotices) initialNotices.push(line);
1546
+ else bus.emit(BusChannels.ExtensionsLoadIssue, { message: line });
1509
1547
  },
1510
1548
  onCommitted: (event) => bus.emit(BusChannels.ExtensionsReloaded, event),
1511
1549
  });
1512
1550
  extensionReload.applyBoot();
1551
+ bootHookNotices = false;
1513
1552
  termination.onDrain(() => hookReceiptLog.flush());
1514
1553
  // Autonomy is hot-reloaded for interactive and headless admissions. ACP
1515
1554
  // server prompts use the snapshot captured at session/new.
@@ -1550,6 +1589,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1550
1589
  if (resources) {
1551
1590
  middleware.registerHook(
1552
1591
  createMarketplaceOfferRegistration({
1592
+ interactive,
1553
1593
  listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
1554
1594
  listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
1555
1595
  installEntry: (entry, scope) => {
@@ -1627,6 +1667,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1627
1667
  session.appendEntry(entry);
1628
1668
  },
1629
1669
  });
1670
+ // Every Clio-spawned commit from this session is stamped with the decisions
1671
+ // active on the board at spawn time, the same way it is stamped as assisted.
1672
+ setCommitDecisionRefsProvider(() => activeDecisionRefs(decisionBoard.snapshot()));
1630
1673
  // getSessionId alone never notices a /tree switch: it moves the active
1631
1674
  // append point inside the same session, so the id-keyed cache above kept
1632
1675
  // showing the abandoned branch's board (issue #94). SessionTurnSwitched is
@@ -1686,6 +1729,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
1686
1729
  }
1687
1730
  : {}),
1688
1731
  taskBoard,
1732
+ decisionBoard,
1733
+ getDecisionBoard: () => decisionBoard.snapshot(),
1689
1734
  userTasks,
1690
1735
  dispatch,
1691
1736
  bus,
@@ -2016,6 +2061,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
2016
2061
  },
2017
2062
  resolveRigor: () =>
2018
2063
  resolveRigor({ cwd: process.cwd(), override: parseRigorOverride(process.env.CLIO_CODER_RIGOR) }),
2064
+ readActiveAcceptance: (window) =>
2065
+ activeUserTaskAcceptance(userTasks.snapshot(), taskBoard.snapshot(), session.current()?.id ?? null, window),
2019
2066
  recordDecision: (record) => safety.audit.recordCompletionContract?.(record),
2020
2067
  }),
2021
2068
  );
@@ -162,10 +162,9 @@ export function isLengthStopAssistantMessage(message: AgentMessage | undefined):
162
162
  }
163
163
 
164
164
  /**
165
- * An aborted assistant message with no rendered content: empty text and no
166
- * structured tool call. This is what `agent.abort()` leaves behind when the
167
- * model is interrupted between deltas. The chat loop suppresses it after a
168
- * loop-guard interrupt has already written a durable closing turn.
165
+ * An aborted assistant message with no text, thinking, or structured tool
166
+ * call. Only a hollow abort needs a synthetic closing record; streamed
167
+ * thinking belongs to the same durable assistant as any partial answer.
169
168
  */
170
169
  export function isEmptyAbortedAssistantMessage(message: AgentMessage | undefined): boolean {
171
170
  if (
@@ -179,9 +178,17 @@ export function isEmptyAbortedAssistantMessage(message: AgentMessage | undefined
179
178
  }
180
179
  if ((message as { stopReason?: unknown }).stopReason !== "aborted") return false;
181
180
  if (extractText(message).trim().length > 0) return false;
181
+ if (extractThinking(message).trim().length > 0) return false;
182
182
  return !hasStructuredToolCall(message);
183
183
  }
184
184
 
185
+ /** Apply host cancellation provenance only to a structurally aborted message. */
186
+ export function explainInterruptedAssistant(message: AgentMessage, reason: string | null): boolean {
187
+ if (reason === null || message.role !== "assistant" || message.stopReason !== "aborted") return false;
188
+ message.errorMessage = reason;
189
+ return true;
190
+ }
191
+
185
192
  function lengthStopMetadata(message: AgentMessage): Record<string, unknown> {
186
193
  const usage = (message as { usage?: unknown }).usage;
187
194
  const metadata: Record<string, unknown> = {
@@ -497,6 +504,7 @@ export function assistantSessionPayload(
497
504
  "model",
498
505
  "responseModel",
499
506
  "responseId",
507
+ "providerThinkingLevel",
500
508
  "gatewayRouting",
501
509
  "diagnostics",
502
510
  ]) {