@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
@@ -16,7 +16,8 @@ import { type ProvidersContract, resolveModelRuntimeCapabilitiesForProviders } f
16
16
  import type { ResourcesContract } from "../domains/resources/index.js";
17
17
  import { ceilChars, contentChars } from "../domains/session/context-accounting.js";
18
18
  import type { SessionContract, TaskBoardSnapshot } from "../domains/session/index.js";
19
- import type { Component, TUI } from "../engine/tui.js";
19
+ import type { UserTasksStore } from "../domains/user-tasks/store.js";
20
+ import type { Component, ScrollView, TUI } from "../engine/tui.js";
20
21
  import type { ChatLoop, ChatLoopEvent } from "./chat-loop.js";
21
22
  import { type ChatPanel, createChatPanel } from "./chat-panel.js";
22
23
  import { type CoalescingChatRenderer, createCoalescingChatRenderer } from "./chat-renderer.js";
@@ -32,7 +33,7 @@ import { createNotificationCenter, type NotificationCenter } from "./footer/noti
32
33
  import { getActiveRenderTrace } from "./interactive-shell.js";
33
34
  import type { InteractiveNoticeLevel } from "./interactive-subscriptions.js";
34
35
  import { type ClioKeybindingManager, createKeybindingManager } from "./keybinding-manager.js";
35
- import { buildLayout } from "./layout.js";
36
+ import { buildLayout, preserveTranscriptScroll } from "./layout.js";
36
37
  import type { SessionTranscript } from "./session-transcript.js";
37
38
  import { createSlashCommandAutocompleteProvider } from "./slash-autocomplete.js";
38
39
  import { parseSlashCommand, type RunIo } from "./slash-commands.js";
@@ -93,6 +94,7 @@ export interface InteractivePresentationDeps {
93
94
  session?: Pick<SessionContract, "current">;
94
95
  getSessionId?: () => string | null;
95
96
  getTaskBoard?: () => TaskBoardSnapshot | null;
97
+ userTasks?: Pick<UserTasksStore, "snapshot">;
96
98
  getTaskMemoryStatus?: () => TaskMemoryOperatorStatus;
97
99
  getTaskMemorySeedOffer?: () => { source: string; count: number } | null;
98
100
  getContextState?: (cwd?: string) => ContextState;
@@ -144,6 +146,8 @@ export interface InteractivePresentation {
144
146
  chatRenderer: CoalescingChatRenderer;
145
147
  io: RunIo;
146
148
  root: Component;
149
+ changeOutputStyle(mutation: () => void): void;
150
+ setLocalBashRunning(running: boolean): void;
147
151
  getObservabilitySnapshot(): ObservabilitySnapshot;
148
152
  /** Fold one raw chat event into the ephemeral throughput shown only while this turn is active. */
149
153
  recordChatEvent(event: ChatLoopEvent): void;
@@ -231,11 +235,8 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
231
235
  });
232
236
  const renderTrace = getActiveRenderTrace();
233
237
  const chatPanel = factories.createChatPanel({
234
- getToolExpandKey: () => {
235
- const first = keybindings.getKeys("clio-coder.tool.expand")[0];
236
- return typeof first === "string" && first.length > 0 ? first : undefined;
237
- },
238
- getOutputVerbosity: () => deps.getSettings?.().interface.outputDetail ?? "default",
238
+ getOutputStyle: () => deps.getSettings?.().interface.outputDetail ?? "standard",
239
+ getTerminalRows: () => process.stdout.rows ?? 40,
239
240
  ...(renderTrace ? { onRenderMetrics: (metrics) => renderTrace.recordPanelRender(metrics) } : {}),
240
241
  });
241
242
  const followUpQueuePanel = factories.createFollowUpQueuePanel({
@@ -357,10 +358,21 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
357
358
  );
358
359
  };
359
360
 
