@iowarp/clio-coder 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/CHANGELOG.md +92 -2
  2. package/CONTRIBUTING.md +25 -15
  3. package/README.md +340 -27
  4. package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
  5. package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
  8. package/dist/builtins-CRFDQUVP.js +22 -0
  9. package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
  10. package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
  11. package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
  12. package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
  13. package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
  14. package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
  15. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  16. package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
  17. package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
  18. package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
  19. package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
  20. package/dist/{chunk-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
  21. package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
  22. package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
  23. package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
  24. package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
  25. package/dist/chunk-5ZSZEYJK.js +119 -0
  26. package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
  27. package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
  28. package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
  29. package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
  30. package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
  31. package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
  32. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  33. package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
  34. package/dist/{chunk-25QBEXRS.js → chunk-7TKWWPD7.js} +5 -4
  35. package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
  36. package/dist/chunk-7WUZEB2M.js +165 -0
  37. package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
  38. package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
  39. package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
  40. package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
  41. package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
  42. package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
  43. package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
  44. package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
  45. package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
  46. package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
  47. package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
  48. package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
  49. package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
  50. package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
  51. package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
  52. package/dist/{chunk-YNFKXPEC.js → chunk-DIMRLNIC.js} +35 -66
  53. package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
  54. package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
  55. package/dist/{chunk-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
  56. package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
  57. package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
  58. package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
  59. package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
  60. package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
  61. package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
  62. package/dist/chunk-ECOMVOHP.js +139 -0
  63. package/dist/chunk-EFSEIZE6.js +56 -0
  64. package/dist/{chunk-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
  65. package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
  66. package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
  67. package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
  68. package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
  69. package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
  70. package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
  71. package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
  72. package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
  73. package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
  74. package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
  75. package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
  76. package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
  77. package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
  78. package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
  79. package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
  80. package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
  81. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  82. package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
  83. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  84. package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
  85. package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
  86. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  87. package/dist/{chunk-72YIHOZQ.js → chunk-ILJ7DWGE.js} +9 -9
  88. package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
  89. package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
  90. package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
  91. package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
  92. package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
  93. package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
  94. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  95. package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
  96. package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
  97. package/dist/chunk-KPRLAMP4.js +32 -0
  98. package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
  99. package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
  100. package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
  101. package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
  102. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  103. package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
  104. package/dist/chunk-LUL5Z66S.js +221 -0
  105. package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
  106. package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
  107. package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
  108. package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
  109. package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
  110. package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
  111. package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
  112. package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
  113. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  114. package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
  115. package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
  116. package/dist/chunk-NTK3WTHM.js +141 -0
  117. package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
  118. package/dist/{chunk-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
  119. package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
  120. package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
  121. package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
  122. package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
  123. package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
  124. package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
  125. package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
  126. package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
  127. package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
  128. package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
  129. package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
  130. package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
  131. package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
  132. package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
  133. package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
  134. package/dist/{chunk-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
  135. package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
  136. package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
  137. package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
  138. package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
  139. package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
  140. package/dist/chunk-SD7SHNDW.js +15 -0
  141. package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
  142. package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
  143. package/dist/chunk-SL2RDHKO.js +19 -0
  144. package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
  145. package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
  146. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  147. package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
  148. package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
  149. package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
  150. package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
  151. package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
  152. package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
  153. package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
  154. package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
  155. package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
  156. package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
  157. package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
  158. package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
  159. package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
  160. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  161. package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
  162. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  163. package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
  164. package/dist/chunk-USZA7GWL.js +341 -0
  165. package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
  166. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  167. package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
  168. package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
  169. package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
  170. package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
  171. package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
  172. package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
  173. package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
  174. package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
  175. package/dist/{chunk-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
  176. package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
  177. package/dist/{chunk-5636DCO5.js → chunk-WLMSOT73.js} +59 -12
  178. package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
  179. package/dist/chunk-WXA2CFJO.js +23 -0
  180. package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
  181. package/dist/{chunk-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
  182. package/dist/{chunk-OEJSLEPW.js → chunk-YEJIG7LN.js} +332 -332
  183. package/dist/chunk-YGDMBK7O.js +567 -0
  184. package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
  185. package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
  186. package/dist/{chunk-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
  187. package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
  188. package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
  189. package/dist/cli/index.js +44 -44
  190. package/dist/clio-5I2IBFYL.js +26 -0
  191. package/dist/{code-nav-IJR2DBPR.js → code-nav-YXIAEZVS.js} +48 -32
  192. package/dist/codewiki/build-worker.js +76 -29
  193. package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
  194. package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
  195. package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
  196. package/dist/configure-SML6UBZ5.js +55 -0
  197. package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
  198. package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
  199. package/dist/{context-BOYF5EJM.js → context-S2EEC3EJ.js} +62 -31
  200. package/dist/context-clear-TMEQCOTH.js +183 -0
  201. package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
  202. package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
  203. package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
  204. package/dist/detail-5572VLBO.js +114 -0
  205. package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
  206. package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
  207. package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
  208. package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
  209. package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
  210. package/dist/evidence-DTGEN456.js +224 -0
  211. package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
  212. package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
  213. package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
  214. package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
  215. package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
  216. package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
  217. package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
  218. package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
  219. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  220. package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
  221. package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
  222. package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
  223. package/dist/fleet-view-UP2BWQQY.js +117 -0
  224. package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
  225. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  226. package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
  227. package/dist/inventory-K2OZ36YJ.js +117 -0
  228. package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
  229. package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
  230. package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
  231. package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
  232. package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
  233. package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
  234. package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
  235. package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
  236. package/dist/preload-65U34NG6.js +115 -0
  237. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  238. package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
  239. package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
  240. package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
  241. package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
  242. package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
  243. package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
  244. package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
  245. package/dist/slash-commands-GBARG3Y7.js +91 -0
  246. package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
  247. package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
  248. package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
  249. package/dist/tasks-6BVY5YZF.js +36 -0
  250. package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-57UEOJKS.js} +12 -11
  251. package/dist/tools-6OCQ6SVB.js +28 -0
  252. package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
  253. package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
  254. package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
  255. package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
  256. package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
  257. package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
  258. package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
  259. package/dist/verify-3AS3ULCY.js +30 -0
  260. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  261. package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
  262. package/dist/wiki-generate-7BV7XWIY.js +614 -0
  263. package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
  264. package/dist/worker/entry.js +99 -88
  265. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  266. package/docs/README.md +7 -6
  267. package/docs/architecture/acp.md +10 -0
  268. package/docs/architecture/architecture.md +5 -5
  269. package/docs/architecture/context-engine.md +44 -59
  270. package/docs/architecture/context-working-set.md +7 -9
  271. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  272. package/docs/architecture/evidence-and-memory.md +10 -0
  273. package/docs/architecture/pi-boundary.md +37 -7
  274. package/docs/architecture/prompt-envelope-and-tools.md +7 -7
  275. package/docs/architecture/session-lifecycle.md +4 -4
  276. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  277. package/docs/guide/commands-and-modes.md +49 -36
  278. package/docs/guide/configuration-and-targets.md +7 -2
  279. package/docs/guide/configuration-reference.md +13 -3
  280. package/docs/guide/environment-variables.md +6 -2
  281. package/docs/guide/fleet-dispatch.md +12 -0
  282. package/docs/guide/installation-and-lifecycle.md +35 -9
  283. package/docs/guide/proactive-memory.md +1 -1
  284. package/docs/guide/skills-marketplace.md +11 -3
  285. package/docs/guide/tool-usage.md +9 -2
  286. package/docs/process/development-pipeline.md +10 -10
  287. package/docs/process/documentation-guide.md +2 -2
  288. package/docs/process/eval-runner.md +15 -0
  289. package/docs/process/evals-internal.md +1 -1
  290. package/docs/process/release-cut-checklist.md +6 -6
  291. package/evals/README.md +4 -0
  292. package/evals/behavioral-corpus-grader.mjs +147 -14
  293. package/evals/behavioral-model-negative-control.yaml +1 -0
  294. package/evals/behavioral-model.yaml +266 -1
  295. package/evals/fixtures/docs-retrieval.json +102 -0
  296. package/evals/fixtures/scalar-decision.json +17 -0
  297. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  298. package/evals/fixtures/source-explanation.json +74 -0
  299. package/evals/fixtures/tool-arguments.json +18 -0
  300. package/evals/fixtures/tool-surface/read.txt +4 -0
  301. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  302. package/evals/no-edit-memory-grader.mjs +149 -0
  303. package/evals/scalar-decision-grader.py +41 -0
  304. package/evals/scalar-decision-machinery.ts +145 -0
  305. package/evals/source-explanation-grader.mjs +118 -0
  306. package/evals/tool-surface-grader.mjs +53 -0
  307. package/evals/tool-surface-model.yaml +274 -0
  308. package/package.json +14 -14
  309. package/skills/README.md +6 -6
  310. package/skills/registry.yaml +1 -1
  311. package/skills/skill-marketplace.json +1 -1
  312. package/src/cli/bootstrap-generate.ts +6 -0
  313. package/src/cli/config-inspect.ts +24 -7
  314. package/src/cli/config-trust.ts +62 -0
  315. package/src/cli/config.ts +8 -0
  316. package/src/cli/context-map.ts +75 -14
  317. package/src/cli/context.ts +46 -17
  318. package/src/cli/eval.ts +17 -3
  319. package/src/cli/modes/print.ts +32 -4
  320. package/src/cli/run.ts +16 -14
  321. package/src/cli/skills-eval.ts +10 -8
  322. package/src/cli/steer-channel.ts +31 -18
  323. package/src/cli/targets.ts +83 -31
  324. package/src/cli/tasks.ts +10 -1
  325. package/src/cli/upgrade.ts +9 -6
  326. package/src/cli/usage.ts +24 -0
  327. package/src/cli/wiki-generate.ts +239 -96
  328. package/src/core/bash-exec.ts +43 -15
  329. package/src/core/bus-events.ts +15 -0
  330. package/src/core/config.ts +33 -14
  331. package/src/core/defaults.ts +5 -4
  332. package/src/core/file-references.ts +11 -1
  333. package/src/core/incomplete-installation.ts +3 -1
  334. package/src/core/settings-layers.ts +21 -5
  335. package/src/core/termination.ts +26 -9
  336. package/src/core/untrusted-content.ts +16 -0
  337. package/src/core/workspace-trust.ts +179 -0
  338. package/src/domains/agents/builtins/coder.md +4 -2
  339. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  340. package/src/domains/agents/builtins/documenter.md +7 -4
  341. package/src/domains/agents/builtins/researcher.md +1 -0
  342. package/src/domains/agents/builtins/scout.md +7 -1
  343. package/src/domains/agents/result-contract.ts +199 -26
  344. package/src/domains/context/bootstrap-prompt.ts +11 -9
  345. package/src/domains/context/bootstrap.ts +74 -39
  346. package/src/domains/context/clio-md.ts +88 -26
  347. package/src/domains/context/codewiki/build-operation.ts +121 -0
  348. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  349. package/src/domains/context/codewiki/build-worker.ts +3 -35
  350. package/src/domains/context/codewiki/coordinator.ts +36 -6
  351. package/src/domains/context/codewiki/indexer.ts +59 -19
  352. package/src/domains/context/contract.ts +6 -2
  353. package/src/domains/context/extension.ts +72 -10
  354. package/src/domains/context/fingerprint.ts +39 -34
  355. package/src/domains/context/index.ts +7 -1
  356. package/src/domains/context/prompt-context.ts +55 -14
  357. package/src/domains/context/refresh.ts +9 -57
  358. package/src/domains/context/wiki/assemble.ts +14 -10
  359. package/src/domains/context/wiki/evidence.ts +209 -0
  360. package/src/domains/context/wiki/generate.ts +201 -67
  361. package/src/domains/context/wiki/meta.ts +10 -2
  362. package/src/domains/context/wiki/plan-store.ts +70 -14
  363. package/src/domains/context/wiki/plan.ts +71 -14
  364. package/src/domains/context/wiki/prompts.ts +42 -1
  365. package/src/domains/context/wiki/source-content.ts +106 -0
  366. package/src/domains/context/wiki/staleness.ts +33 -22
  367. package/src/domains/context/working-set/contract.ts +8 -2
  368. package/src/domains/context/working-set/engine.ts +17 -4
  369. package/src/domains/context/working-set/fold.ts +15 -2
  370. package/src/domains/context/working-set/marker.ts +2 -1
  371. package/src/domains/context/working-set/project.ts +18 -7
  372. package/src/domains/context/working-set/recall.ts +82 -56
  373. package/src/domains/dispatch/active-route-planner.ts +6 -3
  374. package/src/domains/dispatch/admission-queue.ts +19 -7
  375. package/src/domains/dispatch/admission.ts +3 -3
  376. package/src/domains/dispatch/budget-envelope.ts +47 -82
  377. package/src/domains/dispatch/capacity-lease.ts +57 -19
  378. package/src/domains/dispatch/contract.ts +10 -2
  379. package/src/domains/dispatch/event-pump.ts +28 -7
  380. package/src/domains/dispatch/execution-role.ts +49 -2
  381. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  382. package/src/domains/dispatch/extension.ts +190 -105
  383. package/src/domains/dispatch/fleet-run.ts +20 -0
  384. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  385. package/src/domains/dispatch/parallel-writers.ts +34 -0
  386. package/src/domains/dispatch/reservation-store.ts +8 -34
  387. package/src/domains/dispatch/route-approval.ts +3 -3
  388. package/src/domains/dispatch/route-observer.ts +4 -2
  389. package/src/domains/dispatch/route-quality.ts +6 -1
  390. package/src/domains/dispatch/types.ts +4 -3
  391. package/src/domains/dispatch/worker-spawn.ts +58 -21
  392. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  393. package/src/domains/eval/compare/behavioral.ts +81 -14
  394. package/src/domains/eval/compare/compare.ts +15 -5
  395. package/src/domains/eval/compare/envelope.ts +12 -5
  396. package/src/domains/eval/metrics/context.ts +24 -1
  397. package/src/domains/eval/metrics/tracked.ts +4 -28
  398. package/src/domains/eval/reports/comparison.ts +9 -9
  399. package/src/domains/eval/runners/clio-run.ts +5 -1
  400. package/src/domains/eval/schema/suite.ts +2 -0
  401. package/src/domains/eval/schema/validate.ts +1 -0
  402. package/src/domains/eval/suites/run.ts +189 -13
  403. package/src/domains/eval/verifiers/integrity.ts +39 -0
  404. package/src/domains/eval/verifiers/patch.ts +58 -2
  405. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  406. package/src/domains/evidence/build.ts +4 -2
  407. package/src/domains/interop/registry.ts +2 -2
  408. package/src/domains/middleware/hooks-io.ts +45 -26
  409. package/src/domains/middleware/hooks.ts +6 -0
  410. package/src/domains/middleware/injection-screen.ts +23 -0
  411. package/src/domains/middleware/rules.ts +5 -1
  412. package/src/domains/middleware/stalled-turn.ts +18 -3
  413. package/src/domains/middleware/task-board-reminder.ts +4 -2
  414. package/src/domains/middleware/task-nudge.ts +4 -1
  415. package/src/domains/mux/contract.ts +34 -1
  416. package/src/domains/mux/dock-controller.ts +8 -1
  417. package/src/domains/mux/index.ts +1 -0
  418. package/src/domains/mux/socket-client.ts +13 -3
  419. package/src/domains/observability/contract.ts +2 -2
  420. package/src/domains/observability/projection.ts +30 -9
  421. package/src/domains/prompts/compiler.ts +10 -2
  422. package/src/domains/prompts/contract.ts +7 -4
  423. package/src/domains/prompts/extension.ts +28 -64
  424. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  425. package/src/domains/prompts/fragments/operating/contract.md +10 -0
  426. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  427. package/src/domains/prompts/fragments/wiki/page.md +28 -15
  428. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  429. package/src/domains/prompts/preload-prefix.ts +31 -0
  430. package/src/domains/prompts/preload.ts +135 -61
  431. package/src/domains/providers/auth/backend-file.ts +15 -11
  432. package/src/domains/providers/auth/storage.ts +3 -5
  433. package/src/domains/providers/catalog.ts +18 -3
  434. package/src/domains/providers/runtime-resolution.ts +11 -9
  435. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  436. package/src/domains/resources/skills/promotion.ts +8 -1
  437. package/src/domains/safety/action-classifier.ts +9 -0
  438. package/src/domains/safety/autonomy.ts +10 -1
  439. package/src/domains/safety/contract.ts +5 -1
  440. package/src/domains/safety/default-path-policy.ts +11 -0
  441. package/src/domains/safety/extension.ts +11 -2
  442. package/src/domains/safety/policy-engine.ts +189 -32
  443. package/src/domains/safety/project-policy.ts +7 -2
  444. package/src/domains/safety/workspace-trust.ts +43 -0
  445. package/src/domains/session/compaction/compact.ts +384 -21
  446. package/src/domains/session/compaction/cut-point.ts +42 -5
  447. package/src/domains/session/compaction/tokens.ts +9 -1
  448. package/src/domains/session/decision-board.ts +43 -33
  449. package/src/domains/session/entries.ts +169 -4
  450. package/src/domains/session/prompt-manifest.ts +47 -8
  451. package/src/domains/session/task-board.ts +21 -3
  452. package/src/domains/user-tasks/handoff.ts +16 -0
  453. package/src/engine/acp/adapter.ts +44 -12
  454. package/src/engine/acp/server.ts +1 -0
  455. package/src/engine/acp/transport.ts +2 -1
  456. package/src/engine/acp/types.ts +6 -1
  457. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  458. package/src/engine/api-registry.ts +19 -2
  459. package/src/engine/apis/openai-completions.ts +13 -6
  460. package/src/engine/apis/output-budget.ts +26 -10
  461. package/src/engine/claude/sdk-runtime.ts +4 -3
  462. package/src/engine/env-api-keys.ts +2 -1
  463. package/src/engine/external-subprocess.ts +14 -3
  464. package/src/engine/loop-guard.ts +19 -2
  465. package/src/engine/provider-diagnostics.ts +129 -0
  466. package/src/engine/provider-payload.ts +3 -1
  467. package/src/engine/worker-runtime.ts +13 -2
  468. package/src/engine/worker-tools.ts +5 -1
  469. package/src/entry/extension-reload.ts +1 -0
  470. package/src/entry/orchestrator.ts +53 -15
  471. package/src/interactive/chat-loop-messages.ts +12 -4
  472. package/src/interactive/chat-loop.ts +115 -45
  473. package/src/interactive/chat-renderer.ts +60 -0
  474. package/src/interactive/context-recall-command.ts +2 -1
  475. package/src/interactive/dispatch-board.ts +17 -2
  476. package/src/interactive/editor-submit.ts +13 -0
  477. package/src/interactive/interactive-application.ts +8 -2
  478. package/src/interactive/interactive-event-projection.ts +7 -1
  479. package/src/interactive/interactive-presentation.ts +15 -7
  480. package/src/interactive/interactive-slash-runtime.ts +2 -0
  481. package/src/interactive/layout.ts +2 -1
  482. package/src/interactive/model-session-replay.ts +2 -2
  483. package/src/interactive/overlay-frame.ts +1 -0
  484. package/src/interactive/overlay-general-openers.ts +3 -1
  485. package/src/interactive/overlay-session-lifecycle.ts +6 -0
  486. package/src/interactive/overlays/ask-user.ts +1 -0
  487. package/src/interactive/overlays/message-picker.ts +1 -1
  488. package/src/interactive/renderers/tool-execution.ts +17 -1
  489. package/src/interactive/renderers/worker-entry.ts +25 -10
  490. package/src/interactive/slash-commands.ts +9 -7
  491. package/src/interactive/turn-context.ts +221 -53
  492. package/src/interactive/turn-middleware.ts +3 -1
  493. package/src/interactive/turn-persistence.ts +3 -0
  494. package/src/interactive/turn-runtime.ts +11 -2
  495. package/src/interactive/turn-state.ts +10 -9
  496. package/src/interactive/watch-pane.ts +18 -4
  497. package/src/interactive/worker-stream.ts +7 -7
  498. package/src/tools/agent-tools.ts +6 -3
  499. package/src/tools/bash.ts +1 -1
  500. package/src/tools/builtin-tool-catalog.ts +9 -2
  501. package/src/tools/codewiki/code-nav.ts +4 -10
  502. package/src/tools/compete-judge-task.ts +71 -0
  503. package/src/tools/compete-worktrees.ts +34 -0
  504. package/src/tools/context/index.ts +32 -7
  505. package/src/tools/context/surface.ts +15 -4
  506. package/src/tools/decide.ts +1 -1
  507. package/src/tools/dispatch-admission.ts +12 -1
  508. package/src/tools/dispatch-arguments.ts +38 -1
  509. package/src/tools/dispatch-plan.ts +7 -7
  510. package/src/tools/dispatch-runner.ts +48 -32
  511. package/src/tools/dispatch-schema.ts +30 -23
  512. package/src/tools/dispatch-scout-admission.ts +10 -44
  513. package/src/tools/dispatch-scout.ts +2 -3
  514. package/src/tools/find.ts +13 -4
  515. package/src/tools/grep.ts +13 -1
  516. package/src/tools/ls.ts +7 -1
  517. package/src/tools/monitor.ts +26 -11
  518. package/src/tools/network-policy.ts +11 -24
  519. package/src/tools/observation.ts +39 -2
  520. package/src/tools/read.ts +112 -15
  521. package/src/tools/registry.ts +54 -17
  522. package/src/tools/result-shaping.ts +110 -2
  523. package/src/tools/tasks.ts +33 -7
  524. package/src/tools/verify/frontend.ts +67 -30
  525. package/src/tools/verify/numeric.ts +6 -1
  526. package/src/tools/web-fetch-network.ts +179 -0
  527. package/src/tools/web-fetch-surface.ts +2 -1
  528. package/src/tools/web-fetch.ts +15 -13
  529. package/src/tools/worker-evidence.ts +27 -0
  530. package/src/worker/spec-contract.ts +12 -8
  531. package/dist/builtins-WGALA46I.js +0 -22
  532. package/dist/chunk-2WZ546HR.js +0 -792
  533. package/dist/chunk-5PSMVOLM.js +0 -56
  534. package/dist/chunk-EL24TAU4.js +0 -1560
  535. package/dist/chunk-IZXGRF7P.js +0 -4048
  536. package/dist/chunk-JVCV3ICN.js +0 -47
  537. package/dist/chunk-MNJGS2IN.js +0 -33
  538. package/dist/chunk-O5CVSAG5.js +0 -122
  539. package/dist/chunk-ODGTEFFI.js +0 -50
  540. package/dist/chunk-OQE5J4C6.js +0 -73
  541. package/dist/chunk-UUVG37B4.js +0 -244
  542. package/dist/chunk-V6HJFQZE.js +0 -228
  543. package/dist/clio-QLICPCF5.js +0 -25
  544. package/dist/configure-VEPX4NMX.js +0 -55
  545. package/dist/context-clear-S4ZJCQUX.js +0 -182
  546. package/dist/detail-A7JAVSIG.js +0 -98
  547. package/dist/evidence-4F5USFKH.js +0 -208
  548. package/dist/fleet-view-MN2VG4MR.js +0 -101
  549. package/dist/inventory-C26CFDRR.js +0 -101
  550. package/dist/preload-P6DGH2PZ.js +0 -13
  551. package/dist/slash-commands-ZXPJD64J.js +0 -92
  552. package/dist/tasks-IPAGMEIX.js +0 -36
  553. package/dist/tools-EFFEAIDP.js +0 -28
  554. package/dist/verify-FWYGPKMR.js +0 -29
  555. package/dist/wiki-generate-743CIGJW.js +0 -476
@@ -65,6 +65,7 @@ function headlineFor(ref: string, tokens: number, state: EvictedState | undefine
65
65
  if (state !== undefined) {
66
66
  parts.push(state.by === undefined ? `evicted: ${state.reason}` : `evicted: ${state.reason} by ${state.by}`);
67
67
  }
68
+ if (state === undefined) parts.push("summarized");
68
69
  parts.push(`${formatTokens(tokens)} tokens`);
69
70
  if (offloadPath !== undefined) parts.push(`offload: ${offloadPath}`);
70
71
  return `[/context recall] ${parts.join(" · ")}`;
@@ -85,7 +86,7 @@ export function runOperatorRecall(ref: string, deps: OperatorRecallDeps): Operat
85
86
  // A ref that resolves to nothing is usually a typo or a stale marker; the
86
87
  // shared message ends with the refs the operator could have typed instead.
87
88
  if (!resolved.ok)
88
- return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view)}` };
89
+ return { ok: false, message: `[/context recall] ${recallErrorMessage(resolved.error, entries, view, leaf)}` };
89
90
  const { result } = resolved;
90
91
  const fields = buildRecallFields(result, { trigger: "operator" });
91
92
  try {
@@ -8,7 +8,11 @@ import {
8
8
  } from "../domains/dispatch/budget-envelope.js";
9
9
  import { type DispatchRequestOrigin, type RunKind, runKindSupportsLiveSteering } from "../domains/dispatch/types.js";
10
10
  import { describeWriteBoundaryAttributionDowngrade } from "../domains/dispatch/write-boundary.js";
11
- import type { TrustSummaryProjection, TrustVerdict } from "../domains/evidence/trust-projection.js";
11
+ import {
12
+ type TrustSummaryProjection,
13
+ type TrustVerdict,
14
+ trustStateWord,
15
+ } from "../domains/evidence/trust-projection.js";
12
16
  import type { ObservabilityContract, ObservabilityRunSummary } from "../domains/observability/contract.js";
13
17
  import {
14
18
  COST_NOT_MEASURED,
@@ -774,7 +778,18 @@ function renderTaskIslandRow(row: DispatchBoardRow, width: number): string[] {
774
778
  ? ` ${theme.fg("muted", truncateToWidth(row.taskSummary, Math.max(1, width - 2), "…", false))}`
775
779
  : null;
776
780
 
777
- return [padAnsi(line1, width), ...(task ? [padAnsi(task, width)] : []), padAnsi(telemetry, width)];
781
+ const quality = isTerminalStatus(row.status)
782
+ ? wrapTextWithAnsi(
783
+ ` quality: ${trustStateWord("validationGrounding", row.trust?.axes.validationGrounding ?? "unknown")}`,
784
+ width,
785
+ )
786
+ : [];
787
+ return [
788
+ padAnsi(line1, width),
789
+ ...quality.map((line) => padAnsi(theme.fg("muted", line), width)),
790
+ ...(task ? [padAnsi(task, width)] : []),
791
+ padAnsi(telemetry, width),
792
+ ];
778
793
  }
779
794
 
780
795
  /**
@@ -25,6 +25,8 @@ import {
25
25
  } from "./transcript-detail.js";
26
26
 
27
27
  const EDITOR_BASH_TIMEOUT_MS = 300_000;
28
+ /** Existing bash TERM-to-KILL grace (5s), plus settlement and session append. */
29
+ export const EDITOR_BASH_SHUTDOWN_MS = 6000;
28
30
 
29
31
  /**
30
32
  * Command shapes whose text is put back in the editor after the parser rejects
@@ -125,18 +127,22 @@ export interface EditorSubmitController {
125
127
  restoreQueuedFollowUpsToEditor(): void;
126
128
  hasActiveEditorBash(): boolean;
127
129
  cancelActiveEditorBash(): boolean;
130
+ /** Stop shell admission, cancel the owned command, and await its persisted result. */
131
+ shutdownEditorBash(): Promise<void>;
128
132
  }
129
133
 
130
134
  type EditorSteerSubmission = "unhandled" | "accepted" | "rejected";
131
135
 
132
136
  /** Owns editor submission and the one local bash process attached to it. */
133
137
  export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubmitController {
138
+ let shuttingDown = false;
134
139
  let activeEditorBash: AbortController | null = null;
135
140
  let activeEditorBashSettlement: Promise<void> | null = null;
136
141
 
137
142
  const runEditorBash = (text: string): boolean => {
138
143
  const parsed = parseEditorBashCommand(text);
139
144
  if (!parsed) return false;
145
+ if (shuttingDown) return true;
140
146
  if (deps.chat.isStreaming()) {
141
147
  deps.io.stderr("[bash] response in progress. Press Esc to cancel the active run before running a local command.\n");
142
148
  return true;
@@ -394,12 +400,14 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
394
400
  const literalText = unguardPastedEditorOperator(text);
395
401
  const trimmed = literalText.trim();
396
402
  if (trimmed.length === 0) return;
403
+ if (shuttingDown) throw new Error("editor is shutting down");
397
404
  signal?.throwIfAborted();
398
405
  deps.collapseLaunchpadBeforeSubmit?.();
399
406
  if (parseEditorBashCommand(text)) {
400
407
  while (deps.chat.isStreaming()) await awaitWithAbort(deps.chat.whenSettled(), signal);
401
408
  while (activeEditorBashSettlement) await awaitWithAbort(activeEditorBashSettlement, signal);
402
409
  signal?.throwIfAborted();
410
+ if (shuttingDown) throw new Error("editor is shutting down");
403
411
  deps.editor.addToHistory(literalText);
404
412
  runEditorBash(text);
405
413
  deps.ui.requestRender();
@@ -529,6 +537,11 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
529
537
  interruptFromEditor,
530
538
  restoreQueuedFollowUpsToEditor,
531
539
  hasActiveEditorBash: () => activeEditorBash !== null,
540
+ shutdownEditorBash: async () => {
541
+ shuttingDown = true;
542
+ activeEditorBash?.abort();
543
+ await activeEditorBashSettlement;
544
+ },
532
545
  cancelActiveEditorBash: () => {
533
546
  if (!activeEditorBash) return false;
534
547
  activeEditorBash.abort();
@@ -3,6 +3,7 @@ import type { ClioSettings } from "../core/config.js";
3
3
  import type { SafeEventBus } from "../core/event-bus.js";
4
4
  import { expandInlineFileReferencesAsync } from "../core/file-references.js";
5
5
  import type { PendingSkillRequest } from "../core/skill-activation.js";
6
+ import { getTerminationCoordinator } from "../core/termination.js";
6
7
  import { clioStateDir } from "../core/xdg.js";
7
8
  import type { AgentsContract } from "../domains/agents/contract.js";
8
9
  import type { ClioKeybinding } from "../domains/config/keybindings.js";
@@ -33,7 +34,7 @@ import { emitCommandNotice } from "./command-fallbacks.js";
33
34
  import { appendNotice } from "./command-output.js";
34
35
  import { dispatchCouncilThroughRegistry } from "./council-dispatch.js";
35
36
  import { createDispatchSteering } from "./dispatch-steering.js";
36
- import { createEditorSubmitController } from "./editor-submit.js";
37
+ import { createEditorSubmitController, EDITOR_BASH_SHUTDOWN_MS } from "./editor-submit.js";
37
38
  import { createInteractiveDesktopNotifications } from "./footer/notifications.js";
38
39
  import { createInteractiveEventProjection } from "./interactive-event-projection.js";
39
40
  import { createInteractiveInputRuntime } from "./interactive-input-runtime.js";
@@ -587,6 +588,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
587
588
  ...(deps.session ? { session: deps.session } : {}),
588
589
  ...(deps.getSessionId ? { getSessionId: deps.getSessionId } : {}),
589
590
  ...(deps.getTaskBoard ? { getTaskBoard: deps.getTaskBoard } : {}),
591
+ ...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
590
592
  ...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
591
593
  ...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
592
594
  ...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
@@ -701,6 +703,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
701
703
  io,
702
704
  bus: deps.bus,
703
705
  dispatch: deps.dispatch,
706
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
704
707
  ...(deps.session ? { session: deps.session } : {}),
705
708
  providers: deps.providers,
706
709
  chat: deps.chat,
@@ -804,6 +807,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
804
807
  expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
805
808
  notify,
806
809
  });
810
+ // The lease drains the terminal; operator shell ownership outlives that
811
+ // surface and must settle before the session domain stops, on every exit.
812
+ getTerminationCoordinator().onDrain(() => editorSubmit.shutdownEditorBash(), { timeoutMs: EDITOR_BASH_SHUTDOWN_MS });
807
813
  editor.onSubmit = editorSubmit.submitEditorText;
808
814
 
809
815
  const interactiveTickers = createInteractiveTickers({
@@ -1111,7 +1117,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1111
1117
  steerSelectedDispatch,
1112
1118
  cancelSelectedDispatch,
1113
1119
  cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
1114
- isStreaming: () => deps.chat.isStreaming(),
1120
+ isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
1115
1121
  cancelActiveRun,
1116
1122
  editor,
1117
1123
  editorSubmit,
@@ -251,9 +251,10 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
251
251
  typeof event.tokensBefore === "number" &&
252
252
  typeof event.tokensAfter === "number"
253
253
  ) {
254
+ const outcome = event.tokensAfter < event.tokensBefore ? "Reclaimed context" : "Context updated";
254
255
  deps.notify(
255
256
  "info",
256
- `[Compaction] Reclaimed context: ${event.tokensBefore} -> ${event.tokensAfter} tokens (${event.stage})`,
257
+ `[Compaction] ${outcome}: ${event.tokensBefore} -> ${event.tokensAfter} tokens (${event.stage})`,
257
258
  "compaction-notice",
258
259
  );
259
260
  }
@@ -388,6 +389,11 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
388
389
 
389
390
  const seenMiddlewareBudgetWarnings = new Set<string>();
390
391
  remainingUnsubscribers.push(
392
+ deps.bus.on(BusChannels.ExtensionsLoadIssue, (payload) => {
393
+ if (typeof payload?.message !== "string" || payload.message.trim().length === 0) return;
394
+ deps.appendTranscriptNotice("warn", payload.message);
395
+ deps.requestRender();
396
+ }),
391
397
  deps.bus.on(BusChannels.MiddlewareHookFailed, (payload) => {
392
398
  const notice = middlewareHookFailedSessionNotice(payload, seenMiddlewareBudgetWarnings);
393
399
  if (notice === null) return;
@@ -16,6 +16,7 @@ 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 { UserTasksStore } from "../domains/user-tasks/store.js";
19
20
  import type { Component, 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";
@@ -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;
@@ -471,13 +473,19 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
471
473
  label: skill.name,
472
474
  description: skill.description,
473
475
  })),
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
- })),
476
+ tasks: async ({ subcommand }) =>
477
+ (deps.userTasks?.snapshot() ?? [])
478
+ .filter((task) =>
479
+ subcommand === "hand"
480
+ ? task.status === "open"
481
+ : task.status === "open" || task.status === "handed" || task.status === "picked",
482
+ )
483
+ .map((task) => ({
484
+ id: task.id,
485
+ value: task.id,
486
+ label: task.title,
487
+ description: task.status,
488
+ })),
481
489
  // Other slots remain empty when this presentation has no read-only catalog for them.
482
490
  },
483
491
  });
@@ -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;
@@ -380,6 +381,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
380
381
  });
381
382
  },
382
383
  dispatch: deps.dispatch,
384
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
383
385
  bus: deps.bus,
384
386
  ...(deps.agents
385
387
  ? { getAgentRoleFacts: agentRoleFactsResolver((agentId: string) => deps.agents?.getSpec(agentId) ?? null) }
@@ -33,7 +33,8 @@ function buildFullscreenLayout(
33
33
  primary: true,
34
34
  overscroll: "chain",
35
35
  scrollbar: options.fullscreenScrollbar ?? "auto",
36
- scrollbarStyle: () => theme.fg("frameStrong", GLYPH.barFull),
36
+ scrollbarTrackStyle: (text) => theme.fg("frame", text),
37
+ scrollbarThumbStyle: () => theme.fg("frameStrong", GLYPH.barFull),
37
38
  });
38
39
  const dock = new VStack();
39
40
  if (parts.pending) dock.addChild(parts.pending, { shrink: 1, minSize: 0 });
@@ -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,7 +41,7 @@ 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";
@@ -487,6 +488,7 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
487
488
  fleetRootId,
488
489
  dispatch: deps.dispatch,
489
490
  agents: { getSpec: (agentId) => agents.getSpec(agentId) },
491
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
490
492
  attributionEnabled: deps.getSettings?.().integrations.git.commitAttribution ?? true,
491
493
  vars: preview.vars,
492
494
  onStepDispatched: (event) => {
@@ -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
  }
@@ -12,6 +12,7 @@
12
12
  * two surfaces stay byte-identical.
13
13
  */
14
14
 
15
+ import { trustStateWord } from "../../domains/evidence/trust-projection.js";
15
16
  import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
16
17
  import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
17
18
  import { formatSize } from "../../engine/truncate.js";
@@ -320,7 +321,22 @@ function outcomeSummary(finished: ToolExecutionFinished): string | null {
320
321
  if (finished.toolName === "dispatch") {
321
322
  const receipts = numberField(details, "receiptCount");
322
323
  const failed = numberField(details, "failedCount") ?? 0;
323
- if (receipts !== null) return `${receipts} task${receipts === 1 ? "" : "s"} -> ${receipts - failed} ok`;
324
+ if (receipts !== null) {
325
+ const runs = Array.isArray(details?.runs) ? details.runs.slice(0, receipts) : [];
326
+ const qualityCounts = new Map<string, number>();
327
+ for (const run of runs) {
328
+ const trust = isPlainObject(run) && isPlainObject(run.trust) ? run.trust : null;
329
+ const axes = isPlainObject(trust?.axes) ? trust.axes : null;
330
+ const word = trustStateWord("validationGrounding", stringField(axes, "validationGrounding") ?? "unknown");
331
+ qualityCounts.set(word, (qualityCounts.get(word) ?? 0) + 1);
332
+ }
333
+ if (runs.length < receipts) {
334
+ const unknown = trustStateWord("validationGrounding", "unknown");
335
+ qualityCounts.set(unknown, (qualityCounts.get(unknown) ?? 0) + receipts - runs.length);
336
+ }
337
+ const quality = [...qualityCounts].map(([word, count]) => `${count} ${word}`).join(", ");
338
+ return `${receipts} task${receipts === 1 ? "" : "s"} -> ${receipts - failed} execution ok${failed > 0 ? `, ${failed} execution failed` : ""}${quality ? `; quality: ${quality}` : ""}`;
339
+ }
324
340
  return null;
325
341
  }
326
342
  if (finished.toolName === "tasks") {
@@ -11,17 +11,20 @@
11
11
  * ◇ coder · node-a/example-coder-model · run 2mkas6s
12
12
  * │ Hello! I'm the coder worker.
13
13
  * │ ⚙ read · artifact
14
- * └ ✓ ok · 4.8k tok · 9.6s · contract pass
14
+ * └ ✓ execution ok · 4.8k tok · 9.6s · contract pass
15
+ * │ quality: grounded
15
16
  *
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:
17
+ * Folded (the default for a run the model asked for) keeps identity and
18
+ * execution on a tool-style subline, followed by the settled quality fact:
18
19
  *
19
- * ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ · 41s (Ctrl+O)
20
+ * ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ execution ok · 41s (Ctrl+O)
21
+ * │ quality: validation failed
20
22
  *
21
23
  * Pure: no I/O, no module-level mutable state beyond the shared theme handle.
22
24
  */
23
25
 
24
26
  import { parseJsonObjectPayload } from "../../core/json-payload.js";
27
+ import { trustStateWord } from "../../domains/evidence/trust-projection.js";
25
28
  import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
26
29
  import { formatFooterTokens } from "../footer-panel.js";
27
30
  import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
@@ -80,14 +83,14 @@ function headerLine(entry: WorkerEntryState, width: number): string {
80
83
  }
81
84
 
82
85
  /**
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.
86
+ * Execution outcome, explicitly named on successful folded and expanded rows
87
+ * so the separate quality line cannot be mistaken for process status.
85
88
  * Abandoned names itself rather than falling through to its `stalled`
86
89
  * outcome code, so it reads as a ledger-side finding instead of the ordinary
87
90
  * heartbeat-timeout `stalled` a sealed receipt reports.
88
91
  */
89
92
  function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
90
- if (receipt.outcome === "succeeded") return theme.fg("success", word ? `${GLYPH.ok} ok` : GLYPH.ok);
93
+ if (receipt.outcome === "succeeded") return theme.fg("success", `${GLYPH.ok} execution ok`);
91
94
  if (receipt.outcome === "canceled") return theme.fg("dim", `${GLYPH.cancelled} canceled`);
92
95
  if (receipt.abandonedDetail !== undefined) return theme.fg("error", word ? `${GLYPH.error} abandoned` : GLYPH.error);
93
96
  return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
@@ -397,8 +400,12 @@ function foldedLine(entry: WorkerEntryState, width: number, expandKey: string |
397
400
  entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
398
401
  const hint = expandKey === undefined || expandKey.length === 0 ? "" : dim(` (${expandKey})`);
399
402
  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}`;
403
+ let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}${hint}`;
404
+ // Reserve one identity cell. The optional hint yields before execution
405
+ // status when the suffix alone would exhaust the header's width.
406
+ if (visibleWidth(tail) >= width) tail = ` ${status}`;
407
+ const header = `${truncateToWidth(identity, Math.max(1, width - visibleWidth(tail)), GLYPH.ellipsis, false)}${tail}`;
408
+ return truncateToWidth(header, width, GLYPH.ellipsis, false);
402
409
  }
403
410
 
404
411
  export function renderWorkerEntryLines(
@@ -407,7 +414,14 @@ export function renderWorkerEntryLines(
407
414
  options: WorkerEntryRenderOptions,
408
415
  ): string[] {
409
416
  const safeWidth = Math.max(1, Math.floor(width));
410
- if (options.folded) return [foldedLine(entry, safeWidth, options.expandKey)];
417
+ const quality = isPending(entry)
418
+ ? []
419
+ : railLines(
420
+ `quality: ${trustStateWord("validationGrounding", entry.receipt?.trust?.validationGrounding.state ?? "unknown")}`,
421
+ "muted",
422
+ safeWidth,
423
+ );
424
+ if (options.folded) return [foldedLine(entry, safeWidth, options.expandKey), ...quality];
411
425
  const tools = toolLine(entry, safeWidth);
412
426
  return [
413
427
  headerLine(entry, safeWidth),
@@ -416,5 +430,6 @@ export function renderWorkerEntryLines(
416
430
  ...(tools === null ? [] : [tools]),
417
431
  ...failureLines(entry, safeWidth),
418
432
  footerLine(entry, safeWidth),
433
+ ...quality,
419
434
  ];
420
435
  }
@@ -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";
@@ -246,6 +249,8 @@ export interface RunCommandOptions {
246
249
 
247
250
  export interface HandleRunDeps {
248
251
  dispatch: DispatchContract;
252
+ /** Live session board, snapshotted before operator run admission. */
253
+ getDecisionBoard?: () => ReadonlyArray<DecisionLedgerEntry>;
249
254
  /** Strict recipe facts the run's execution role is derived from. */
250
255
  getAgentRoleFacts?: AgentRoleFactsResolver;
251
256
  io: RunIo;
@@ -341,6 +346,7 @@ export async function handleRun(
341
346
  deps: HandleRunDeps,
342
347
  options: RunCommandOptions = {},
343
348
  ): Promise<void> {
349
+ const decisionRefs = activeDecisionRefs(deps.getDecisionBoard?.() ?? []);
344
350
  if (options.target && options.workerProfile) {
345
351
  deps.notice(
346
352
  "warn",
@@ -363,6 +369,7 @@ export async function handleRun(
363
369
  ...(deps.getAgentRoleFacts ? { resolveFacts: deps.getAgentRoleFacts } : {}),
364
370
  }),
365
371
  requestOrigin: "user",
372
+ ...(decisionRefs.length > 0 ? { decisionRefs } : {}),
366
373
  ...(options.workerProfile ? { workerProfile: options.workerProfile } : {}),
367
374
  ...(options.workerRuntime ? { workerRuntime: options.workerRuntime } : {}),
368
375
  ...(options.target ? { target: options.target } : {}),
@@ -562,6 +569,7 @@ export interface SlashCommandContext {
562
569
  io: RunIo;
563
570
  notice: (level: NoticeLevel, text: string) => void;
564
571
  dispatch: DispatchContract;
572
+ getDecisionBoard?: HandleRunDeps["getDecisionBoard"];
565
573
  bus: SafeEventBus;
566
574
  /** Strict recipe facts used to keep interactive /run role-equivalent with the CLI. */
567
575
  getAgentRoleFacts?: AgentRoleFactsResolver;
@@ -791,13 +799,6 @@ function formatReceiptVerificationBlock(runId: string, result: SlashReceiptVerif
791
799
  return lines.join("\n");
792
800
  }
793
801
 
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
802
  /** The verb a command performs, in the order /help lists the groups. */
802
803
  export const SLASH_COMMAND_GROUPS = ["Work", "Inspect", "Configure", "Session"] as const;
803
804
  export type SlashCommandGroup = (typeof SLASH_COMMAND_GROUPS)[number];
@@ -1183,6 +1184,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
1183
1184
  task,
1184
1185
  {
1185
1186
  dispatch: ctx.dispatch,
1187
+ ...(ctx.getDecisionBoard ? { getDecisionBoard: ctx.getDecisionBoard } : {}),
1186
1188
  ...(ctx.getAgentRoleFacts ? { getAgentRoleFacts: ctx.getAgentRoleFacts } : {}),
1187
1189
  io: ctx.io,
1188
1190
  notice: ctx.notice,