@iowarp/clio-coder 0.4.4 → 0.4.6

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 (598) hide show
  1. package/CHANGELOG.md +116 -2
  2. package/CONTRIBUTING.md +39 -24
  3. package/NOTICE +16 -0
  4. package/README.md +343 -403
  5. package/dist/{acp-WNAYYF4F.js → acp-UVEVWSDL.js} +25 -24
  6. package/dist/{agents-3OKXHLOI.js → agents-VWY37DTK.js} +78 -77
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-VKNNMGPU.js → auth-PCV2XQDV.js} +38 -38
  9. package/dist/builtins-PD652MTK.js +22 -0
  10. package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
  11. package/dist/{chunk-NRO2BJRH.js → chunk-24T2YZ7A.js} +10686 -4464
  12. package/dist/{chunk-Y55JBDO5.js → chunk-2AKYFREM.js} +38 -23
  13. package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
  14. package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
  15. package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
  16. package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
  17. package/dist/{chunk-UXCU4E3T.js → chunk-3BJGMT2D.js} +35 -14
  18. package/dist/{chunk-5ICU3EUH.js → chunk-3HQVBIKD.js} +5 -5
  19. package/dist/{chunk-GWZNEVM2.js → chunk-3JLFK5MW.js} +9 -9
  20. package/dist/{chunk-XXYSBZIQ.js → chunk-3O2ZAUGQ.js} +4 -4
  21. package/dist/{chunk-GX5WYQO4.js → chunk-3QKXHCGS.js} +8 -8
  22. package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
  23. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  24. package/dist/{chunk-OEJSLEPW.js → chunk-3WBALRQH.js} +337 -337
  25. package/dist/{chunk-ELWDPP3Y.js → chunk-4DU2TVI4.js} +8 -8
  26. package/dist/{chunk-JSD46VO2.js → chunk-4U4TKZFR.js} +43 -36
  27. package/dist/{chunk-FEAXX7B6.js → chunk-4VMV6OS6.js} +4 -4
  28. package/dist/{chunk-2ZSONWVL.js → chunk-536HXRFE.js} +13 -13
  29. package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
  30. package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
  31. package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
  32. package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
  33. package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
  34. package/dist/{chunk-Q4WO54TA.js → chunk-5QRX7SLS.js} +11 -11
  35. package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
  36. package/dist/chunk-5ZSZEYJK.js +119 -0
  37. package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
  38. package/dist/{chunk-DT3LWJOB.js → chunk-6HAO6X5B.js} +24 -6
  39. package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
  40. package/dist/{chunk-K6T2ZAMZ.js → chunk-6OII3LOK.js} +6 -6
  41. package/dist/{chunk-36CT5VVL.js → chunk-6RYDAVQT.js} +138 -89
  42. package/dist/{chunk-I7XBWTYH.js → chunk-6VRRJT7L.js} +5 -5
  43. package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
  44. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  45. package/dist/{chunk-NAI6ZFCY.js → chunk-7JSSKXG2.js} +122 -11
  46. package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
  47. package/dist/chunk-7WUZEB2M.js +165 -0
  48. package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
  49. package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
  50. package/dist/{chunk-IXIY2H4R.js → chunk-ACCKVSHU.js} +5 -5
  51. package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
  52. package/dist/{chunk-JEIYHLOR.js → chunk-B3MOMLJ4.js} +12 -12
  53. package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
  54. package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
  55. package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
  56. package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
  57. package/dist/{chunk-23L32XTI.js → chunk-BLTEAUCB.js} +68 -39
  58. package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
  59. package/dist/{chunk-XULDXHTN.js → chunk-BT7HGDOX.js} +105 -53
  60. package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
  61. package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
  62. package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
  63. package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
  64. package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
  65. package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
  66. package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
  67. package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
  68. package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
  69. package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
  70. package/dist/{chunk-6UINWWS6.js → chunk-DXLUVUD4.js} +16 -16
  71. package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
  72. package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
  73. package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
  74. package/dist/{chunk-JT2RFCC5.js → chunk-E7RF4KBO.js} +5 -5
  75. package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
  76. package/dist/chunk-ECOMVOHP.js +139 -0
  77. package/dist/chunk-EFSEIZE6.js +56 -0
  78. package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
  79. package/dist/chunk-EM2WNQS2.js +93 -0
  80. package/dist/{chunk-57XXR6DR.js → chunk-F5Z7EWMN.js} +967 -246
  81. package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
  82. package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
  83. package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
  84. package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
  85. package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
  86. package/dist/{chunk-EXLD33WO.js → chunk-GLYBJ4RQ.js} +24 -9
  87. package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
  88. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  89. package/dist/{chunk-FFUPXJC4.js → chunk-HPTJF6DG.js} +32 -56
  90. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  91. package/dist/{chunk-CUSRQKPU.js → chunk-HZ2T2YED.js} +299 -89
  92. package/dist/{chunk-YD5GIKET.js → chunk-HZFBVU5X.js} +49 -580
  93. package/dist/{chunk-6QOTUPRG.js → chunk-I2K2NCZQ.js} +65 -17
  94. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  95. package/dist/{chunk-I2DWJ4GM.js → chunk-IGLVVNEG.js} +54 -42
  96. package/dist/{chunk-6Q3CYFD3.js → chunk-IKRWLEDA.js} +186 -35
  97. package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
  98. package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
  99. package/dist/{chunk-2DSOYNFC.js → chunk-JMPL7NUB.js} +7 -7
  100. package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
  101. package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
  102. package/dist/{chunk-54X7T7DK.js → chunk-KAFMW7WM.js} +72 -81
  103. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  104. package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
  105. package/dist/chunk-KPRLAMP4.js +32 -0
  106. package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
  107. package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
  108. package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
  109. package/dist/{chunk-JQLNNIKT.js → chunk-LIN2K3EL.js} +6 -6
  110. package/dist/{chunk-2STGEDFV.js → chunk-LK2FN5JY.js} +2 -2
  111. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  112. package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
  113. package/dist/chunk-LUL5Z66S.js +221 -0
  114. package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
  115. package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
  116. package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
  117. package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
  118. package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
  119. package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
  120. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  121. package/dist/{chunk-4WR7VSYB.js → chunk-N2OKBREN.js} +23 -9
  122. package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
  123. package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
  124. package/dist/{chunk-4M6Z5QVF.js → chunk-NNWJYUNO.js} +11 -11
  125. package/dist/chunk-NTK3WTHM.js +141 -0
  126. package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
  127. package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
  128. package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
  129. package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
  130. package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
  131. package/dist/{chunk-75W7L2E2.js → chunk-P5JMBPDJ.js} +1052 -171
  132. package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
  133. package/dist/{chunk-S6PYF2XF.js → chunk-P6M7RKMI.js} +4 -4
  134. package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
  135. package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
  136. package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
  137. package/dist/{chunk-DXKJURES.js → chunk-PZN2LQY6.js} +14 -11
  138. package/dist/{chunk-N56KALIC.js → chunk-Q7NNUHQV.js} +62 -35
  139. package/dist/{chunk-RQCKCSRL.js → chunk-QCOV5DFY.js} +22 -22
  140. package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
  141. package/dist/{chunk-NEKRRTYW.js → chunk-QJMRYTCX.js} +8 -8
  142. package/dist/{chunk-YNFKXPEC.js → chunk-QNWRHOMF.js} +35 -66
  143. package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
  144. package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
  145. package/dist/{chunk-72YIHOZQ.js → chunk-QXFBABFJ.js} +10 -10
  146. package/dist/chunk-R2CT5YDO.js +66 -0
  147. package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
  148. package/dist/{chunk-IGLP3ODT.js → chunk-RGZNQ5CT.js} +15 -15
  149. package/dist/chunk-SD7SHNDW.js +15 -0
  150. package/dist/chunk-SL2RDHKO.js +19 -0
  151. package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
  152. package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
  153. package/dist/{chunk-UEPWCCTY.js → chunk-SXQKNKRA.js} +12 -12
  154. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  155. package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
  156. package/dist/{chunk-5636DCO5.js → chunk-TJFDL26W.js} +59 -12
  157. package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
  158. package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
  159. package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
  160. package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
  161. package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
  162. package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
  163. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  164. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  165. package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
  166. package/dist/chunk-USZA7GWL.js +341 -0
  167. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  168. package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
  169. package/dist/{chunk-7UGL4MB5.js → chunk-VAHLPXPY.js} +10 -10
  170. package/dist/{chunk-25QBEXRS.js → chunk-VANN3GDP.js} +7 -26
  171. package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
  172. package/dist/{chunk-QUFRYSWI.js → chunk-VHMX7SXF.js} +129 -48
  173. package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
  174. package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
  175. package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
  176. package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
  177. package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
  178. package/dist/{chunk-USR47QNF.js → chunk-WKUYQBCG.js} +14 -14
  179. package/dist/{chunk-GHS5EBTQ.js → chunk-WNGF5AJX.js} +36 -22
  180. package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
  181. package/dist/{chunk-6OSVSQL5.js → chunk-WV6TDAPN.js} +41 -23
  182. package/dist/chunk-WXA2CFJO.js +23 -0
  183. package/dist/{chunk-2ASED4PZ.js → chunk-X3BI7HTV.js} +26 -26
  184. package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
  185. package/dist/{chunk-RZDWV63N.js → chunk-XWMSPJYN.js} +6 -6
  186. package/dist/chunk-YGDMBK7O.js +567 -0
  187. package/dist/{chunk-6PAZTBPA.js → chunk-YPRSNUTC.js} +15 -6
  188. package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
  189. package/dist/{chunk-LTIKRKFL.js → chunk-ZS43Y2FT.js} +4 -4
  190. package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
  191. package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
  192. package/dist/cli/index.js +44 -44
  193. package/dist/clio-QQCMTUZE.js +26 -0
  194. package/dist/{code-nav-IJR2DBPR.js → code-nav-GUPM6766.js} +48 -32
  195. package/dist/codewiki/build-worker.js +76 -29
  196. package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
  197. package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
  198. package/dist/{config-IUA6OYNS.js → config-IIM7YOD3.js} +211 -124
  199. package/dist/configure-4ZM5HWJX.js +73 -0
  200. package/dist/{context-BOYF5EJM.js → context-44BZLJ3J.js} +62 -31
  201. package/dist/{context-4MPR7WKB.js → context-AIDVQKMW.js} +126 -121
  202. package/dist/{context-2DKHWH2T.js → context-OL5P3HEP.js} +92 -62
  203. package/dist/context-clear-OQV76MYP.js +184 -0
  204. package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
  205. package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
  206. package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-ZUW3EGLS.js} +32 -31
  207. package/dist/detail-UXPWRANG.js +115 -0
  208. package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-P3ZW6G77.js} +192 -116
  209. package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
  210. package/dist/{doctor-DKICC2SN.js → doctor-JJVGPZWT.js} +59 -58
  211. package/dist/{eval-OQOQUDHK.js → eval-V2RTN3UH.js} +476 -170
  212. package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
  213. package/dist/evidence-35PYWGSO.js +225 -0
  214. package/dist/{evidence-4DQ25GUQ.js → evidence-CIGGKI6J.js} +111 -94
  215. package/dist/{evolve-GSS52E5J.js → evolve-33SM3NJP.js} +108 -91
  216. package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
  217. package/dist/{fleet-Q37YHHAQ.js → fleet-LFO7SIPC.js} +147 -146
  218. package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-RLK72GU3.js} +27 -26
  219. package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
  220. package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-JZIBCGMW.js} +39 -38
  221. package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-2L5YGGZJ.js} +108 -91
  222. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  223. package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
  224. package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-LIAVKDUU.js} +46 -42
  225. package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-JIK3OQZR.js} +106 -89
  226. package/dist/fleet-view-IWHYGQKK.js +118 -0
  227. package/dist/{init-PXEXQSBF.js → init-NJEDOTQW.js} +124 -123
  228. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  229. package/dist/{interop-ZG5T62U3.js → interop-RVCAYECG.js} +25 -25
  230. package/dist/inventory-74UL7UHU.js +118 -0
  231. package/dist/{library-B2W4N74O.js → library-CTKZA7K3.js} +45 -44
  232. package/dist/{memory-YCANYS5A.js → memory-I76I5VUH.js} +108 -93
  233. package/dist/{models-GERTU3YI.js → models-D4YDIQZQ.js} +64 -62
  234. package/dist/{monitor-CPNIUULB.js → monitor-NKVD55HX.js} +137 -107
  235. package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-I6OATVPK.js} +1715 -1687
  236. package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
  237. package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
  238. package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
  239. package/dist/preload-EJAWJEIO.js +116 -0
  240. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  241. package/dist/{reset-TNWTB5LU.js → reset-4XMQKDNZ.js} +22 -20
  242. package/dist/{resources-4PXNMD5G.js → resources-TVYVXK3Q.js} +41 -40
  243. package/dist/{run-D6XJ34CN.js → run-OWQNNSJU.js} +164 -157
  244. package/dist/{share-2NWMJJEE.js → share-NPZZMUXG.js} +43 -42
  245. package/dist/{skills-KR7WON5G.js → skills-OXFEAWMT.js} +47 -46
  246. package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-J5TCKSJA.js} +128 -107
  247. package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-7II4DM57.js} +41 -40
  248. package/dist/slash-commands-MDSDSWYF.js +92 -0
  249. package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
  250. package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
  251. package/dist/{targets-OMH2XCSN.js → targets-KILZEOCE.js} +161 -94
  252. package/dist/tasks-R6P6OV22.js +36 -0
  253. package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-LZCG2KN3.js} +12 -11
  254. package/dist/tools-6OCQ6SVB.js +28 -0
  255. package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
  256. package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
  257. package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
  258. package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
  259. package/dist/{upgrade-MS72RJEP.js → upgrade-D2OZH6IQ.js} +42 -41
  260. package/dist/{usage-NHG6MCJM.js → usage-PIASNUS4.js} +137 -105
  261. package/dist/{verifiers-7AUNVXDY.js → verifiers-LTHUY2PX.js} +28 -27
  262. package/dist/verify-HYF7KBVE.js +30 -0
  263. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  264. package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
  265. package/dist/wiki-generate-RK7JQ5NP.js +615 -0
  266. package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
  267. package/dist/worker/entry.js +108 -95
  268. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  269. package/docs/README.md +7 -6
  270. package/docs/architecture/acp.md +10 -0
  271. package/docs/architecture/architecture.md +5 -5
  272. package/docs/architecture/context-engine.md +45 -60
  273. package/docs/architecture/context-working-set.md +7 -9
  274. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  275. package/docs/architecture/evidence-and-memory.md +10 -0
  276. package/docs/architecture/pi-boundary.md +37 -7
  277. package/docs/architecture/prompt-envelope-and-tools.md +7 -7
  278. package/docs/architecture/session-lifecycle.md +4 -4
  279. package/docs/architecture/tui-design.md +45 -30
  280. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  281. package/docs/guide/commands-and-modes.md +75 -61
  282. package/docs/guide/configuration-and-targets.md +126 -26
  283. package/docs/guide/configuration-reference.md +22 -7
  284. package/docs/guide/environment-variables.md +6 -2
  285. package/docs/guide/fleet-dispatch.md +13 -6
  286. package/docs/guide/glossary.md +1 -1
  287. package/docs/guide/installation-and-lifecycle.md +79 -20
  288. package/docs/guide/proactive-memory.md +1 -1
  289. package/docs/guide/skills-marketplace.md +11 -3
  290. package/docs/guide/tool-usage.md +9 -2
  291. package/docs/process/development-pipeline.md +11 -11
  292. package/docs/process/documentation-coverage.md +1 -1
  293. package/docs/process/documentation-guide.md +2 -2
  294. package/docs/process/eval-runner.md +15 -0
  295. package/docs/process/evals-internal.md +1 -1
  296. package/docs/process/release-cut-checklist.md +24 -12
  297. package/evals/README.md +4 -0
  298. package/evals/behavioral-corpus-grader.mjs +147 -14
  299. package/evals/behavioral-model-negative-control.yaml +1 -0
  300. package/evals/behavioral-model.yaml +266 -1
  301. package/evals/fixtures/docs-retrieval.json +102 -0
  302. package/evals/fixtures/scalar-decision.json +17 -0
  303. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  304. package/evals/fixtures/source-explanation.json +74 -0
  305. package/evals/fixtures/tool-arguments.json +18 -0
  306. package/evals/fixtures/tool-surface/read.txt +4 -0
  307. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  308. package/evals/no-edit-memory-grader.mjs +149 -0
  309. package/evals/scalar-decision-grader.py +41 -0
  310. package/evals/scalar-decision-machinery.ts +145 -0
  311. package/evals/source-explanation-grader.mjs +118 -0
  312. package/evals/tool-surface-grader.mjs +53 -0
  313. package/evals/tool-surface-model.yaml +274 -0
  314. package/package.json +14 -14
  315. package/skills/README.md +6 -6
  316. package/skills/registry.yaml +1 -1
  317. package/skills/skill-marketplace.json +1 -1
  318. package/src/cli/ask.ts +10 -10
  319. package/src/cli/bootstrap-generate.ts +6 -0
  320. package/src/cli/config-inspect.ts +24 -7
  321. package/src/cli/config-trust.ts +62 -0
  322. package/src/cli/config.ts +8 -0
  323. package/src/cli/configure-editor.ts +51 -0
  324. package/src/cli/configure-interop.ts +1 -1
  325. package/src/cli/configure-oauth.ts +1 -1
  326. package/src/cli/configure-onboarding.ts +232 -96
  327. package/src/cli/configure-prompts.ts +76 -0
  328. package/src/cli/configure-quick.ts +274 -0
  329. package/src/cli/configure-target.ts +14 -2
  330. package/src/cli/configure.ts +413 -174
  331. package/src/cli/context-map.ts +75 -14
  332. package/src/cli/context.ts +46 -17
  333. package/src/cli/eval.ts +17 -3
  334. package/src/cli/modes/print.ts +32 -4
  335. package/src/cli/oauth-manual-input.ts +1 -1
  336. package/src/cli/reset.ts +2 -0
  337. package/src/cli/run.ts +16 -14
  338. package/src/cli/select.ts +35 -4
  339. package/src/cli/skills-eval.ts +10 -8
  340. package/src/cli/steer-channel.ts +31 -18
  341. package/src/cli/targets.ts +83 -31
  342. package/src/cli/tasks.ts +10 -1
  343. package/src/cli/upgrade.ts +11 -8
  344. package/src/cli/usage.ts +24 -0
  345. package/src/cli/wiki-generate.ts +239 -96
  346. package/src/core/bash-exec.ts +43 -15
  347. package/src/core/bus-events.ts +15 -0
  348. package/src/core/config.ts +39 -15
  349. package/src/core/defaults.ts +38 -15
  350. package/src/{interactive → core}/external-editor.ts +4 -4
  351. package/src/core/file-references.ts +11 -1
  352. package/src/core/incomplete-installation.ts +3 -1
  353. package/src/core/settings-layers.ts +21 -5
  354. package/src/core/termination.ts +26 -9
  355. package/src/core/untrusted-content.ts +16 -0
  356. package/src/core/workspace-trust.ts +179 -0
  357. package/src/domains/agents/builtins/coder.md +4 -2
  358. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  359. package/src/domains/agents/builtins/documenter.md +7 -4
  360. package/src/domains/agents/builtins/researcher.md +1 -0
  361. package/src/domains/agents/builtins/scout.md +7 -1
  362. package/src/domains/agents/result-contract.ts +199 -26
  363. package/src/domains/config/classify.ts +1 -1
  364. package/src/domains/config/keybindings.ts +3 -31
  365. package/src/domains/context/bootstrap-prompt.ts +11 -9
  366. package/src/domains/context/bootstrap.ts +74 -39
  367. package/src/domains/context/clio-md.ts +88 -26
  368. package/src/domains/context/codewiki/build-operation.ts +121 -0
  369. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  370. package/src/domains/context/codewiki/build-worker.ts +3 -35
  371. package/src/domains/context/codewiki/coordinator.ts +36 -6
  372. package/src/domains/context/codewiki/indexer.ts +59 -19
  373. package/src/domains/context/contract.ts +6 -2
  374. package/src/domains/context/extension.ts +72 -10
  375. package/src/domains/context/fingerprint.ts +39 -34
  376. package/src/domains/context/index.ts +7 -1
  377. package/src/domains/context/prompt-context.ts +55 -14
  378. package/src/domains/context/refresh.ts +9 -57
  379. package/src/domains/context/wiki/assemble.ts +14 -10
  380. package/src/domains/context/wiki/evidence.ts +209 -0
  381. package/src/domains/context/wiki/generate.ts +201 -67
  382. package/src/domains/context/wiki/meta.ts +10 -2
  383. package/src/domains/context/wiki/plan-store.ts +70 -14
  384. package/src/domains/context/wiki/plan.ts +71 -14
  385. package/src/domains/context/wiki/prompts.ts +42 -1
  386. package/src/domains/context/wiki/source-content.ts +106 -0
  387. package/src/domains/context/wiki/staleness.ts +33 -22
  388. package/src/domains/context/working-set/contract.ts +8 -2
  389. package/src/domains/context/working-set/engine.ts +17 -4
  390. package/src/domains/context/working-set/fold.ts +15 -2
  391. package/src/domains/context/working-set/marker.ts +2 -1
  392. package/src/domains/context/working-set/project.ts +18 -7
  393. package/src/domains/context/working-set/recall.ts +82 -56
  394. package/src/domains/dispatch/active-route-planner.ts +6 -3
  395. package/src/domains/dispatch/admission-queue.ts +19 -7
  396. package/src/domains/dispatch/admission.ts +3 -3
  397. package/src/domains/dispatch/budget-envelope.ts +47 -82
  398. package/src/domains/dispatch/capacity-lease.ts +57 -19
  399. package/src/domains/dispatch/contract.ts +10 -2
  400. package/src/domains/dispatch/event-pump.ts +28 -7
  401. package/src/domains/dispatch/execution-role.ts +49 -2
  402. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  403. package/src/domains/dispatch/extension.ts +190 -105
  404. package/src/domains/dispatch/fleet-run.ts +20 -0
  405. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  406. package/src/domains/dispatch/parallel-writers.ts +34 -0
  407. package/src/domains/dispatch/reservation-store.ts +8 -34
  408. package/src/domains/dispatch/route-approval.ts +3 -3
  409. package/src/domains/dispatch/route-observer.ts +4 -2
  410. package/src/domains/dispatch/route-quality.ts +6 -1
  411. package/src/domains/dispatch/types.ts +4 -3
  412. package/src/domains/dispatch/worker-spawn.ts +58 -21
  413. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  414. package/src/domains/eval/compare/behavioral.ts +81 -14
  415. package/src/domains/eval/compare/compare.ts +15 -5
  416. package/src/domains/eval/compare/envelope.ts +12 -5
  417. package/src/domains/eval/metrics/context.ts +24 -1
  418. package/src/domains/eval/metrics/tracked.ts +4 -28
  419. package/src/domains/eval/reports/comparison.ts +9 -9
  420. package/src/domains/eval/runners/clio-run.ts +5 -1
  421. package/src/domains/eval/schema/suite.ts +2 -0
  422. package/src/domains/eval/schema/validate.ts +1 -0
  423. package/src/domains/eval/suites/run.ts +189 -13
  424. package/src/domains/eval/verifiers/integrity.ts +39 -0
  425. package/src/domains/eval/verifiers/patch.ts +58 -2
  426. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  427. package/src/domains/evidence/build.ts +4 -2
  428. package/src/domains/interop/registry.ts +2 -2
  429. package/src/domains/middleware/hooks-io.ts +45 -26
  430. package/src/domains/middleware/hooks.ts +6 -0
  431. package/src/domains/middleware/injection-screen.ts +23 -0
  432. package/src/domains/middleware/rules.ts +5 -1
  433. package/src/domains/middleware/stalled-turn.ts +18 -3
  434. package/src/domains/middleware/task-board-reminder.ts +4 -2
  435. package/src/domains/middleware/task-nudge.ts +4 -1
  436. package/src/domains/mux/contract.ts +34 -1
  437. package/src/domains/mux/dock-controller.ts +8 -1
  438. package/src/domains/mux/index.ts +1 -0
  439. package/src/domains/mux/socket-client.ts +13 -3
  440. package/src/domains/observability/contract.ts +2 -2
  441. package/src/domains/observability/projection.ts +30 -9
  442. package/src/domains/prompts/compiler.ts +10 -2
  443. package/src/domains/prompts/contract.ts +7 -4
  444. package/src/domains/prompts/extension.ts +28 -64
  445. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  446. package/src/domains/prompts/fragments/operating/contract.md +10 -0
  447. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  448. package/src/domains/prompts/fragments/wiki/page.md +28 -15
  449. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  450. package/src/domains/prompts/preload-prefix.ts +31 -0
  451. package/src/domains/prompts/preload.ts +135 -61
  452. package/src/domains/providers/auth/backend-file.ts +15 -11
  453. package/src/domains/providers/auth/storage.ts +3 -5
  454. package/src/domains/providers/catalog.ts +18 -3
  455. package/src/domains/providers/probe/fingerprint.ts +13 -6
  456. package/src/domains/providers/probe/reasoning.ts +2 -0
  457. package/src/domains/providers/runtime-resolution.ts +11 -9
  458. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  459. package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
  460. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
  461. package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
  462. package/src/domains/resources/skills/promotion.ts +8 -1
  463. package/src/domains/safety/action-classifier.ts +9 -0
  464. package/src/domains/safety/autonomy.ts +10 -1
  465. package/src/domains/safety/contract.ts +5 -1
  466. package/src/domains/safety/default-path-policy.ts +11 -0
  467. package/src/domains/safety/extension.ts +11 -2
  468. package/src/domains/safety/policy-engine.ts +189 -32
  469. package/src/domains/safety/project-policy.ts +7 -2
  470. package/src/domains/safety/workspace-trust.ts +43 -0
  471. package/src/domains/session/compaction/compact.ts +384 -21
  472. package/src/domains/session/compaction/cut-point.ts +42 -5
  473. package/src/domains/session/compaction/tokens.ts +9 -1
  474. package/src/domains/session/decision-board.ts +43 -33
  475. package/src/domains/session/entries.ts +169 -4
  476. package/src/domains/session/prompt-manifest.ts +47 -8
  477. package/src/domains/session/task-board.ts +21 -3
  478. package/src/domains/user-tasks/handoff.ts +16 -0
  479. package/src/engine/acp/adapter.ts +44 -12
  480. package/src/engine/acp/server.ts +1 -0
  481. package/src/engine/acp/transport.ts +2 -1
  482. package/src/engine/acp/types.ts +6 -1
  483. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  484. package/src/engine/api-registry.ts +19 -2
  485. package/src/engine/apis/openai-completions.ts +13 -6
  486. package/src/engine/apis/output-budget.ts +26 -10
  487. package/src/engine/claude/sdk-runtime.ts +4 -3
  488. package/src/engine/env-api-keys.ts +2 -1
  489. package/src/engine/external-subprocess.ts +14 -3
  490. package/src/engine/loop-guard.ts +19 -2
  491. package/src/engine/provider-diagnostics.ts +129 -0
  492. package/src/engine/provider-payload.ts +3 -1
  493. package/src/engine/worker-runtime.ts +13 -2
  494. package/src/engine/worker-tools.ts +5 -1
  495. package/src/entry/extension-reload.ts +1 -0
  496. package/src/entry/orchestrator.ts +53 -15
  497. package/src/interactive/application-controller.ts +1 -31
  498. package/src/interactive/chat-loop-messages.ts +12 -4
  499. package/src/interactive/chat-loop.ts +115 -45
  500. package/src/interactive/chat-panel.ts +163 -637
  501. package/src/interactive/chat-renderer.ts +73 -30
  502. package/src/interactive/context-recall-command.ts +2 -1
  503. package/src/interactive/dispatch-board.ts +18 -5
  504. package/src/interactive/editor-submit.ts +21 -31
  505. package/src/interactive/footer/dashboard.ts +8 -3
  506. package/src/interactive/footer/widgets.ts +50 -91
  507. package/src/interactive/interactive-application.ts +24 -44
  508. package/src/interactive/interactive-event-projection.ts +9 -45
  509. package/src/interactive/interactive-input-runtime.ts +3 -28
  510. package/src/interactive/interactive-presentation.ts +45 -16
  511. package/src/interactive/interactive-slash-runtime.ts +5 -40
  512. package/src/interactive/layout.ts +31 -5
  513. package/src/interactive/model-session-replay.ts +2 -2
  514. package/src/interactive/overlay-frame.ts +1 -0
  515. package/src/interactive/overlay-general-openers.ts +5 -1
  516. package/src/interactive/overlay-lifecycle.ts +1 -0
  517. package/src/interactive/overlay-session-lifecycle.ts +7 -1
  518. package/src/interactive/overlays/ask-user.ts +1 -0
  519. package/src/interactive/overlays/message-picker.ts +1 -1
  520. package/src/interactive/overlays/settings.ts +9 -8
  521. package/src/interactive/renderers/preview.ts +16 -0
  522. package/src/interactive/renderers/tool-execution.ts +84 -161
  523. package/src/interactive/renderers/worker-entry.ts +74 -43
  524. package/src/interactive/slash-autocomplete.ts +1 -6
  525. package/src/interactive/slash-commands.ts +16 -46
  526. package/src/interactive/status/controller.ts +0 -5
  527. package/src/interactive/status/state-machine.ts +44 -26
  528. package/src/interactive/status/types.ts +3 -0
  529. package/src/interactive/status/verbs.ts +13 -12
  530. package/src/interactive/transcript-detail.ts +50 -112
  531. package/src/interactive/turn-context.ts +221 -53
  532. package/src/interactive/turn-middleware.ts +3 -1
  533. package/src/interactive/turn-persistence.ts +3 -0
  534. package/src/interactive/turn-runtime.ts +11 -2
  535. package/src/interactive/turn-state.ts +10 -9
  536. package/src/interactive/view/artifacts.ts +4 -0
  537. package/src/interactive/view/view-overlay.ts +44 -34
  538. package/src/interactive/watch-pane.ts +18 -4
  539. package/src/interactive/worker-stream.ts +7 -7
  540. package/src/tools/agent-tools.ts +6 -3
  541. package/src/tools/bash.ts +1 -1
  542. package/src/tools/builtin-tool-catalog.ts +9 -2
  543. package/src/tools/codewiki/code-nav.ts +4 -10
  544. package/src/tools/compete-judge-task.ts +71 -0
  545. package/src/tools/compete-worktrees.ts +34 -0
  546. package/src/tools/context/index.ts +32 -7
  547. package/src/tools/context/surface.ts +15 -4
  548. package/src/tools/decide.ts +1 -1
  549. package/src/tools/dispatch-admission.ts +12 -1
  550. package/src/tools/dispatch-arguments.ts +38 -1
  551. package/src/tools/dispatch-plan.ts +7 -7
  552. package/src/tools/dispatch-runner.ts +48 -32
  553. package/src/tools/dispatch-schema.ts +30 -23
  554. package/src/tools/dispatch-scout-admission.ts +10 -44
  555. package/src/tools/dispatch-scout.ts +2 -3
  556. package/src/tools/find.ts +13 -4
  557. package/src/tools/grep.ts +13 -1
  558. package/src/tools/ls.ts +7 -1
  559. package/src/tools/monitor.ts +26 -11
  560. package/src/tools/network-policy.ts +11 -24
  561. package/src/tools/observation.ts +39 -2
  562. package/src/tools/presentation.ts +1 -1
  563. package/src/tools/read.ts +112 -15
  564. package/src/tools/registry.ts +55 -18
  565. package/src/tools/result-shaping.ts +110 -2
  566. package/src/tools/tasks.ts +33 -7
  567. package/src/tools/verify/frontend.ts +67 -30
  568. package/src/tools/verify/numeric.ts +10 -5
  569. package/src/tools/web-fetch-network.ts +179 -0
  570. package/src/tools/web-fetch-surface.ts +2 -1
  571. package/src/tools/web-fetch.ts +15 -13
  572. package/src/tools/worker-evidence.ts +27 -0
  573. package/src/worker/spec-contract.ts +12 -8
  574. package/dist/builtins-WGALA46I.js +0 -22
  575. package/dist/chunk-2WZ546HR.js +0 -792
  576. package/dist/chunk-5PSMVOLM.js +0 -56
  577. package/dist/chunk-EL24TAU4.js +0 -1560
  578. package/dist/chunk-IZXGRF7P.js +0 -4048
  579. package/dist/chunk-JVCV3ICN.js +0 -47
  580. package/dist/chunk-MNJGS2IN.js +0 -33
  581. package/dist/chunk-O5CVSAG5.js +0 -122
  582. package/dist/chunk-ODGTEFFI.js +0 -50
  583. package/dist/chunk-OQE5J4C6.js +0 -73
  584. package/dist/chunk-UUVG37B4.js +0 -244
  585. package/dist/chunk-V6HJFQZE.js +0 -228
  586. package/dist/clio-QLICPCF5.js +0 -25
  587. package/dist/configure-VEPX4NMX.js +0 -55
  588. package/dist/context-clear-S4ZJCQUX.js +0 -182
  589. package/dist/detail-A7JAVSIG.js +0 -98
  590. package/dist/evidence-4F5USFKH.js +0 -208
  591. package/dist/fleet-view-MN2VG4MR.js +0 -101
  592. package/dist/inventory-C26CFDRR.js +0 -101
  593. package/dist/preload-P6DGH2PZ.js +0 -13
  594. package/dist/slash-commands-ZXPJD64J.js +0 -92
  595. package/dist/tasks-IPAGMEIX.js +0 -36
  596. package/dist/tools-EFFEAIDP.js +0 -28
  597. package/dist/verify-FWYGPKMR.js +0 -29
  598. package/dist/wiki-generate-743CIGJW.js +0 -476
