@iowarp/clio-coder 0.4.3 → 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 (670) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/CONTRIBUTING.md +25 -15
  3. package/README.md +340 -27
  4. package/dist/{acp-H2NGRPWO.js → acp-H3CU2HBQ.js} +25 -25
  5. package/dist/{agents-TL5LLUQP.js → agents-IXQQZ7BD.js} +77 -75
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-E5SW4HMS.js → auth-R7KYF7N3.js} +38 -39
  8. package/dist/builtins-CRFDQUVP.js +22 -0
  9. package/dist/{chunk-7DRAWPTZ.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-5TSRNF4G.js → chunk-3T4DXWP6.js} +170 -12
  15. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  16. package/dist/{chunk-XIVNBFZS.js → chunk-4SVIVOMC.js} +208 -39
  17. package/dist/{chunk-NMJXSHBJ.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-5DDOTTG4.js +402 -0
  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-PUVDKJ2Y.js → chunk-5VTJP36Q.js} +5 -7
  24. package/dist/{chunk-JGRC33J2.js → chunk-5ZMXGW7P.js} +90 -9
  25. package/dist/chunk-5ZSZEYJK.js +119 -0
  26. package/dist/chunk-633EXGZA.js +44 -0
  27. package/dist/{chunk-IWT4SF4R.js → chunk-6CDNRHWH.js} +361 -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-INY6HTFL.js → chunk-6SYEGZI3.js} +12 -12
  31. package/dist/{chunk-SKHCAU7K.js → chunk-6YA46L5A.js} +5 -4
  32. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  33. package/dist/{chunk-L47TF46W.js → chunk-7HBHHVCK.js} +24 -3
  34. package/dist/{chunk-DWUOQKRU.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-6PTFB5VS.js → chunk-7YJWEF2L.js} +59 -28
  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-B6UM3OZC.js +15 -0
  43. package/dist/{chunk-MCEPRMZW.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-42FMPA75.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-WCXUNS7U.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-2UG5F4C5.js → chunk-DRD2A54W.js} +116 -52
  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-IJNZMHLA.js → chunk-EHCPSZJF.js} +4 -4
  65. package/dist/{chunk-K6BSR66V.js → chunk-EHOSNVVM.js} +6 -2
  66. package/dist/{chunk-RRNP2ANY.js → chunk-EQEJJ53P.js} +10 -10
  67. package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
  68. package/dist/{chunk-JKKCYP3C.js → chunk-F34AR6O3.js} +21 -15
  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-MWUZBSAQ.js → chunk-FSTIBAGM.js} +358 -63
  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-JSC3U7TI.js → chunk-GJ24ODAX.js} +5 -5
  76. package/dist/{chunk-B4VEBZKF.js → chunk-GNQRWTMY.js} +139 -52
  77. package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
  78. package/dist/chunk-GXCCHKN6.js +59 -0
  79. package/dist/{chunk-V2ANDPVT.js → chunk-HGSLRG33.js} +170 -8
  80. package/dist/{chunk-LLDJM5XK.js → chunk-HHVJNVUJ.js} +6 -6
  81. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  82. package/dist/{chunk-VA5FNYMT.js → chunk-HR3HPQ76.js} +42 -5
  83. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  84. package/dist/{chunk-OML5D5V5.js → chunk-I7VLWRK2.js} +8 -8
  85. package/dist/{chunk-VW6DOEDG.js → chunk-ICO4TQ2F.js} +16 -5
  86. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  87. package/dist/{chunk-WBKFA554.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-EKCHAPYA.js → chunk-K2HL3GBL.js} +4 -4
  92. package/dist/{chunk-N2Z7HLVY.js → chunk-K6RDB7IA.js} +28 -28
  93. package/dist/{chunk-TM6LQDI3.js → chunk-KDWLXVMN.js} +85 -335
  94. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  95. package/dist/{chunk-RSJ25QSL.js → chunk-KF6GFW6O.js} +217 -50
  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-IUE3Y34X.js → chunk-KTFSFCVN.js} +20 -9
  100. package/dist/{chunk-7E7I3WLS.js → chunk-KYKNBD4Y.js} +36 -34
  101. package/dist/chunk-L4N3DWNW.js +539 -0
  102. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  103. package/dist/{chunk-JIEGK6UF.js → chunk-LTR5QCLS.js} +51 -7
  104. package/dist/chunk-LUL5Z66S.js +221 -0
  105. package/dist/chunk-LVFANMOH.js +466 -0
  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-I7ZPNEJM.js → chunk-M6TAYK66.js} +8 -8
  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-MDU3C27C.js +674 -0
  113. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  114. package/dist/{chunk-4UVU7BJ5.js → chunk-NC4KV7EL.js} +6 -6
  115. package/dist/{chunk-JEQ3XTHC.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-UPZU6GE4.js → chunk-NY6IWDVU.js} +6 -6
  119. package/dist/chunk-O2RQ7LCK.js +283 -0
  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-WRBAGUNF.js → chunk-ODUTYZIU.js} +5 -5
  123. package/dist/{chunk-E3TPLWFX.js → chunk-ONRTXOZY.js} +4 -4
  124. package/dist/{chunk-B4OAX3SI.js → chunk-OQM5IVJY.js} +118 -225
  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-64I3JVYM.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-R6MAYTMS.js +108 -0
  135. package/dist/{chunk-MUW2BDDH.js → chunk-R6MICQYU.js} +6 -6
  136. package/dist/{chunk-JDAY6FIL.js → chunk-RLTT5GVY.js} +132 -17
  137. package/dist/{chunk-ZWPRK62N.js → chunk-RXIOCVBZ.js} +24 -6
  138. package/dist/{chunk-NIQJ66N4.js → chunk-S32UQ5GL.js} +62 -35
  139. package/dist/{chunk-AX2THNSA.js → chunk-SBZX6ARC.js} +12 -12
  140. package/dist/{chunk-TXOTCRLG.js → chunk-SD7SHNDW.js} +2 -2
  141. package/dist/{chunk-AF4YM7Z4.js → chunk-SDWNDICN.js} +10284 -3756
  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-KKOJXO6R.js → chunk-SRZOW5L2.js} +46 -14
  146. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  147. package/dist/chunk-T52TPHYC.js +318 -0
  148. package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
  149. package/dist/{chunk-LDJG7DW3.js → chunk-T7FDXNRU.js} +13 -13
  150. package/dist/{chunk-XPWWI35G.js → chunk-TEG3RYVZ.js} +59 -41
  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-PAJQJ7BS.js → chunk-TZ7MFRG4.js} +1263 -835
  154. package/dist/{chunk-GI7YYQ3F.js → chunk-U2JOLB7O.js} +415 -83
  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-CE5AX47J.js → chunk-U7H5WRG5.js} +5 -5
  158. package/dist/{chunk-G76U63X4.js → chunk-U7VQ4NI4.js} +22 -22
  159. package/dist/{chunk-7ZYNNDKC.js → chunk-UFYNOQK4.js} +7 -7
  160. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  161. package/dist/{chunk-QWGDJJYJ.js → chunk-UL36QJX6.js} +14 -14
  162. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  163. package/dist/{chunk-HEQY7ZFI.js → chunk-URBGEOH3.js} +5 -5
  164. package/dist/chunk-USZA7GWL.js +341 -0
  165. package/dist/{chunk-W6RRQCPQ.js → chunk-UTUNT5QL.js} +48 -579
  166. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  167. package/dist/{chunk-F5JHEYZM.js → chunk-UXAC2FX4.js} +73 -41
  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-VLPTKCKT.js +396 -0
  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-2UH2KFUP.js → chunk-WFKDPU7U.js} +4 -4
  176. package/dist/{chunk-ZDN3Y73Y.js → chunk-WJIMKGD6.js} +9 -51
  177. package/dist/{chunk-YQWYVTMC.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-2APPQIER.js → chunk-XXBQKW32.js} +11 -11
  182. package/dist/{chunk-2VIKGWFZ.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-54CBCGIR.js → chunk-ZMZQEBKI.js} +136 -81
  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 +45 -44
  190. package/dist/clio-5I2IBFYL.js +26 -0
  191. package/dist/{code-nav-MDZNQS33.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-UCUQ4QXW.js → components-TNIKXCBH.js} +13 -14
  195. package/dist/{config-SVM5P5YI.js → config-Y2JDJ3JJ.js} +210 -119
  196. package/dist/configure-SML6UBZ5.js +55 -0
  197. package/dist/{context-2OHRKS42.js → context-P5YSEO55.js} +125 -115
  198. package/dist/{context-VNCR7KAG.js → context-QQ53HSGJ.js} +91 -62
  199. package/dist/{context-E3VC7RX5.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-VDS25HXZ.js → context-working-set-CNLSQN5K.js} +31 -31
  204. package/dist/detail-5572VLBO.js +114 -0
  205. package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-FRHD6P2O.js} +214 -126
  206. package/dist/{docs-PD3EXDKU.js → docs-BL7ROUFN.js} +5 -7
  207. package/dist/{doctor-WNNVO6FY.js → doctor-N3LCM2LG.js} +89 -66
  208. package/dist/{eval-7G7SGAYO.js → eval-BUU3ZOUZ.js} +493 -197
  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-VD6736FQ.js → evidence-SQ5DNFEN.js} +114 -195
  212. package/dist/{evolve-AL3NGVRL.js → evolve-IJNUFZDS.js} +107 -88
  213. package/dist/{extensions-MOVJ32NM.js → extensions-YVRHX6ZI.js} +16 -17
  214. package/dist/{fleet-QZHUMAGI.js → fleet-ZNNVSYFO.js} +147 -141
  215. package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-5YE7NPJL.js} +27 -23
  216. package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-3SBSCTCW.js} +16 -15
  217. package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-6HHPWF5T.js} +39 -38
  218. package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-JEYMGCGC.js} +107 -87
  219. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  220. package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-QRSHIIDE.js} +10 -10
  221. package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-4PM4GDDL.js} +46 -42
  222. package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-NJDTHTO3.js} +105 -85
  223. package/dist/fleet-view-UP2BWQQY.js +117 -0
  224. package/dist/{init-J477LKZH.js → init-S3GZQ5ZF.js} +123 -117
  225. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  226. package/dist/{interop-3FCM6XLG.js → interop-YOTGXFJM.js} +25 -26
  227. package/dist/inventory-K2OZ36YJ.js +117 -0
  228. package/dist/{library-QUQEIUG6.js → library-GJI6W6OK.js} +45 -45
  229. package/dist/{memory-SGGSEP65.js → memory-OQOXQGYD.js} +107 -90
  230. package/dist/{models-HEKUAXXK.js → models-3IK2Y5WE.js} +64 -65
  231. package/dist/{monitor-HKU57TYQ.js → monitor-FTJLTKCQ.js} +136 -101
  232. package/dist/{orchestrator-VDFAEFAI.js → orchestrator-N47O7SFD.js} +1442 -1671
  233. package/dist/{panes-DN2SSFOH.js → panes-7BTYH3XQ.js} +8 -8
  234. package/dist/{panes-TALGNPZT.js → panes-WPOMEMRH.js} +22 -23
  235. package/dist/{paths-NBMFAIEZ.js → paths-J3KN7UAO.js} +12 -13
  236. package/dist/preload-65U34NG6.js +115 -0
  237. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  238. package/dist/{reset-EAJFFJVB.js → reset-MUVQDLNL.js} +20 -21
  239. package/dist/{resources-OVKSEFVE.js → resources-LM76COAO.js} +41 -40
  240. package/dist/{run-7DP7ZF2J.js → run-3VFZQ33N.js} +168 -166
  241. package/dist/{share-WML67FT3.js → share-4JUB4BL7.js} +43 -43
  242. package/dist/{skills-SG662R2K.js → skills-S36AAJHU.js} +47 -47
  243. package/dist/{skills-eval-VVZEUU46.js → skills-eval-G6T57L7M.js} +127 -104
  244. package/dist/{skills-inventory-I2E23GET.js → skills-inventory-WLM46PJH.js} +41 -40
  245. package/dist/slash-commands-GBARG3Y7.js +91 -0
  246. package/dist/{steer-2LQOMCPB.js → steer-S7D7IKPU.js} +7 -7
  247. package/dist/{support-CC2UJBJ6.js → support-5VAEC32W.js} +14 -14
  248. package/dist/{targets-4QC3HIEW.js → targets-N5REUETU.js} +147 -98
  249. package/dist/tasks-6BVY5YZF.js +36 -0
  250. package/dist/{terminal-lease-TUHIJ6Y2.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-5PEVOE5B.js → uninstall-FXYMFFRT.js} +19 -20
  256. package/dist/{upgrade-M4WXY6KN.js → upgrade-4HD5HAIV.js} +49 -45
  257. package/dist/{usage-N7ZNVLEM.js → usage-4GWM2WWP.js} +143 -103
  258. package/dist/{verifiers-DJTP4XX6.js → verifiers-GSKWKWVG.js} +162 -28
  259. package/dist/verify-3AS3ULCY.js +30 -0
  260. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  261. package/dist/{web-fetch-MPARV2K7.js → web-fetch-MQN4FH3X.js} +169 -18
  262. package/dist/wiki-generate-7BV7XWIY.js +614 -0
  263. package/dist/{with-panes-4GCGSL7J.js → with-panes-OFTNAR4Y.js} +34 -20
  264. package/dist/worker/entry.js +99 -85
  265. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  266. package/docs/README.md +10 -8
  267. package/docs/architecture/acp.md +27 -0
  268. package/docs/architecture/architecture.md +5 -5
  269. package/docs/architecture/artifact-versions.md +1 -1
  270. package/docs/architecture/context-engine.md +44 -59
  271. package/docs/architecture/context-working-set.md +7 -9
  272. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  273. package/docs/architecture/dispatch-typed-intent.md +1 -1
  274. package/docs/architecture/evidence-and-memory.md +11 -1
  275. package/docs/architecture/observability.md +7 -1
  276. package/docs/architecture/pi-boundary.md +37 -7
  277. package/docs/architecture/prompt-envelope-and-tools.md +22 -12
  278. package/docs/architecture/safety-model.md +10 -17
  279. package/docs/architecture/session-lifecycle.md +4 -4
  280. package/docs/architecture/tui-design.md +1 -1
  281. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  282. package/docs/guide/built-in-agents.md +8 -8
  283. package/docs/guide/commands-and-modes.md +66 -38
  284. package/docs/guide/configuration-and-targets.md +10 -3
  285. package/docs/guide/configuration-reference.md +23 -8
  286. package/docs/guide/environment-variables.md +8 -4
  287. package/docs/guide/fleet-dispatch.md +12 -0
  288. package/docs/guide/installation-and-lifecycle.md +35 -9
  289. package/docs/guide/proactive-memory.md +1 -1
  290. package/docs/guide/skills-marketplace.md +11 -3
  291. package/docs/guide/tool-usage.md +87 -5
  292. package/docs/history/config-knobs-audit.md +2 -2
  293. package/docs/process/development-pipeline.md +15 -10
  294. package/docs/process/documentation-guide.md +2 -2
  295. package/docs/process/eval-runner.md +15 -0
  296. package/docs/process/evals-internal.md +1 -1
  297. package/docs/process/git-commit-provenance.md +15 -0
  298. package/docs/process/release-cut-checklist.md +207 -0
  299. package/docs/process/scientific-validation.md +18 -17
  300. package/evals/README.md +4 -0
  301. package/evals/behavioral-corpus-grader.mjs +147 -14
  302. package/evals/behavioral-machinery-support.ts +1 -0
  303. package/evals/behavioral-machinery.yaml +1 -1
  304. package/evals/behavioral-model-negative-control.yaml +1 -0
  305. package/evals/behavioral-model.yaml +266 -1
  306. package/evals/fixtures/docs-retrieval.json +102 -0
  307. package/evals/fixtures/scalar-decision.json +17 -0
  308. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  309. package/evals/fixtures/source-explanation.json +74 -0
  310. package/evals/fixtures/tool-arguments.json +18 -0
  311. package/evals/fixtures/tool-surface/read.txt +4 -0
  312. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  313. package/evals/no-edit-memory-grader.mjs +149 -0
  314. package/evals/scalar-decision-grader.py +41 -0
  315. package/evals/scalar-decision-machinery.ts +145 -0
  316. package/evals/source-explanation-grader.mjs +118 -0
  317. package/evals/tool-surface-grader.mjs +53 -0
  318. package/evals/tool-surface-model.yaml +274 -0
  319. package/package.json +14 -14
  320. package/skills/README.md +6 -6
  321. package/skills/coding/coding-standards/SKILL.md +14 -4
  322. package/skills/context/context-handoff/SKILL.md +3 -3
  323. package/skills/context/context-prime/SKILL.md +3 -3
  324. package/skills/planning/architecture/SKILL.md +5 -5
  325. package/skills/planning/backlog/SKILL.md +4 -4
  326. package/skills/planning/prd/SKILL.md +4 -3
  327. package/skills/planning/product-intent/SKILL.md +8 -8
  328. package/skills/planning/tech-spec/SKILL.md +4 -4
  329. package/skills/registry.yaml +33 -33
  330. package/skills/research/arxiv-literature/SKILL.md +3 -3
  331. package/skills/research/experiment-protocol/SKILL.md +3 -3
  332. package/skills/research/scientific-debugging/SKILL.md +3 -2
  333. package/skills/research/scientific-modernization/SKILL.md +3 -3
  334. package/skills/skill-marketplace.json +17 -17
  335. package/skills/workflow/cut-it/SKILL.md +3 -4
  336. package/skills/workflow/design-council/SKILL.md +5 -10
  337. package/skills/workflow/grill-me/SKILL.md +14 -15
  338. package/skills/workflow/workflow-distiller/SKILL.md +4 -4
  339. package/src/cli/args.ts +0 -8
  340. package/src/cli/bootstrap-generate.ts +6 -0
  341. package/src/cli/config-inspect.ts +24 -7
  342. package/src/cli/config-trust.ts +62 -0
  343. package/src/cli/config.ts +8 -0
  344. package/src/cli/configure.ts +2 -1
  345. package/src/cli/context-map.ts +75 -14
  346. package/src/cli/context.ts +46 -17
  347. package/src/cli/doctor-state-size.ts +1 -12
  348. package/src/cli/doctor-validation-contract.ts +28 -0
  349. package/src/cli/doctor.ts +5 -0
  350. package/src/cli/eval.ts +17 -3
  351. package/src/cli/evidence-detail.ts +1 -75
  352. package/src/cli/evidence-inventory.ts +1 -167
  353. package/src/cli/index.ts +2 -0
  354. package/src/cli/modes/print.ts +32 -4
  355. package/src/cli/run.ts +16 -16
  356. package/src/cli/skills-eval.ts +10 -8
  357. package/src/cli/steer-channel.ts +31 -18
  358. package/src/cli/targets.ts +84 -32
  359. package/src/cli/tasks.ts +93 -0
  360. package/src/cli/upgrade.ts +19 -11
  361. package/src/cli/usage.ts +30 -0
  362. package/src/cli/verifiers.ts +147 -1
  363. package/src/cli/wiki-generate.ts +240 -96
  364. package/src/core/bash-exec.ts +43 -15
  365. package/src/core/bus-events.ts +15 -0
  366. package/src/core/commit-attribution.ts +41 -1
  367. package/src/core/config.ts +33 -14
  368. package/src/core/defaults.ts +5 -4
  369. package/src/core/file-references.ts +11 -1
  370. package/src/core/git-commit-attribution.ts +46 -3
  371. package/src/core/incomplete-installation.ts +3 -1
  372. package/src/core/run-overrides.ts +0 -5
  373. package/src/core/settings-layers.ts +21 -5
  374. package/src/core/skill-activation.ts +3 -0
  375. package/src/core/termination.ts +26 -9
  376. package/src/core/tool-names.ts +5 -2
  377. package/src/core/untrusted-content.ts +16 -0
  378. package/src/core/workspace-trust.ts +179 -0
  379. package/src/domains/agents/builtins/architect.md +1 -1
  380. package/src/domains/agents/builtins/coder.md +5 -3
  381. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  382. package/src/domains/agents/builtins/documenter.md +8 -5
  383. package/src/domains/agents/builtins/git-master.md +1 -1
  384. package/src/domains/agents/builtins/provenance.md +7 -7
  385. package/src/domains/agents/builtins/researcher.md +1 -0
  386. package/src/domains/agents/builtins/scout.md +7 -1
  387. package/src/domains/agents/builtins/tester.md +1 -1
  388. package/src/domains/agents/builtins/verifier.md +2 -2
  389. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  390. package/src/domains/agents/result-contract.ts +199 -26
  391. package/src/domains/context/bootstrap-prompt.ts +11 -9
  392. package/src/domains/context/bootstrap.ts +74 -39
  393. package/src/domains/context/clio-md.ts +88 -26
  394. package/src/domains/context/codewiki/build-operation.ts +121 -0
  395. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  396. package/src/domains/context/codewiki/build-worker.ts +3 -35
  397. package/src/domains/context/codewiki/coordinator.ts +36 -6
  398. package/src/domains/context/codewiki/indexer.ts +59 -19
  399. package/src/domains/context/contract.ts +6 -2
  400. package/src/domains/context/extension.ts +97 -11
  401. package/src/domains/context/fingerprint.ts +39 -34
  402. package/src/domains/context/index.ts +7 -1
  403. package/src/domains/context/prompt-context.ts +55 -14
  404. package/src/domains/context/refresh.ts +12 -57
  405. package/src/domains/context/wiki/assemble.ts +14 -10
  406. package/src/domains/context/wiki/evidence.ts +209 -0
  407. package/src/domains/context/wiki/frontmatter.ts +5 -2
  408. package/src/domains/context/wiki/generate.ts +207 -67
  409. package/src/domains/context/wiki/meta.ts +10 -2
  410. package/src/domains/context/wiki/plan-store.ts +70 -14
  411. package/src/domains/context/wiki/plan.ts +71 -14
  412. package/src/domains/context/wiki/prompts.ts +85 -1
  413. package/src/domains/context/wiki/source-content.ts +106 -0
  414. package/src/domains/context/wiki/staleness.ts +33 -22
  415. package/src/domains/context/working-set/contract.ts +8 -2
  416. package/src/domains/context/working-set/engine.ts +17 -4
  417. package/src/domains/context/working-set/fold.ts +15 -2
  418. package/src/domains/context/working-set/marker.ts +2 -1
  419. package/src/domains/context/working-set/project.ts +18 -7
  420. package/src/domains/context/working-set/recall.ts +82 -56
  421. package/src/domains/dispatch/active-route-planner.ts +10 -3
  422. package/src/domains/dispatch/admission-queue.ts +19 -7
  423. package/src/domains/dispatch/admission.ts +3 -3
  424. package/src/domains/dispatch/budget-envelope.ts +47 -82
  425. package/src/domains/dispatch/capacity-lease.ts +57 -19
  426. package/src/domains/dispatch/code-step.ts +11 -4
  427. package/src/domains/dispatch/contract.ts +41 -9
  428. package/src/domains/dispatch/event-pump.ts +28 -7
  429. package/src/domains/dispatch/execution-role.ts +49 -2
  430. package/src/domains/dispatch/execution-scheduler.ts +4 -0
  431. package/src/domains/dispatch/extension.ts +240 -132
  432. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  433. package/src/domains/dispatch/fleet-run.ts +21 -0
  434. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  435. package/src/domains/dispatch/host-verification.ts +114 -13
  436. package/src/domains/dispatch/intent.ts +28 -18
  437. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  438. package/src/domains/dispatch/parallel-writers.ts +34 -0
  439. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  440. package/src/domains/dispatch/reservation-store.ts +13 -37
  441. package/src/domains/dispatch/route-approval.ts +3 -3
  442. package/src/domains/dispatch/route-observer.ts +4 -2
  443. package/src/domains/dispatch/route-quality.ts +6 -1
  444. package/src/domains/dispatch/state.ts +15 -2
  445. package/src/domains/dispatch/types.ts +21 -5
  446. package/src/domains/dispatch/worker-spawn.ts +58 -21
  447. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  448. package/src/domains/eval/compare/behavioral.ts +81 -14
  449. package/src/domains/eval/compare/compare.ts +15 -5
  450. package/src/domains/eval/compare/envelope.ts +12 -5
  451. package/src/domains/eval/metrics/context.ts +24 -1
  452. package/src/domains/eval/metrics/tracked.ts +4 -28
  453. package/src/domains/eval/reports/comparison.ts +9 -9
  454. package/src/domains/eval/runners/clio-run.ts +17 -10
  455. package/src/domains/eval/runners/context-index.ts +2 -7
  456. package/src/domains/eval/runners/context-init.ts +3 -6
  457. package/src/domains/eval/runners/external-command.ts +29 -11
  458. package/src/domains/eval/schema/suite.ts +2 -0
  459. package/src/domains/eval/schema/validate.ts +1 -0
  460. package/src/domains/eval/suites/run.ts +189 -13
  461. package/src/domains/eval/verifiers/integrity.ts +39 -0
  462. package/src/domains/eval/verifiers/patch.ts +58 -2
  463. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  464. package/src/domains/evidence/build.ts +106 -17
  465. package/src/domains/evidence/detail.ts +69 -0
  466. package/src/domains/evidence/eval.ts +13 -1
  467. package/src/domains/evidence/finish-contract-map.ts +5 -1
  468. package/src/domains/evidence/inventory.ts +167 -0
  469. package/src/domains/evidence/store.ts +16 -0
  470. package/src/domains/evidence/types.ts +12 -0
  471. package/src/domains/extensions/resources.ts +7 -0
  472. package/src/domains/interop/registry.ts +2 -2
  473. package/src/domains/middleware/hooks-io.ts +45 -26
  474. package/src/domains/middleware/hooks.ts +6 -0
  475. package/src/domains/middleware/injection-screen.ts +23 -0
  476. package/src/domains/middleware/marketplace-offer.ts +20 -1
  477. package/src/domains/middleware/rules.ts +5 -1
  478. package/src/domains/middleware/runtime.ts +7 -3
  479. package/src/domains/middleware/stalled-turn.ts +18 -3
  480. package/src/domains/middleware/task-board-reminder.ts +4 -2
  481. package/src/domains/middleware/task-nudge.ts +4 -1
  482. package/src/domains/mux/contract.ts +34 -1
  483. package/src/domains/mux/detect.ts +3 -6
  484. package/src/domains/mux/dock-controller.ts +8 -1
  485. package/src/domains/mux/index.ts +1 -0
  486. package/src/domains/mux/socket-client.ts +13 -3
  487. package/src/domains/observability/accountability.ts +15 -1
  488. package/src/domains/observability/contract.ts +54 -9
  489. package/src/domains/observability/evidence-index.ts +10 -0
  490. package/src/domains/observability/extension.ts +9 -5
  491. package/src/domains/observability/projection.ts +423 -53
  492. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  493. package/src/domains/prompts/compiler.ts +10 -2
  494. package/src/domains/prompts/contract.ts +7 -4
  495. package/src/domains/prompts/extension.ts +28 -64
  496. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  497. package/src/domains/prompts/fragments/operating/contract.md +12 -0
  498. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  499. package/src/domains/prompts/fragments/wiki/page.md +36 -15
  500. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  501. package/src/domains/prompts/preload-prefix.ts +31 -0
  502. package/src/domains/prompts/preload.ts +135 -61
  503. package/src/domains/providers/auth/backend-file.ts +15 -11
  504. package/src/domains/providers/auth/storage.ts +3 -5
  505. package/src/domains/providers/catalog.ts +18 -3
  506. package/src/domains/providers/model-discovery.ts +1 -4
  507. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
  508. package/src/domains/providers/runtime-resolution.ts +11 -9
  509. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  510. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  511. package/src/domains/providers/support.ts +1 -1
  512. package/src/domains/providers/types/runtime-descriptor.ts +1 -1
  513. package/src/domains/resources/skills/promotion.ts +8 -1
  514. package/src/domains/safety/action-classifier.ts +16 -0
  515. package/src/domains/safety/autonomy.ts +10 -1
  516. package/src/domains/safety/contract.ts +5 -1
  517. package/src/domains/safety/default-path-policy.ts +13 -0
  518. package/src/domains/safety/extension.ts +11 -2
  519. package/src/domains/safety/finish-contract-registration.ts +29 -14
  520. package/src/domains/safety/finish-contract.ts +252 -40
  521. package/src/domains/safety/index.ts +20 -1
  522. package/src/domains/safety/policy-engine.ts +211 -34
  523. package/src/domains/safety/project-policy.ts +7 -2
  524. package/src/domains/safety/rigor.ts +53 -39
  525. package/src/domains/safety/validation-contract.ts +388 -0
  526. package/src/domains/safety/workspace-trust.ts +43 -0
  527. package/src/domains/session/archive-readers.ts +10 -1
  528. package/src/domains/session/compaction/compact.ts +384 -21
  529. package/src/domains/session/compaction/cut-point.ts +42 -5
  530. package/src/domains/session/compaction/tokens.ts +9 -1
  531. package/src/domains/session/decision-board.ts +137 -28
  532. package/src/domains/session/entries.ts +213 -11
  533. package/src/domains/session/extension.ts +4 -4
  534. package/src/domains/session/handoff.ts +2 -1
  535. package/src/domains/session/manager.ts +2 -3
  536. package/src/domains/session/prompt-manifest.ts +47 -8
  537. package/src/domains/session/task-board.ts +32 -1
  538. package/src/domains/session/tree/fork.ts +1 -2
  539. package/src/domains/session/tree/navigator.ts +1 -1
  540. package/src/domains/user-tasks/acceptance.ts +56 -0
  541. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  542. package/src/domains/user-tasks/handoff.ts +16 -0
  543. package/src/domains/user-tasks/store.ts +34 -3
  544. package/src/engine/acp/adapter.ts +60 -10
  545. package/src/engine/acp/server.ts +22 -4
  546. package/src/engine/acp/transport.ts +55 -9
  547. package/src/engine/acp/types.ts +9 -0
  548. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  549. package/src/engine/api-registry.ts +19 -2
  550. package/src/engine/apis/ollama-native.ts +15 -0
  551. package/src/engine/apis/openai-completions.ts +13 -6
  552. package/src/engine/apis/output-budget.ts +26 -10
  553. package/src/engine/claude/sdk-runtime.ts +4 -3
  554. package/src/engine/claude/subprocess-runtime.ts +107 -60
  555. package/src/engine/env-api-keys.ts +2 -1
  556. package/src/engine/external-subprocess.ts +26 -7
  557. package/src/engine/loop-guard.ts +19 -2
  558. package/src/engine/provider-diagnostics.ts +129 -0
  559. package/src/engine/provider-payload.ts +3 -1
  560. package/src/engine/worker-runtime.ts +13 -2
  561. package/src/engine/worker-tools.ts +5 -1
  562. package/src/entry/extension-reload.ts +1 -0
  563. package/src/entry/orchestrator.ts +64 -17
  564. package/src/interactive/chat-loop-messages.ts +12 -4
  565. package/src/interactive/chat-loop.ts +115 -45
  566. package/src/interactive/chat-renderer.ts +60 -0
  567. package/src/interactive/context-recall-command.ts +2 -1
  568. package/src/interactive/dispatch-board.ts +58 -714
  569. package/src/interactive/editor-submit.ts +13 -0
  570. package/src/interactive/fleet-run-preview.ts +2 -1
  571. package/src/interactive/interactive-application.ts +11 -4
  572. package/src/interactive/interactive-event-projection.ts +7 -1
  573. package/src/interactive/interactive-presentation.ts +63 -12
  574. package/src/interactive/interactive-slash-runtime.ts +4 -1
  575. package/src/interactive/layout.ts +2 -1
  576. package/src/interactive/model-session-replay.ts +2 -2
  577. package/src/interactive/oracle.ts +5 -2
  578. package/src/interactive/overlay-frame.ts +1 -0
  579. package/src/interactive/overlay-general-openers.ts +3 -1
  580. package/src/interactive/overlay-session-lifecycle.ts +6 -0
  581. package/src/interactive/overlays/ask-user.ts +1 -0
  582. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  583. package/src/interactive/overlays/message-picker.ts +3 -3
  584. package/src/interactive/overlays/settings.ts +2 -2
  585. package/src/interactive/overlays/tree-selector.ts +2 -2
  586. package/src/interactive/renderers/branch-summary.ts +1 -1
  587. package/src/interactive/renderers/tool-execution.ts +17 -1
  588. package/src/interactive/renderers/worker-entry.ts +25 -10
  589. package/src/interactive/slash-autocomplete.ts +4 -6
  590. package/src/interactive/slash-commands.ts +31 -43
  591. package/src/interactive/slash-spec.ts +28 -0
  592. package/src/interactive/turn-context.ts +221 -53
  593. package/src/interactive/turn-middleware.ts +3 -1
  594. package/src/interactive/turn-persistence.ts +3 -0
  595. package/src/interactive/turn-runtime.ts +11 -2
  596. package/src/interactive/turn-state.ts +10 -9
  597. package/src/interactive/view/artifacts.ts +2 -0
  598. package/src/interactive/watch-pane.ts +18 -4
  599. package/src/interactive/worker-stream.ts +14 -10
  600. package/src/tools/agent-tools.ts +6 -3
  601. package/src/tools/bash.ts +1 -1
  602. package/src/tools/bootstrap.ts +4 -0
  603. package/src/tools/builtin-tool-catalog.ts +40 -2
  604. package/src/tools/codewiki/code-nav.ts +4 -10
  605. package/src/tools/compete-judge-task.ts +71 -0
  606. package/src/tools/compete-worktrees.ts +41 -1
  607. package/src/tools/context/index.ts +32 -7
  608. package/src/tools/context/surface.ts +15 -4
  609. package/src/tools/core-bootstrap.ts +16 -0
  610. package/src/tools/decide.ts +136 -0
  611. package/src/tools/dispatch-admission.ts +33 -1
  612. package/src/tools/dispatch-arguments.ts +38 -1
  613. package/src/tools/dispatch-plan.ts +12 -9
  614. package/src/tools/dispatch-runner.ts +63 -33
  615. package/src/tools/dispatch-schema.ts +30 -23
  616. package/src/tools/dispatch-scout-admission.ts +10 -44
  617. package/src/tools/dispatch-scout.ts +2 -3
  618. package/src/tools/dispatch-types.ts +6 -0
  619. package/src/tools/evidence.ts +96 -0
  620. package/src/tools/find.ts +13 -4
  621. package/src/tools/grep.ts +13 -1
  622. package/src/tools/limitation.ts +76 -0
  623. package/src/tools/ls.ts +7 -1
  624. package/src/tools/monitor.ts +26 -11
  625. package/src/tools/network-policy.ts +11 -24
  626. package/src/tools/observation.ts +39 -2
  627. package/src/tools/policy.ts +9 -0
  628. package/src/tools/presentation.ts +3 -0
  629. package/src/tools/read.ts +112 -15
  630. package/src/tools/registry.ts +55 -18
  631. package/src/tools/result-shaping.ts +127 -7
  632. package/src/tools/task-worktree.ts +13 -3
  633. package/src/tools/tasks.ts +40 -5
  634. package/src/tools/verify/authoring.ts +170 -83
  635. package/src/tools/verify/catalog.ts +122 -5
  636. package/src/tools/verify/frontend.ts +67 -30
  637. package/src/tools/verify/index.ts +2 -1
  638. package/src/tools/verify/numeric.ts +303 -0
  639. package/src/tools/verify/perf.ts +143 -0
  640. package/src/tools/verify/scripts.ts +229 -2
  641. package/src/tools/web-fetch-network.ts +179 -0
  642. package/src/tools/web-fetch-surface.ts +2 -1
  643. package/src/tools/web-fetch.ts +15 -13
  644. package/src/tools/worker-evidence.ts +27 -0
  645. package/src/worker/spec-contract.ts +12 -8
  646. package/dist/builtins-IA7V7FUC.js +0 -22
  647. package/dist/chunk-2WZ546HR.js +0 -792
  648. package/dist/chunk-5PSMVOLM.js +0 -56
  649. package/dist/chunk-7DICMOS6.js +0 -313
  650. package/dist/chunk-BEPZRGGU.js +0 -1560
  651. package/dist/chunk-JVCV3ICN.js +0 -47
  652. package/dist/chunk-KK4JZPBQ.js +0 -3982
  653. package/dist/chunk-MNJGS2IN.js +0 -33
  654. package/dist/chunk-NDINPTJ4.js +0 -641
  655. package/dist/chunk-O5CVSAG5.js +0 -122
  656. package/dist/chunk-OQE5J4C6.js +0 -73
  657. package/dist/chunk-RVG5JXAL.js +0 -41
  658. package/dist/chunk-T56WDKA5.js +0 -183
  659. package/dist/chunk-UUVG37B4.js +0 -244
  660. package/dist/chunk-VPKWYKEY.js +0 -169
  661. package/dist/chunk-Y3CBHOR6.js +0 -228
  662. package/dist/clio-CMMK4KRR.js +0 -25
  663. package/dist/configure-LE3IK2TJ.js +0 -56
  664. package/dist/context-clear-BW4O37TG.js +0 -176
  665. package/dist/fleet-view-SWBR3VGQ.js +0 -97
  666. package/dist/preload-P6DGH2PZ.js +0 -13
  667. package/dist/slash-commands-S7MBJDQK.js +0 -83
  668. package/dist/tools-TFGJICCU.js +0 -29
  669. package/dist/verify-RWE4PPEK.js +0 -27
  670. package/dist/wiki-generate-C7IQOXSP.js +0 -469
