@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,3 +1,6 @@
1
+ import type { TranscriptDetailPolicy } from "../transcript-detail.js";
2
+ import { transcriptDetail } from "../transcript-detail.js";
3
+ import { previewBudget, previewRows } from "./preview.js";
1
4
  /**
2
5
  * Structured renderer for tool-execution chat segments (Slice A of the
3
6
  * pi-coding-agent parity work). pi-coding-agent renders every tool call as
@@ -12,6 +15,7 @@
12
15
  * two surfaces stay byte-identical.
13
16
  */
14
17
 
18
+ import { trustStateWord } from "../../domains/evidence/trust-projection.js";
15
19
  import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
16
20
  import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
17
21
  import { formatSize } from "../../engine/truncate.js";
@@ -47,10 +51,7 @@ const ARG_PREVIEW_LIMIT = 60;
47
51
  const WEB_FETCH_ARG_PREVIEW_LIMIT = 140;
48
52
  const FULL_RESULT_PREVIEW_LIMIT = 60_000;
49
53
  const FULL_RESULT_ROW_LIMIT = 120;
50
- const STREAMING_RESULT_ROW_LIMIT = 20;
51
54
  const ARGS_BODY_LINE_LIMIT = 24;
52
- /** Rows of mutation diff a folded edit/write row keeps visible before it defers to the body. */
53
- const FOLDED_DIFF_ROW_LIMIT = 24;
54
55
  const STATUS_OK_GLYPH = GLYPH.ok;
55
56
  const STATUS_ERROR_GLYPH = GLYPH.error;
56
57
 
@@ -110,6 +111,8 @@ export interface ToolBodyRenderOptions {
110
111
  unbounded?: boolean;
111
112
  /** Live rows color mutation diffs; replay and export deliberately use plain text. */
112
113
  diffStyle?: "color" | "plain";
114
+ detail?: TranscriptDetailPolicy;
115
+ terminalRows?: number;
113
116
  }
114
117
 
115
118
  /** Row cap for a tool body: unbounded lifts both the row and char limits. */
@@ -320,7 +323,22 @@ function outcomeSummary(finished: ToolExecutionFinished): string | null {
320
323
  if (finished.toolName === "dispatch") {
321
324
  const receipts = numberField(details, "receiptCount");
322
325
  const failed = numberField(details, "failedCount") ?? 0;
323
- if (receipts !== null) return `${receipts} task${receipts === 1 ? "" : "s"} -> ${receipts - failed} ok`;
326
+ if (receipts !== null) {
327
+ const runs = Array.isArray(details?.runs) ? details.runs.slice(0, receipts) : [];
328
+ const qualityCounts = new Map<string, number>();
329
+ for (const run of runs) {
330
+ const trust = isPlainObject(run) && isPlainObject(run.trust) ? run.trust : null;
331
+ const axes = isPlainObject(trust?.axes) ? trust.axes : null;
332
+ const word = trustStateWord("validationGrounding", stringField(axes, "validationGrounding") ?? "unknown");
333
+ qualityCounts.set(word, (qualityCounts.get(word) ?? 0) + 1);
334
+ }
335
+ if (runs.length < receipts) {
336
+ const unknown = trustStateWord("validationGrounding", "unknown");
337
+ qualityCounts.set(unknown, (qualityCounts.get(unknown) ?? 0) + receipts - runs.length);
338
+ }
339
+ const quality = [...qualityCounts].map(([word, count]) => `${count} ${word}`).join(", ");
340
+ return `${receipts} task${receipts === 1 ? "" : "s"} -> ${receipts - failed} execution ok${failed > 0 ? `, ${failed} execution failed` : ""}${quality ? `; quality: ${quality}` : ""}`;
341
+ }
324
342
  return null;
325
343
  }
326
344
  if (finished.toolName === "tasks") {
@@ -1094,30 +1112,6 @@ function renderResultBlock(
1094
1112
  return renderOutputRows(resultText(unwrapped, resultCharLimit(opts)), width, isError, resultRowLimit(opts));
1095
1113
  }
1096
1114
 
1097
- /**
1098
- * Header-only render for a tool call that has not yet finished. Used by the
1099
- * live chat panel from streamed argument formation through execution. The
1100
- * lifecycle tail distinguishes a forming call, a ready call, and a running
1101
- * call without inventing execution time before Pi starts the tool.
1102
- */
1103
- export function renderToolCallHeader(call: ToolExecutionStart, width: number): string[] {
1104
- return wrap(
1105
- headerLine(call.toolName, call.args, call.phase ?? "running", {
1106
- elapsedMs: call.elapsedMs,
1107
- }),
1108
- width,
1109
- );
1110
- }
1111
-
1112
- /** Running-only footer used when an operator pauses live output; execution continues. */
1113
- export function renderToolRunningStatus(call: ToolExecutionStart, width: number): string[] {
1114
- const elapsed = optionalCompactMs(call.elapsedMs);
1115
- return [
1116
- ...renderToolCallHeader(call, width),
1117
- ...indentAndWrap(dim(elapsed ? `live output paused · ${elapsed}` : "live output paused"), width, false),
1118
- ];
1119
- }
1120
-
1121
1115
  function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): HeaderStatus {
1122
1116
  // Discriminate on `result` rather than `isError`: only `ToolExecutionFinished`
1123
1117
  // carries a `result` field, so a `ToolExecutionStart` with a stray
@@ -1127,59 +1121,8 @@ function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): Header
1127
1121
  return call.isError ? "error" : "ok";
1128
1122
  }
