@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
@@ -1,4 +1,4 @@
1
- import type { OutputVerbosity } from "../../core/defaults.js";
1
+ import type { OutputStyle } from "../../core/defaults.js";
2
2
  import { ToolNames } from "../../core/tool-names.js";
3
3
  import {
4
4
  type CostAggregate,
@@ -14,7 +14,6 @@ import { CONTEXT_CATEGORY_TOKEN, contextCategorySwatch, renderContextMeterBar }
14
14
  import {
15
15
  agentDisplayLabel,
16
16
  type DispatchBoardRow,
17
- dispatchOriginPresentation,
18
17
  dispatchRowPrefix,
19
18
  dispatchStatusPresentation,
20
19
  } from "../dispatch-board.js";
@@ -70,7 +69,7 @@ export interface SessionFacts {
70
69
  safety: string | null;
71
70
  toolProfile: string | null;
72
71
  /** Active transcript detail mode, shown in the dashboard so visibility is never implicit. */
73
- outputVerbosity?: OutputVerbosity | null;
72
+ outputStyle?: OutputStyle | null;
74
73
  /**
75
74
  * Ctrl+G armed the portable leader and is waiting for the next key. Shown
76
75
  * because the frame between the two keystrokes was otherwise identical to
@@ -391,7 +390,7 @@ export function compactSecondaryLine(
391
390
  throughput: TokenThroughputSnapshot | null = null,
392
391
  sessionTokens: UsageBreakdown | null = null,
393
392
  sessionCost: CostAggregate | null = null,
394
- outputVerbosity?: OutputVerbosity | null,
393
+ outputStyle?: OutputStyle | null,
395
394
  leaderArmed = false,
396
395
  shutdownArmed = false,
397
396
  ): string {
@@ -427,15 +426,15 @@ export function compactSecondaryLine(
427
426
  context.used ?? undefined,
428
427
  maxRightWidth,
429
428
  compactMetricChipLimit(safeWidth),
430
- outputVerbosity,
429
+ outputStyle,
431
430
  leaderArmed,
432
431
  shutdownArmed,
433
432
  );
434
433
  // At the smallest widths the context meter consumes the entire secondary
435
434
  // row, so keep a compact mode marker on the left instead of silently hiding
436
435
  // the active transcript setting.
437
- if (outputVerbosity && outputVerbosity !== "default" && visibleWidth(right) === 0) {
438
- const marker = outputVerbosity === "minimal" ? "m" : outputVerbosity === "verbose" ? "v" : "d";
436
+ if (outputStyle && outputStyle !== "standard" && visibleWidth(right) === 0) {
437
+ const marker = outputStyle === "compact" ? "C" : outputStyle === "detailed" ? "D" : "S";
439
438
  left = `${left}${theme.fg("dim", ` out:${marker}`)}`;
440
439
  }
441
440
  return joinColumns(left, right, safeWidth);
@@ -541,8 +540,8 @@ export function sessionQuadrant(facts: SessionFacts, options: ExpandedQuadrantOp
541
540
  kv("profile", facts.toolProfile),
542
541
  kv(
543
542
  "output",
544
- facts.outputVerbosity && facts.outputVerbosity !== "default" ? facts.outputVerbosity : null,
545
- facts.outputVerbosity === "verbose" ? "accent" : "muted",
543
+ facts.outputStyle && facts.outputStyle !== "standard" ? facts.outputStyle : null,
544
+ facts.outputStyle === "detailed" ? "accent" : "muted",
546
545
  ),
547
546
  styledKv("memory", memoryValue),
548
547
  ]);
@@ -965,35 +964,41 @@ type HarnessPhasePresentation = {
965
964
 
966
965
  function shortToolLabel(status: AgentStatus, width: number): string {
967
966
  const name = status.tool?.toolName?.trim();
968
- if (name === ToolNames.AskUser) return width < 72 ? "ask" : "waiting for user";
969
- if (!name || width < 72) return "tool";
967
+ if (name === ToolNames.AskUser) return "Needs input";
968
+ if (name === ToolNames.Dispatch) return "Waiting for worker";
969
+ if (!name || width < 72) return "Running tool";
970
970
  const nameWidth = width >= 100 ? 18 : 12;
971
971
  // The pill label is never padded; truncate without pad so the tool name is
972
972
  // followed by a single space before the badge, not a column of blanks.
973
- return `tool ${truncateToWidth(name, nameWidth, "…", false)}`;
973
+ return `Running ${truncateToWidth(name, nameWidth, "…", false)}`;
974
974
  }
975
975
 
976
976
  function harnessPhasePresentation(status: AgentStatus, width: number, now: number): HarnessPhasePresentation {
977
977
  const ultraNarrow = width < 48;
978
978
  switch (status.phase) {
979
979
  case "idle":
980
- return { glyph: GLYPH.queued, label: "idle", token: "muted", live: false };
980
+ return { glyph: GLYPH.queued, label: "Ready", token: "muted", live: false };
981
981
  case "preparing":
982
- return { glyph: GLYPH.phaseWaiting, label: "prep", token: "info", live: true };
982
+ return { glyph: GLYPH.phaseWaiting, label: "Preparing", token: "info", live: true };
983
983
  case "waiting_model":
984
- return { glyph: GLYPH.phaseWaiting, label: "waiting", token: "info", live: true };
984
+ return { glyph: GLYPH.phaseWaiting, label: "Waiting for model", token: "info", live: true };
985
985
  case "thinking":
986
- return { glyph: GLYPH.phaseThinking, label: "thinking", token: "reason", live: true };
986
+ return { glyph: GLYPH.phaseThinking, label: "Thinking", token: "reason", live: true };
987
987
  case "writing":
988
- return { glyph: GLYPH.phaseWriting, label: "writing", token: "accent", live: true };
988
+ return { glyph: GLYPH.phaseWriting, label: "Writing", token: "accent", live: true };
989
989
  case "tool_running":
990
- return { glyph: GLYPH.phaseTool, label: shortToolLabel(status, width), token: "accent", live: true };
990
+ return {
991
+ glyph: GLYPH.phaseTool,
992
+ label: shortToolLabel(status, width),
993
+ token: "accent",
994
+ live: status.tool?.toolName !== ToolNames.AskUser,
995
+ };
991
996
  case "tool_blocked":
992
997
  // Attention states hold a static glyph rather than spinning: the work
993
998
  // has paused for a human, so the pill should not read as live progress.
994
999
  // The phase fires only on PermissionRequested, so the pill names the
995
1000
  // wait for confirmation; "blocked" would contradict the ask overlay.
996
- return { glyph: GLYPH.phaseBlocked, label: "confirm", token: "warning", live: false };
1001
+ return { glyph: GLYPH.phaseBlocked, label: "Needs approval", token: "warning", live: false };
997
1002
  case "retrying": {
998
1003
  const attempt = status.retry?.attempt ?? 0;
999
1004
  const maxAttempts = status.retry?.maxAttempts ?? 0;
@@ -1005,15 +1010,26 @@ function harnessPhasePresentation(status: AgentStatus, width: number, now: numbe
1005
1010
  };
1006
1011
  }
1007
1012
  case "compacting":
1008
- return { glyph: GLYPH.phaseCompact, label: "compacting", token: "reason", live: true };
1013
+ return { glyph: GLYPH.phaseCompact, label: "Compacting context", token: "reason", live: true };
1009
1014
  case "dispatching":
1010
- return { glyph: GLYPH.phaseDispatch, label: "dispatch", token: "action", live: true };
1015
+ return { glyph: GLYPH.phaseDispatch, label: "Waiting for worker", token: "action", live: true };
1011
1016
  case "stuck": {
1012
- const seconds = Math.max(0, Math.floor((now - status.since) / 1000));
1013
- return { glyph: GLYPH.warn, label: ultraNarrow ? "stuck" : `stuck ${seconds}s`, token: "error", live: false };
1017
+ const seconds = Math.max(0, Math.floor((now - status.lastMeaningfulAt) / 1000));
1018
+ return {
1019
+ glyph: GLYPH.warn,
1020
+ label: ultraNarrow ? "No output" : `No output · ${seconds}s`,
1021
+ token: "warning",
1022
+ live: false,
1023
+ };
1024
+ }
1025
+ case "ended": {
1026
+ const stop = status.summary?.stopReason;
1027
+ if (stop === "error") return { glyph: GLYPH.error, label: "Failed", token: "error", live: false };
1028
+ if (stop === "aborted" || stop === "cancelled")
1029
+ return { glyph: GLYPH.cancelled, label: "Cancelled", token: "muted", live: false };
1030
+ if (stop === "length") return { glyph: GLYPH.warn, label: "Output limit", token: "warning", live: false };
1031
+ return { glyph: GLYPH.ok, label: "Ready", token: "success", live: false };
1014
1032
  }
1015
- case "ended":
1016
- return { glyph: GLYPH.ok, label: "done", token: "success", live: false };
1017
1033
  }
1018
1034
  }
1019
1035
 
@@ -1021,31 +1037,10 @@ function activeWorkerRows(rows: ReadonlyArray<DispatchBoardRow>): ReadonlyArray<
1021
1037
  return rows.filter((row) => row.status === "running" || row.status === "stale" || row.status === "enqueued");
1022
1038
  }
1023
1039
 
1024
- /**
1025
- * The live worker count, split by who asked once more than one kind is running:
1026
- * `◇1 ◆3` says the operator has one run of their own alongside three the model
1027
- * started, which `fleet 4` cannot. A single kind keeps the plain count, and so
1028
- * does a set holding a run whose origin never reached the projection, because a
1029
- * split that cannot name every active run would report a total that is short.
1030
- *
1031
- * The chip keeps one color. Its token says the fleet is busy; origin is carried
1032
- * by glyph shape, which is the same pair the board rows and the transcript
1033
- * blocks use.
1034
- */
1040
+ /** Background work stays a count beside the main phase. */
1035
1041
  function activeWorkerChip(rows: ReadonlyArray<DispatchBoardRow>): string {
1036
- const active = activeWorkerRows(rows);
1037
- const counts = new Map<string, number>();
1038
- for (const row of active) {
1039
- const glyph = dispatchOriginPresentation(row)?.glyph;
1040
- if (glyph === undefined) return `fleet ${active.length}`;
1041
- counts.set(glyph, (counts.get(glyph) ?? 0) + 1);
1042
- }
1043
- if (counts.size < 2) return `fleet ${active.length}`;
1044
- const order = [GLYPH.workerHuman, GLYPH.workerAgent, GLYPH.workerInternal];
1045
- return order
1046
- .filter((glyph) => counts.has(glyph))
1047
- .map((glyph) => `${glyph}${counts.get(glyph)}`)
1048
- .join(" ");
1042
+ const count = activeWorkerRows(rows).length;
1043
+ return `${count} worker${count === 1 ? "" : "s"}`;
1049
1044
  }
1050
1045
 
1051
1046
  function harnessBadge(
@@ -1066,8 +1061,8 @@ function harnessBadge(
1066
1061
  return badgeText ? theme.fg("muted", badgeText) : "";
1067
1062
  }
1068
1063
 
1069
- function outputVerbosityLabel(verbosity: OutputVerbosity): string {
1070
- return verbosity === "minimal" ? "min" : verbosity === "verbose" ? "verbose" : "default";
1064
+ function outputStyleLabel(verbosity: OutputStyle): string {
1065
+ return verbosity.charAt(0).toUpperCase() + verbosity.slice(1);
1071
1066
  }
1072
1067
 
1073
1068
  function buildHarnessStatePill(
@@ -1112,7 +1107,6 @@ const CHIP_RANK_SHUTDOWN = -2;
1112
1107
  const CHIP_RANK_LEADER = -1;
1113
1108
  const CHIP_RANK_TOTALS = 0;
1114
1109
  const CHIP_RANK_DETAIL = 1;
1115
- const CHIP_RANK_DEFERRED = 2;
1116
1110
 
1117
1111
  interface RankedChip {
1118
1112
  text: string;
@@ -1156,20 +1150,17 @@ function buildMetricStrip(
1156
1150
  liveInputTokens: number | null | undefined,
1157
1151
  maxWidth: number,
1158
1152
  maxChipsCount = 6,
1159
- outputVerbosity?: OutputVerbosity | null,
1153
+ outputStyle?: OutputStyle | null,
1160
1154
  leaderArmed = false,
1161
1155
  shutdownArmed = false,
1162
1156
  ): string {
1163
1157
  const safeMaxWidth = Math.max(0, Math.floor(maxWidth));
1164
1158
  if (safeMaxWidth <= 0) return "";
1165
1159
  const isStreaming = status.phase !== "idle" && status.phase !== "ended";
1166
- const meaningfulVerbosity = outputVerbosity && outputVerbosity !== "default" ? outputVerbosity : null;
1167
- if (!isStreaming && !lastTurn && !meaningfulVerbosity && !leaderArmed && !shutdownArmed) return "";
1160
+ const style = outputStyle ?? "standard";
1168
1161
 
1169
1162
  const candidates: Array<string | null> = [];
1170
- /** Per-turn detail that ranks below the session totals when the strip is cut. */
1171
- const deferred: Array<string | null> = [];
1172
- if (isStreaming) {
1163
+ if (isStreaming && outputStyle === "detailed") {
1173
1164
  const tps = finiteNonNegative(throughput?.tokensPerSecond);
1174
1165
  const rounded = tps > 0 ? (tps >= 10 ? Math.round(tps) : Math.round(tps * 10) / 10) : null;
1175
1166
  candidates.push(rounded !== null ? theme.fg("success", `${GLYPH.speed}${rounded}/s`) : null);
@@ -1186,39 +1177,7 @@ function buildMetricStrip(
1186
1177
  finiteNonNegative(lastTurn?.inputTokens) ||
1187
1178
  finiteNonNegative(sessionTokens?.input);
1188
1179
  candidates.push(inputTokens > 0 ? theme.fg("muted", `${GLYPH.up}${formatFooterTokens(inputTokens)}`) : null);
1189
- } else if (lastTurn) {
1190
- const stop = stopReasonStyle(lastTurn.stopReason);
1191
- candidates.push(theme.fg(stop.token, `${stop.glyph} ${formatCompactMs(lastTurn.elapsedMs)}`));
1192
- candidates.push(
1193
- theme.fg(
1194
- "muted",
1195
- `${GLYPH.up}${formatFooterTokens(lastTurn.inputTokens)} ${GLYPH.down}${formatFooterTokens(lastTurn.outputTokens)}`,
1196
- ),
1197
- );
1198
- candidates.push(reasoningChip(theme, lastTurn));
1199
- // Held back so the session totals below outrank them. The chip list is cut
1200
- // to `maxChipsCount` before it is measured, and with cache and tools ahead
1201
- // of the totals an 80-column terminal spent the whole budget on per-turn
1202
- // detail: the cost field disappeared from the footer at the exact moment
1203
- // it acquired a value, while `/cost` on the same session read `cost
1204
- // unknown`. Two surfaces, two answers, because of a slice.
1205
- deferred.push(
1206
- lastTurn.cacheReadTokens > 0 || lastTurn.cacheWriteTokens > 0
1207
- ? theme.fg(
1208
- "dim",
1209
- `cache ${formatFooterTokens(lastTurn.cacheReadTokens)}/${formatFooterTokens(lastTurn.cacheWriteTokens)}`,
1210
- )
1211
- : null,
1212
- );
1213
- if (lastTurn.toolCount > 0) {
1214
- const label = `${lastTurn.toolCount} tool${lastTurn.toolCount === 1 ? "" : "s"}`;
1215
- const errors = lastTurn.toolErrorCount > 0 ? theme.fg("error", ` ${lastTurn.toolErrorCount}${GLYPH.error}`) : "";
1216
- deferred.push(`${theme.fg("muted", label)}${errors}`);
1217
- } else {
1218
- deferred.push(null);
1219
- }
1220
1180
  }
1221
- if (meaningfulVerbosity) deferred.push(theme.fg("muted", `out ${outputVerbosityLabel(meaningfulVerbosity)}`));
1222
1181
 
1223
1182
  const fallbackTotal = finiteNonNegative(sessionTokens?.input) + finiteNonNegative(sessionTokens?.output);
1224
1183
  const cumulativeTotal = finiteNonNegative(sessionTokens?.totalTokens) || fallbackTotal;
@@ -1232,6 +1191,7 @@ function buildMetricStrip(
1232
1191
 
1233
1192
  const chipLimit = Math.max(0, Math.floor(maxChipsCount));
1234
1193
  const chips: RankedChip[] = [];
1194
+ pushChip(chips, theme.fg("muted", outputStyleLabel(style)), CHIP_RANK_LEADER);
1235
1195
  // Ranked above every measurement: the strip is cut by dropping the
1236
1196
  // lowest-ranked chip, and these two are the answer to "did that key
1237
1197
  // register". The quit hint outranks the leader because its window is
@@ -1245,6 +1205,5 @@ function buildMetricStrip(
1245
1205
  for (const chip of candidates) pushChip(chips, chip, CHIP_RANK_DETAIL);
1246
1206
  pushChip(chips, totalChip, CHIP_RANK_TOTALS);
1247
1207
  pushChip(chips, costChip, CHIP_RANK_DETAIL);
1248
- for (const chip of deferred) pushChip(chips, chip, CHIP_RANK_DEFERRED);
1249
1208
  return joinChips(theme, selectChips(theme, chips, chipLimit, safeMaxWidth));
1250
1209
  }
@@ -1,8 +1,10 @@
1
1
  import type { PermissionRequestedPayload } from "../core/bus-events.js";
2
2
  import type { ClioSettings } from "../core/config.js";
3
+ import { nextOutputStyle } from "../core/defaults.js";
3
4
  import type { SafeEventBus } from "../core/event-bus.js";
4
5
  import { expandInlineFileReferencesAsync } from "../core/file-references.js";
5
6
  import type { PendingSkillRequest } from "../core/skill-activation.js";
7
+ import { getTerminationCoordinator } from "../core/termination.js";
6
8
  import { clioStateDir } from "../core/xdg.js";
7
9
  import type { AgentsContract } from "../domains/agents/contract.js";
8
10
  import type { ClioKeybinding } from "../domains/config/keybindings.js";
@@ -33,7 +35,7 @@ import { emitCommandNotice } from "./command-fallbacks.js";
33
35
  import { appendNotice } from "./command-output.js";
34
36
  import { dispatchCouncilThroughRegistry } from "./council-dispatch.js";
35
37
  import { createDispatchSteering } from "./dispatch-steering.js";
36
- import { createEditorSubmitController } from "./editor-submit.js";
38
+ import { createEditorSubmitController, EDITOR_BASH_SHUTDOWN_MS } from "./editor-submit.js";
37
39
  import { createInteractiveDesktopNotifications } from "./footer/notifications.js";
38
40
  import { createInteractiveEventProjection } from "./interactive-event-projection.js";
39
41
  import { createInteractiveInputRuntime } from "./interactive-input-runtime.js";
@@ -325,11 +327,7 @@ export interface KeyBindingDeps {
325
327
  cycleScopedModelForward: () => void;
326
328
  cycleScopedModelBackward: () => void;
327
329
  dismissNotifications: () => void;
328
- toggleToolExpansion: () => void;
329
- toggleAllToolExpansion: () => void;
330
- toggleLiveToolOutput: () => void;
331
- toggleThinkingExpansion: () => void;
332
- toggleAllThinkingExpansion: () => void;
330
+ cycleOutputStyle: () => void;
333
331
  openExternalEditor: () => void;
334
332
  queueFollowUp: () => void;
335
333
  interruptWithMessage: () => void;
@@ -360,18 +358,12 @@ export function resolveCtrlCAction(deps: CtrlCActionDeps): CtrlCAction {
360
358
 
361
359
  function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
362
360
  switch (id) {
361
+ case "clio-coder.output.cycle":
362
+ deps.cycleOutputStyle();
363
+ return true;
363
364
  case "clio-coder.notifications.dismiss":
364
365
  deps.dismissNotifications();
365
366
  return true;
366
- case "clio-coder.tool.expand":
367
- deps.toggleToolExpansion();
368
- return true;
369
- case "clio-coder.tool.expandAll":
370
- deps.toggleAllToolExpansion();
371
- return true;
372
- case "clio-coder.tool.liveOutput":
373
- deps.toggleLiveToolOutput();
374
- return true;
375
367
  case "clio-coder.editor.external":
376
368
  deps.openExternalEditor();
377
369
  return true;
@@ -384,12 +376,6 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
384
376
  case "clio-coder.message.dequeue":
385
377
  deps.restoreQueuedFollowUps();
386
378
  return true;
387
- case "clio-coder.thinking.expand":
388
- deps.toggleThinkingExpansion();
389
- return true;
390
- case "clio-coder.thinking.expandAll":
391
- deps.toggleAllThinkingExpansion();
392
- return true;
393
379
  case "clio-coder.status.toggle":
394
380
  deps.toggleStatus();
395
381
  return true;
@@ -587,6 +573,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
587
573
  ...(deps.session ? { session: deps.session } : {}),
588
574
  ...(deps.getSessionId ? { getSessionId: deps.getSessionId } : {}),
589
575
  ...(deps.getTaskBoard ? { getTaskBoard: deps.getTaskBoard } : {}),
576
+ ...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
590
577
  ...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
591
578
  ...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
592
579
  ...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
@@ -669,8 +656,6 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
669
656
  recordToolStart: (toolName, toolCallId) => presentation.recordToolStart(toolCallId, toolName),
670
657
  recordToolEnd: (_toolName, toolCallId, isError, truncated) =>
671
658
  presentation.recordToolEnd({ toolCallId, isError, truncated }),
672
- setStatusLine: (line) => chatPanel.setStatusLine(line),
673
- setLiveReasoning: (view) => chatPanel.setLiveReasoning(view),
674
659
  setLastTurnSummary: (summary) => presentation.setLastTurnSummary(summary),
675
660
  startTerminalProgress: () => agentProgress.start(),
676
661
  stopTerminalProgress: () => agentProgress.stop(),
@@ -701,13 +686,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
701
686
  io,
702
687
  bus: deps.bus,
703
688
  dispatch: deps.dispatch,
689
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
704
690
  ...(deps.session ? { session: deps.session } : {}),
705
691
  providers: deps.providers,
706
692
  chat: deps.chat,
707
693
  chatPanel: {
708
694
  appendReplayBlock: (...args) => chatRenderer.mutate(() => chatPanel.appendReplayBlock(...args), "slash-output"),
709
695
  appendUser: (text, status) => chatRenderer.mutate(() => chatPanel.appendUser(text, status), "user-submit"),
710
- clearFoldOverrides: () => chatRenderer.mutate(() => chatPanel.clearFoldOverrides(), "output-detail"),
711
696
  },
712
697
  beforeSemanticSubmit: () => chatRenderer.flush(),
713
698
  settleVisibleFrame: (reason) => chatRenderer.flushAndCommit(reason),
@@ -785,6 +770,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
785
770
  });
786
771
 
787
772
  const editorSubmit = createEditorSubmitController({
773
+ onLocalBashRunning: presentation.setLocalBashRunning,
788
774
  editor,
789
775
  ui: tui,
790
776
  io,
@@ -804,6 +790,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
804
790
  expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
805
791
  notify,
806
792
  });
793
+ // The lease drains the terminal; operator shell ownership outlives that
794
+ // surface and must settle before the session domain stops, on every exit.
795
+ getTerminationCoordinator().onDrain(() => editorSubmit.shutdownEditorBash(), { timeoutMs: EDITOR_BASH_SHUTDOWN_MS });
807
796
  editor.onSubmit = editorSubmit.submitEditorText;
808
797
 
809
798
  const interactiveTickers = createInteractiveTickers({
@@ -1059,6 +1048,16 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1059
1048
  dispatchAction: dispatchInteractiveAction,
1060
1049
  actions: {
1061
1050
  canExit: () => editor.getText().length === 0,
1051
+ cycleOutputStyle: () => {
1052
+ const settings = deps.getSettings?.();
1053
+ if (!settings || !deps.commitSetting) return;
1054
+ presentation.changeOutputStyle(() => {
1055
+ const next = structuredClone(settings) as ClioSettings;
1056
+ next.interface.outputDetail = nextOutputStyle(next.interface.outputDetail);
1057
+ deps.commitSetting?.("interface.outputDetail", next, "session");
1058
+ });
1059
+ footer.refresh();
1060
+ },
1062
1061
  availableThinkingLevels: () => availableInteractiveThinkingLevels(deps),
1063
1062
  onCycleThinking: () => deps.onCycleThinking?.(),
1064
1063
  cycleScopedModelForward: () => {
@@ -1111,31 +1110,12 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1111
1110
  steerSelectedDispatch,
1112
1111
  cancelSelectedDispatch,
1113
1112
  cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
1114
- isStreaming: () => deps.chat.isStreaming(),
1113
+ isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
1115
1114
  cancelActiveRun,
1116
1115
  editor,
1117
1116
  editorSubmit,
1118
1117
  requestRender: () => tui.requestRender(),
1119
1118
  notifications,
1120
- chatPanel: {
1121
- toggleLastToolExpanded: () => chatPanel.toggleLastToolExpanded(),
1122
- toggleAllToolsExpanded: () => chatPanel.toggleAllToolsExpanded(),
1123
- toggleLiveToolOutput: () => chatPanel.toggleLiveToolOutput(),
1124
- toggleLastThinking: () => {
1125
- let changed = false;
1126
- chatRenderer.mutate(() => {
1127
- changed = chatPanel.toggleLastThinking();
1128
- }, "thinking-visibility");
1129
- return changed;
1130
- },
1131
- toggleAllThinking: () => {
1132
- let changed = false;
1133
- chatRenderer.mutate(() => {
1134
- changed = chatPanel.toggleAllThinking();
1135
- }, "thinking-visibility");
1136
- return changed;
1137
- },
1138
- },
1139
1119
  shutdown: {
1140
1120
  stopTickers: presentation.stopTickers,
1141
1121
  disposeInteractiveTickers: interactiveTickers.dispose,
@@ -11,7 +11,6 @@ import {
11
11
  import type { ClioSettings } from "../core/config.js";
12
12
  import type { SafeEventBus } from "../core/event-bus.js";
13
13
  import { routingChangeNotices } from "../core/session-routing.js";
14
- import { visibleWidth } from "../engine/tui.js";
15
14
  import {
16
15
  budgetAlertNotice,
17
16
  middlewareHookFailedSessionNotice,
@@ -26,27 +25,11 @@ import {
26
25
  toolBudgetAuditReason,
27
26
  toolBudgetStopReason,
28
27
  } from "./loop-guard-interrupt.js";
29
- import {
30
- type AgentStatus,
31
- INLINE_STATUS_INDENT_COLS,
32
- type ReasoningUsageView,
33
- reasoningFromTally,
34
- resolveInlineVerb,
35
- type StatusPhase,
36
- spinnerFrame,
37
- type TurnSummary,
38
- type VerbRender,
39
- } from "./status/index.js";
28
+ import type { AgentStatus, TurnSummary } from "./status/index.js";
40
29
 
41
30
  export type InteractiveProjectionNoticeLevel = "info" | "success" | "warning" | "error";
42
31
  export type InteractiveTranscriptNoticeLevel = "info" | "success" | "warn" | "error";
43
32
 
44
- export interface InteractiveStatusLine {
45
- phase: StatusPhase;
46
- verb: string;
47
- toneHint: VerbRender["toneHint"];
48
- }
49
-
50
33
  export interface InteractiveEventProjectionDeps {
51
34
  bus: SafeEventBus;
52
35
  chat: {
@@ -69,12 +52,10 @@ export interface InteractiveEventProjectionDeps {
69
52
  resetAskUserCancellation: () => void;
70
53
  recordToolStart: (toolName: string, toolCallId: string) => void;
71
54
  recordToolEnd: (toolName: string, toolCallId: string, isError: boolean, truncated: boolean) => void;
72
- setStatusLine: (line: InteractiveStatusLine | null) => void;
73
55
  /**
74
56
  * Publish the live turn's reasoning projection to the transcript. Optional so
75
57
  * a host without a chat panel still gets every other projection.
76
58
  */
77
- setLiveReasoning?: (view: ReasoningUsageView | null) => void;
78
59
  setLastTurnSummary: (summary: TurnSummary) => void;
79
60
  startTerminalProgress: () => void;
80
61
  stopTerminalProgress: () => void;
@@ -126,8 +107,6 @@ function askUserInterviewClosedByToolResult(event: {
126
107
  * subscriptions.
127
108
  */
128
109
  export function createInteractiveEventProjection(deps: InteractiveEventProjectionDeps): InteractiveEventProjection {
129
- const now = deps.now ?? Date.now;
130
-
131
110
  for (const notice of deps.initialNotices ?? []) {
132
111
  const text = notice.trim();
133
112
  if (text.length === 0) continue;
@@ -187,30 +166,9 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
187
166
  }),
188
167
  );
189
168
 
190
- let statusInlineFrame = 0;
191
169
  primaryUnsubscribers.push(
192
170
  deps.status.subscribe((status) => {
193
- // One projection of the run tally reaches the transcript, so the live
194
- // line, the turn receipt, and the footer state the same number.
195
- deps.setLiveReasoning?.(
196
- status.phase === "idle" || status.phase === "ended" ? null : reasoningFromTally(status.runTally),
197
- );
198
- if (status.phase === "idle") {
199
- deps.setStatusLine(null);
200
- } else if (status.phase === "ended") {
201
- deps.setStatusLine(null);
202
- if (status.summary) deps.setLastTurnSummary(status.summary);
203
- } else {
204
- const cols = deps.getTerminalColumns();
205
- const frame = cols < 30 ? "" : `${spinnerFrame(statusInlineFrame)} `;
206
- const verb = resolveInlineVerb(status, now(), cols, INLINE_STATUS_INDENT_COLS + visibleWidth(frame));
207
- if (verb) {
208
- deps.setStatusLine({ phase: status.phase, verb: `${frame}${verb.text}`, toneHint: verb.toneHint });
209
- statusInlineFrame = (statusInlineFrame + 1) % 10;
210
- } else {
211
- deps.setStatusLine(null);
212
- }
213
- }
171
+ if (status.phase === "ended" && status.summary) deps.setLastTurnSummary(status.summary);
214
172
  deps.refreshFooter();
215
173
  deps.requestRender();
216
174
  }),
@@ -251,9 +209,10 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
251
209
  typeof event.tokensBefore === "number" &&
252
210
  typeof event.tokensAfter === "number"
253
211
  ) {
212
+ const outcome = event.tokensAfter < event.tokensBefore ? "Reclaimed context" : "Context updated";
254
213
  deps.notify(
255
214
  "info",
256
- `[Compaction] Reclaimed context: ${event.tokensBefore} -> ${event.tokensAfter} tokens (${event.stage})`,
215
+ `[Compaction] ${outcome}: ${event.tokensBefore} -> ${event.tokensAfter} tokens (${event.stage})`,
257
216
  "compaction-notice",
258
217
  );
259
218
  }
@@ -388,6 +347,11 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
388
347
 
389
348
  const seenMiddlewareBudgetWarnings = new Set<string>();
390
349
  remainingUnsubscribers.push(
350
+ deps.bus.on(BusChannels.ExtensionsLoadIssue, (payload) => {
351
+ if (typeof payload?.message !== "string" || payload.message.trim().length === 0) return;
352
+ deps.appendTranscriptNotice("warn", payload.message);
353
+ deps.requestRender();
354
+ }),
391
355
  deps.bus.on(BusChannels.MiddlewareHookFailed, (payload) => {
392
356
  const notice = middlewareHookFailedSessionNotice(payload, seenMiddlewareBudgetWarnings);
393
357
  if (notice === null) return;
@@ -30,11 +30,7 @@ export interface InteractiveInputKeyActionDeps {
30
30
  cycleScopedModelForward: () => void;
31
31
  cycleScopedModelBackward: () => void;
32
32
  dismissNotifications: () => void;
33
- toggleToolExpansion: () => void;
34
- toggleAllToolExpansion: () => void;
35
- toggleLiveToolOutput: () => void;
36
- toggleThinkingExpansion: () => void;
37
- toggleAllThinkingExpansion: () => void;
33
+ cycleOutputStyle: () => void;
38
34
  openExternalEditor: () => void;
39
35
  queueFollowUp: () => void;
40
36
  interruptWithMessage: () => void;
@@ -49,6 +45,7 @@ export interface InteractiveInputRuntimeDeps {
49
45
  dispatchAction: (id: ClioKeybinding, deps: InteractiveInputKeyActionDeps) => boolean;
50
46
  actions: {
51
47
  canExit(): boolean;
48
+ cycleOutputStyle(): void;
52
49
  availableThinkingLevels(): ReadonlyArray<string>;
53
50
  onCycleThinking(): void;
54
51
  cycleScopedModelForward(): void;
@@ -105,13 +102,6 @@ export interface InteractiveInputRuntimeDeps {
105
102
  dismiss(id: string): void;
106
103
  dismissAll(): void;
107
104
  };
108
- chatPanel: {
109
- toggleLastToolExpanded(): boolean;
110
- toggleAllToolsExpanded(): boolean;
111
- toggleLiveToolOutput(): void;
112
- toggleLastThinking(): boolean;
113
- toggleAllThinking(): boolean;
114
- };
115
105
  shutdown: {
116
106
  stopTickers(): void;
117
107
  disposeInteractiveTickers(): void;
@@ -171,18 +161,7 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
171
161
  deps.requestRender();
172
162
  },
173
163
  dismissNotifications: () => controller.dismissNotifications(),
174
- toggleToolExpansion: () => controller.toggleToolExpansion(),
175
- toggleAllToolExpansion: () => {
176
- if (deps.chatPanel.toggleAllToolsExpanded()) deps.requestRender();
177
- },
178
- toggleLiveToolOutput: () => {
179
- deps.chatPanel.toggleLiveToolOutput();
180
- deps.requestRender();
181
- },
182
- toggleThinkingExpansion: () => controller.toggleThinkingExpansion(),
183
- toggleAllThinkingExpansion: () => {
184
- if (deps.chatPanel.toggleAllThinking()) deps.requestRender();
185
- },
164
+ cycleOutputStyle: deps.actions.cycleOutputStyle,
186
165
  openExternalEditor: deps.editorSubmit.openExternalEditorForInput,
187
166
  queueFollowUp: deps.editorSubmit.queueFollowUpFromEditor,
188
167
  interruptWithMessage: deps.editorSubmit.interruptFromEditor,
@@ -277,10 +256,6 @@ export function createInteractiveInputRuntime(deps: InteractiveInputRuntimeDeps)
277
256
  listNotifications: () => deps.notifications.list(),
278
257
  dismissNotification: (id) => deps.notifications.dismiss(id),
279
258
  dismissAllNotifications: () => deps.notifications.dismissAll(),
280
- toggleLastToolExpanded: () => deps.chatPanel.toggleLastToolExpanded(),
281
- toggleAllToolsExpanded: () => deps.chatPanel.toggleAllToolsExpanded(),
282
- toggleLastThinking: () => deps.chatPanel.toggleLastThinking(),
283
- toggleAllThinking: () => deps.chatPanel.toggleAllThinking(),
284
259
  shutdownDisposers: [
285
260
  () => deps.shutdown.stopTickers(),
286
261
  () => leaderKeys.dispose(),