361
+ let localBashStartedAt: number | null = null;
360
362
  const footerDeps: FooterDashboardDeps = {
361
363
  providers: deps.providers,
362
364
  ...(deps.getSettings ? { getSettings: deps.getSettings } : {}),
363
- getAgentStatus: () => statusController.current(),
365
+ getAgentStatus: () => {
366
+ const status = statusController.current();
367
+ if (localBashStartedAt === null || (status.phase !== "idle" && status.phase !== "ended")) return status;
368
+ return {
369
+ ...status,
370
+ phase: "tool_running",
371
+ since: localBashStartedAt,
372
+ toolStartedAt: localBashStartedAt,
373
+ tool: { toolName: "bash", toolPreview: "local shell" },
374
+ };
375
+ },
364
376
  getTerminalColumns: () => deps.terminal.columns,
365
377
  getSessionTokens: () => observabilitySnapshot.session.tokens,
366
378
  getTokenThroughput: () =>
@@ -471,13 +483,19 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
471
483
  label: skill.name,
472
484
  description: skill.description,
473
485
  })),
474
- tasks: async () =>
475
- (deps.getTaskBoard?.()?.tasks ?? []).map((task) => ({
476
- id: task.id,
477
- value: task.id,
478
- label: task.title,
479
- description: task.status,
480
- })),
486
+ tasks: async ({ subcommand }) =>
487
+ (deps.userTasks?.snapshot() ?? [])
488
+ .filter((task) =>
489
+ subcommand === "hand"
490
+ ? task.status === "open"
491
+ : task.status === "open" || task.status === "handed" || task.status === "picked",
492
+ )
493
+ .map((task) => ({
494
+ id: task.id,
495
+ value: task.id,
496
+ label: task.title,
497
+ description: task.status,
498
+ })),
481
499
  // Other slots remain empty when this presentation has no read-only catalog for them.
482
500
  },
483
501
  });
@@ -525,6 +543,7 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
525
543
  },
526
544
  }
527
545
  : followUpQueuePanel;