@@ -14,9 +14,9 @@
14
14
  */
15
15
 
16
16
  import { existsSync } from "node:fs";
17
- import { ToolNames } from "../core/tool-names.js";
18
17
  import { foldWorkingSet } from "../domains/context/working-set/fold.js";
19
18
  import { compactionCut } from "../domains/context/working-set/visible.js";
19
+ import { captureSkillContext } from "../domains/session/compaction/compact.js";
20
20
  import type {
21
21
  BashExecutionEntry,
22
22
  BranchSummaryEntry,
@@ -25,12 +25,14 @@ import type {
25
25
  FileEntryEntry,
26
26
  MessageEntry,
27
27
  ModelChangeEntry,
28
+ PreservedSkillContext,
28
29
  ProtectedArtifactEntry,
29
30
  SessionEntry,
30
31
  SessionInfoEntry,
31
32
  ThinkingLevelChangeEntry,
32
33
  WorkerRunEntry,
33
34
  } from "../domains/session/entries.js";
35
+ import { latestSkillContextState, verifiedSkillContextCheckpoint } from "../domains/session/entries.js";
34
36
  import {
35
37
  HANDOFF_NOTE_CUSTOM_TYPE,
36
38
  HANDOFF_SEED_CUSTOM_TYPE,
@@ -49,7 +51,6 @@ import {
49
51
  } from "../engine/messages.js";
50
52
  import { wrapTextWithAnsi } from "../engine/tui.js";
51
53
  import type { AgentMessage } from "../engine/types.js";
52
- import { toolPresentationPolicy } from "../tools/presentation.js";
53
54
  import { toolResultPresentationText } from "../tools/result-disposition.js";
54
55
  import type { ChatLoopEvent, RetryStatusPayload } from "./chat-loop.js";
55
56
  import { isSelfExplainingAbort, toolResultSummary } from "./chat-loop-messages.js";
@@ -66,7 +67,7 @@ import {
66
67
  type StreamPacer,
67
68
  type StreamPacerSlice,
68
69
  } from "./stream-pacer.js";
69
- import { type FoldOverride, policyToolFold, resolveFold, type TranscriptDetailPolicy } from "./transcript-detail.js";
70
+ import type { TranscriptDetailPolicy } from "./transcript-detail.js";
70
71
  import { readWorkerReceiptFactsForReplay } from "./worker-receipts.js";
71
72
  import { workerEntriesFromRunEntries } from "./worker-replay.js";
72
73
  import type { WorkerReceiptReader } from "./worker-stream.js";
@@ -334,6 +335,8 @@ export function createCoalescingChatRenderer(deps: CreateCoalescingChatRendererD
334
335
  * Options for the rehydrate helper used by /resume and /fork.
335
336
  */
336
337
  export interface RehydrateChatPanelOptions {
338
+ /** Unprojected ledger for verifying historical skill receipts after eviction projection. */
339
+ skillContextEntries?: ReadonlyArray<SessionEntry>;
337
340
  /**
338
341
  * Select the active branch ancestry without truncating later sidecars.
339
342
  * Live compaction replay uses this so a summary appended after the current
@@ -451,6 +454,7 @@ function richMessageFromEntry(entry: MessageEntry, maxTextChars?: number): Agent
451
454
  "responseModelIdObservation",
452
455
  "responseModel",
453
456
  "responseId",
457
+ "providerThinkingLevel",
454
458
  "gatewayRouting",
455
459
  "diagnostics",
456
460
  "contextUsageInvalidated",
@@ -798,25 +802,24 @@ function appendReplayLine(chatPanel: ChatPanel, text: string): void {
798
802
  function renderBashExecutionEntry(
799
803
  entry: BashExecutionEntry,
800
804
  width: number,
801
- folded: boolean,
805
+ detail: TranscriptDetailPolicy,
802
806
  unbounded: boolean,
803
807
  ): string[] {
804
808
  const normalizedOutput = entry.output.replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\s+$/g, "");
805
809
  return renderBashTranscriptExecution(
806
810
  {
807
811
  command: entry.command,
808
- output: unbounded ? normalizedOutput : truncateReplayText(normalizedOutput),
812
+ output: normalizedOutput,
809
813
  running: false,
810
814
  exitCode: entry.exitCode,
811
815
  cancelled: entry.cancelled,
812
816
  truncated: entry.truncated,
813
817
  fullOutputPath: entry.fullOutputPath,
814
818
  excludeFromContext: entry.excludeFromContext,
815
- folded,
816
819
  },
817
820
  width,
818
821
  undefined,
819
- { unbounded, diffStyle: "plain" },
822
+ { unbounded, diffStyle: "plain", detail },
820
823
  );
821
824
  }
822
825
 
@@ -1068,6 +1071,15 @@ function appendContextMessage(
1068
1071
  out.push(makeTextMessage(role, truncateReplayText(trimmed), timestamp));
1069
1072
  }
1070
1073
 
1074
+ const UNVERIFIED_SKILL_CHECKPOINT_TEXT =
1075
+ "Preserved skill instructions on this checkpoint failed integrity verification and were not replayed. If a skill still applies, ask the operator to run /skill <name> again.";
1076
+
1077
+ /** Selected but unverifiable: name the skill and the exact ledger ref instead of dropping it. */
1078
+ function unverifiedSkillContextText(skill: PreservedSkillContext): string {
1079
+ const activation = skill.activation;
1080
+ return `Preserved skill instructions for ${activation.name} (source=${activation.source} hash=${activation.hash} path=${activation.filePath}) could not be re-verified against this session's ledger and were not replayed. If the skill still applies, recall the original load with context(scope="recall", ref="${skill.resultRef}") or ask the operator to run /skill ${activation.name} again.`;
1081
+ }
1082
+
1071
1083
  function skillActivationContextText(entry: Extract<SessionEntry, { kind: "skillActivation" }>): string {
1072
1084
  const activation = entry.activation;
1073
1085
  const turn = activation.turnId ? ` turn=${activation.turnId}` : "";
@@ -1080,6 +1092,16 @@ export function buildReplayAgentMessagesFromTurns(
1080
1092
  ): AgentMessage[] {
1081
1093
  const out = createOrderedReplaySink();
1082
1094
  const seenToolCalls = new Set<string>();
1095
+ const activeEntries = truncateAtTurn(
1096
+ filterEntriesToActivePath(turns, options.activeLeafTurnId ?? options.uptoTurnId),
1097
+ options.uptoTurnId,
1098
+ );
1099
+ const skillState = latestSkillContextState(activeEntries);
1100
+ const evidence = truncateAtTurn(
1101
+ filterEntriesToActivePath(options.skillContextEntries ?? turns, options.activeLeafTurnId ?? options.uptoTurnId),
1102
+ options.uptoTurnId,
1103
+ );
1104
+ const verified = captureSkillContext(evidence, skillState);
1083
1105
  for (const entry of selectReplayEntries(turns, options)) {
1084
1106
  switch (entry.kind) {
1085
1107
  case "message": {
@@ -1113,8 +1135,43 @@ export function buildReplayAgentMessagesFromTurns(
1113
1135
  break;
1114
1136
  case "compactionSummary":
1115
1137
  appendContextMessage(out, "user", compactionContextText(entry), entry.timestamp);
1138
+ if (entry.userContext)
1139
+ out.push(
1140
+ makeTextMessage("user", `Active user instructions (verbatim):\n${entry.userContext.text}`, entry.timestamp),
1141
+ );
1142
+ if (entry.skillContext !== undefined) {
1143
+ const retainedSkills = entry.skillContext.skills.length;
1144
+ if (!verifiedSkillContextCheckpoint(entry.skillContext)) {
1145
+ // The raw pairs behind a tampered checkpoint are already outside the
1146
+ // replay window. Say so rather than dropping the skill without a trace.
1147
+ if (retainedSkills > 0) {
1148
+ out.push(makeTextMessage("user", UNVERIFIED_SKILL_CHECKPOINT_TEXT, entry.timestamp));
1149
+ }
1150
+ break;
1151
+ }
1152
+ for (const skill of entry.skillContext.skills) {
1153
+ // An explicit later state that no longer names this activation is a
1154
+ // deliberate off or replacement; it leaves no trace, by design.
1155
+ if (skillState && !skillState.unknown && !skillState.activationRefs.includes(skill.activationRef)) continue;
1156
+ const receipt = verified?.skills.find((candidate) => candidate.activationRef === skill.activationRef);
1157
+ if (!receipt || JSON.stringify(receipt) !== JSON.stringify(skill)) {
1158
+ // Still selected, but its original receipt cannot be re-verified
1159
+ // (masked, rewritten, or unknown state). Never inject unverified
1160
+ // bytes, and never lose the skill silently either.
1161
+ out.push(makeTextMessage("user", unverifiedSkillContextText(skill), entry.timestamp));
1162
+ continue;
1163
+ }
1164
+ // This is historical instruction context, not a generated summary or a tool result.
1165
+ // Keep the exact captured blocks outside summary replay's text cap.
1166
+ out.push(makeTextMessage("user", `Preserved skill request (verbatim):\n${skill.requestText}`, entry.timestamp));
1167
+ out.push(makeTextMessage("user", `Verified loaded skill: ${JSON.stringify(skill.activation)}`, entry.timestamp));
1168
+ for (const block of skill.content) out.push(makeTextMessage("user", block.text, entry.timestamp));
1169
+ }
1170
+ }
1116
1171
  break;
1117
1172
  case "skillActivation":
1173
+ if (entry.activation.runId !== undefined || (skillState && !skillState.activationRefs.includes(entry.turnId)))
1174
+ break;
1118
1175
  appendContextMessage(out, "user", skillActivationContextText(entry), entry.timestamp);
1119
1176
  break;
1120
1177
  // The one custom entry that becomes a model message. `/handoff` seeds a
@@ -1199,16 +1256,16 @@ export function rehydrateChatPanelFromTurns(
1199
1256
  case "message": {
1200
1257
  if (entry.role === "user") {
1201
1258
  runAssistantMessages = [];
1202
- const text = truncateReplayText(replayedUserText(entry));
1259
+ const text = replayedUserText(entry);
1203
1260
  if (text.length > 0) chatPanel.appendUser(text);
1204
1261
  break;
1205
1262
  }
1206
1263
  if (entry.role === "assistant") {
1207
1264
  const text = chatMessageText(entry);
1208
1265
  const failure = messageFailure(entry);
1209
- const richMessage = richMessageFromEntry(entry, MAX_REPLAY_TEXT_CHARS);
1266
+ const richMessage = richMessageFromEntry(entry, Number.POSITIVE_INFINITY);
1210
1267
  if (richMessage || text.length > 0 || failure) {
1211
- const message = richMessage ?? makeTextMessage("assistant", truncateReplayText(text), entry.timestamp);
1268
+ const message = richMessage ?? makeTextMessage("assistant", text, entry.timestamp);
1212
1269
  if (failure) {
1213
1270
  (message as { stopReason?: string; errorMessage?: string }).stopReason = failure.stopReason;
1214
1271
  (message as { stopReason?: string; errorMessage?: string }).errorMessage = failure.errorMessage;
@@ -1243,7 +1300,7 @@ export function rehydrateChatPanelFromTurns(
1243
1300
  type: "tool_execution_end",
1244
1301
  toolCallId: fallbackId,
1245
1302
  toolName: result.name,
1246
- result: displayReplayToolResult(result.result, options.unboundedToolBodies === true),
1303
+ result: displayReplayToolResult(result.result, true),
1247
1304
  isError: result.isError,
1248
1305
  ...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {}),
1249
1306
  ...(resultSummary !== undefined ? { resultSummary } : {}),
@@ -1252,12 +1309,12 @@ export function rehydrateChatPanelFromTurns(
1252
1309
  ...(evictedReason !== undefined ? { evictedReason } : {}),
1253
1310
  } as ChatLoopEvent);
1254
1311
  } else {
1255
- chatPanel.appendReplayBlock((width) =>
1312
+ chatPanel.appendReplayBlock((width, detail, unbounded) =>
1256
1313
  renderToolResultOnly(
1257
1314
  {
1258
1315
  toolCallId: result.id ?? "",
1259
1316
  toolName: result.name,
1260
- result: displayReplayToolResult(result.result, options.unboundedToolBodies === true),
1317
+ result: displayReplayToolResult(result.result, true),
1261
1318
  isError: result.isError,
1262
1319
  ...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {}),
1263
1320
  ...(resultSummary !== undefined ? { resultSummary } : {}),
@@ -1266,7 +1323,7 @@ export function rehydrateChatPanelFromTurns(
1266
1323
  ...(evictedReason !== undefined ? { evictedReason } : {}),
1267
1324
  },
1268
1325
  width,
1269
- { unbounded: options.unboundedToolBodies === true },
1326
+ { unbounded: unbounded || options.unboundedToolBodies === true, detail },
1270
1327
  ),
1271
1328
  );
1272
1329
  }
@@ -1285,21 +1342,8 @@ export function rehydrateChatPanelFromTurns(
1285
1342
  break;
1286
1343
  }
1287
1344
  case "bashExecution": {
1288
- let fold: FoldOverride;
1289
- const presentation = toolPresentationPolicy(ToolNames.Bash, undefined);
1290
- const policyFold = (detail: TranscriptDetailPolicy) => policyToolFold(detail, presentation);
1291
- const unbounded = options.unboundedToolBodies === true;
1292
- chatPanel.appendReplayBlock(
1293
- (width, detail) =>
1294
- renderBashExecutionEntry(entry, width, resolveFold(fold, policyFold(detail)) === "folded", unbounded),
1295
- undefined,
1296
- {
1297
- policyFold,
1298
- fold: () => fold,
1299
- setFold: (next: FoldOverride) => {
1300
- fold = next;
1301
- },
1302
- },
1345
+ chatPanel.appendReplayBlock((width, detail, unbounded) =>
1346
+ renderBashExecutionEntry(entry, width, detail, unbounded || options.unboundedToolBodies === true),
1303
1347
  );
1304
1348
  break;
1305
1349
  }
@@ -1367,5 +1411,4 @@ export function rehydrateChatPanelFromTurns(
1367
1411
  // whatever the operator had opened or folded before the switch belonged to
1368
1412
  // the transcript they left. /export reaches the same policy with a verbose
1369
1413
  // panel, so nothing here is terminal-only.
1370
- chatPanel.clearFoldOverrides();
1371
1414
  }
@@ -65,6 +65,7 @@ function headlineFor(ref: string, tokens: number, state: EvictedState | undefine
65
65
  if (state !== undefined) {
66
66
  parts.push(state.by === undefined ? `evicted: ${state.reason}` : `evicted: ${state.reason} by ${state.by}`);
67
67
  }
68
+ if (state === undefined) parts.push("summarized");
68
69
  parts.push(`${formatTokens(tokens)} tokens`);
69
70
  if (offloadPath !== undefined) parts.push(`offload: ${offloadPath}`);
70
71
  return `[/context recall] ${parts.join(" · ")}`;
@@ -85,7 +86,7 @@ export function runOperatorRecall(ref: string, deps: OperatorRecallDeps): Operat
85
86
  // A ref that resolves to nothing is usually a typo or a stale marker; the
86
87
  // shared message ends with the refs the operator could have typed instead.
87
88
  if (!resolved.ok)
88
- return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view)}` };
89
+ return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view, leaf)}` };
89
90
  const { result } = resolved;
90
91
  const fields = buildRecallFields(result, { trigger: "operator" });
91
92
  try {
@@ -8,7 +8,11 @@ import {
8
8
  } from "../domains/dispatch/budget-envelope.js";
9
9
  import { type DispatchRequestOrigin, type RunKind, runKindSupportsLiveSteering } from "../domains/dispatch/types.js";
10
10
  import { describeWriteBoundaryAttributionDowngrade } from "../domains/dispatch/write-boundary.js";
11
- import type { TrustSummaryProjection, TrustVerdict } from "../domains/evidence/trust-projection.js";
11
+ import {
12
+ type TrustSummaryProjection,
13
+ type TrustVerdict,
14
+ trustStateWord,
15
+ } from "../domains/evidence/trust-projection.js";
12
16
  import type { ObservabilityContract, ObservabilityRunSummary } from "../domains/observability/contract.js";
13
17
  import {
14
18
  COST_NOT_MEASURED,
@@ -242,9 +246,7 @@ export interface DispatchOriginPresentation {
242
246
  * surface; a board row sits under the fleet summary, which already owns the
243
247
  * quadrant's single orange, so here the filled glyph carries origin by shape.
244
248
  */
245
- export function dispatchOriginPresentation(
246
- row: Pick<DispatchBoardRow, "requestOrigin">,
247
- ): DispatchOriginPresentation | null {
249
+ function dispatchOriginPresentation(row: Pick<DispatchBoardRow, "requestOrigin">): DispatchOriginPresentation | null {
248
250
  if (row.requestOrigin === "user") return { glyph: GLYPH.workerHuman, token: "accent" };
249
251
  if (row.requestOrigin === "agent") return { glyph: GLYPH.workerAgent, token: "muted" };
250
252
  if (row.requestOrigin === "internal") return { glyph: GLYPH.workerInternal, token: "dim" };
@@ -774,7 +776,18 @@ function renderTaskIslandRow(row: DispatchBoardRow, width: number): string[] {
774
776
  ? ` ${theme.fg("muted", truncateToWidth(row.taskSummary, Math.max(1, width - 2), "…", false))}`
775
777
  : null;
776
778
 
777
- return [padAnsi(line1, width), ...(task ? [padAnsi(task, width)] : []), padAnsi(telemetry, width)];
779
+ const quality = isTerminalStatus(row.status)
780
+ ? wrapTextWithAnsi(
781
+ ` quality: ${trustStateWord("validationGrounding", row.trust?.axes.validationGrounding ?? "unknown")}`,
782
+ width,
783
+ )
784
+ : [];
785
+ return [
786
+ padAnsi(line1, width),
787
+ ...quality.map((line) => padAnsi(theme.fg("muted", line), width)),
788
+ ...(task ? [padAnsi(task, width)] : []),
789
+ padAnsi(telemetry, width),
790
+ ];
778
791
  }
779
792
 
780
793
  /**
@@ -1,9 +1,8 @@
1
1
  import { combineBashOutput, runBashCommand } from "../core/bash-exec.js";
2
+ import { type ExternalEditResult, editTextExternally, resolveExternalEditor } from "../core/external-editor.js";
2
3
  import type { PendingSkillRequest } from "../core/skill-activation.js";
3
- import { ToolNames } from "../core/tool-names.js";
4
4
  import type { DispatchContract } from "../domains/dispatch/contract.js";
5
5
  import type { SessionContract, SessionEntry } from "../domains/session/index.js";
6
- import { toolPresentationPolicy } from "../tools/presentation.js";
7
6
  import type { ChatLoop } from "./chat-loop.js";
8
7
  import type { ChatPanel } from "./chat-panel.js";
9
8
  import { bashExecutionEntryInput, parseEditorBashCommand, unguardPastedEditorOperator } from "./editor-bash.js";
@@ -13,18 +12,12 @@ import {
13
12
  type RunningDispatchRef,
14
13
  resolveSteerTarget,
15
14
  } from "./editor-steer.js";
16
- import { type ExternalEditResult, editTextExternally, resolveExternalEditor } from "./external-editor.js";
17
15
  import { type BashTranscriptExecution, renderBashTranscriptExecution } from "./renderers/tool-execution.js";
18
16
  import { parseSlashCommand, type RunIo, type SlashCommand, type SlashCommandDispatchResult } from "./slash-commands.js";
19
- import {
20
- type FoldOverride,
21
- policyRunningToolFold,
22
- policyToolFold,
23
- resolveFold,
24
- type TranscriptDetailPolicy,
25
- } from "./transcript-detail.js";
26
17
 
27
18
  const EDITOR_BASH_TIMEOUT_MS = 300_000;
19
+ /** Existing bash TERM-to-KILL grace (5s), plus settlement and session append. */
20
+ export const EDITOR_BASH_SHUTDOWN_MS = 6000;
28
21
 
29
22
  /**
30
23
  * Command shapes whose text is put back in the editor after the parser rejects
@@ -84,6 +77,7 @@ export interface EditorSubmitSessionTranscript {
84
77
  }
85
78
 
86
79
  export interface EditorSubmitDeps {
80
+ onLocalBashRunning?: (running: boolean) => void;
87
81
  editor: EditorSubmitEditor;
88
82
  ui: EditorSubmitUi;
89
83
  io: RunIo;
@@ -125,18 +119,22 @@ export interface EditorSubmitController {
125
119
  restoreQueuedFollowUpsToEditor(): void;
126
120
  hasActiveEditorBash(): boolean;
127
121
  cancelActiveEditorBash(): boolean;
122
+ /** Stop shell admission, cancel the owned command, and await its persisted result. */
123
+ shutdownEditorBash(): Promise<void>;
128
124
  }
129
125
 
130
126
  type EditorSteerSubmission = "unhandled" | "accepted" | "rejected";
131
127
 
132
128
  /** Owns editor submission and the one local bash process attached to it. */
133
129
  export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubmitController {
130
+ let shuttingDown = false;
134
131
  let activeEditorBash: AbortController | null = null;
135
132
  let activeEditorBashSettlement: Promise<void> | null = null;
136
133
 
137
134
  const runEditorBash = (text: string): boolean => {
138
135
  const parsed = parseEditorBashCommand(text);
139
136
  if (!parsed) return false;
137
+ if (shuttingDown) return true;
140
138
  if (deps.chat.isStreaming()) {
141
139
  deps.io.stderr("[bash] response in progress. Press Esc to cancel the active run before running a local command.\n");
142
140
  return true;
@@ -165,35 +163,19 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
165
163
  totalBytes: 0,
166
164
  excludeFromContext: parsed.excludeFromContext,
167
165
  };
168
- // The operator's bash row follows the same rule as a model bash call: the
169
- // transcript detail policy (through bash's presentation once settled)
170
- // unless the operator overrode this one block with the expand key.
171
- let fold: FoldOverride;
172
- const bashPresentation = toolPresentationPolicy(ToolNames.Bash, undefined);
173
- const policyFold = (detail: TranscriptDetailPolicy) =>
174
- execution.running ? policyRunningToolFold(detail) : policyToolFold(detail, bashPresentation);
175
166
  deps.chatPanel.appendReplayBlock(
176
- (width, detail) =>
167
+ (width, detail, unbounded) =>
177
168
  renderBashTranscriptExecution(
178
- {
179
- ...execution,
180
- folded: resolveFold(fold, policyFold(detail)) === "folded",
181
- ...(execution.running ? { elapsedMs: Math.max(0, performance.now() - startedAt) } : {}),
182
- },
169
+ { ...execution, ...(execution.running ? { elapsedMs: Math.max(0, performance.now() - startedAt) } : {}) },
183
170
  width,
171
+ undefined,
172
+ { detail, ...(unbounded ? { unbounded } : {}) },
184
173
  ),
185
174
  () => execution.running,
186
- {
187
- policyFold,
188
- fold: () => fold,
189
- setFold: (next: FoldOverride) => {
190
- fold = next;
191
- deps.ui.requestRender();
192
- },
193
- },
194
175
  );
195
176
  deps.ui.requestRender();
196
177
 
178
+ deps.onLocalBashRunning?.(true);
197
179
  let settlement!: Promise<void>;
198
180
  settlement = (async () => {
199
181
  try {
@@ -243,6 +225,7 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
243
225
  execution.error = msg;
244
226
  deps.io.stderr(`[bash] ${msg}\n`);
245
227
  } finally {
228
+ deps.onLocalBashRunning?.(false);
246
229
  if (activeEditorBash === abort) activeEditorBash = null;
247
230
  if (activeEditorBashSettlement === settlement) activeEditorBashSettlement = null;
248
231
  deps.ui.requestRender();
@@ -394,12 +377,14 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
394
377
  const literalText = unguardPastedEditorOperator(text);
395
378
  const trimmed = literalText.trim();
396
379
  if (trimmed.length === 0) return;
380
+ if (shuttingDown) throw new Error("editor is shutting down");
397
381
  signal?.throwIfAborted();
398
382
  deps.collapseLaunchpadBeforeSubmit?.();
399
383
  if (parseEditorBashCommand(text)) {
400
384
  while (deps.chat.isStreaming()) await awaitWithAbort(deps.chat.whenSettled(), signal);
401
385
  while (activeEditorBashSettlement) await awaitWithAbort(activeEditorBashSettlement, signal);
402
386
  signal?.throwIfAborted();
387
+ if (shuttingDown) throw new Error("editor is shutting down");
403
388
  deps.editor.addToHistory(literalText);
404
389
  runEditorBash(text);
405
390
  deps.ui.requestRender();
@@ -529,6 +514,11 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
529
514
  interruptFromEditor,
530
515
  restoreQueuedFollowUpsToEditor,
531
516
  hasActiveEditorBash: () => activeEditorBash !== null,
517
+ shutdownEditorBash: async () => {
518
+ shuttingDown = true;
519
+ activeEditorBash?.abort();
520
+ await activeEditorBashSettlement;
521
+ },
532
522
  cancelActiveEditorBash: () => {
533
523
  if (!activeEditorBash) return false;
534
524
  activeEditorBash.abort();
@@ -139,7 +139,12 @@ function statusText(status: AgentStatus | undefined, now: number, width: number,
139
139
  if (!status || status.phase === "idle") return null;
140
140
  const verb = resolveFooterVerb(status, now, width);
141
141
  if (!verb) return status.phase.replace(/_/g, " ");
142
- return status.phase === "ended" ? verb.text : `${spinnerFrame(frame)} ${verb.text}`;
142
+ return status.phase === "ended" ||
143
+ status.phase === "tool_blocked" ||
144
+ status.phase === "stuck" ||
145
+ status.tool?.toolName === "ask_user"
146
+ ? verb.text
147
+ : `${spinnerFrame(frame)} ${verb.text}`;
143
148
  }
144
149
 
145
150
  /** Null before anything has been priced, so the footer shows no cost field at all. */
@@ -172,7 +177,7 @@ function renderFooterCompactLines(state: FooterDashboardRenderState, width: numb
172
177
  state.throughput,
173
178
  state.sessionTokens,
174
179
  state.sessionCost,
175
- state.session.outputVerbosity,
180
+ state.session.outputStyle,
176
181
  state.session.leaderArmed ?? false,
177
182
  state.session.shutdownArmed ?? false,
178
183
  ),
@@ -434,7 +439,7 @@ export function buildFooterDashboard(deps: FooterDashboardDeps): FooterDashboard
434
439
  capabilities,
435
440
  safety,
436
441
  toolProfile,
437
- outputVerbosity: settings?.interface.outputDetail ?? "default",
442
+ outputStyle: settings?.interface.outputDetail ?? "standard",
438
443
  leaderArmed: deps.getLeaderArmed?.() ?? false,
439
444
  shutdownArmed: deps.getShutdownArmed?.() ?? false,
440
445
  memoryIntervention: taskMemory