@@ -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();
@@ -38,6 +38,7 @@ import {
38
38
  } from "../domains/dispatch/execution-role.js";
39
39
  import { compileFleetExecutionPlan } from "../domains/dispatch/fleet-plan.js";
40
40
  import { preflightWriteBoundaries } from "../domains/dispatch/write-boundary-enforcer.js";
41
+ import { formatUsd } from "./footer/widgets.js";
41
42
 
42
43
  /** Where a step would run, as the dispatch domain resolves it today. */
43
44
  export interface FleetRunPreviewRoute {
@@ -263,7 +264,7 @@ export function compileFleetRunPreview(input: FleetRunPreviewInput): FleetRunPre
263
264
  };
264
265
  if (input.budget) {
265
266
  if (input.budget.verdict === "over" || input.budget.verdict === "at") {
266
- diagnostics.push(`budget ceiling crossed: $${budget.currentUsd.toFixed(4)} / $${budget.ceilingUsd.toFixed(4)}`);
267
+ diagnostics.push(`budget ceiling crossed: ${formatUsd(budget.currentUsd)} / ${formatUsd(budget.ceilingUsd)}`);
267
268
  } else if (contract.budgetUsd !== null) {
268
269
  const remaining = budget.ceilingUsd - budget.currentUsd;
269
270
  if (contract.budgetUsd > remaining) {
@@ -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";
@@ -228,8 +229,8 @@ export interface InteractiveDeps {
228
229
  onNewSession?: () => void;
229
230
  /**
230
231
  * Fork from a parent assistant turn picked in /fork. Default wiring
231
- * delegates to session.fork(parentTurnId); the override exists so
232
- * future slices can layer telemetry or settings merging on top.
232
+ * delegates to session.fork(parentTurnId); the override exists so a
233
+ * host can layer telemetry or settings merging on top.
233
234
  */
234
235
  onForkSession?: (parentTurnId: string) => void;
235
236
  /**
@@ -583,9 +584,11 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
583
584
  : {}),
584
585
  ...(deps.getSettings ? { getSettings: deps.getSettings } : {}),
585
586
  ...(deps.resources ? { resources: deps.resources } : {}),
587
+ ...(deps.agents ? { agents: deps.agents } : {}),
586
588
  ...(deps.session ? { session: deps.session } : {}),
587
589
  ...(deps.getSessionId ? { getSessionId: deps.getSessionId } : {}),
588
590
  ...(deps.getTaskBoard ? { getTaskBoard: deps.getTaskBoard } : {}),
591
+ ...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
589
592
  ...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
590
593
  ...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
591
594
  ...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
@@ -700,6 +703,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
700
703
  io,
701
704
  bus: deps.bus,
702
705
  dispatch: deps.dispatch,
706
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
703
707
  ...(deps.session ? { session: deps.session } : {}),
704
708
  providers: deps.providers,
705
709
  chat: deps.chat,
@@ -803,6 +807,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
803
807
  expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
804
808
  notify,
805
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 });
806
813
  editor.onSubmit = editorSubmit.submitEditorText;
807
814
 
808
815
  const interactiveTickers = createInteractiveTickers({
@@ -1110,7 +1117,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
1110
1117
  steerSelectedDispatch,
1111
1118
  cancelSelectedDispatch,
1112
1119
  cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
1113
- isStreaming: () => deps.chat.isStreaming(),
1120
+ isStreaming: () => deps.chat.isStreaming() || deps.chat.turnPreparation().phase === "compacting",
1114
1121
  cancelActiveRun,
1115
1122
  editor,
1116
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;
@@ -2,6 +2,8 @@ import { performance } from "node:perf_hooks";
2
2
  import type { ClioSettings } from "../core/config.js";
3
3
  import { DEFAULT_SETTINGS } from "../core/defaults.js";
4
4
  import type { SafeEventBus } from "../core/event-bus.js";
5
+ import type { AgentsContract } from "../domains/agents/contract.js";
6
+ import { isUserVisibleAgent } from "../domains/agents/spec.js";
5
7
  import type { ContextState } from "../domains/context/index.js";
6
8
  import type { DispatchContract } from "../domains/dispatch/contract.js";
7
9
  import type { TaskMemoryOperatorStatus } from "../domains/memory/index.js";
@@ -12,9 +14,9 @@ import type {
12
14
  } from "../domains/observability/index.js";
13
15
  import { type ProvidersContract, resolveModelRuntimeCapabilitiesForProviders } from "../domains/providers/index.js";
14
16
  import type { ResourcesContract } from "../domains/resources/index.js";
15
- import { getMarketplaceSkills } from "../domains/resources/skills/marketplace.js";
16
17
  import { ceilChars, contentChars } from "../domains/session/context-accounting.js";
17
18
  import type { SessionContract, TaskBoardSnapshot } from "../domains/session/index.js";
19
+ import type { UserTasksStore } from "../domains/user-tasks/store.js";
18
20
  import type { Component, TUI } from "../engine/tui.js";
19
21
  import type { ChatLoop, ChatLoopEvent } from "./chat-loop.js";
20
22
  import { type ChatPanel, createChatPanel } from "./chat-panel.js";
@@ -88,9 +90,11 @@ export interface InteractivePresentationDeps {
88
90
  bootPending?: Component;
89
91
  getSettings?: () => Readonly<ClioSettings>;
90
92
  resources?: Pick<ResourcesContract, "skills">;
93
+ agents?: Pick<AgentsContract, "listSpecs">;
91
94
  session?: Pick<SessionContract, "current">;
92
95
  getSessionId?: () => string | null;
93
96
  getTaskBoard?: () => TaskBoardSnapshot | null;
97
+ userTasks?: Pick<UserTasksStore, "snapshot">;
94
98
  getTaskMemoryStatus?: () => TaskMemoryOperatorStatus;
95
99
  getTaskMemorySeedOffer?: () => { source: string; count: number } | null;
96
100
  getContextState?: (cwd?: string) => ContextState;
@@ -248,13 +252,11 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
248
252
  bus: deps.bus,
249
253
  ...(deps.getSettings ? { getSettings: deps.getSettings } : {}),
250
254
  });
251
- // The board settles a finished run on the same sealed receipt the transcript
252
- // block reads, so the two surfaces agree on a worker's terminal answer.
253
- const dispatchBoardStore = factories.createDispatchBoardStore(
254
- deps.bus,
255
- () => deps.dispatch.snapshot(),
256
- (runId) => readWorkerReceiptFacts(runId),
257
- );
255
+ const unbindRunReaders = deps.observability.bindRunReaders({
256
+ dispatchSnapshot: () => deps.dispatch.snapshot(),
257
+ readReceipt: (runId) => readWorkerReceiptFacts(runId),
258
+ });
259
+ const dispatchBoardStore = factories.createDispatchBoardStore(deps.observability);
258
260
  const contextActivityStore = factories.createContextActivityStore(deps.bus);
259
261
 
260
262
  const footerToolCounts = new Map<string, number>();
@@ -434,10 +436,58 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
434
436
  const editor = deps.editor ?? factories.createEditor(deps.tui, editorChrome);
435
437
  editor.focused = true;
436
438
  const autocomplete: AutocompleteProvider = factories.createAutocomplete({
437
- listSkills: () => ({
438
- installed: deps.resources?.skills(getCwd()).items ?? [],
439
- marketplace: getMarketplaceSkills(),
440
- }),
439
+ completionSources: {
440
+ agents: async () =>
441
+ (deps.agents?.listSpecs() ?? []).filter(isUserVisibleAgent).map((agent) => ({
442
+ id: agent.id,
443
+ value: agent.id,
444
+ label: agent.id,
445
+ description: agent.description,
446
+ })),
447
+ targets: async () =>
448
+ deps.providers.list().map(({ target, reason }) => ({
449
+ id: target.id,
450
+ value: target.id,
451
+ label: target.id,
452
+ description: reason,
453
+ })),
454
+ models: async () =>
455
+ deps.providers.list().flatMap(({ target, discoveredModels, discoveredModelLabels }) =>
456
+ [
457
+ ...new Set([
458
+ ...(target.defaultModel ? [target.defaultModel] : []),
459
+ ...(target.wireModels ?? []),
460
+ ...discoveredModels,
461
+ ]),
462
+ ].map((model) => ({
463
+ id: `${target.id}/${model}`,
464
+ value: model,
465
+ label: discoveredModelLabels?.[model] ?? model,
466
+ description: target.id,
467
+ })),
468
+ ),
469
+ skills: async () =>
470
+ (deps.resources?.skills(getCwd()).items ?? []).map((skill) => ({
471
+ id: skill.name,
472
+ value: skill.name,
473
+ label: skill.name,
474
+ description: skill.description,
475
+ })),
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
+ })),
489
+ // Other slots remain empty when this presentation has no read-only catalog for them.
490
+ },
441
491
  });
442
492
  editor.setAutocompleteProvider(autocomplete);
443
493
 
@@ -539,6 +589,7 @@ export function createInteractivePresentation(deps: InteractivePresentationDeps)
539
589
  unsubscribeObservability();
540
590
  contextActivityStore.unsubscribe();
541
591
  dispatchBoardStore.unsubscribe();
592
+ unbindRunReaders();
542
593
  };
543
594
  const disposeStatus = (): void => {
544
595
  if (statusDisposed) return;
@@ -24,6 +24,7 @@ import type { SessionContract, SessionEntry } from "../domains/session/index.js"
24
24
  import { foldTaskBoard } from "../domains/session/task-board.js";
25
25
  import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
26
26
  import type { ShareContract } from "../domains/share/index.js";
27
+ import type { UserTaskAcceptance } from "../domains/user-tasks/acceptance.js";
27
28
  import type { UserTasksStore } from "../domains/user-tasks/store.js";
28
29
  import { stripTerminalSequences } from "../engine/tui.js";
29
30
  import type { ImageContent } from "../engine/types.js";
@@ -74,6 +75,7 @@ export interface InteractiveSlashRuntimeDeps {
74
75
  io: RunIo;
75
76
  bus: SafeEventBus;
76
77
  dispatch: DispatchContract;
78
+ getDecisionBoard?: SlashCommandContext["getDecisionBoard"];
77
79
  providers: ProvidersContract;
78
80
  chat: SlashChat;
79
81
  chatPanel: SlashChatPanel;
@@ -379,6 +381,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
379
381
  });
380
382
  },
381
383
  dispatch: deps.dispatch,
384
+ ...(deps.getDecisionBoard ? { getDecisionBoard: deps.getDecisionBoard } : {}),
382
385
  bus: deps.bus,
383
386
  ...(deps.agents
384
387
  ? { getAgentRoleFacts: agentRoleFactsResolver((agentId: string) => deps.agents?.getSpec(agentId) ?? null) }
@@ -432,7 +435,7 @@ export function createInteractiveSlashRuntime(deps: InteractiveSlashRuntimeDeps)
432
435
  ...(userTasks
433
436
  ? {
434
437
  userTasks: {
435
- add: (title: string) => userTasks.add(title),
438
+ add: (title: string, acceptance?: UserTaskAcceptance) => userTasks.add(title, undefined, acceptance),
436
439
  hand: (id: string) => userTasks.hand(id, deps.chat.getSessionId() ?? undefined),
437
440
  done: (id: string) => userTasks.done(id),
438
441
  drop: (id: string) => userTasks.drop(id),
@@ -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
  }
@@ -13,6 +13,7 @@
13
13
  */
14
14
 
15
15
  import type { OracleResult } from "../domains/agents/index.js";
16
+ import { decisionRationale } from "../domains/session/decision-board.js";
16
17
  import type { DecisionLedgerEntry } from "../domains/session/entries.js";
17
18
  import type { TaskBoardTask } from "../domains/session/task-board.js";
18
19
 
@@ -89,12 +90,14 @@ function clamp(text: string, maxBytes: number): { text: string; truncated: boole
89
90
 
90
91
  /** One decision line. Superseded decisions carry their correction so a reversal is visible. */
91
92
  function decisionLine(decision: DecisionLedgerEntry["decisions"][number]): string {
93
+ const argument = decisionRationale(decision);
94
+ const details = argument ? `\n ${argument}` : "";
92
95
  const label = decision.label ? ` (${decision.label})` : "";
93
96
  if (decision.status === "superseded") {
94
97
  const correction = decision.correction ? `; corrected to ${decision.correction}` : "";
95
- return `- ${decision.key}${label}: ${decision.value} [superseded${correction}]`;
98
+ return `- ${decision.key}${label}: ${decision.value} [superseded${correction}]${details}`;
96
99
  }
97
- return `- ${decision.key}${label}: ${decision.value}`;
100
+ return `- ${decision.key}${label}: ${decision.value}${details}`;
98
101
  }
99
102
 
100
103
  function taskLine(task: TaskBoardTask): string {
@@ -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,
@@ -21,6 +21,7 @@ import {
21
21
  wrapTextWithAnsi,
22
22
  } from "../../engine/tui.js";
23
23
  import type { FleetRunPreview, FleetRunPreviewStep } from "../fleet-run-preview.js";
24
+ import { formatUsd } from "../footer/widgets.js";
24
25
  import { buildResponsiveHint, FocusBox, showClioOverlayFrame } from "../overlay-frame.js";
25
26
  import { clioTheme, rule } from "../theme/index.js";
26
27
 
@@ -83,12 +84,12 @@ function formatFleetRunPreviewStep(step: FleetRunPreviewStep): string {
83
84
  return `agent ${step.stepId}${loop} · ${step.agentId ?? "?"} · ${route}${node}${declaredRoute}${gate}${dynamicPlan} · ${step.scope} · ${formatWriteBoundary(step.writes)}`;
84
85
  }
85
86
 
86
- function formatBudgetLine(preview: FleetRunPreview): string {
87
+ export function formatBudgetLine(preview: FleetRunPreview): string {
87
88
  const contract =
88
89
  preview.budget.contractUsd === null
89
90
  ? "contract declares no ceiling"
90
91
  : `contract ceiling $${preview.budget.contractUsd.toFixed(2)}`;
91
- return `budget: admitted under $${preview.budget.ceilingUsd.toFixed(2)} session ceiling, $${preview.budget.currentUsd.toFixed(4)} spent, ${contract}`;
92
+ return `budget: admitted under $${preview.budget.ceilingUsd.toFixed(2)} session ceiling, ${formatUsd(preview.budget.currentUsd)} spent, ${contract}`;
92
93
  }
93
94
 
94
95
  /**
@@ -25,8 +25,8 @@ const PREVIEW_WIDTH = 60;
25
25
  * calls onFork(parentTurnId); the caller wires that through
26
26
  * SessionContract.fork(parentTurnId).
27
27
  *
28
- * Phase 12 slice 12b-3 scope: current-session turns only. Multi-session picker
29
- * lives in a later slice once TreeSnapshot grows a payload preview field.
28
+ * Scope: current-session turns only. A multi-session picker is not
29
+ * implemented; it would need TreeSnapshot to carry a payload preview field.
30
30
  */
31
31
  export interface OpenMessagePickerOverlayDeps {
32
32
  session: SessionContract;
@@ -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
  }
@@ -600,10 +600,10 @@ const SETTINGS_VALUE_HELP_BY_ID: Partial<Record<EditableSettingId, Record<string
600
600
  false: "context is only compacted when you run /context compact",
601
601
  },
602
602
  // `embedded` is a declared rung with no implementation behind it yet; it
603
- // runs as `auto` until Clio can own a pane host, and the hint says so.
603
+ // refuses until Clio can own a pane host, and the hint says so.
604
604
  "panes.enabled": {
605
605
  auto: "detect a herdr session and join it as a guest; no pane host, no panes",
606
- embedded: "not implemented yet; behaves as auto (guest mode inside herdr) until Clio can own a pane host",
606
+ embedded: "not implemented yet; use auto or guest",
607
607
  off: "never detect or open a pane",
608
608
  },
609
609
  "retry.enabled": {
@@ -16,14 +16,14 @@ export const TREE_OVERLAY_WIDTH = 88;
16
16
  const VISIBLE_ROWS = 16;
17
17
 
18
18
  /**
19
- * /tree navigator overlay. Phase 12 slice 12b-2 behaviors only:
19
+ * /tree navigator overlay. Behaviors:
20
20
  * - One row per node, indented two spaces per branch level (not per message)
21
21
  * - Shift+T toggles operator-local timestamps on/off
22
22
  * - `e` enters label edit submode (Enter commits, Esc cancels)
23
23
  * - Enter on a row switches the active append point to that turn id
24
24
  * - Esc closes the overlay
25
25
  *
26
- * Cwd-toggle (`p`) and sort-order (`s`) land in Phase 18.
26
+ * Cwd-toggle (`p`) and sort-order (`s`) are not implemented.
27
27
  *
28
28
  * The overlay queries `session.tree()` on open and after any mutation so
29
29
  * label edits are reflected without a close/reopen cycle.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Renderer for BranchSummary session entries (Phase 12 / slice 12b).
2
+ * Renderer for BranchSummary session entries.
3
3
  *
4
4
  * A branchSummary entry is produced when a fork inherits a compacted parent
5
5
  * context: the new session opens with a single summary block standing in for
@@ -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
  }