1129
1123
 
1130
- /**
1131
- * One-line subline form of a tool call. Format:
1132
- * ▸ <body><status>
1133
- * `status` is "" for in-flight, " ✓" green for success, " ✗" red for error.
1134
- * Output is width-wrapped via wrapTextWithAnsi.
1135
- *
1136
- * When `expandKey` is supplied AND the call has finished, a dim ` (<key>)`
1137
- * discoverability hint rides at the very end of the atomic status tail so users
1138
- * see how to expand the collapsed block. Composing the full line (facts, status
1139
- * glyph, duration, offload, and hint) before wrapping keeps the status glyph
1140
- * and duration together on one row. The hint is suppressed for in-flight calls
1141
- * (still running, no useful body to expand yet) and when `expandKey` is
1142
- * empty/undefined (no key bound, hint would be misleading). The renderer never
1143
- * imports the keybindings manager directly; the caller resolves the key string
1144
- * and passes it in to keep this module pure.
1145
- */
1146
- export interface ToolSublineRenderOptions {
1147
- /** Live rows color the folded mutation diff; replay and export request plain rows. */
1148
- diffStyle?: "color" | "plain";
1149
- /**
1150
- * Whether the folded row carries the extras its tool's presentation asks
1151
- * for (today the bounded mutation diff). The bare subline level drops them;
1152
- * the failure excerpt is not one of them and always rides the row.
1153
- */
1154
- foldedExtras?: "per-tool" | "none";
1155
- }
1156
-
1157
- /**
1158
- * The bounded diff a folded mutation row keeps under itself, when the tool's
1159
- * presentation asks for one and the result carries one. A folded `edit` that
1160
- * hid its change told the operator nothing they could act on.
1161
- */
1162
- function foldedDiffRows(finished: ToolExecutionFinished, width: number, opts: ToolSublineRenderOptions): string[] {
1163
- if (opts.foldedExtras === "none") return [];
1164
- if (finished.isError || isNonExecutedOutcome(finished.outcome)) return [];
1165
- const presentation =
1166
- toolResultPresentationPolicy(finished.result) ?? toolPresentationPolicy(finished.toolName, finished.args);
1167
- if (!presentation.showDiffWhenFolded) return [];
1168
- const diff = resultDiff(finished.result);
1169
- if (diff === null) return [];
1170
- return truncateRowsMiddle(
1171
- renderMutationDiffBlock(diff, width, opts.diffStyle !== "plain"),
1172
- FOLDED_DIFF_ROW_LIMIT,
1173
- false,
1174
- );
1175
- }
1176
-
1177
- export function renderToolSubline(
1178
- call: ToolExecutionStart | ToolExecutionFinished,
1179
- width: number,
1180
- expandKey?: string,
1181
- opts: ToolSublineRenderOptions = {},
1182
- ): string[] {
1124
+ /** Stable action identity, outcome, and captured-result metadata. */
1125
+ export function renderToolSubline(call: ToolExecutionStart | ToolExecutionFinished, width: number): string[] {
1183
1126
  const status = sublineStatus(call);
1184
1127
  const meta: StatusMeta =
1185
1128
  "result" in call
@@ -1192,11 +1135,7 @@ export function renderToolSubline(
1192
1135
  : { elapsedMs: call.elapsedMs };
1193
1136
  const parts = sublineParts(call, status, meta);
1194
1137
  const excerpt = "result" in call ? failureExcerpt(call, width) : "";
1195
- const showHint = "result" in call && expandKey !== undefined && expandKey.length > 0;
1196
- const tail = showHint ? `${parts.tail}${dim(` (${expandKey})`)}` : parts.tail;
1197
- const lines = wrapSublineWithTail(`${parts.lead}${excerpt}`, tail, width);
1198
- if ("result" in call) lines.push(...foldedDiffRows(call, width, opts));
1199
- return lines;
1138
+ return wrapSublineWithTail(`${parts.lead}${excerpt}`, parts.tail, width);
1200
1139
  }
1201
1140
 
1202
1141
  /**
@@ -1284,6 +1223,7 @@ export function renderToolResultOnly(
1284
1223
  width: number,
1285
1224
  opts: ToolBodyRenderOptions = {},
1286
1225
  ): string[] {
1226
+ if (!opts.unbounded && opts.detail) return renderToolPreview(finished, width, opts.detail, opts);
1287
1227
  const status: HeaderStatus = finished.isError ? "error" : "ok";
1288
1228
  const statusMeta: StatusMeta = {
1289
1229
  durationMs: finished.durationMs,
@@ -1299,50 +1239,6 @@ export function renderToolResultOnly(
1299
1239
  return out;
1300
1240
  }
1301
1241
 
1302
- /**
1303
- * Streaming render for an in-flight tool call whose expanded block should
1304
- * surface the latest partial output. Used by the chat panel between
1305
- * `tool_execution_start` and `tool_execution_end` when the user has expanded
1306
- * the tool segment. The header carries the running lifecycle tail, secondary
1307
- * arguments remain visible, and the latest cumulative Pi result renders under
1308
- * a labeled live-output rail capped at the streaming row limit. An empty result renders
1309
- * `(no output yet)` so the user can distinguish a slow start from a stalled
1310
- * call.
1311
- */
1312
- export function renderToolStreamingExecution(
1313
- call: ToolExecutionStart,
1314
- width: number,
1315
- partialResult: unknown,
1316
- ): string[] {
1317
- const out: string[] = [];
1318
- out.push(...renderToolCallHeader({ ...call, phase: "running" }, width));
1319
- out.push(...renderArgsBody(call.toolName, call.args, width, false));
1320
- const partial: ToolExecutionFinished = {
1321
- toolCallId: call.toolCallId,
1322
- toolName: call.toolName,
1323
- args: call.args,
1324
- result: partialResult,
1325
- isError: false,
1326
- };
1327
- out.push(...renderOutputMeta(partial, width, false, "live output"));
1328
- const partialOutput = unwrapResultEnvelope(partialResult);
1329
- if (isEmptyResult(partialOutput)) {
1330
- out.push(...indentAndWrap(dim("(no output yet)"), width, false));
1331
- } else {
1332
- if (call.toolName === "bash") {
1333
- const bashArgs = asBashArgs(redactToolArgs(call.args));
1334
- if (bashArgs !== null) {
1335
- const commandLine = `${cyanBold("$")} ${highlightBashCommand(stripShellWrapperForDisplay(bashArgs.command))}`;
1336
- out.push(...indentAndWrap(commandLine, width, false));
1337
- }
1338
- }
1339
- out.push(
1340
- ...renderOutputRows(resultText(partialOutput, FULL_RESULT_PREVIEW_LIMIT), width, false, STREAMING_RESULT_ROW_LIMIT),
1341
- );
1342
- }
1343
- return out;
1344
- }
1345
-
1346
1242
  /** Display-only lifecycle for operator-issued `!` and `!!` bash commands. */
1347
1243
  export interface BashTranscriptExecution {
1348
1244
  command: string;
@@ -1356,13 +1252,6 @@ export interface BashTranscriptExecution {
1356
1252
  fullOutputPath?: string | undefined;
1357
1253
  excludeFromContext?: boolean | undefined;
1358
1254
  error?: string | undefined;
1359
- /**
1360
- * Whether the block draws its one-line row instead of the full body. The
1361
- * caller resolves this from the transcript detail policy and the operator's
1362
- * override, the same way the panel resolves a model bash call. Omitted means
1363
- * folded.
1364
- */
1365
- folded?: boolean | undefined;
1366
1255
  }
1367
1256
 
1368
1257
  /**
@@ -1373,7 +1262,7 @@ export interface BashTranscriptExecution {
1373
1262
  export function renderBashTranscriptExecution(
1374
1263
  execution: BashTranscriptExecution,
1375
1264
  width: number,
1376
- expandKey?: string,
1265
+ _expandKey?: string,
1377
1266
  bodyOptions: ToolBodyRenderOptions = {},
1378
1267
  ): string[] {
1379
1268
  const shownBytes = Buffer.byteLength(execution.output, "utf8");
@@ -1393,30 +1282,12 @@ export function renderBashTranscriptExecution(
1393
1282
  content: [{ type: "text", text: execution.output }],
1394
1283
  details,
1395
1284
  };
1396
- const folded = execution.folded !== false;
1397
1285
  if (execution.running) {
1398
- if (folded) {
1399
- return renderToolSubline(
1400
- {
1401
- toolCallId: "local-bash",
1402
- toolName: "bash",
1403
- args,
1404
- elapsedMs: execution.elapsedMs,
1405
- phase: "running",
1406
- },
1407
- width,
1408
- );
1409
- }
1410
- return renderToolStreamingExecution(
1411
- {
1412
- toolCallId: "local-bash",
1413
- toolName: "bash",
1414
- args,
1415
- elapsedMs: execution.elapsedMs,
1416
- phase: "running",
1417
- },
1286
+ return renderToolPreview(
1287
+ { toolCallId: "local-bash", toolName: "bash", args, phase: "running", elapsedMs: execution.elapsedMs },
1418
1288
  width,
1419
- result,
1289
+ bodyOptions.detail ?? transcriptDetail(),
1290
+ { ...bodyOptions, operator: true, partialResult: result },
1420
1291
  );
1421
1292
  }
1422
1293
  const message = execution.error?.trim();
@@ -1438,5 +1309,57 @@ export function renderBashTranscriptExecution(
1438
1309
  ...(execution.fullOutputPath !== undefined ? { offloadPath: execution.fullOutputPath } : {}),
1439
1310
  },
1440
1311
  };
1441
- return folded ? renderToolSubline(finished, width, expandKey) : renderToolExecution(finished, width, bodyOptions);
1312
+ return bodyOptions.unbounded
1313
+ ? renderToolExecution(finished, width, bodyOptions)
1314
+ : renderToolPreview(finished, width, bodyOptions.detail ?? transcriptDetail(), { ...bodyOptions, operator: true });
1315
+ }
1316
+
1317
+ /** One action identity plus a bounded result; arguments and full output belong in /view. */
1318
+ export function renderToolPreview(
1319
+ call: ToolExecutionStart | ToolExecutionFinished,
1320
+ width: number,
1321
+ detail: TranscriptDetailPolicy,
1322
+ options: ToolBodyRenderOptions & { terminalRows?: number; partialResult?: unknown; operator?: boolean } = {},
1323
+ ): string[] {
1324
+ const finished = "result" in call ? call : undefined;
1325
+ const failure = finished?.isError === true || finished?.outcome !== undefined;
1326
+ const limit = previewBudget(
1327
+ failure
1328
+ ? detail.errorRows
1329
+ : options.operator
1330
+ ? detail.operatorBashRows
1331
+ : call.toolName === "bash"
1332
+ ? detail.bashRows
1333
+ : detail.resultRows,
1334
+ options.terminalRows,
1335
+ );
1336
+ const rows = renderToolSubline(call, width);
1337
+ const result = finished?.result ?? options.partialResult;
1338
+ const diff = finished && !failure ? resultDiff(result) : null;
1339
+ if (diff !== null && detail.diffRows > 0) {
1340
+ rows.push(
1341
+ ...previewRows(
1342
+ renderMutationDiffBlock(redactSecretString(diff), width, options.diffStyle !== "plain"),
1343
+ previewBudget(detail.diffRows, options.terminalRows),
1344
+ width,
1345
+ ),
1346
+ );
1347
+ } else if (limit > 0 && result !== undefined) {
1348
+ const text = resultText(unwrapResultEnvelope(result), Number.POSITIVE_INFINITY);
1349
+ const body = indentAndWrap(redactSecretString(text), width, failure);
1350
+ rows.push(...previewRows(body, limit, width, call.toolName === "bash" || !finished));
1351
+ }
1352
+ return rows;
1353
+ }
1354
+
1355
+ /** Only ordinary successful observations can lose their individual metadata rows. */
1356
+ export function canGroupObservation(call: ToolExecutionFinished): boolean {
1357
+ return (
1358
+ ["read", "grep", "find", "ls"].includes(call.toolName) &&
1359
+ !call.isError &&
1360
+ !call.outcome &&
1361
+ !call.evictedReason &&
1362
+ !isTruncatedResult(call) &&
1363
+ offloadPathOf(call) === null
1364
+ );
1442
1365
  }
@@ -1,27 +1,11 @@
1
- /**
2
- * Renderer for a worker's transcript block: the attributed stream a `/run`,
3
- * `/delegate`, or model-driven dispatch produces.
4
- *
5
- * One shape serves every runtime. A local Clio worker, a Claude subprocess, and
6
- * a delegated ACP peer differ only in what the header can name about their
7
- * route, so the body, the tool line, and the receipt footer are identical and
8
- * an operator learns one grammar. The origin glyph is the only thing that says
9
- * who asked, which is the same rule the board and the footer chip follow.
10
- *
11
- * ◇ coder · node-a/example-coder-model · run 2mkas6s
12
- * │ Hello! I'm the coder worker.
13
- * │ ⚙ read · artifact
14
- * └ ✓ ok · 4.8k tok · 9.6s · contract pass
15
- *
16
- * Folded (the default for a run the model asked for) is one row shaped like a tool subline,
17
- * so a fan-out of five scouts costs five rows until the operator opens one:
18
- *
19
- * ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ · 41s (Ctrl+O)
20
- *
21
- * Pure: no I/O, no module-level mutable state beyond the shared theme handle.
22
- */
1
+ import { redactSecretString } from "../../domains/safety/redaction.js";
2
+ import type { TranscriptDetailPolicy } from "../transcript-detail.js";
3
+ import { transcriptDetail } from "../transcript-detail.js";
4
+ import { previewBudget, previewRows } from "./preview.js";
5
+ /** Bounded worker summaries share the main transcript's output style. */
23
6
 
24
7
  import { parseJsonObjectPayload } from "../../core/json-payload.js";
8
+ import { trustStateWord } from "../../domains/evidence/trust-projection.js";
25
9
  import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
26
10
  import { formatFooterTokens } from "../footer-panel.js";
27
11
  import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
@@ -45,10 +29,8 @@ const SEPARATOR = " · ";
45
29
  const BODY_LINE_LIMIT = 80;
46
30
 
47
31
  export interface WorkerEntryRenderOptions {
48
- /** Collapsed to the header line plus outcome. Default for a run the model asked for. */
49
- folded: boolean;
50
- /** Key hint appended to a folded header, e.g. "Ctrl+O". Omitted when unknown. */
51
- expandKey?: string | undefined;
32
+ detail?: TranscriptDetailPolicy;
33
+ terminalRows?: number;
52
34
  /** Render the full body without the line cap; `/export` sets this. */
53
35
  unbounded?: boolean;
54
36
  }
@@ -80,14 +62,14 @@ function headerLine(entry: WorkerEntryState, width: number): string {
80
62
  }
81
63
 
82
64
  /**
83
- * Outcome glyph, with the word on the footer. The folded row uses the glyph
84
- * alone, as a tool subline does, so a list of cards reads like a list of calls.
65
+ * Execution outcome, explicitly named on successful folded and expanded rows
66
+ * so the separate quality line cannot be mistaken for process status.
85
67
  * Abandoned names itself rather than falling through to its `stalled`
86
68
  * outcome code, so it reads as a ledger-side finding instead of the ordinary
87
69
  * heartbeat-timeout `stalled` a sealed receipt reports.
88
70
  */
89
71
  function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
90
- if (receipt.outcome === "succeeded") return theme.fg("success", word ? `${GLYPH.ok} ok` : GLYPH.ok);
72
+ if (receipt.outcome === "succeeded") return theme.fg("success", `${GLYPH.ok} execution ok`);
91
73
  if (receipt.outcome === "canceled") return theme.fg("dim", `${GLYPH.cancelled} canceled`);
92
74
  if (receipt.abandonedDetail !== undefined) return theme.fg("error", word ? `${GLYPH.error} abandoned` : GLYPH.error);
93
75
  return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
@@ -389,16 +371,19 @@ function footerLine(entry: WorkerEntryState, width: number): string {
389
371
  * renders only when the caller resolved a key binding for it, so a rebound or
390
372
  * unbound key never advertises a wrong chord.
391
373
  */
392
- function foldedLine(entry: WorkerEntryState, width: number, expandKey: string | undefined): string {
374
+ function actionLine(entry: WorkerEntryState, width: number): string {
393
375
  const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
394
376
  const status =
395
377
  isPending(entry) || entry.receipt === undefined ? pendingUnit(entry) : outcomeUnit(entry.receipt, false);
396
378
  const elapsed =
397
379
  entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
398
- const hint = expandKey === undefined || expandKey.length === 0 ? "" : dim(` (${expandKey})`);
399
- const full = ` ${status}${elapsed}${hint}`;
400
- const tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}${hint}`;
401
- return `${truncateToWidth(identity, Math.max(1, width - visibleWidth(tail)), GLYPH.ellipsis, false)}${tail}`;
380
+ const full = ` ${status}${elapsed}`;
381
+ let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}`;
382
+ // Reserve one identity cell. The optional hint yields before execution
383
+ // status when the suffix alone would exhaust the header's width.
384
+ if (visibleWidth(tail) >= width) tail = ` ${status}`;
385
+ const header = `${truncateToWidth(identity, Math.max(1, width - visibleWidth(tail)), GLYPH.ellipsis, false)}${tail}`;
386
+ return truncateToWidth(header, width, GLYPH.ellipsis, false);
402
387
  }
403
388
 
404
389
  export function renderWorkerEntryLines(
@@ -407,14 +392,60 @@ export function renderWorkerEntryLines(
407
392
  options: WorkerEntryRenderOptions,
408
393
  ): string[] {
409
394
  const safeWidth = Math.max(1, Math.floor(width));
410
- if (options.folded) return [foldedLine(entry, safeWidth, options.expandKey)];
411
- const tools = toolLine(entry, safeWidth);
395
+ const quality = isPending(entry)
396
+ ? []
397
+ : railLines(
398
+ `quality: ${trustStateWord("validationGrounding", entry.receipt?.trust?.validationGrounding.state ?? "unknown")}`,
399
+ "muted",
400
+ safeWidth,
401
+ );
402
+ const detail = options.detail ?? transcriptDetail();
403
+ if (options.unbounded) {
404
+ const tools = toolLine(entry, safeWidth);
405
+ return [
406
+ headerLine(entry, safeWidth),
407
+ ...bodyLines(entry, safeWidth, true),
408
+ ...attemptLines(entry, safeWidth),
409
+ ...(tools ? [tools] : []),
410
+ ...failureLines(entry, safeWidth),
411
+ footerLine(entry, safeWidth),
412
+ ...quality,
413
+ ].map(redactSecretString);
414
+ }
415
+ const budget = (limit: number) => previewBudget(limit, options.terminalRows);
416
+ const summary = bodySourceLines(entry).flatMap((line) => railLines(redactSecretString(line), "muted", safeWidth));
417
+ const actions = entry.progress
418
+ ? [...entry.progress.recentActions]
419
+ .reverse()
420
+ .concat(entry.progress.currentAction ? [entry.progress.currentAction] : [])
421
+ : [];
422
+ const trail = actions.flatMap((action) =>
423
+ railLines(
424
+ `${GLYPH.phaseTool} ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
425
+ "muted",
426
+ safeWidth,
427
+ ),
428
+ );
429
+ const tools = detail.workerActivity && trail.length === 0 ? toolLine(entry, safeWidth) : null;
430
+ const failure = previewRows(failureLines(entry, safeWidth), budget(detail.errorRows), safeWidth);
431
+ const presented = presentedContractAnswer(entry)?.footer;
412
432
  return [
413
- headerLine(entry, safeWidth),
414
- ...bodyLines(entry, safeWidth, options.unbounded === true),
415
- ...attemptLines(entry, safeWidth),
416
- ...(tools === null ? [] : [tools]),
417
- ...failureLines(entry, safeWidth),
418
- footerLine(entry, safeWidth),
419
- ];
433
+ actionLine(entry, safeWidth),
434
+ ...(detail.workerRows > 0 ? previewRows(summary, budget(detail.workerRows), safeWidth, entry.pending) : []),
435
+ ...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
436
+ ...(tools ? [tools] : []),
437
+ ...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),
438
+ ...failure,
439
+ ...(presented ? railLines(presented, "muted", safeWidth) : []),
440
+ ...(entry.receipt?.abandonedDetail ? railLines(entry.receipt.abandonedDetail, "warning", safeWidth) : []),
441
+ ...(entry.receipt?.receiptUnavailable ? railLines("receipt unavailable", "warning", safeWidth) : []),
442
+ ...(entry.droppedLines
443
+ ? railLines(
444
+ `… ${entry.droppedLines} earlier lines unavailable here · /view dispatch:${entry.runId}`,
445
+ "muted",
446
+ safeWidth,
447
+ )
448
+ : []),
449
+ ...quality,
450
+ ].map(redactSecretString);
420
451
  }
@@ -154,12 +154,7 @@ function completionGrammar(command: string, args: CommandArgsSpec): CommandArgsS
154
154
  ? {
155
155
  positionals: spec.positionals.map((pos) => {
156
156
  const completionSlot = COMPLETION_SLOT_MANIFEST[`${path}:pos:${pos.name}`];
157
- const values =
158
- command === "output" && pos.name === "verbosity"
159
- ? (["minimal", "default", "verbose"] as const)
160
- : command === "settings" && pos.name === "area"
161
- ? SETTINGS_AREA_IDS
162
- : undefined;
157
+ const values = command === "settings" && pos.name === "area" ? SETTINGS_AREA_IDS : undefined;
163
158
  return { ...pos, ...(completionSlot ? { completionSlot } : {}), ...(values ? { values } : {}) };
164
159
  }),
165
160
  }
@@ -30,8 +30,11 @@ import type {
30
30
  ResourceList,
31
31
  } from "../domains/resources/index.js";
32
32
  import { parseSkillCommand, SKILL_SURFACE_CLEAR_ARG } from "../domains/resources/index.js";
33
+ import { activeDecisionRefs } from "../domains/session/decision-board.js";
34
+ import type { DecisionLedgerEntry } from "../domains/session/entries.js";
33
35
  import type { ShareImportPlan } from "../domains/share/index.js";
34
36
  import type { UserTaskAcceptance } from "../domains/user-tasks/acceptance.js";
37
+ import { formatUserTaskHandoff } from "../domains/user-tasks/handoff.js";
35
38
  import type { UserTask } from "../domains/user-tasks/store.js";
36
39
  import type { ExtensionReloadOutcome } from "../entry/extension-reload.js";
37
40
  import { isToolProfileName, TOOL_PROFILE_NAMES, type ToolProfileName } from "../tools/profiles.js";
@@ -171,8 +174,6 @@ type SlashCommandVariant =
171
174
  | { kind: "files-usage"; reason: string }
172
175
  | { kind: "thinking-set"; level: string }
173
176
  | { kind: "thinking-picker" }
174
- | { kind: "output-set"; verbosity: string }
175
- | { kind: "output-picker" }
176
177
  | { kind: "model" }
177
178
  | { kind: "model-set"; pattern: string }
178
179
  | { kind: "settings"; area?: SettingsAreaId; group?: string }
@@ -204,11 +205,6 @@ export type SetThinkingLevelResult =
204
205
  | { status: "unsupported"; level: string; supported: ReadonlyArray<string> }
205
206
  | { status: "unavailable" };
206
207
 
207
- export type SetOutputVerbosityResult =
208
- | { status: "applied"; verbosity: string }
209
- | { status: "unsupported"; verbosity: string; supported: ReadonlyArray<string> }
210
- | { status: "unavailable" };
211
-
212
208
  /**
213
209
  * What one admitted dispatch-tool call reports back to `/council`. The council
214
210
  * itself is watched on the board and in the transcript, so success is silent;
@@ -246,6 +242,8 @@ export interface RunCommandOptions {
246
242
 
247
243
  export interface HandleRunDeps {
248
244
  dispatch: DispatchContract;
245
+ /** Live session board, snapshotted before operator run admission. */
246
+ getDecisionBoard?: () => ReadonlyArray<DecisionLedgerEntry>;
249
247
  /** Strict recipe facts the run's execution role is derived from. */
250
248
  getAgentRoleFacts?: AgentRoleFactsResolver;
251
249
  io: RunIo;
@@ -341,6 +339,7 @@ export async function handleRun(
341
339
  deps: HandleRunDeps,
342
340
  options: RunCommandOptions = {},
343
341
  ): Promise<void> {
342
+ const decisionRefs = activeDecisionRefs(deps.getDecisionBoard?.() ?? []);
344
343
  if (options.target && options.workerProfile) {
345
344
  deps.notice(
346
345
  "warn",
@@ -363,6 +362,7 @@ export async function handleRun(
363
362
  ...(deps.getAgentRoleFacts ? { resolveFacts: deps.getAgentRoleFacts } : {}),
364
363
  }),
365
364
  requestOrigin: "user",
365
+ ...(decisionRefs.length > 0 ? { decisionRefs } : {}),
366
366
  ...(options.workerProfile ? { workerProfile: options.workerProfile } : {}),
367
367
  ...(options.workerRuntime ? { workerRuntime: options.workerRuntime } : {}),
368
368
  ...(options.target ? { target: options.target } : {}),
@@ -562,6 +562,7 @@ export interface SlashCommandContext {
562
562
  io: RunIo;
563
563
  notice: (level: NoticeLevel, text: string) => void;
564
564
  dispatch: DispatchContract;
565
+ getDecisionBoard?: HandleRunDeps["getDecisionBoard"];
565
566
  bus: SafeEventBus;
566
567
  /** Strict recipe facts used to keep interactive /run role-equivalent with the CLI. */
567
568
  getAgentRoleFacts?: AgentRoleFactsResolver;
@@ -720,8 +721,6 @@ export interface SlashCommandContext {
720
721
  thinkingLevelChoices?: () => ReadonlyArray<{ value: string; label: string }>;
721
722
  openThinkingPicker?: () => void;
722
723
  /** Apply a transcript verbosity named on the command line; refused values are reported by the caller. */
723
- setOutputVerbosity?: (verbosity: string) => SetOutputVerbosityResult;
724
- openOutputPicker?: () => void;
725
724
  openModel: () => void;
726
725
  /** Live providers contract used by `/model <pattern>` to resolve directly. */
727
726
  providers: ProvidersContract;
@@ -791,13 +790,6 @@ function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerif
791
790
  return lines.join("\n");
792
791
  }
793
792
 
794
- /** The one operator-authored turn used by slash and overlay handoff paths. */
795
- export function formatUserTaskHandoff(task: Pick<UserTask, "id" | "title" | "note" | "acceptance">): string {
796
- const note = task.note ? ` ${task.note}.` : "";
797
- const acceptance = task.acceptance ? ` Acceptance: ${JSON.stringify(task.acceptance)}.` : "";
798
- return `Operator task ${task.id}: ${task.title}.${note}${acceptance} Pick it up with tasks action="pick" id="${task.id}" and work it when appropriate.`;
799
- }
800
-
801
793
  /** The verb a command performs, in the order /help lists the groups. */
802
794
  export const SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"] as const;
803
795
  export type SlashCommandGroup = (typeof SLASH_COMMAND_GROUPS)[number];
@@ -1183,6 +1175,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1183
1175
  task,
1184
1176
  {
1185
1177
  dispatch: ctx.dispatch,
1178
+ ...(ctx.getDecisionBoard ? { getDecisionBoard: ctx.getDecisionBoard } : {}),
1186
1179
  ...(ctx.getAgentRoleFacts ? { getAgentRoleFacts: ctx.getAgentRoleFacts } : {}),
1187
1180
  io: ctx.io,
1188
1181
  notice: ctx.notice,
@@ -1915,35 +1908,6 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1915
1908
  ctx.render();
1916
1909
  },
1917
1910
  },
1918
- {
1919
- name: "output",
1920
- description: "Set transcript detail to minimal, default, or verbose",
1921
- group: "Configure",
1922
- kinds: ["output-set", "output-picker"],
1923
- args: { positionals: [{ name: "verbosity", required: false }] },
1924
- fromArgs(parsed) {
1925
- if (parsed.error) return { kind: "usage-error", command: "output", reason: parsed.error };
1926
- const verbosity = parsed.positionals[0];
1927
- return verbosity ? { kind: "output-set", verbosity } : { kind: "output-picker" };
1928
- },
1929
- handle(command, ctx) {
1930
- if (command.kind === "output-picker") {
1931
- if (ctx.openOutputPicker) ctx.openOutputPicker();
1932
- else ctx.notice("error", "output picker is not wired in this session");
1933
- return;
1934
- }
1935
- if (command.kind !== "output-set") return;
1936
- const result = ctx.setOutputVerbosity?.(command.verbosity) ?? { status: "unavailable" as const };
1937
- if (result.status === "applied") {
1938
- ctx.notice("success", `output detail: ${result.verbosity}`);
1939
- } else if (result.status === "unsupported") {
1940
- ctx.notice("error", `output detail "${result.verbosity}" is not one of ${result.supported.join(", ")}`);
1941
- } else {
1942
- ctx.notice("error", "output detail cannot be set right now");
1943
- }
1944
- ctx.render();
1945
- },
1946
- },
1947
1911
  {
1948
1912
  name: "model",
1949
1913
  description: "Open model selector or set a model",
@@ -2197,6 +2161,13 @@ function reloadExtensionsCommand(ctx: SlashCommandContext): void {
2197
2161
  export function parseSlashCommand(input: string): SlashCommand {
2198
2162
  const trimmed = input.trim();
2199
2163
  if (trimmed.length === 0) return { kind: "empty" };
2164
+ if (/^\/output(?:\s|$)/u.test(trimmed)) {
2165
+ return {
2166
+ kind: "usage-error",
2167
+ command: "output",
2168
+ reason: "Use Alt+O to cycle Output style, or /settings interface to save a default. Use /view for full details",
2169
+ };
2170
+ }
2200
2171
  if (trimmed.startsWith(COMMAND_ESCAPE)) return { kind: "unknown", text: trimmed.slice(1) };
2201
2172
  for (const entry of BUILTIN_SLASH_COMMANDS) {
2202
2173
  const match = entry.match ? entry.match(trimmed) : matchFromSpec(entry, trimmed);
@@ -2284,7 +2255,6 @@ const COMMAND_ORDER = [
2284
2255
  "help",
2285
2256
  "model",
2286
2257
  "thinking",
2287
- "output",
2288
2258
  "settings",
2289
2259
  "new",
2290
2260
  "resume",