546
+ let transcriptView: ScrollView | undefined;
528
547
  const root = factories.buildLayout(
529
548
  {
530
549
  banner,
@@ -536,6 +555,9 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
536
555
  {
537
556
  mode: settings.interface?.mode ?? "regular",
538
557
  fullscreenScrollbar: settings.interface?.fullscreenScrollbar ?? "auto",
558
+ onTranscript: (view) => {
559
+ transcriptView = view;
560
+ },
539
561
  },
540
562
  );
541
563
  deps.mount?.(root, editor);
@@ -545,7 +567,7 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
545
567
  deps.clearScheduledInterval ??
546
568
  ((handle: PresentationTickerHandle): void => clearInterval(handle as ReturnType<typeof setInterval>));
547
569
  const footerTicker = scheduleInterval(() => {
548
- const statusActive = statusController.current().phase !== "idle";
570
+ const statusActive = statusController.current().phase !== "idle" || localBashStartedAt !== null;
549
571
  if (!deps.chat.isStreaming() && !statusActive && !footer.isExpanded()) return;
550
572
  footer.refresh();
551
573
  requestRender();
@@ -610,6 +632,13 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
610
632
  chatRenderer,
611
633
  io,
612
634
  root,
635
+ setLocalBashRunning(running) {
636
+ localBashStartedAt = running ? Date.now() : null;
637
+ footer.refresh();
638
+ requestRender();
639
+ },
640
+ changeOutputStyle: (mutation) =>
641
+ chatRenderer.mutate(() => preserveTranscriptScroll(transcriptView, deps.terminal.columns, mutation), "output-style"),
613
642
  getObservabilitySnapshot: () => observabilitySnapshot,
614
643
  recordChatEvent,
615
644
  recordToolStart: (toolCallId, toolName) => {
@@ -64,7 +64,7 @@ export interface InteractiveSlashSubmitExpansion {
64
64
  }
65
65
 
66
66
  type SlashChat = Pick<ChatLoop, "clearSkillSurface" | "getSessionId" | "isStreaming" | "submit">;
67
- type SlashChatPanel = Pick<ChatPanel, "appendReplayBlock" | "appendUser" | "clearFoldOverrides">;
67
+ type SlashChatPanel = Pick<ChatPanel, "appendReplayBlock" | "appendUser">;
68
68
  type UserTurnStatus = import("./chat-panel.js").UserTurnStatus;
69
69
  type SlashResources = Pick<ResourcesContract, "prompts" | "expandPromptTemplate" | "reload">;
70
70
  type SlashExtensions = Pick<ExtensionsContract, "list">;
@@ -75,6 +75,7 @@ export interface InteractiveSlashRuntimeDeps {
75
75
  io: RunIo;
76
76
  bus: SafeEventBus;
77
77
  dispatch: DispatchContract;
78
+ getDecisionBoard?: SlashCommandContext["getDecisionBoard"];
78
79
  providers: ProvidersContract;
79
80
  chat: SlashChat;
80
81
  chatPanel: SlashChatPanel;
@@ -177,7 +178,6 @@ export interface InteractiveSlashRuntime {
177
178
  }
178
179
 
179
180
  /** Owns slash-command context construction and its asynchronous command state. */
180
- const OUTPUT_VERBOSITIES: ReadonlyArray<ClioSettings["interface"]["outputDetail"]> = ["minimal", "default", "verbose"];
181
181
 
182
182
  /** Thinking capability of the active orchestrator target and model, or null when unresolved. */
183
183
  export function resolveThinkingCapability(
@@ -380,6 +380,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
380
380
  });
381
381
  },
382
382
  dispatch: deps.dispatch,
383
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
383
384
  bus: deps.bus,
384
385
  ...(deps.agents
385
386
  ? { getAgentRoleFacts: agentRoleFactsResolver((agentId: string) => deps.agents?.getSpec(agentId) ?? null) }
@@ -464,7 +465,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
464
465
  if (!match) {
465
466
  return { status: "unsupported", level, supported: supported.map(labelFor) };
466
467
  }
467
- // Session scope, like /output: onSetThinkingLevel writes the level
468
+ // Session scope, like Alt+O: onSetThinkingLevel writes the level
468
469
  // through to settings.yaml as the new default, which a slash command
469
470
  // has no mandate to do.
470
471
  if (deps.commitSetting) {
@@ -506,42 +507,6 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
506
507
  if (selected) dispatchSlashCommand({ kind: "thinking-set", level: selected.value }, context);
507
508
  });
508
509
  },
509
- setOutputVerbosity: (verbosity) => {
510
- if (!deps.getSettings || !(deps.commitSetting || deps.writeSettings)) return { status: "unavailable" };
511
- const requested = verbosity.trim().toLowerCase();
512
- const match = OUTPUT_VERBOSITIES.find((candidate) => candidate === requested);
513
- if (!match) return { status: "unsupported", verbosity, supported: OUTPUT_VERBOSITIES };
514
- const next = structuredClone(deps.getSettings()) as ClioSettings;
515
- next.interface.outputDetail = match;
516
- // Session scope: /output changes this session and leaves settings.yaml
517
- // alone. Saving it as the default is what Settings → Terminal is for.
518
- if (deps.commitSetting) deps.commitSetting("interface.outputDetail", next, "session");
519
- else deps.writeSettings?.(next);
520
- // `/output` is also the explicit reset action for transcript folds. Do
521
- // this even when the requested level already matches the current one;
522
- // the render-time change detector cannot observe a same-value command.
523
- deps.chatPanel.clearFoldOverrides();
524
- deps.refreshFooter();
525
- return { status: "applied", verbosity: match };
526
- },
527
- openOutputPicker: () => {
528
- void deps
529
- .openAskUser([
530
- {
531
- question: "Choose transcript detail for this session.",
532
- header: "Output",
533
- options: OUTPUT_VERBOSITIES.map((value) => ({
534
- label: `${value[0]?.toUpperCase()}${value.slice(1)}`,
535
- })),
536
- },
537
- ])
538
- .then((result) => {
539
- if (result.cancelled) return;
540
- const answer = result.answers[0]?.answer.toLowerCase();
541
- const selected = OUTPUT_VERBOSITIES.find((value) => value === answer);
542
- if (selected) dispatchSlashCommand({ kind: "output-set", verbosity: selected }, context);
543
- });
544
- },
545
510
  openModel: deps.openModel,
546
511
  providers: deps.providers,
547
512
  applyModelRef: (ref) => {
@@ -593,7 +558,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
593
558
  // operator overrides, and rendered at a stable width. HTML converts
594
559
  // the resulting ANSI presentation to inline styles; Markdown keeps the
595
560
  // prior plain-text fenced transcript.
596
- const exportPanel = createChatPanel({ unboundedToolBodies: true, getOutputVerbosity: () => "verbose" });
561
+ const exportPanel = createChatPanel({ unboundedToolBodies: true, getOutputStyle: () => "detailed" });
597
562
  // Scoped to the leaf the session is on, the same way /resume replays
598
563
  // (issue #107): with a /tree pin persisted and not yet extended, the
599
564
  // file still holds the abandoned branch after the pin, and an unscoped
@@ -13,6 +13,7 @@ export interface LayoutParts {
13
13
  export interface LayoutOptions {
14
14
  mode?: TuiMode;
15
15
  fullscreenScrollbar?: ScrollViewScrollbar;
16
+ onTranscript?: (view: ScrollView) => void;
16
17
  }
17
18
 
18
19
  export interface FullscreenLayout {
@@ -20,10 +21,7 @@ export interface FullscreenLayout {
20
21
  transcript: ScrollView;
21
22
  }
22
23
 
23
- function buildFullscreenLayout(
24
- parts: LayoutParts,
25
- options: Pick<LayoutOptions, "fullscreenScrollbar"> = {},
26
- ): FullscreenLayout {
24
+ function buildFullscreenLayout(parts: LayoutParts, options: LayoutOptions = {}): FullscreenLayout {
27
25
  const document = new Container();
28
26
  document.addChild(parts.banner);
29
27
  document.addChild(parts.chat);
@@ -33,8 +31,10 @@ function buildFullscreenLayout(
33
31
  primary: true,
34
32
  overscroll: "chain",
35
33
  scrollbar: options.fullscreenScrollbar ?? "auto",
36
- scrollbarStyle: () => theme.fg("frameStrong", GLYPH.barFull),
34
+ scrollbarTrackStyle: (text) => theme.fg("frame", text),
35
+ scrollbarThumbStyle: () => theme.fg("frameStrong", GLYPH.barFull),
37
36
  });
37
+ options.onTranscript?.(transcript);
38
38
  const dock = new VStack();
39
39
  if (parts.pending) dock.addChild(parts.pending, { shrink: 1, minSize: 0 });
40
40
  dock.addChild(parts.editor, { shrink: 1, minSize: 3 });
@@ -55,3 +55,29 @@ export function buildLayout(parts: LayoutParts, options: LayoutOptions = {}): Co
55
55
  root.addChild(parts.footer);
56
56
  return root;
57
57
  }
58
+
59
+ /** Keep the nearest surviving text at the viewport when a preset changes row counts. */
60
+ export function preserveTranscriptScroll(view: ScrollView | undefined, width: number, mutation: () => void): void {
61
+ if (!view || view.isFollowingEnd) {
62
+ mutation();
63
+ return;
64
+ }
65
+ const top = view.scrollTop;
66
+ const before = view.render(width);
67
+ mutation();
68
+ const after = view.render(width);
69
+ for (let row = top; row < Math.min(before.length, top + view.viewportHeight); row++) {
70
+ const anchor = before[row];
71
+ if (!anchor?.trim()) continue;
72
+ let match = -1;
73
+ for (let index = 0; index < after.length; index++) {
74
+ if (after[index] === anchor && (match < 0 || Math.abs(index - row) < Math.abs(match - row))) match = index;
75
+ }
76
+ if (match >= 0) {
77
+ view.updateLayout(after.length, view.viewportHeight, () => {});
78
+ view.scrollTo(Math.max(0, match - (row - top)), { disableFollow: true });
79
+ return;
80
+ }
81
+ }
82
+ view.scrollTo(top, { disableFollow: true });
83
+ }
@@ -16,6 +16,6 @@ export function buildModelReplayAgentMessagesFromTurns(
16
16
  options: RehydrateChatPanelOptions = {},
17
17
  ): AgentMessage[] {
18
18
  const activeLeafTurnId = options.activeLeafTurnId ?? options.uptoTurnId;
19
- const projected = projectWorkingSet(entries, foldWorkingSet(entries, activeLeafTurnId));
20
- return buildReplayAgentMessagesFromTurns(projected, options);
19
+ const projected = projectWorkingSet(entries, foldWorkingSet(entries, activeLeafTurnId), activeLeafTurnId);
20
+ return buildReplayAgentMessagesFromTurns(projected, { ...options, skillContextEntries: entries });
21
21
  }
@@ -527,6 +527,7 @@ export function showClioOverlayFrame(
527
527
  unfocus: (unfocusOptions?: OverlayUnfocusOptions): void =>
528
528
  unfocusOptions ? handle.unfocus(unfocusOptions) : handle.unfocus(),
529
529
  isFocused: (): boolean => handle.isFocused(),
530
+ getBounds: () => handle.getBounds(),
530
531
  };
531
532
  }
532
533
 
@@ -19,6 +19,7 @@ import type { SessionMeta } from "../domains/session/index.js";
19
19
  import { foldSessionArtifacts } from "../domains/session/session-artifacts.js";
20
20
  import { foldSessionTaskHistory } from "../domains/session/task-board.js";
21
21
  import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
22
+ import { formatUserTaskHandoff } from "../domains/user-tasks/handoff.js";
22
23
  import type { UserTasksStore } from "../domains/user-tasks/store.js";
23
24
  import type { TUI } from "../engine/tui.js";
24
25
  import { type OpenContextOverlayOptions, openContextOverlay } from "./context-overlay.js";
@@ -40,12 +41,13 @@ import {
40
41
  import { formatDecisionCorrectionTurn, openDecisionsOverlay } from "./overlays/decisions.js";
41
42
  import { openFleetRunApprovalOverlay } from "./overlays/fleet-run-approval.js";
42
43
  import { openSideQuestionOverlay } from "./overlays/side-question.js";
43
- import { type ContextClearCommandOptions, formatUserTaskHandoff } from "./slash-commands.js";
44
+ import type { ContextClearCommandOptions } from "./slash-commands.js";
44
45
  import { openTasksOverlay } from "./tasks-overlay.js";
45
46
  import { type ArtifactProviderDeps, createDefaultArtifactProviders } from "./view/artifacts.js";
46
47
  import { openViewOverlay } from "./view/view-overlay.js";
47
48
 
48
49
  export interface OverlayGeneralOpenersDeps {
50
+ readTranscript?: ArtifactProviderDeps["readTranscript"];
49
51
  tui: TUI;
50
52
  transitions: OverlayTransitions;
51
53
  observability: ObservabilityContract;
@@ -318,6 +320,7 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
318
320
  dispatch: deps.dispatch,
319
321
  sessionMeta: deps.getSessionMeta(),
320
322
  readSessionEntries: deps.readSessionEntries,
323
+ readTranscript: deps.readTranscript,
321
324
  }),
322
325
  ...(initialFilter ? { initialFilter } : {}),
323
326
  notice: deps.notify,
@@ -487,6 +490,7 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
487
490
  fleetRootId,
488
491
  dispatch: deps.dispatch,
489
492
  agents: { getSpec: (agentId) => agents.getSpec(agentId) },
493
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
490
494
  attributionEnabled: deps.getSettings?.().integrations.git.commitAttribution ?? true,
491
495
  vars: preview.vars,
492
496
  onStepDispatched: (event) => {
@@ -399,6 +399,7 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
399
399
 
400
400
  const scheduling = deps.app.scheduling;
401
401
  const overlayGeneralOpeners = createOverlayGeneralOpeners({
402
+ readTranscript: () => chatPanel.inspectionArtifacts(),
402
403
  tui,
403
404
  transitions: overlayTransitions,
404
405
  observability: deps.app.observability,
@@ -1,3 +1,4 @@
1
+ import { editTextExternally, resolveExternalEditor } from "../core/external-editor.js";
1
2
  import { resolveSessionCwd } from "../domains/session/cwd-fallback.js";
2
3
  import type { DecisionLedgerEntry } from "../domains/session/entries.js";
3
4
  import {
@@ -18,7 +19,6 @@ import type { ChatLoop } from "./chat-loop.js";
18
19
  import type { ChatPanel } from "./chat-panel.js";
19
20
  import { rehydrateChatPanelFromTurns } from "./chat-renderer.js";
20
21
  import { emitCommandNotice } from "./command-fallbacks.js";
21
- import { editTextExternally, resolveExternalEditor } from "./external-editor.js";
22
22
  import type { InteractiveNoticeLevel } from "./interactive-subscriptions.js";
23
23
  import { buildModelReplayAgentMessagesFromTurns } from "./model-session-replay.js";
24
24
  import type { OverlayTransitions } from "./overlay-transitions.js";
@@ -304,6 +304,12 @@ export function createOverlaySessionLifecycle(deps: OverlaySessionLifecycleDeps)
304
304
  }
305
305
  deps.resetTranscript();
306
306
  replayFork(forkedSessionId, parentTurnId, session);
307
+ emitCommandNotice(
308
+ deps.getSlashNotice(),
309
+ "info",
310
+ "fork",
311
+ "Conversation forked. Workspace files were not rewound; existing edits remain.",
312
+ );
307
313
  } catch (error) {
308
314
  deps.stderr(`[/fork] fork failed: ${error instanceof Error ? error.message : String(error)}\n`);
309
315
  }
@@ -1270,6 +1270,7 @@ export function openAskUserOverlay(tui: TUI, deps: OpenAskUserOverlayDeps): AskU
1270
1270
  focus: () => handle?.focus(),
1271
1271
  unfocus: (options) => (options ? handle?.unfocus(options) : handle?.unfocus()),
1272
1272
  isFocused: () => handle?.isFocused() ?? false,
1273
+ getBounds: () => handle?.getBounds(),
1273
1274
  ask: (questions, presentation) => view.begin(questions, presentation),
1274
1275
  cancel: () => view.cancel(),
1275
1276
  close,
@@ -150,7 +150,7 @@ export function openMessagePickerOverlay(tui: TUI, deps: OpenMessagePickerOverla
150
150
  anchor: "center",
151
151
  width: MESSAGE_PICKER_OVERLAY_WIDTH,
152
152
  markerId: "message-picker",
153
- title: "Fork",
153
+ title: "Fork conversation; workspace files stay unchanged",
154
154
  footerHint: rows.length > 0 ? buildHint([{ key: "Enter", verb: "select" }]) : buildHint([]),
155
155
  });
156
156
  }
@@ -229,7 +229,7 @@ export const SETTINGS_LABELS_BY_ID = {
229
229
  "retry.maxDelayMs": "Max delay (ms)",
230
230
  "retry.streamStallMs": "Stream stall timeout (ms)",
231
231
  "terminal.showTerminalProgress": "Terminal progress badges",
232
- "terminal.outputVerbosity": "Output detail",
232
+ "terminal.outputVerbosity": "Output style",
233
233
  "terminal.tuiMode": "TUI mode",
234
234
  "terminal.fullscreenScrollbar": "Fullscreen scrollbar",
235
235
  "terminal.smoothStreaming": "Smooth streaming",
@@ -514,7 +514,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
514
514
  "Written by the confirm flow, not by hand, because confirming a remote here would be the record confirming itself. Sync refuses with library_remote_unconfirmed until this equals library.remote. Default: blank.",
515
515
  "library.sync":
516
516
  "Off means `clio-coder library sync` and `push` refuse before touching the network, whatever the remote says. Legal values: true, false · default: false.",
517
- "budget.concurrency": "auto sizes to your machine. A fixed number caps how many workers run at once.",
517
+ "budget.concurrency":
518
+ "auto allows four local workers. A fixed number caps how many workers run at once; the default is one.",
518
519
  "skills.trustProjectCompatRoots":
519
520
  "Project roots like .claude/skills and .codex/skills are untrusted by default; enabling exposes them to the model.",
520
521
  "attribution.gitCommits":
@@ -550,7 +551,7 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
550
551
  "watchdog.cadenceToolCalls":
551
552
  "Mid-turn firing is how scope drift becomes visible before the turn ends. Leave blank and the watchdog fires at turn end only.",
552
553
  keybindings:
553
- "Renderer controls: Alt+O newest tool or worker details, Ctrl+Alt+O or Alt+Shift+O all of them, Alt+P live tool output, Alt+R latest reasoning, Ctrl+Alt+R or Alt+Shift+R all reasoning. Override these in settings.yaml or use /help.",
554
+ "Alt+O cycles Output style: Compact, Standard, Detailed. Use /view for full reasoning and action details. Shift+Tab changes model thinking effort.",
554
555
  };
555
556
 
556
557
  /** Per-value meaning, surfaced for the current value of an enum knob. */
@@ -623,9 +624,9 @@ const SETTINGS_VALUE_HELP_BY_ID: Partial<Record<EditableSettingId, Record<string
623
624
  false: "no terminal progress badges",
624
625
  },
625
626
  "terminal.outputVerbosity": {
626
- minimal: "quiet transcript; tools stay to one-line outcomes and reasoning stays folded",
627
- default: "balanced transcript; unfold the latest tool, worker, or reasoning block on demand",
628
- verbose: "transparent transcript; reasoning, arguments, and live tool output stay visible",
627
+ compact: "quiet action summaries, answers, and visible failures",
628
+ standard: "short reasoning and change previews, clear action outcomes",
629
+ detailed: "larger bounded previews; full content is available in /view",
629
630
  },
630
631
  "terminal.tuiMode": {
631
632
  regular: "preserve terminal scrollback and render the composer below the transcript",
@@ -1923,7 +1924,7 @@ function buildSettingItems(settings: Readonly<ClioSettings>, options?: BuildSett
1923
1924
  values: ["false", "true"],
1924
1925
  }),
1925
1926
  settingItem("terminal.outputVerbosity", terminal.outputDetail, {
1926
- values: ["minimal", "default", "verbose"],
1927
+ values: ["compact", "standard", "detailed"],
1927
1928
  }),
1928
1929
  settingItem("terminal.tuiMode", terminal.mode, {
1929
1930
  values: ["regular", "fullscreen"],
@@ -2555,7 +2556,7 @@ function applySettingChange(settings: ClioSettings, id: string, value: string):
2555
2556
  if (value === "true" || value === "false") settings.interface.terminalProgress = value === "true";
2556
2557
  return;
2557
2558
  case "terminal.outputVerbosity":
2558
- if (value === "minimal" || value === "default" || value === "verbose") settings.interface.outputDetail = value;
2559
+ if (value === "compact" || value === "standard" || value === "detailed") settings.interface.outputDetail = value;
2559
2560
  return;
2560
2561
  case "terminal.tuiMode":
2561
2562
  if (value === "regular" || value === "fullscreen") settings.interface.mode = value;
@@ -0,0 +1,16 @@
1
+ import { truncateToWidth } from "../../engine/tui.js";
2
+ import { clioTheme } from "../theme/index.js";
3
+
4
+ /** Count terminal rows after wrapping, including the inspection hint. */
5
+ export function previewRows(rows: readonly string[], limit: number, width: number, tail = false): string[] {
6
+ if (rows.length <= limit) return [...rows];
7
+ if (limit <= 0) return [];
8
+ const count = Math.max(0, limit - 1);
9
+ const hint = clioTheme().fg("dim", truncateToWidth(`… ${rows.length - count} rows · /view`, Math.max(1, width)));
10
+ return tail ? [hint, ...rows.slice(rows.length - count)] : [...rows.slice(0, count), hint];
11
+ }
12
+
13
+ /** Leave room for the composer and action identity in a short terminal. */
14
+ export function previewBudget(limit: number, terminalRows = 40): number {
15
+ return Math.min(limit, Math.max(2, Math.floor((terminalRows - 8) / 2)));
16
+ }