@qwen-code/qwen-code 0.23.0 → 0.23.1-preview.1

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 (453) hide show
  1. package/bundled/new-app/SKILL.md +1 -1
  2. package/bundled/qc-helper/docs/configuration/auth.md +84 -12
  3. package/bundled/qc-helper/docs/configuration/settings.md +76 -74
  4. package/bundled/qc-helper/docs/features/arena.md +15 -20
  5. package/bundled/qc-helper/docs/features/channels/overview.md +7 -2
  6. package/bundled/qc-helper/docs/features/code-review.md +22 -19
  7. package/bundled/qc-helper/docs/features/commands.md +51 -10
  8. package/bundled/qc-helper/docs/features/followup-suggestions.md +1 -1
  9. package/bundled/qc-helper/docs/features/goals.md +8 -0
  10. package/bundled/qc-helper/docs/features/headless.md +2 -2
  11. package/bundled/qc-helper/docs/features/hooks.md +19 -19
  12. package/bundled/qc-helper/docs/features/output-styles.md +35 -2
  13. package/bundled/qc-helper/docs/qwen-serve.md +67 -52
  14. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +3 -1
  15. package/bundled/qc-helper/docs/support/troubleshooting.md +3 -3
  16. package/bundled/review/SKILL.md +45 -41
  17. package/bundled/review/references/aone.md +1 -1
  18. package/bundled/review/references/posting.md +1 -1
  19. package/bundled/workflow-creator/SKILL.md +48 -0
  20. package/bundled/zvec-grep-install/SKILL.md +57 -0
  21. package/chunks/MaxSizedBox-5ARLO5PR.js +116 -0
  22. package/chunks/{StandaloneSessionPicker-QUMO4LLQ.js → StandaloneSessionPicker-T6B322CB.js} +87 -82
  23. package/chunks/{acp-startup-profiler-M4X5F3VK.js → acp-startup-profiler-6ULXXQMS.js} +2 -2
  24. package/chunks/{acpAgent-2GTFCIEP.js → acpAgent-WTDEY5KD.js} +1041 -364
  25. package/chunks/{agent-XKF5SZWU.js → agent-NXPUXEVZ.js} +46 -43
  26. package/chunks/agent-headless-QQZTWOKO.js +88 -0
  27. package/chunks/{anthropicContentGenerator-L76MR5OR.js → anthropicContentGenerator-6XDHXIII.js} +16 -9
  28. package/chunks/{artifact-tool-MYCL2QCS.js → artifact-tool-DFVVJXL2.js} +3 -3
  29. package/chunks/askUserQuestion-GF7VQ44M.js +14 -0
  30. package/chunks/bridge-OHY5OGOZ.js +123 -0
  31. package/chunks/{ca-BNU7YNDE.js → ca-KC2AISNS.js} +1 -0
  32. package/chunks/{channel-management-service-4MTCEGJB.js → channel-management-service-ZDDG3G5S.js} +4 -4
  33. package/chunks/channel-settings-store-7BJAS2SU.js +126 -0
  34. package/chunks/{channel-worker-group-47F4ISUZ.js → channel-worker-group-2ISMRENV.js} +6 -6
  35. package/chunks/{channel-worker-manager-I5Y44GYR.js → channel-worker-manager-VSRPVPRH.js} +6 -6
  36. package/chunks/{channel-worker-supervisor-6VCLUXFE.js → channel-worker-supervisor-SRJBK72Z.js} +4 -4
  37. package/chunks/{chunk-5RTTI4GE.js → chunk-2RYWGYB3.js} +4 -3
  38. package/chunks/{chunk-FUO5V5KI.js → chunk-2UWQX4FP.js} +2 -2
  39. package/chunks/{chunk-L26ONV2Y.js → chunk-2WGJG2KW.js} +9 -8
  40. package/chunks/{chunk-JHN7UIDW.js → chunk-2XRE4KE4.js} +1 -1
  41. package/chunks/chunk-32CM56LO.js +20 -0
  42. package/chunks/{chunk-SI7WDR3U.js → chunk-32YDNYXP.js} +129 -14
  43. package/chunks/{chunk-ZHO2CW6D.js → chunk-3CZ2BQV6.js} +1 -1
  44. package/chunks/{chunk-FD5SJOWT.js → chunk-3K456UJF.js} +9 -4
  45. package/chunks/{chunk-5M6IDOMF.js → chunk-3K65MUKD.js} +105 -0
  46. package/chunks/chunk-3UMWOKJC.js +78 -0
  47. package/chunks/{chunk-UM2FFKXN.js → chunk-43JNQAHO.js} +3 -3
  48. package/chunks/{chunk-KM3XVTMO.js → chunk-43NOB5NM.js} +112 -12
  49. package/chunks/{chunk-G5PBOQWI.js → chunk-47BZVBTE.js} +3 -3
  50. package/chunks/{chunk-32LU3APX.js → chunk-4F2QRVW6.js} +1 -1
  51. package/chunks/{chunk-KMU3ZHH4.js → chunk-4HC4DYKN.js} +2 -2
  52. package/chunks/{chunk-22UH7VTP.js → chunk-4HOEU2OR.js} +1 -1
  53. package/chunks/{chunk-NXKOVOM5.js → chunk-4IQKBLTQ.js} +15 -9
  54. package/chunks/{chunk-M4KFODIP.js → chunk-4JAGXZR3.js} +1 -1
  55. package/chunks/{chunk-PDAKFU7M.js → chunk-4LIPOIXS.js} +1 -1
  56. package/chunks/{chunk-LEPCWS5A.js → chunk-4MCY33Y2.js} +3 -3
  57. package/chunks/{chunk-U6D2PPMN.js → chunk-4VUVBN3Y.js} +1 -1
  58. package/chunks/{chunk-37JFWFCD.js → chunk-4VZCORNT.js} +1 -1
  59. package/chunks/{daemon-RKDGBFLK.js → chunk-537SQ2AI.js} +2216 -1721
  60. package/chunks/{chunk-VNAYZAFX.js → chunk-54TF2ZIQ.js} +4 -4
  61. package/chunks/{chunk-OKTNXDVO.js → chunk-565U2ANU.js} +1 -1
  62. package/chunks/chunk-5ETULJLP.js +74 -0
  63. package/chunks/{chunk-ADYN7P2Y.js → chunk-5JLQWQK6.js} +8 -6
  64. package/chunks/{chunk-BFY33IB4.js → chunk-5MTARK4Y.js} +7 -7
  65. package/chunks/{chunk-BJXCYUGM.js → chunk-5YY5MZT6.js} +1 -1
  66. package/chunks/{chunk-4PSDSCW3.js → chunk-64MQTIX7.js} +3 -3
  67. package/chunks/{chunk-54C6PIGT.js → chunk-6UIACMGH.js} +3 -3
  68. package/chunks/{chunk-ALUYNJPM.js → chunk-7BZS4ZDV.js} +1362 -1140
  69. package/chunks/{chunk-LB3WQQJK.js → chunk-7OCIQNKX.js} +2 -2
  70. package/chunks/{chunk-QKDNS6FU.js → chunk-7VEYUF3N.js} +13 -2
  71. package/chunks/{chunk-AZJLY2XZ.js → chunk-AHBLRVD5.js} +5 -5
  72. package/chunks/{chunk-VWTSRH6C.js → chunk-AQ5NAGWI.js} +89 -17
  73. package/chunks/{chunk-MOF6VZN2.js → chunk-AXPOOQAW.js} +2 -2
  74. package/chunks/{chunk-CVX63TFJ.js → chunk-B44JBZBB.js} +3 -3
  75. package/chunks/{chunk-AI35S34R.js → chunk-B54PFQS5.js} +3 -3
  76. package/chunks/{chunk-373DQUVA.js → chunk-BF3RUIVP.js} +5 -4
  77. package/chunks/{chunk-RJUVTJEZ.js → chunk-BKNY7PDI.js} +1 -1
  78. package/chunks/{chunk-UKYXYWI2.js → chunk-BUQN5LTI.js} +2 -2
  79. package/chunks/{chunk-O5CD7T4T.js → chunk-BW4333PP.js} +0 -95
  80. package/chunks/{chunk-UPFRILIL.js → chunk-CWNC7M73.js} +2 -2
  81. package/chunks/{chunk-3L724BJ5.js → chunk-CZACBHAW.js} +6 -6
  82. package/chunks/{chunk-EBDGRBZX.js → chunk-D4CU6DKR.js} +6 -6
  83. package/chunks/{chunk-G7HBEEX7.js → chunk-D6PIMKY3.js} +9 -9
  84. package/chunks/{chunk-ENYUKMFK.js → chunk-DJXSOEFB.js} +1 -1
  85. package/chunks/{chunk-C2VWOXHS.js → chunk-DNPHKA72.js} +8 -8
  86. package/chunks/{chunk-UUASLXHW.js → chunk-E4L5BM2B.js} +5 -5
  87. package/chunks/{chunk-HT5S5TRQ.js → chunk-EDIDYZBT.js} +4 -11
  88. package/chunks/{chunk-5H5S4UY5.js → chunk-EFT7OMDN.js} +1 -1
  89. package/chunks/{chunk-GB4UKWY5.js → chunk-EJNYBDYC.js} +2 -2
  90. package/chunks/{chunk-NQ4L2CMD.js → chunk-ER273QE6.js} +53 -9
  91. package/chunks/{chunk-RKW36UWC.js → chunk-EWNKP4V4.js} +1 -1
  92. package/chunks/{chunk-UJ4DUYIH.js → chunk-F53KKZUD.js} +2 -2
  93. package/chunks/{chunk-EFTPIZIC.js → chunk-FDOGGKAA.js} +21 -0
  94. package/chunks/{chunk-AQ37AY7B.js → chunk-FKJM6JKY.js} +5 -0
  95. package/chunks/{chunk-KEVYJSI4.js → chunk-G34YLYCS.js} +13 -13
  96. package/chunks/{chunk-P6UIF2OW.js → chunk-GCFZ2LAX.js} +195 -10
  97. package/chunks/{chunk-VGHZT6JR.js → chunk-GELRJXE2.js} +1 -1
  98. package/chunks/{chunk-ZDFQGHZH.js → chunk-GMNLYQOS.js} +1 -1
  99. package/chunks/{chunk-KOGW3YWJ.js → chunk-GVVCLL2P.js} +12 -12
  100. package/chunks/{chunk-OSSTATJF.js → chunk-GXZHYPHZ.js} +428 -30
  101. package/chunks/{chunk-IPATA3T2.js → chunk-GZWW2QWR.js} +2 -2
  102. package/chunks/{chunk-C4TIXFDZ.js → chunk-H3UDNQLO.js} +6 -4
  103. package/chunks/chunk-HD7O6WLV.js +18 -0
  104. package/chunks/{chunk-4UANMABT.js → chunk-HFTB354P.js} +259 -49
  105. package/chunks/{chunk-LOBDDFYK.js → chunk-HJ34U5J4.js} +5 -5
  106. package/chunks/{chunk-M4LBBSVP.js → chunk-HY3DXYZK.js} +2 -2
  107. package/chunks/{chunk-4F7GQGXB.js → chunk-I72PHOKL.js} +1451 -415
  108. package/chunks/{chunk-YPWZTR7F.js → chunk-IFD3BTEA.js} +3 -3
  109. package/chunks/{chunk-EWRW2WQC.js → chunk-IKLFS6SC.js} +5 -5
  110. package/chunks/{chunk-VPSIC437.js → chunk-IQN2CCIE.js} +66 -6
  111. package/chunks/{chunk-F7NF2IOE.js → chunk-IXSGOSEG.js} +7 -7
  112. package/chunks/{chunk-ODZF64DM.js → chunk-IZ2U57NY.js} +1 -1
  113. package/chunks/{chunk-4BGDFKQE.js → chunk-J3O5I5ZD.js} +24 -7
  114. package/chunks/{chunk-DYTW3QVG.js → chunk-J6MB5ZHZ.js} +1 -1
  115. package/chunks/{chunk-HJBHMANB.js → chunk-JBTZUFR4.js} +11 -8
  116. package/chunks/{chunk-SRF4KTAG.js → chunk-JLWFGYXU.js} +4 -4
  117. package/chunks/{chunk-SX2QIMJV.js → chunk-JOPC3FND.js} +5 -5
  118. package/chunks/chunk-JPEAQJNS.js +2142 -0
  119. package/chunks/{chunk-ZTPGUFQV.js → chunk-JRYL3T2O.js} +24 -5
  120. package/chunks/{chunk-GXUTFQXK.js → chunk-KE3Q4JMY.js} +4 -4
  121. package/chunks/{chunk-LKODFJRD.js → chunk-KFFCDLKV.js} +1 -1
  122. package/chunks/{chunk-4M24B5J5.js → chunk-KJJPJYHI.js} +79 -30
  123. package/chunks/chunk-KK2GZGBK.js +21080 -0
  124. package/chunks/{chunk-64QH2UC6.js → chunk-KPXRFTT7.js} +12 -1
  125. package/chunks/{chunk-JZWOCUZ3.js → chunk-L4R7BCVV.js} +1 -1
  126. package/chunks/{chunk-IG4W5SJR.js → chunk-LDS57224.js} +3 -3
  127. package/chunks/{chunk-UAKRDON5.js → chunk-LK7S2D6V.js} +4 -4
  128. package/chunks/{chunk-4HVH57J3.js → chunk-LMJQSPWB.js} +21 -6
  129. package/chunks/{chunk-ANVG3BVV.js → chunk-LNYV4GXX.js} +13 -3
  130. package/chunks/{chunk-RM4WT2XB.js → chunk-LPBQODMR.js} +4 -4
  131. package/chunks/{chunk-XEAAO654.js → chunk-M3JGHRMQ.js} +1 -1
  132. package/chunks/{chunk-AMDSOFFV.js → chunk-MATEIJZF.js} +1 -0
  133. package/chunks/{chunk-LHBNR6EU.js → chunk-MNEYUNOE.js} +2 -2
  134. package/chunks/{chunk-I4NRYS6A.js → chunk-MUZCSTOO.js} +11 -11
  135. package/chunks/{chunk-I5N4EAS6.js → chunk-MWHY26G3.js} +1 -1
  136. package/chunks/{chunk-7XL4WRXM.js → chunk-N6VQ37ZZ.js} +2 -2
  137. package/chunks/{chunk-AHYTURFB.js → chunk-N7EYO2E7.js} +1 -1
  138. package/chunks/{chunk-LU77UT4D.js → chunk-N7VURC4O.js} +24 -26
  139. package/chunks/{chunk-DSX7KQPM.js → chunk-NAKALAL4.js} +227 -29
  140. package/chunks/{chunk-QQD2GART.js → chunk-NGX4NUNP.js} +3 -3
  141. package/chunks/{chunk-2M3EWQNG.js → chunk-NUQFUXOG.js} +17 -1
  142. package/chunks/{chunk-E4JNFXNI.js → chunk-NXWYCSPL.js} +3 -3
  143. package/chunks/{chunk-6A2D4QSO.js → chunk-O2GG7H4C.js} +4 -4
  144. package/chunks/{chunk-ZKFTS3OV.js → chunk-O45WBTNS.js} +6 -6
  145. package/chunks/{chunk-KGV55H53.js → chunk-OECNP26L.js} +1 -1
  146. package/chunks/{chunk-S6H3ELPG.js → chunk-P4RUUG64.js} +1 -1
  147. package/chunks/{chunk-GH2S4GD5.js → chunk-P5LDR7FI.js} +21 -68
  148. package/chunks/{chunk-RN3YGDCA.js → chunk-P6LATTDG.js} +4 -4
  149. package/chunks/{chunk-WP4AX3XD.js → chunk-PTFFWTTO.js} +3 -3
  150. package/chunks/{chunk-DTVQSSNM.js → chunk-PZUOHCWI.js} +3 -3
  151. package/chunks/{chunk-VYIUNFEA.js → chunk-PZV2FASB.js} +3 -3
  152. package/chunks/{chunk-XLXAZLDR.js → chunk-Q2SAQTEJ.js} +1 -1
  153. package/chunks/{chunk-47RYEQW5.js → chunk-QMFOYPGV.js} +2 -2
  154. package/chunks/{chunk-SULZPKTA.js → chunk-QSC5YOEC.js} +3 -3
  155. package/chunks/{chunk-F33GFWPR.js → chunk-QWZOOIR3.js} +58 -18
  156. package/chunks/{chunk-H43PSPYS.js → chunk-R355CUNQ.js} +4 -4
  157. package/chunks/{chunk-DQCKVAF5.js → chunk-RDKXZ2LS.js} +3 -3
  158. package/chunks/{chunk-7JMGTOH7.js → chunk-RPBMP6BN.js} +21 -1
  159. package/chunks/{chunk-5Q5RC2WE.js → chunk-RVNS7NWN.js} +2 -2
  160. package/chunks/{chunk-7RB56BRJ.js → chunk-SAZS4IWW.js} +6 -4
  161. package/chunks/{chunk-5EIOJGCR.js → chunk-SFMCYMVF.js} +4 -4
  162. package/chunks/{chunk-TMKTOTMQ.js → chunk-SN5FV4FY.js} +5 -5
  163. package/chunks/{chunk-QJGYU5PG.js → chunk-TDP7UULF.js} +1 -1
  164. package/chunks/{chunk-EIJT2PQ6.js → chunk-TIGXX4PA.js} +2 -2
  165. package/chunks/{chunk-PCRBLMIN.js → chunk-TMWB67LS.js} +21 -3
  166. package/chunks/{chunk-JUARRUMA.js → chunk-UEZOXZNI.js} +1358 -646
  167. package/chunks/{chunk-KFN2IZYR.js → chunk-UKADFFL2.js} +3 -3
  168. package/chunks/{chunk-TJYRTS4S.js → chunk-UKKYOIVT.js} +2 -2
  169. package/chunks/{chunk-EVFDRBUM.js → chunk-URSCX7S7.js} +12 -7
  170. package/chunks/{chunk-U4DJ5XB3.js → chunk-VDXYYVCD.js} +269 -70
  171. package/chunks/{chunk-4LIFGNI4.js → chunk-VEFRT7NX.js} +1 -1
  172. package/chunks/chunk-VFFQAOPR.js +18 -0
  173. package/chunks/{chunk-3AKCBZVW.js → chunk-VU7O7CGQ.js} +3 -3
  174. package/chunks/{chunk-RAFQIHN2.js → chunk-VUSSAGKI.js} +76 -5
  175. package/chunks/{chunk-TQHPVKO6.js → chunk-VY6UVU7G.js} +6 -6
  176. package/chunks/{chunk-S2T7H5MI.js → chunk-W4LL5RZO.js} +1 -1
  177. package/chunks/{chunk-ZGCKTAL5.js → chunk-WEXA2DNG.js} +2 -0
  178. package/chunks/{chunk-NVVJTUSL.js → chunk-WR3SH3EY.js} +136 -85
  179. package/chunks/{chunk-JR42V4UY.js → chunk-WTW36TJ3.js} +1 -1
  180. package/chunks/{chunk-TSZSGQ3N.js → chunk-WXC6OAWD.js} +1 -1
  181. package/chunks/{chunk-ZVP4PWBU.js → chunk-X35VIWWJ.js} +1 -1
  182. package/chunks/{chunk-KHP66DFN.js → chunk-XFFRI3WM.js} +1 -1
  183. package/chunks/{chunk-EIY7SUPZ.js → chunk-XHGGYCTA.js} +1 -1
  184. package/chunks/{chunk-BA4WJC4L.js → chunk-XOVVCGZX.js} +1 -1
  185. package/chunks/{chunk-VBWD6C27.js → chunk-XUSOYE2I.js} +1 -1
  186. package/chunks/{chunk-NUHOLAQ6.js → chunk-XWJFDJZK.js} +1 -1
  187. package/chunks/{chunk-65HWLGA7.js → chunk-XY3USGFE.js} +3 -3
  188. package/chunks/{chunk-STCVJXQB.js → chunk-Y3ZKI4RQ.js} +56 -26
  189. package/chunks/{chunk-QAK5475D.js → chunk-Y53DG2HA.js} +1 -1
  190. package/chunks/{chunk-3JQZVCBI.js → chunk-YCDL2SAS.js} +2 -2
  191. package/chunks/{chunk-NSUKQ4DN.js → chunk-YHDGABDC.js} +3 -3
  192. package/chunks/{chunk-FRICLXCZ.js → chunk-Z6WZPXQH.js} +3 -3
  193. package/chunks/{chunk-EAHOJF6V.js → chunk-ZAFYHRVY.js} +12 -0
  194. package/chunks/{chunk-MP6YZ4RK.js → chunk-ZAZ3NFL6.js} +852 -309
  195. package/chunks/{chunk-7TBU7PU2.js → chunk-ZSTCM3MX.js} +1 -1
  196. package/chunks/{chunk-NRL5CUZT.js → chunk-ZTAVGFKA.js} +1 -1
  197. package/chunks/config-utils-QXDOTXEQ.js +119 -0
  198. package/chunks/contextCommand-RN4KARWC.js +112 -0
  199. package/chunks/{core-runtime-B4UKKIAQ.js → core-runtime-NAZCOKHB.js} +63 -58
  200. package/chunks/{create-sub-session-NJ24B4US.js → create-sub-session-BCSM4WKB.js} +61 -56
  201. package/chunks/{create-sub-session-LUPWEUHR.js → create-sub-session-BQ3SE4TX.js} +3 -3
  202. package/chunks/{cron-create-CRSPET3H.js → cron-create-D6HQ7I7I.js} +4 -4
  203. package/chunks/{cron-delete-DB77SZTU.js → cron-delete-KK3D2SQV.js} +4 -4
  204. package/chunks/{cron-list-U2JNYWV6.js → cron-list-VBF3IZMF.js} +4 -4
  205. package/chunks/daemon-LCUELM6E.js +191 -0
  206. package/chunks/{daemon-git-worktree-guard-O2HPOBAB.js → daemon-git-worktree-guard-3K5CAU36.js} +62 -57
  207. package/chunks/daemon-status-provider-4X3ZZQTZ.js +122 -0
  208. package/chunks/daemon-trust-policy-R45CFUJA.js +118 -0
  209. package/chunks/{daemon-trust-policy-monitor-JL7F4Y4Q.js → daemon-trust-policy-monitor-DSSFCO3K.js} +69 -64
  210. package/chunks/{de-T4BLOKEC.js → de-UU2YTO37.js} +1 -0
  211. package/chunks/deferred-core-runtime-UO2M6WYI.js +120 -0
  212. package/chunks/{display-image-73C7XNRK.js → display-image-EVVTBVYE.js} +6 -6
  213. package/chunks/{dist-EDHQIBYD.js → dist-3T5MDUHP.js} +62 -20
  214. package/chunks/{dist-ZCJLKQSP.js → dist-AFH3BMZZ.js} +18 -10
  215. package/chunks/{dist-LXFYIJNG.js → dist-MK5PPBRF.js} +40 -9
  216. package/chunks/{dist-GT64AAUR.js → dist-PH5RSTEA.js} +56 -20
  217. package/chunks/{dist-62OZ7QXB.js → dist-QUU7TVE3.js} +35 -12
  218. package/chunks/{dist-JVXT4VUJ.js → dist-R5Y34V6T.js} +11 -2
  219. package/chunks/{dist-L6URO6CK.js → dist-SB2XRXZA.js} +5 -1
  220. package/chunks/{dist-QAF5DO3Y.js → dist-SIHF5MU2.js} +326 -131
  221. package/chunks/{dist-PDGNRVPY.js → dist-UVHW2U56.js} +20 -1
  222. package/chunks/earlyInputCapture-BXP7V2P3.js +22 -0
  223. package/chunks/{edit-SUGXY63Y.js → edit-VNBCTRWP.js} +48 -44
  224. package/chunks/{en-2RATMNX7.js → en-JMR535HP.js} +3 -1
  225. package/chunks/{enter-worktree-B6USKSIK.js → enter-worktree-CEVK7MQ2.js} +7 -7
  226. package/chunks/{enterPlanMode-MDX4RVVL.js → enterPlanMode-4KMZMUIA.js} +48 -45
  227. package/chunks/environment-S2HYQDON.js +135 -0
  228. package/chunks/errors-DAAN5TL7.js +119 -0
  229. package/chunks/{exit-worktree-DLQ73SJH.js → exit-worktree-D3YE6MUN.js} +7 -7
  230. package/chunks/exitPlanMode-HR36HG3D.js +86 -0
  231. package/chunks/{fast-path-Y73R42LV.js → fast-path-4IWSW3UV.js} +3 -3
  232. package/chunks/{fast-path-settings-MFUR3IWK.js → fast-path-settings-ISEJPRYE.js} +6 -4
  233. package/chunks/{fr-BGHGYX6A.js → fr-HKNWVXRJ.js} +1 -0
  234. package/chunks/{glob-DMGH7EZN.js → glob-IZYB2XH2.js} +46 -43
  235. package/chunks/{goal-tools-3RF3PXCL.js → goal-tools-VGUPKQDJ.js} +46 -43
  236. package/chunks/{grep-AJVLCVXC.js → grep-OUVLNXG7.js} +9 -8
  237. package/chunks/handleAutoUpdate-D56FMDTW.js +115 -0
  238. package/chunks/i18n-BKE5WO6T.js +130 -0
  239. package/chunks/{image-gen-VOIDOHOB.js → image-gen-SHVQ3XID.js} +8 -8
  240. package/chunks/initializer-MS4SGEHF.js +119 -0
  241. package/chunks/installationInfo-542MGC4S.js +113 -0
  242. package/chunks/{ja-G3FTD5XE.js → ja-GJS5RZGU.js} +1 -0
  243. package/chunks/{keychain-token-storage-REZVMJA6.js → keychain-token-storage-NQ5XWIPX.js} +2 -2
  244. package/chunks/list-H6XTKUWL.js +122 -0
  245. package/chunks/{list-agents-SBMONIUK.js → list-agents-ULYBGJXC.js} +6 -6
  246. package/chunks/{llm-K26SUDVK.js → llm-3NUC4EJY.js} +132 -113
  247. package/chunks/{llm-content-generator-TT6EAUD4.js → llm-content-generator-R4NL3OQN.js} +40 -13
  248. package/chunks/loadedSettingsAdapter-3XLKYDVT.js +116 -0
  249. package/chunks/{loggingContentGenerator-EYQBA4M4.js → loggingContentGenerator-ZYSWVNEO.js} +55 -52
  250. package/chunks/{loop-wakeup-QA6SHCZT.js → loop-wakeup-B27BEYRL.js} +5 -5
  251. package/chunks/{lowlight-J2OZNPCA.js → lowlight-BTE423KL.js} +3 -6
  252. package/chunks/{ls-HEJNCEYO.js → ls-3IIMMVKF.js} +5 -4
  253. package/chunks/{lsp-WOQKNZP6.js → lsp-VJAT7XKS.js} +2 -2
  254. package/chunks/{managed-npm-update-HIJTODQT.js → managed-npm-update-L2I53ZAI.js} +62 -57
  255. package/chunks/mcp-4PIXQASW.js +116 -0
  256. package/chunks/{monitor-DKNZQAB2.js → monitor-O2YQTOZZ.js} +50 -46
  257. package/chunks/{node-UETAYMMO.js → node-ISQAFKIS.js} +2 -2
  258. package/chunks/nonInteractiveCli-LV7CDBA2.js +198 -0
  259. package/chunks/{notebook-edit-MGHTRL2D.js → notebook-edit-4RE2ALH4.js} +48 -44
  260. package/chunks/{openaiContentGenerator-ZJIEQ3ZJ.js → openaiContentGenerator-7ND7K5CP.js} +30 -25
  261. package/chunks/pidfile-UFTLQ7NP.js +117 -0
  262. package/chunks/{processUtils-UY3SAJJZ.js → processUtils-3XBB4FYV.js} +2 -2
  263. package/chunks/prompt-terminal-ledger-2QASOGMM.js +111 -0
  264. package/chunks/{pt-D73IFYT7.js → pt-FXMYXEUV.js} +1 -0
  265. package/chunks/{qwenContentGenerator-VI4KATRY.js → qwenContentGenerator-AELTUTH6.js} +52 -49
  266. package/chunks/{qwenOAuth2-7AOCKSOQ.js → qwenOAuth2-BS5D2LYV.js} +7 -7
  267. package/chunks/{read-file-P7F4P7LV.js → read-file-PDWHZPHX.js} +13 -11
  268. package/chunks/{read-mcp-resource-GLAGB6R7.js → read-mcp-resource-YXJZ75UB.js} +2 -2
  269. package/chunks/{record-artifact-SWVR7NSU.js → record-artifact-WJDOV6XU.js} +4 -4
  270. package/chunks/{report-findings-AL5YW3KI.js → report-findings-Q4UACKWR.js} +5 -5
  271. package/chunks/{request-shutdown-5YK4IZ54.js → request-shutdown-2YZ3E3GH.js} +8 -8
  272. package/chunks/resumeHistoryUtils-QRXZEEBA.js +124 -0
  273. package/chunks/ripGrep-KSOOLE6H.js +39 -0
  274. package/chunks/{ru-QMISLKRH.js → ru-RMHURE5U.js} +1 -0
  275. package/chunks/{run-qwen-serve-OGTEEUR2.js → run-qwen-serve-RTAREPT6.js} +84 -70
  276. package/chunks/runtime-ESFSCJRZ.js +154 -0
  277. package/chunks/scheduled-tasks-6ZHRNBH6.js +133 -0
  278. package/chunks/{scheduler-73YXGUGW.js → scheduler-DQI6KV7T.js} +63 -58
  279. package/chunks/{sdk-exporters-http-3JO5TJNU.js → sdk-exporters-http-7R2ARBPV.js} +2 -2
  280. package/chunks/{sdk-impl-HZAUUTHJ.js → sdk-impl-YOLO7LV4.js} +4 -4
  281. package/chunks/{send-message-JC7NJTY6.js → send-message-PQCVSVMN.js} +24 -24
  282. package/chunks/serve-FY7ZEW52.js +124 -0
  283. package/chunks/{server-AOYZVVOM.js → server-KNDY6K5F.js} +1594 -273
  284. package/chunks/{session-UAWFNFGI.js → session-MCEPXAZP.js} +113 -105
  285. package/chunks/session-attachments-root-OLNAE6GF.js +109 -0
  286. package/chunks/{session-pr-refresh-CT2INROL.js → session-pr-refresh-HKJHQQQK.js} +67 -62
  287. package/chunks/{settings-BHRGDASJ.js → settings-VXO4WBMK.js} +68 -63
  288. package/chunks/shell-U263OTES.js +96 -0
  289. package/chunks/{skill-ZGBKNCHQ.js → skill-SDODGBKL.js} +19 -17
  290. package/chunks/skill-settings-YEIA22QJ.js +124 -0
  291. package/chunks/spawnChannel-4WJZVFPP.js +117 -0
  292. package/chunks/standalone-update-ZWVQUO64.js +124 -0
  293. package/chunks/{start-opentui-ui-FZ4USOU7.js → start-opentui-ui-BFYCJQRZ.js} +1199 -190
  294. package/chunks/{startInteractiveUI-E2WQJUOA.js → startInteractiveUI-JYAFCMHL.js} +2977 -2319
  295. package/chunks/{syntheticOutput-HJNZSEHN.js → syntheticOutput-AUAJBNXR.js} +3 -3
  296. package/chunks/{task-create-6RSD54S5.js → task-create-LD5ISM3E.js} +12 -12
  297. package/chunks/{task-list-IQSACPOM.js → task-list-YISJ4RJA.js} +5 -5
  298. package/chunks/{task-stop-HE2LRQNW.js → task-stop-65ZOVATJ.js} +2 -2
  299. package/chunks/{task-update-XAJ2NYOA.js → task-update-AAN4ZVEY.js} +15 -15
  300. package/chunks/{team-create-SOKMYSQU.js → team-create-KU7MABNO.js} +47 -44
  301. package/chunks/{team-delete-NGNNKGMG.js → team-delete-XFRRTJTT.js} +5 -5
  302. package/chunks/{team-plan-approval-U7ZWXYAY.js → team-plan-approval-DPB377A3.js} +46 -43
  303. package/chunks/terminal-image-renderer-WGWRENOF.js +124 -0
  304. package/chunks/theme-manager-GBUFULSO.js +108 -0
  305. package/chunks/{todoWrite-5UTVUXHA.js → todoWrite-G7NT4IFP.js} +5 -5
  306. package/chunks/{tool-search-IAI2RVWT.js → tool-search-6YUXHBPT.js} +19 -17
  307. package/chunks/total-session-admission-54R2JQ5L.js +118 -0
  308. package/chunks/trustedFolders-KAJIDJTH.js +128 -0
  309. package/chunks/{update-relaunch-5RWKZAL3.js → update-relaunch-XM4IWBFD.js} +5 -5
  310. package/chunks/updateCheck-W6UZFURI.js +124 -0
  311. package/chunks/useAutoAcceptIndicator-LAWYHY3U.js +126 -0
  312. package/chunks/{validateNonInterActiveAuth-QPFEKATS.js → validateNonInterActiveAuth-7WCKHRN2.js} +109 -101
  313. package/chunks/{version-JKNG7YDH.js → version-3ZU43RJ6.js} +1 -1
  314. package/chunks/{web-fetch-X3AHIIHW.js → web-fetch-QHI2SQL4.js} +16 -14
  315. package/chunks/{web-search-K2FMOGS5.js → web-search-3KZZKWNY.js} +9 -8
  316. package/chunks/{workflow-TOLPAK5G.js → workflow-HRW7Y2X4.js} +330 -1667
  317. package/chunks/workspace-providers-status-KTGCWCPC.js +120 -0
  318. package/chunks/{workspace-registration-store-KQWVVW4Y.js → workspace-registration-store-LHLPPWNE.js} +1 -1
  319. package/chunks/workspace-registry-X34MLN52.js +127 -0
  320. package/chunks/workspace-runtime-coordinator-U4PW4P7K.js +128 -0
  321. package/chunks/workspace-service-KD7BCGYL.js +132 -0
  322. package/chunks/workspace-skills-status-YJGO6Y3T.js +119 -0
  323. package/chunks/{workspace-trust-reconciler-IBDFQBQS.js → workspace-trust-reconciler-EUYHISCH.js} +74 -69
  324. package/chunks/write-file-EBSB34NJ.js +91 -0
  325. package/chunks/{zh-25DF7OGK.js → zh-DVFYHRK5.js} +3 -1
  326. package/chunks/{zh-TW-5EDMZVGK.js → zh-TW-W2GNP2IU.js} +3 -1
  327. package/chunks/{zoom-image-IFXSN74N.js → zoom-image-UJ5VKWKP.js} +13 -11
  328. package/cli.js +13 -13
  329. package/export-transcript-document.js +617 -0
  330. package/locales/ca.js +1 -0
  331. package/locales/de.js +1 -0
  332. package/locales/en.js +5 -2
  333. package/locales/fr.js +1 -0
  334. package/locales/ja.js +1 -0
  335. package/locales/pt.js +1 -0
  336. package/locales/ru.js +1 -0
  337. package/locales/zh-TW.js +5 -2
  338. package/locales/zh.js +5 -2
  339. package/package.json +5 -4
  340. package/web-shell/assets/{abnfDiagram-VCTEODGH-Cxf7xE_Z.js → abnfDiagram-VCTEODGH-Dur--luQ.js} +1 -1
  341. package/web-shell/assets/{arc-ESi1eNkE.js → arc-tYLobxFi.js} +1 -1
  342. package/web-shell/assets/{architectureDiagram-5GKGNRK7-D9l7-bDo.js → architectureDiagram-5GKGNRK7-IG6aXD03.js} +1 -1
  343. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bc8DEasw.js → blockDiagram-NRAW4CY4-C6eBSkfA.js} +1 -1
  344. package/web-shell/assets/{c4Diagram-UCG6FXSJ-Dimb2Hmh.js → c4Diagram-UCG6FXSJ-BrX3HJqB.js} +1 -1
  345. package/web-shell/assets/channel-uEkvKckd.js +1 -0
  346. package/web-shell/assets/{chunk-2Q5K7J3B-jVDmOpAQ.js → chunk-2Q5K7J3B-B3fcJ8ee.js} +1 -1
  347. package/web-shell/assets/{chunk-5VM5RSS4-DbG_SwdB.js → chunk-5VM5RSS4-CeC90yKM.js} +1 -1
  348. package/web-shell/assets/{chunk-F27PBJKO-QEc4cY1v.js → chunk-F27PBJKO-CW44RVki.js} +1 -1
  349. package/web-shell/assets/{chunk-G27WJ6UU-iJ36lQ3X.js → chunk-G27WJ6UU-D1PAMukD.js} +1 -1
  350. package/web-shell/assets/{chunk-JWPE2WC7-DuArnVtF.js → chunk-JWPE2WC7-Dt3Y2Fvx.js} +1 -1
  351. package/web-shell/assets/{chunk-LCL6LL3I-DxOf1zwL.js → chunk-LCL6LL3I-CZHw2lLI.js} +1 -1
  352. package/web-shell/assets/{chunk-POPQ4Y6H-lVLu9Ild.js → chunk-POPQ4Y6H-ysNAdTGx.js} +1 -1
  353. package/web-shell/assets/{chunk-SVP7TREG-C6XYlIer.js → chunk-SVP7TREG-BdNXW6YQ.js} +1 -1
  354. package/web-shell/assets/{chunk-XXDRQBXY-CiG2j2Ji.js → chunk-XXDRQBXY-DgqQ9UA8.js} +1 -1
  355. package/web-shell/assets/classDiagram-DTDB5LWJ-DuPsnhWS.js +1 -0
  356. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DuPsnhWS.js +1 -0
  357. package/web-shell/assets/{cose-bilkent-JH36ORCC-DGVHMMVm.js → cose-bilkent-JH36ORCC-BILImXzJ.js} +1 -1
  358. package/web-shell/assets/{cynefin-OW5HDTMX-D6cgpCnH.js → cynefin-OW5HDTMX-DR88Pund.js} +1 -1
  359. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BKv4Z-UX.js → cynefinDiagram-5FMLGOSQ-BYFbfkA6.js} +1 -1
  360. package/web-shell/assets/{dagre-3AP2YEHR-B4ABMIG-.js → dagre-3AP2YEHR-rfpyc6sX.js} +1 -1
  361. package/web-shell/assets/{diagram-S7CK7UJ4-DgCkp_Lm.js → diagram-S7CK7UJ4-BJxLmEwH.js} +1 -1
  362. package/web-shell/assets/{diagram-UQ7AKVKN-FG0FNokz.js → diagram-UQ7AKVKN-H34xm7k3.js} +1 -1
  363. package/web-shell/assets/{diagram-VSXAHHWV-JgkP9qg-.js → diagram-VSXAHHWV-HYxhwNLx.js} +1 -1
  364. package/web-shell/assets/{diagram-VX7I27RA-ADh2x83l.js → diagram-VX7I27RA-BJazso8F.js} +1 -1
  365. package/web-shell/assets/{diagram-Z3DM3KII-yXqoYF1J.js → diagram-Z3DM3KII-Clje1aNy.js} +1 -1
  366. package/web-shell/assets/{ebnfDiagram-PWID7BFC-Duk83Ek_.js → ebnfDiagram-PWID7BFC-M93YBkFh.js} +1 -1
  367. package/web-shell/assets/{erDiagram-SSCWMZ5O-DMdvxySG.js → erDiagram-SSCWMZ5O-DY8XzSHU.js} +1 -1
  368. package/web-shell/assets/{flowDiagram-A5DVABFB-DHjVgSji.js → flowDiagram-A5DVABFB-CE6Aylcq.js} +1 -1
  369. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DMM9DkCE.js → ganttDiagram-EL5Y4UJY-DI-5LL22.js} +1 -1
  370. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-t_ug9vO8.js → gitGraphDiagram-WWUBYQGX-C7BZWElk.js} +1 -1
  371. package/web-shell/assets/index-CVyqwW7y.js +2142 -0
  372. package/web-shell/assets/{index-zqvnpGHv.js → index-DclFHns9.js} +1 -1
  373. package/web-shell/assets/index-FO7JXPnH.css +36 -0
  374. package/web-shell/assets/{infoDiagram-RXCK75RN-eT1fANNm.js → infoDiagram-RXCK75RN-CGUSy4Pc.js} +1 -1
  375. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-k3evzZNn.js → ishikawaDiagram-5VMMS53U-B5BVks9q.js} +1 -1
  376. package/web-shell/assets/{journeyDiagram-EYS64GPL-CGim3EAi.js → journeyDiagram-EYS64GPL-CFh6Tf7h.js} +1 -1
  377. package/web-shell/assets/{kanban-definition-3QL26DDD-WHfJo-22.js → kanban-definition-3QL26DDD-B7TlxP7c.js} +1 -1
  378. package/web-shell/assets/{layout-DkqIaFlJ.js → layout-Br_pZq2Q.js} +1 -1
  379. package/web-shell/assets/{linear-Bdkd3mCz.js → linear-BVlP6fte.js} +1 -1
  380. package/web-shell/assets/{mermaid.core-CGw0LkT_.js → mermaid.core-TrcYWoiF.js} +6 -6
  381. package/web-shell/assets/{mindmap-definition-FBJOCRG2-C9V4rBvo.js → mindmap-definition-FBJOCRG2-BJ4LzqjZ.js} +1 -1
  382. package/web-shell/assets/{pegDiagram-XKGWAZYB-CwoI2T5G.js → pegDiagram-XKGWAZYB-1b_MxlOl.js} +1 -1
  383. package/web-shell/assets/{pieDiagram-E7YTZNPT-DaTmBmPG.js → pieDiagram-E7YTZNPT-B8zl0YhY.js} +1 -1
  384. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-plh6MyGI.js → quadrantDiagram-AXDQQJYC-CIZO8ukl.js} +1 -1
  385. package/web-shell/assets/{railroadDiagram-O6MQD6OU-D_b-S0iK.js → railroadDiagram-O6MQD6OU-CepHSbCj.js} +1 -1
  386. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-zUzTN7VE.js → requirementDiagram-EFPCY7ZU-BCgxkcSW.js} +1 -1
  387. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-m6AhoD0l.js → sankeyDiagram-P5KCCOFB-CE5CcoMM.js} +1 -1
  388. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-Cwhzsine.js → sequenceDiagram-WJ2MYXX4-DvgHi-d5.js} +1 -1
  389. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CcZuKIae.js → sizeCapture-X5ZJPWSS-T-fAsCPX.js} +1 -1
  390. package/web-shell/assets/{stateDiagram-HBIQ2CUA-CFoiJwD_.js → stateDiagram-HBIQ2CUA-DYHaul-5.js} +1 -1
  391. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcYho9a4.js +1 -0
  392. package/web-shell/assets/{swimlanes-XN3QIQJK-CgS9hcaV.js → swimlanes-XN3QIQJK-Dbz3Qiej.js} +1 -1
  393. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6HsOIgX.js +8 -0
  394. package/web-shell/assets/{timeline-definition-24CTP7MA-Dzzc05t9.js → timeline-definition-24CTP7MA-9NVRts3N.js} +1 -1
  395. package/web-shell/assets/{vennDiagram-4TSXK5OY-DemK0f7Y.js → vennDiagram-4TSXK5OY-C7cb7vnH.js} +1 -1
  396. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CquLxtMr.js → wardleyDiagram-VM6X3IG4-CG-8Ddjm.js} +1 -1
  397. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-BTBKTM5g.js → xychartDiagram-S5SC5T6Z-iGeYAcP4.js} +1 -1
  398. package/web-shell/index.html +2 -2
  399. package/chunks/MaxSizedBox-B3D7545A.js +0 -111
  400. package/chunks/agent-headless-OC2IB55D.js +0 -85
  401. package/chunks/askUserQuestion-THQZMG44.js +0 -322
  402. package/chunks/bridge-IHSBI2YJ.js +0 -118
  403. package/chunks/channel-settings-store-BVKWAI2T.js +0 -121
  404. package/chunks/chunk-I2TMJPCV.js +0 -448
  405. package/chunks/chunk-QI27MKNQ.js +0 -4008
  406. package/chunks/config-utils-LVSYDLHZ.js +0 -114
  407. package/chunks/contextCommand-TZD7UAJK.js +0 -107
  408. package/chunks/daemon-status-provider-GRRVCJFW.js +0 -117
  409. package/chunks/daemon-trust-policy-YJL442BK.js +0 -113
  410. package/chunks/deferred-core-runtime-S32AYVZI.js +0 -115
  411. package/chunks/earlyInputCapture-BBPCIVZG.js +0 -108
  412. package/chunks/environment-VN6RXDVN.js +0 -130
  413. package/chunks/errors-UEY36PIT.js +0 -114
  414. package/chunks/exitPlanMode-EPHIEDAA.js +0 -83
  415. package/chunks/handleAutoUpdate-HVWQT2AU.js +0 -110
  416. package/chunks/i18n-5OR7NTRZ.js +0 -125
  417. package/chunks/initializer-JE5RQSOE.js +0 -114
  418. package/chunks/installationInfo-KO3CCSCK.js +0 -108
  419. package/chunks/list-3IORSFIY.js +0 -117
  420. package/chunks/loadedSettingsAdapter-KLLFZF3M.js +0 -111
  421. package/chunks/mcp-A2UEHETW.js +0 -111
  422. package/chunks/nonInteractiveCli-YA47F2F4.js +0 -190
  423. package/chunks/pidfile-ETHAZNMY.js +0 -112
  424. package/chunks/prompt-terminal-ledger-GZ747VYE.js +0 -106
  425. package/chunks/resumeHistoryUtils-DPZKFW24.js +0 -119
  426. package/chunks/ripGrep-C7LJKUPZ.js +0 -37
  427. package/chunks/runtime-LNBLEMZS.js +0 -149
  428. package/chunks/scheduled-tasks-FLDYZQOF.js +0 -128
  429. package/chunks/serve-3UR2H4CV.js +0 -119
  430. package/chunks/session-attachments-root-ZCGXQQTR.js +0 -104
  431. package/chunks/shell-YHOGC7TO.js +0 -93
  432. package/chunks/skill-settings-AKSP665O.js +0 -119
  433. package/chunks/spawnChannel-N25MBB6F.js +0 -112
  434. package/chunks/standalone-update-XGPWJDRN.js +0 -119
  435. package/chunks/terminal-image-renderer-KKM4OBLO.js +0 -117
  436. package/chunks/theme-manager-GQHF3A7T.js +0 -103
  437. package/chunks/total-session-admission-G4CGCSTG.js +0 -113
  438. package/chunks/trustedFolders-D2I3FDPB.js +0 -123
  439. package/chunks/updateCheck-ZXOQDFEI.js +0 -119
  440. package/chunks/useAutoAcceptIndicator-6EK4QGAH.js +0 -121
  441. package/chunks/workspace-providers-status-PCJK3RC7.js +0 -115
  442. package/chunks/workspace-registry-YNIOB6HJ.js +0 -122
  443. package/chunks/workspace-runtime-coordinator-WG2RNEN7.js +0 -123
  444. package/chunks/workspace-service-G4ZNBOFH.js +0 -127
  445. package/chunks/workspace-skills-status-FMTPPMWC.js +0 -114
  446. package/chunks/write-file-YTLFY2S5.js +0 -88
  447. package/web-shell/assets/channel-B7ohGDil.js +0 -1
  448. package/web-shell/assets/classDiagram-DTDB5LWJ-DdFpqpfD.js +0 -1
  449. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DdFpqpfD.js +0 -1
  450. package/web-shell/assets/index-BGZRqbRo.css +0 -36
  451. package/web-shell/assets/index-DRri_6_x.js +0 -2067
  452. package/web-shell/assets/stateDiagram-v2-4QOOHH4V--H8HdEmk.js +0 -1
  453. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ShE9OIgf.js +0 -8
@@ -18,22 +18,23 @@ import {
18
18
  useLogger,
19
19
  useProviderSetupFlow,
20
20
  writeTerminalTitle
21
- } from "./chunk-KOGW3YWJ.js";
22
- import "./chunk-5Q5RC2WE.js";
23
- import "./chunk-UAKRDON5.js";
21
+ } from "./chunk-GVVCLL2P.js";
22
+ import "./chunk-RVNS7NWN.js";
23
+ import "./chunk-LK7S2D6V.js";
24
24
  import {
25
25
  startPostRenderPrefetches
26
- } from "./chunk-KEVYJSI4.js";
26
+ } from "./chunk-G34YLYCS.js";
27
27
  import {
28
28
  SessionStatsProvider,
29
29
  TOOL_DISPLAY_BY_NAME,
30
30
  TOOL_SUCCESS_RATE_HIGH,
31
31
  TOOL_SUCCESS_RATE_MEDIUM,
32
+ flattenModelsBySource,
32
33
  getArenaStatusLabel,
33
34
  getStatusColor,
34
35
  keyMatchers,
35
36
  useSessionStats
36
- } from "./chunk-VPSIC437.js";
37
+ } from "./chunk-IQN2CCIE.js";
37
38
  import {
38
39
  ICON,
39
40
  applyCollapsePolicyAndSummary,
@@ -42,10 +43,10 @@ import {
42
43
  isFindingsListDisplay,
43
44
  shouldDisplayGoalStateCause,
44
45
  waitForGoalRuntime
45
- } from "./chunk-HJBHMANB.js";
46
+ } from "./chunk-JBTZUFR4.js";
46
47
  import {
47
48
  stopAndGetCapturedInput
48
- } from "./chunk-RKW36UWC.js";
49
+ } from "./chunk-EWNKP4V4.js";
49
50
  import {
50
51
  fireSessionDeleteHook
51
52
  } from "./chunk-L34XSHIZ.js";
@@ -53,7 +54,7 @@ import {
53
54
  MAX_SUGGESTIONS_TO_SHOW,
54
55
  handleAtCommand,
55
56
  sanitizeDisplayText
56
- } from "./chunk-LOBDDFYK.js";
57
+ } from "./chunk-HJ34U5J4.js";
57
58
  import {
58
59
  BuiltinCommandLoader,
59
60
  BundledSkillLoader,
@@ -78,29 +79,33 @@ import {
78
79
  isSlashCommand,
79
80
  isStackedSkillCompletableCommand,
80
81
  isValidStackedSkillPrefix,
82
+ loadSessionOutputStyles,
81
83
  parseSlashCommand,
82
84
  parseStackedSlashCommands,
83
85
  recordAutoSkillCommandUsage,
84
86
  refreshExtensionContentRuntime,
85
87
  resetBackgroundStateForSessionSwitch,
86
88
  serializeUserPromptExpansionPrompt
87
- } from "./chunk-NVVJTUSL.js";
89
+ } from "./chunk-WR3SH3EY.js";
88
90
  import {
89
91
  EXTENSION_RELOAD_FAILED_REASON,
90
92
  ExtensionRefreshState
91
- } from "./chunk-MP6YZ4RK.js";
93
+ } from "./chunk-ZAZ3NFL6.js";
92
94
  import {
93
95
  formatSupportedModes,
94
96
  getCommandDisplayName,
95
97
  getCommandSourceBadge,
96
98
  getCommandSourceGroup,
97
99
  getCommandSubcommandNames
98
- } from "./chunk-EIY7SUPZ.js";
100
+ } from "./chunk-XHGGYCTA.js";
99
101
  import {
102
+ calculateCost,
100
103
  computeSessionStats,
101
104
  getCompressionStatusText,
102
- getSystemInfoFields
103
- } from "./chunk-5RTTI4GE.js";
105
+ getSystemInfoFields,
106
+ levelLabel,
107
+ redactProxy
108
+ } from "./chunk-2RYWGYB3.js";
104
109
  import {
105
110
  formatDuration
106
111
  } from "./chunk-3SH53ANB.js";
@@ -110,17 +115,17 @@ import {
110
115
  cleanupOldClipboardImages,
111
116
  clipboardHasImage,
112
117
  saveClipboardImage
113
- } from "./chunk-M4LBBSVP.js";
114
- import "./chunk-SX2QIMJV.js";
118
+ } from "./chunk-HY3DXYZK.js";
119
+ import "./chunk-JOPC3FND.js";
115
120
  import "./chunk-4WGODMVR.js";
116
- import "./chunk-PDAKFU7M.js";
121
+ import "./chunk-4LIPOIXS.js";
117
122
  import {
118
123
  require_jsx_runtime
119
124
  } from "./chunk-SV5PQVQE.js";
120
125
  import {
121
126
  AUTO_THEME_NAME,
122
127
  themeManager
123
- } from "./chunk-JHN7UIDW.js";
128
+ } from "./chunk-2XRE4KE4.js";
124
129
  import {
125
130
  require_constants,
126
131
  require_react_reconciler
@@ -128,24 +133,25 @@ import {
128
133
  import {
129
134
  require_react
130
135
  } from "./chunk-5QWWOFGG.js";
131
- import "./chunk-5EIOJGCR.js";
132
- import "./chunk-37JFWFCD.js";
133
- import "./chunk-AHYTURFB.js";
136
+ import "./chunk-SFMCYMVF.js";
137
+ import {
138
+ getErrorMessage as getErrorMessage2
139
+ } from "./chunk-54TF2ZIQ.js";
140
+ import "./chunk-4VZCORNT.js";
141
+ import "./chunk-N7EYO2E7.js";
134
142
  import {
135
143
  setUpdateHandler
136
- } from "./chunk-SRF4KTAG.js";
144
+ } from "./chunk-JLWFGYXU.js";
137
145
  import "./chunk-EKTCKZV5.js";
138
- import "./chunk-UM2FFKXN.js";
146
+ import "./chunk-43JNQAHO.js";
139
147
  import "./chunk-YAF2MQZ6.js";
140
148
  import "./chunk-24FVUD5P.js";
141
- import "./chunk-EWRW2WQC.js";
149
+ import "./chunk-IKLFS6SC.js";
142
150
  import "./chunk-6H67XLET.js";
143
- import {
144
- getErrorMessage as getErrorMessage2
145
- } from "./chunk-VNAYZAFX.js";
146
- import "./chunk-QI27MKNQ.js";
147
- import "./chunk-XEAAO654.js";
148
- import "./chunk-NRL5CUZT.js";
151
+ import "./chunk-KK2GZGBK.js";
152
+ import "./chunk-M3JGHRMQ.js";
153
+ import "./chunk-VFFQAOPR.js";
154
+ import "./chunk-ZTAVGFKA.js";
149
155
  import {
150
156
  cpLen,
151
157
  escapeAnsiCtrlCodes,
@@ -161,53 +167,55 @@ import "./chunk-TXASDT2M.js";
161
167
  import "./chunk-PB7JBAHF.js";
162
168
  import "./chunk-UXEO7E3V.js";
163
169
  import "./chunk-4VQBQLIZ.js";
170
+ import "./chunk-DMEUXLSS.js";
164
171
  import {
165
172
  isValidSessionId
166
173
  } from "./chunk-ZEZKIS2K.js";
167
174
  import {
168
175
  formatUnsupportedVoiceModelMessage,
169
176
  isSelectableVoiceModel
170
- } from "./chunk-BA4WJC4L.js";
171
- import "./chunk-QAK5475D.js";
177
+ } from "./chunk-XOVVCGZX.js";
178
+ import "./chunk-Y53DG2HA.js";
172
179
  import {
173
180
  getExtendedSystemInfo
174
- } from "./chunk-RN3YGDCA.js";
175
- import "./chunk-3JQZVCBI.js";
181
+ } from "./chunk-P6LATTDG.js";
182
+ import "./chunk-YCDL2SAS.js";
176
183
  import "./chunk-7U5G6JXI.js";
177
184
  import "./chunk-WCCLLK7X.js";
178
- import "./chunk-6A2D4QSO.js";
185
+ import "./chunk-O2GG7H4C.js";
179
186
  import "./chunk-HWVUSYSN.js";
180
- import "./chunk-DMEUXLSS.js";
181
- import "./chunk-F7NF2IOE.js";
182
- import "./chunk-AZJLY2XZ.js";
187
+ import "./chunk-537SQ2AI.js";
188
+ import "./chunk-IXSGOSEG.js";
189
+ import "./chunk-AHBLRVD5.js";
183
190
  import "./chunk-57OAHC2Y.js";
184
- import "./chunk-PCRBLMIN.js";
185
- import "./chunk-NXKOVOM5.js";
186
- import "./chunk-TSZSGQ3N.js";
191
+ import "./chunk-TMWB67LS.js";
192
+ import "./chunk-4IQKBLTQ.js";
193
+ import "./chunk-WXC6OAWD.js";
187
194
  import "./chunk-V6WHFGST.js";
188
195
  import {
189
196
  createLoadedSettingsAdapter
190
- } from "./chunk-32LU3APX.js";
191
- import "./chunk-S6H3ELPG.js";
197
+ } from "./chunk-4F2QRVW6.js";
198
+ import "./chunk-P4RUUG64.js";
192
199
  import "./chunk-2AUM35J5.js";
193
- import "./chunk-7XL4WRXM.js";
194
- import "./chunk-ZGCKTAL5.js";
200
+ import "./chunk-N6VQ37ZZ.js";
201
+ import "./chunk-WEXA2DNG.js";
195
202
  import "./chunk-6PLDPT2C.js";
196
203
  import "./chunk-FYJ7W2PI.js";
197
204
  import "./chunk-STUJ7IMZ.js";
205
+ import "./chunk-4JAGXZR3.js";
198
206
  import "./chunk-GYTKQYDB.js";
199
- import "./chunk-M4KFODIP.js";
200
207
  import "./chunk-ALMR3E6Q.js";
201
208
  import "./chunk-RKFGE7JH.js";
202
209
  import "./chunk-UDG5EZJI.js";
203
- import "./chunk-3VUENPWF.js";
204
210
  import "./chunk-M5GB774H.js";
205
- import "./chunk-U4DJ5XB3.js";
211
+ import "./chunk-3VUENPWF.js";
212
+ import "./chunk-VDXYYVCD.js";
206
213
  import "./chunk-IW6RQPQB.js";
207
- import "./chunk-ZVP4PWBU.js";
214
+ import "./chunk-5HBA2Z7V.js";
215
+ import "./chunk-X35VIWWJ.js";
208
216
  import {
209
217
  loadMcpApprovals
210
- } from "./chunk-C2VWOXHS.js";
218
+ } from "./chunk-DNPHKA72.js";
211
219
  import {
212
220
  getDefaultValue,
213
221
  getDialogSettingKeys,
@@ -223,26 +231,26 @@ import {
223
231
  saveModifiedSettings,
224
232
  setPendingSettingValueAny,
225
233
  validateSettingValue
226
- } from "./chunk-VWTSRH6C.js";
234
+ } from "./chunk-AQ5NAGWI.js";
227
235
  import {
228
236
  TOGGLE_TYPES
229
- } from "./chunk-NQ4L2CMD.js";
237
+ } from "./chunk-ER273QE6.js";
230
238
  import "./chunk-RKUWKYED.js";
231
- import "./chunk-O5CD7T4T.js";
239
+ import "./chunk-BW4333PP.js";
232
240
  import "./chunk-IDS7MSUP.js";
233
241
  import {
234
242
  t
235
- } from "./chunk-I4NRYS6A.js";
243
+ } from "./chunk-MUZCSTOO.js";
236
244
  import "./chunk-5EJZE3FP.js";
237
- import "./chunk-C4TIXFDZ.js";
238
- import "./chunk-2M3EWQNG.js";
245
+ import "./chunk-H3UDNQLO.js";
246
+ import "./chunk-NUQFUXOG.js";
239
247
  import "./chunk-2EAZ43JQ.js";
240
248
  import "./chunk-NF5J2WFA.js";
241
249
  import {
242
250
  getCliVersion
243
- } from "./chunk-VBWD6C27.js";
251
+ } from "./chunk-XUSOYE2I.js";
244
252
  import "./chunk-W3N5XAZ6.js";
245
- import "./chunk-65HWLGA7.js";
253
+ import "./chunk-XY3USGFE.js";
246
254
  import "./chunk-NPQ5ZKRP.js";
247
255
  import "./chunk-MR3PXB6E.js";
248
256
  import {
@@ -257,23 +265,26 @@ import {
257
265
  findExistingProviderModels,
258
266
  findProviderByCredentials,
259
267
  findProviderById,
260
- getDefaultModelIds
261
- } from "./chunk-JUARRUMA.js";
262
- import "./chunk-I2TMJPCV.js";
268
+ getDefaultModelIds,
269
+ resolveMetadataKey
270
+ } from "./chunk-UEZOXZNI.js";
271
+ import "./chunk-GELRJXE2.js";
272
+ import "./chunk-32CM56LO.js";
273
+ import "./chunk-JPEAQJNS.js";
263
274
  import "./chunk-XFSFZCM5.js";
264
- import "./chunk-JR42V4UY.js";
275
+ import "./chunk-WTW36TJ3.js";
265
276
  import "./chunk-LJZSMWOH.js";
266
- import "./chunk-RAFQIHN2.js";
267
- import "./chunk-L26ONV2Y.js";
268
- import "./chunk-47RYEQW5.js";
269
- import "./chunk-IG4W5SJR.js";
277
+ import "./chunk-VUSSAGKI.js";
278
+ import "./chunk-O45WBTNS.js";
279
+ import "./chunk-DJXSOEFB.js";
280
+ import "./chunk-2WGJG2KW.js";
281
+ import "./chunk-QMFOYPGV.js";
282
+ import "./chunk-LDS57224.js";
270
283
  import "./chunk-ZPJWUGCS.js";
271
- import "./chunk-4UANMABT.js";
272
- import "./chunk-ZKFTS3OV.js";
273
- import "./chunk-ENYUKMFK.js";
274
- import "./chunk-UKYXYWI2.js";
275
- import "./chunk-3AKCBZVW.js";
276
- import "./chunk-SULZPKTA.js";
284
+ import "./chunk-HFTB354P.js";
285
+ import "./chunk-BUQN5LTI.js";
286
+ import "./chunk-VU7O7CGQ.js";
287
+ import "./chunk-QSC5YOEC.js";
277
288
  import "./chunk-VNOVK4I7.js";
278
289
  import {
279
290
  CoreToolScheduler,
@@ -290,6 +301,7 @@ import {
290
301
  compactToolResultDisplayForHistory,
291
302
  computeUniqueBranchTitle,
292
303
  didWriteProjectContextFile,
304
+ getExtensionDisplayName,
293
305
  isEditorAvailable,
294
306
  isGatedMcpScope,
295
307
  isImageGenerationCapable,
@@ -301,59 +313,57 @@ import {
301
313
  parseRule,
302
314
  parseVisionModelSetting,
303
315
  refreshMemoryInstruction
304
- } from "./chunk-4F7GQGXB.js";
316
+ } from "./chunk-I72PHOKL.js";
305
317
  import "./chunk-GOFAQQZA.js";
306
- import "./chunk-5M6IDOMF.js";
318
+ import "./chunk-3K65MUKD.js";
307
319
  import "./chunk-6HUXPLB5.js";
308
320
  import "./chunk-TWPJO254.js";
309
321
  import "./chunk-CQ35AJ4Z.js";
310
- import "./chunk-NSUKQ4DN.js";
311
- import "./chunk-DQCKVAF5.js";
312
- import "./chunk-AI35S34R.js";
322
+ import "./chunk-YHDGABDC.js";
323
+ import "./chunk-RDKXZ2LS.js";
324
+ import "./chunk-B54PFQS5.js";
313
325
  import {
314
326
  writeRuntimeStatus
315
- } from "./chunk-KM3XVTMO.js";
327
+ } from "./chunk-43NOB5NM.js";
316
328
  import "./chunk-6PVPNMXU.js";
317
329
  import {
318
330
  resolveModelId
319
- } from "./chunk-OKTNXDVO.js";
320
- import "./chunk-EFTPIZIC.js";
331
+ } from "./chunk-565U2ANU.js";
332
+ import "./chunk-FDOGGKAA.js";
321
333
  import "./chunk-IRH27ZC2.js";
322
334
  import "./chunk-QHWCP53L.js";
323
- import "./chunk-UJ4DUYIH.js";
324
- import "./chunk-QJNDUTOL.js";
325
- import "./chunk-O6GEWCJA.js";
326
- import {
327
- BUILT_IN_OUTPUT_STYLES
328
- } from "./chunk-OSSTATJF.js";
329
- import "./chunk-ZHO2CW6D.js";
330
- import {
331
- registerSession
332
- } from "./chunk-CVX63TFJ.js";
333
- import "./chunk-373DQUVA.js";
334
- import "./chunk-H43PSPYS.js";
335
- import "./chunk-U6D2PPMN.js";
335
+ import "./chunk-F53KKZUD.js";
336
336
  import {
337
337
  resolveBundleDir
338
- } from "./chunk-VYIUNFEA.js";
339
- import "./chunk-KGV55H53.js";
340
- import "./chunk-7TBU7PU2.js";
341
- import "./chunk-E4JNFXNI.js";
338
+ } from "./chunk-PZV2FASB.js";
339
+ import "./chunk-QJNDUTOL.js";
340
+ import "./chunk-OECNP26L.js";
341
+ import "./chunk-O6GEWCJA.js";
342
342
  import {
343
343
  formatMemoryUsage
344
344
  } from "./chunk-CHEIIBT3.js";
345
- import "./chunk-TJYRTS4S.js";
345
+ import "./chunk-UKKYOIVT.js";
346
+ import {
347
+ registerSession
348
+ } from "./chunk-B44JBZBB.js";
349
+ import "./chunk-BF3RUIVP.js";
346
350
  import {
347
351
  APPROVAL_MODES
348
352
  } from "./chunk-JX6XHPTX.js";
353
+ import "./chunk-R355CUNQ.js";
354
+ import "./chunk-4VUVBN3Y.js";
355
+ import "./chunk-ZSTCM3MX.js";
356
+ import "./chunk-NXWYCSPL.js";
349
357
  import "./chunk-MLXTMF7H.js";
358
+ import "./chunk-GXZHYPHZ.js";
359
+ import "./chunk-3CZ2BQV6.js";
350
360
  import "./chunk-PQEISIKS.js";
351
- import "./chunk-FD5SJOWT.js";
352
- import "./chunk-4LIFGNI4.js";
361
+ import "./chunk-3K456UJF.js";
362
+ import "./chunk-VEFRT7NX.js";
353
363
  import "./chunk-S6LOFUVP.js";
354
364
  import "./chunk-NAVJD2PQ.js";
355
- import "./chunk-KFN2IZYR.js";
356
- import "./chunk-GB4UKWY5.js";
365
+ import "./chunk-UKADFFL2.js";
366
+ import "./chunk-EJNYBDYC.js";
357
367
  import "./chunk-QHMLYMMS.js";
358
368
  import "./chunk-CFKIH3D3.js";
359
369
  import {
@@ -361,9 +371,10 @@ import {
361
371
  applyReasoningEffort
362
372
  } from "./chunk-2LD5U7Q3.js";
363
373
  import "./chunk-DJ2GSRLV.js";
364
- import "./chunk-S2T7H5MI.js";
365
- import "./chunk-LKODFJRD.js";
366
- import "./chunk-LB3WQQJK.js";
374
+ import "./chunk-W4LL5RZO.js";
375
+ import "./chunk-3UMWOKJC.js";
376
+ import "./chunk-KFFCDLKV.js";
377
+ import "./chunk-7OCIQNKX.js";
367
378
  import {
368
379
  AuthEvent,
369
380
  ModelSlashCommandEvent,
@@ -385,52 +396,56 @@ import {
385
396
  shouldRunVisionBridge,
386
397
  splitImageParts,
387
398
  uiTelemetryService
388
- } from "./chunk-GH2S4GD5.js";
399
+ } from "./chunk-P5LDR7FI.js";
400
+ import "./chunk-5ETULJLP.js";
389
401
  import "./chunk-XBVNNDPK.js";
390
402
  import "./chunk-VGC4I5JJ.js";
391
403
  import {
392
- getAllGeminiMdFilenames
393
- } from "./chunk-DYTW3QVG.js";
394
- import "./chunk-HT5S5TRQ.js";
404
+ getAllGeminiMdFilenames,
405
+ getUnsupportedImageFormatWarning,
406
+ isSupportedImageMimeType
407
+ } from "./chunk-J6MB5ZHZ.js";
408
+ import "./chunk-EDIDYZBT.js";
409
+ import "./chunk-HD7O6WLV.js";
395
410
  import "./chunk-WZAD4ZNJ.js";
396
411
  import "./chunk-FPGTNKCP.js";
397
- import "./chunk-EIJT2PQ6.js";
398
- import "./chunk-BFY33IB4.js";
399
- import "./chunk-KHP66DFN.js";
400
- import "./chunk-22UH7VTP.js";
412
+ import "./chunk-TIGXX4PA.js";
413
+ import "./chunk-5MTARK4Y.js";
414
+ import "./chunk-XFFRI3WM.js";
415
+ import "./chunk-4HOEU2OR.js";
401
416
  import "./chunk-HHJLM3WQ.js";
402
417
  import {
403
418
  redactUrlCredentials
404
- } from "./chunk-QKDNS6FU.js";
419
+ } from "./chunk-7VEYUF3N.js";
405
420
  import "./chunk-74TONY4F.js";
406
- import "./chunk-ZDFQGHZH.js";
407
- import "./chunk-G7HBEEX7.js";
408
- import "./chunk-QQD2GART.js";
409
- import "./chunk-AQ37AY7B.js";
421
+ import "./chunk-GMNLYQOS.js";
422
+ import "./chunk-D6PIMKY3.js";
423
+ import "./chunk-NGX4NUNP.js";
424
+ import "./chunk-FKJM6JKY.js";
410
425
  import {
411
426
  isPathWithinRoot
412
- } from "./chunk-ODZF64DM.js";
427
+ } from "./chunk-IZ2U57NY.js";
413
428
  import {
414
429
  ToolNames,
415
430
  isShellProgressData
416
- } from "./chunk-7JMGTOH7.js";
431
+ } from "./chunk-RPBMP6BN.js";
417
432
  import {
418
433
  Storage,
419
434
  createDebugLogger,
420
435
  escapePath,
421
436
  getErrorMessage,
422
437
  isDebugLogFileEnabled
423
- } from "./chunk-EAHOJF6V.js";
424
- import "./chunk-QJGYU5PG.js";
438
+ } from "./chunk-ZAFYHRVY.js";
439
+ import "./chunk-TDP7UULF.js";
425
440
  import "./chunk-HRPFBHW7.js";
441
+ import {
442
+ registerCleanup,
443
+ runExitCleanup
444
+ } from "./chunk-BKNY7PDI.js";
426
445
  import {
427
446
  profileCheckpoint
428
447
  } from "./chunk-QILD6R27.js";
429
448
  import "./chunk-JVEGA3MM.js";
430
- import {
431
- registerCleanup,
432
- runExitCleanup
433
- } from "./chunk-RJUVTJEZ.js";
434
449
  import {
435
450
  writeStderrLine,
436
451
  writeStdoutLine
@@ -438,7 +453,7 @@ import {
438
453
  import "./chunk-75DOP5OR.js";
439
454
  import "./chunk-DMTGGOSA.js";
440
455
  import "./chunk-YQ3U5MUC.js";
441
- import "./chunk-AMDSOFFV.js";
456
+ import "./chunk-MATEIJZF.js";
442
457
  import "./chunk-TBWQLLFO.js";
443
458
  import {
444
459
  init_esbuild_shims
@@ -40982,18 +40997,23 @@ var import_react49 = __toESM(require_react(), 1);
40982
40997
  // packages/cli/src/ui/opentui/opentui-host.ts
40983
40998
  init_esbuild_shims();
40984
40999
 
40985
- // packages/cli/src/ui/opentui/session-switch.ts
40986
- init_esbuild_shims();
40987
- import { randomUUID } from "node:crypto";
40988
-
40989
- // packages/cli/src/ui/opentui/resume-session.ts
40990
- init_esbuild_shims();
40991
-
40992
- // packages/cli/src/ui/opentui/transcript-adapter.ts
41000
+ // packages/cli/src/ui/opentui/item-projection.ts
40993
41001
  init_esbuild_shims();
40994
41002
 
40995
41003
  // packages/cli/src/ui/opentui/event-adapter.ts
40996
41004
  init_esbuild_shims();
41005
+ function formatStopHookLoopText(stopHookCount, reasons) {
41006
+ return `Ran ${stopHookCount} stop hooks
41007
+ \u23BF Stop hook error: ${reasons[reasons.length - 1] ?? ""}`;
41008
+ }
41009
+ __name(formatStopHookLoopText, "formatStopHookLoopText");
41010
+ function formatUserPromptSubmitBlocked(reason, originalPrompt) {
41011
+ return `\u2715 UserPromptSubmit operation blocked by hook:
41012
+ ${reason}
41013
+
41014
+ Original prompt: ${sanitizeSensitiveText(originalPrompt)}`;
41015
+ }
41016
+ __name(formatUserPromptSubmitBlocked, "formatUserPromptSubmitBlocked");
40997
41017
  function formatToolArgs(args) {
40998
41018
  if (!args || Object.keys(args).length === 0) return void 0;
40999
41019
  return JSON.stringify(args);
@@ -41346,10 +41366,9 @@ function createEventMapper(context) {
41346
41366
  const v3 = ev.value;
41347
41367
  out.push({
41348
41368
  type: "warning",
41349
- text: `\u2715 UserPromptSubmit operation blocked by hook:
41350
- ${v3.reason}
41351
-
41352
- Original prompt: ${sanitizeSensitiveText(v3.originalPrompt)}`
41369
+ // ink redacts the echoed prompt (HistoryItemDisplay): sensitive
41370
+ // patterns masked and the text capped at 200 chars.
41371
+ text: formatUserPromptSubmitBlocked(v3.reason, v3.originalPrompt)
41353
41372
  });
41354
41373
  break;
41355
41374
  }
@@ -41358,8 +41377,7 @@ Original prompt: ${sanitizeSensitiveText(v3.originalPrompt)}`
41358
41377
  const v3 = ev.value;
41359
41378
  out.push({
41360
41379
  type: "info",
41361
- text: `Ran ${v3.stopHookCount} stop hooks
41362
- \u23BF Stop hook error: ${v3.reasons[v3.reasons.length - 1] ?? ""}`
41380
+ text: formatStopHookLoopText(v3.stopHookCount, v3.reasons)
41363
41381
  });
41364
41382
  break;
41365
41383
  }
@@ -41392,7 +41410,893 @@ Original prompt: ${sanitizeSensitiveText(v3.originalPrompt)}`
41392
41410
  }
41393
41411
  __name(createEventMapper, "createEventMapper");
41394
41412
 
41413
+ // packages/cli/src/ui/opentui/item-projection.ts
41414
+ function fmtTokensShort(n) {
41415
+ return n >= 1e3 ? `${(n / 1e3).toFixed(1)}k` : String(n);
41416
+ }
41417
+ __name(fmtTokensShort, "fmtTokensShort");
41418
+ function pct(part, whole) {
41419
+ if (whole <= 0) return "0.0";
41420
+ const p2 = part / whole * 100;
41421
+ return p2 > 100 ? ">100" : p2.toFixed(1);
41422
+ }
41423
+ __name(pct, "pct");
41424
+ function projectAbout(systemInfo) {
41425
+ const lines = ["Status"];
41426
+ const addField = /* @__PURE__ */ __name((label, value) => {
41427
+ if (value) lines.push(`${label}: ${value}`);
41428
+ }, "addField");
41429
+ const cliVersion = String(systemInfo["cliVersion"] ?? "");
41430
+ const gitCommit = systemInfo["gitCommit"];
41431
+ addField(
41432
+ "Qwen Code",
41433
+ cliVersion + (gitCommit ? ` (${String(gitCommit)})` : "")
41434
+ );
41435
+ const nodeVersion = String(systemInfo["nodeVersion"] ?? "");
41436
+ const npmVersion = String(systemInfo["npmVersion"] ?? "");
41437
+ addField(
41438
+ "Runtime",
41439
+ [
41440
+ nodeVersion ? `Node.js ${nodeVersion}` : "",
41441
+ npmVersion ? `npm ${npmVersion}` : ""
41442
+ ].filter(Boolean).join(" / ")
41443
+ );
41444
+ addField("IDE Client", String(systemInfo["ideClient"] ?? ""));
41445
+ const lspStatus = systemInfo["lspStatus"];
41446
+ if (lspStatus !== void 0) addField("LSP", String(lspStatus));
41447
+ addField(
41448
+ "OS",
41449
+ [
41450
+ String(systemInfo["osPlatform"] ?? ""),
41451
+ String(systemInfo["osArch"] ?? ""),
41452
+ systemInfo["osRelease"] ? `(${String(systemInfo["osRelease"])})` : ""
41453
+ ].filter(Boolean).join(" ")
41454
+ );
41455
+ const selectedAuthType = String(systemInfo["selectedAuthType"] ?? "");
41456
+ const baseUrl = systemInfo["baseUrl"];
41457
+ const apiKeyEnvKey = systemInfo["apiKeyEnvKey"];
41458
+ let authLabel = "";
41459
+ if (selectedAuthType) {
41460
+ const matched = findProviderByCredentials(baseUrl, apiKeyEnvKey);
41461
+ if (matched && resolveMetadataKey(matched) && matched.label) {
41462
+ authLabel = matched.label;
41463
+ } else if (selectedAuthType.startsWith("oauth") || selectedAuthType === "qwen-oauth") {
41464
+ authLabel = "Qwen OAuth";
41465
+ } else {
41466
+ authLabel = `API Key - ${selectedAuthType}`;
41467
+ }
41468
+ }
41469
+ addField("Auth", authLabel);
41470
+ const isOAuth = authLabel === "Qwen OAuth" || authLabel.startsWith("Qwen OAuth");
41471
+ if (!isOAuth && selectedAuthType && baseUrl) {
41472
+ addField("Base URL", baseUrl);
41473
+ }
41474
+ const modelVersion = String(systemInfo["modelVersion"] ?? "");
41475
+ addField("Model", modelVersion);
41476
+ addField("Fast Model", String(systemInfo["fastModel"] ?? "") || modelVersion);
41477
+ addField("Session ID", String(systemInfo["sessionId"] ?? ""));
41478
+ addField("Sandbox", String(systemInfo["sandboxEnv"] ?? ""));
41479
+ const proxy = systemInfo["proxy"];
41480
+ if (proxy) {
41481
+ addField("Proxy", redactProxy(proxy));
41482
+ } else {
41483
+ addField("Proxy", "no proxy");
41484
+ }
41485
+ addField("Memory Usage", String(systemInfo["memoryUsage"] ?? ""));
41486
+ return lines.join("\n");
41487
+ }
41488
+ __name(projectAbout, "projectAbout");
41489
+ function projectToolsList(tools, showDescriptions) {
41490
+ const lines = ["Available Qwen Code CLI tools:", ""];
41491
+ if (tools.length === 0) {
41492
+ lines.push(" No tools available");
41493
+ return lines.join("\n");
41494
+ }
41495
+ for (const tool of tools) {
41496
+ lines.push(
41497
+ ` - ${tool.displayName ?? tool.name}${showDescriptions ? ` (${tool.name})` : ""}`
41498
+ );
41499
+ if (showDescriptions && tool.description?.trim()) {
41500
+ lines.push(` ${tool.description.trim()}`);
41501
+ }
41502
+ }
41503
+ return lines.join("\n");
41504
+ }
41505
+ __name(projectToolsList, "projectToolsList");
41506
+ function projectSkillsList(skills) {
41507
+ const lines = ["Available skills:", ""];
41508
+ if (skills.length === 0) {
41509
+ lines.push(" No skills available");
41510
+ return lines.join("\n");
41511
+ }
41512
+ const truncate2 = /* @__PURE__ */ __name((s, n) => s.length > n ? `${s.slice(0, Math.max(0, n - 1))}\u2026` : s, "truncate");
41513
+ for (const skill of skills) {
41514
+ if (skill.description) {
41515
+ const name = truncate2(skill.name, 24).padEnd(24);
41516
+ lines.push(
41517
+ ` - ${name} ${truncate2(skill.description, 80)}${skill.level ? ` (${levelLabel(skill.level)})` : ""}`
41518
+ );
41519
+ } else {
41520
+ lines.push(` - ${skill.name}`);
41521
+ }
41522
+ }
41523
+ return lines.join("\n");
41524
+ }
41525
+ __name(projectSkillsList, "projectSkillsList");
41526
+ function flattenActiveModels(metrics) {
41527
+ return flattenModelsBySource(metrics.models).map((entry) => ({
41528
+ key: entry.key,
41529
+ label: entry.label,
41530
+ metrics: entry.metrics
41531
+ }));
41532
+ }
41533
+ __name(flattenActiveModels, "flattenActiveModels");
41534
+ function entryCost(entry, modelPricing) {
41535
+ return calculateCost({
41536
+ inputTokens: entry.metrics.tokens.prompt,
41537
+ outputTokens: entry.metrics.tokens.candidates + entry.metrics.tokens.thoughts,
41538
+ pricing: (modelPricing ?? {})[entry.key.split("::")[0]]
41539
+ });
41540
+ }
41541
+ __name(entryCost, "entryCost");
41542
+ function projectModelStats(metrics, modelPricing) {
41543
+ const entries = flattenActiveModels(metrics);
41544
+ if (entries.length === 0) {
41545
+ return "No API calls have been made in this session.";
41546
+ }
41547
+ const hasPricing = entries.some(
41548
+ (entry) => entryCost(entry, modelPricing) != null
41549
+ );
41550
+ const lines = ["Model Stats For Nerds", ""];
41551
+ for (const entry of entries) {
41552
+ const m3 = entry.metrics;
41553
+ lines.push(entry.label);
41554
+ lines.push("API");
41555
+ lines.push(`Requests ${m3.api.totalRequests.toLocaleString()}`);
41556
+ lines.push(
41557
+ `Errors ${m3.api.totalErrors.toLocaleString()} (${m3.api.totalRequests > 0 ? (m3.api.totalErrors / m3.api.totalRequests * 100).toFixed(1) : "0.0"}%)`
41558
+ );
41559
+ lines.push(
41560
+ `Avg Latency ${m3.api.totalRequests > 0 ? formatDuration(m3.api.totalLatencyMs / m3.api.totalRequests) : "0s"}`
41561
+ );
41562
+ lines.push("Tokens");
41563
+ lines.push(`Total ${m3.tokens.total.toLocaleString()}`);
41564
+ lines.push(` \u21B3 Prompt ${m3.tokens.prompt.toLocaleString()}`);
41565
+ if (m3.tokens.cached > 0) {
41566
+ lines.push(
41567
+ ` \u21B3 Cached ${m3.tokens.cached.toLocaleString()} (${pct(m3.tokens.cached, m3.tokens.prompt)}%)`
41568
+ );
41569
+ }
41570
+ if (m3.tokens.thoughts > 0) {
41571
+ lines.push(` \u21B3 Thoughts ${m3.tokens.thoughts.toLocaleString()}`);
41572
+ }
41573
+ lines.push(` \u21B3 Output ${m3.tokens.candidates.toLocaleString()}`);
41574
+ if (hasPricing) {
41575
+ const cost = entryCost(entry, modelPricing);
41576
+ lines.push("Cost");
41577
+ lines.push(`Estimated ${cost != null ? `$${cost.toFixed(4)}` : "N/A"}`);
41578
+ }
41579
+ lines.push("");
41580
+ }
41581
+ return lines.join("\n").trimEnd();
41582
+ }
41583
+ __name(projectModelStats, "projectModelStats");
41584
+ function projectToolStats(metrics) {
41585
+ const byName = metrics.tools?.byName ?? {};
41586
+ const active = Object.entries(byName).filter(
41587
+ ([, stats]) => stats.count > 0
41588
+ );
41589
+ if (active.length === 0) {
41590
+ return "No tool calls have been made in this session.";
41591
+ }
41592
+ const lines = [
41593
+ "Tool Stats For Nerds",
41594
+ "",
41595
+ "Tool Name Calls Success Rate Avg Duration",
41596
+ "---------------------------------------------------------------"
41597
+ ];
41598
+ for (const [name, raw] of active) {
41599
+ const stats = raw;
41600
+ lines.push(
41601
+ `${name} ${stats.count} ${(stats.success / stats.count * 100).toFixed(1)}% ${formatDuration(stats.durationMs / stats.count)}`
41602
+ );
41603
+ }
41604
+ let accept = 0;
41605
+ let reject = 0;
41606
+ let modify = 0;
41607
+ for (const raw of Object.values(byName)) {
41608
+ const decisions = raw.decisions;
41609
+ accept += decisions?.["accept"] ?? 0;
41610
+ reject += decisions?.["reject"] ?? 0;
41611
+ modify += decisions?.["modify"] ?? 0;
41612
+ }
41613
+ const totalReviewed = accept + reject + modify;
41614
+ lines.push("");
41615
+ lines.push("User Decision Summary");
41616
+ lines.push(`Total Reviewed Suggestions: ${totalReviewed}`);
41617
+ lines.push(` \xBB Accepted: ${accept}`);
41618
+ lines.push(` \xBB Rejected: ${reject}`);
41619
+ lines.push(` \xBB Modified: ${modify}`);
41620
+ lines.push("");
41621
+ lines.push(
41622
+ ` Overall Agreement Rate: ${totalReviewed > 0 ? `${(accept / totalReviewed * 100).toFixed(1)}%` : "--"}`
41623
+ );
41624
+ return lines.join("\n");
41625
+ }
41626
+ __name(projectToolStats, "projectToolStats");
41627
+ function projectSkillStats(metrics) {
41628
+ const skills = metrics.skills ?? { byName: {} };
41629
+ const byName = skills.byName ?? {};
41630
+ const active = Object.entries(byName).filter(([, stats]) => stats.count > 0).sort(
41631
+ (a, b3) => b3[1].count - a[1].count
41632
+ );
41633
+ if (active.length === 0) {
41634
+ return "No skill calls have been made in this session.";
41635
+ }
41636
+ const lines = [
41637
+ "Skill Stats For Nerds",
41638
+ "",
41639
+ "Skill Name Calls OK Fail Success Rate",
41640
+ "-----------------------------------------------------------------------"
41641
+ ];
41642
+ for (const [name, raw] of active) {
41643
+ const stats = raw;
41644
+ lines.push(
41645
+ `${name} ${stats.count} ${stats.success} ${stats.fail} ${(stats.success / stats.count * 100).toFixed(1)}%`
41646
+ );
41647
+ }
41648
+ return lines.join("\n");
41649
+ }
41650
+ __name(projectSkillStats, "projectSkillStats");
41651
+ function projectSummary(summary) {
41652
+ if (summary.isPending) {
41653
+ switch (summary.stage) {
41654
+ case "generating":
41655
+ return "Generating project summary...";
41656
+ case "saving":
41657
+ return "Saving project summary...";
41658
+ default:
41659
+ return "Processing summary...";
41660
+ }
41661
+ }
41662
+ return `Project summary generated and saved successfully!${summary.filePath ? ` Saved to: ${summary.filePath}` : ""}`;
41663
+ }
41664
+ __name(projectSummary, "projectSummary");
41665
+ function projectInsightProgress(progress) {
41666
+ if (progress.error) {
41667
+ return `\u2715 ${progress.stage}
41668
+ ${progress.error}`;
41669
+ }
41670
+ if (progress.isComplete) return `\u2713 ${progress.stage}`;
41671
+ const filled = Math.round(progress.progress / 100 * 30);
41672
+ const bar = "\u2588".repeat(filled) + "\u2591".repeat(Math.max(0, 30 - filled));
41673
+ return `${bar} ${progress.stage}${progress.detail ? ` (${progress.detail})` : ""}`;
41674
+ }
41675
+ __name(projectInsightProgress, "projectInsightProgress");
41676
+ function projectContextUsage(item) {
41677
+ const modelName = String(item["modelName"] ?? "");
41678
+ const totalTokens = Number(item["totalTokens"] ?? 0);
41679
+ const windowSize = Number(item["contextWindowSize"] ?? 0);
41680
+ const breakdown = item["breakdown"] ?? {};
41681
+ const isEstimated = Boolean(item["isEstimated"]);
41682
+ const showDetails = Boolean(item["showDetails"]);
41683
+ const lines = ["Context Usage", ""];
41684
+ if (totalTokens <= 0) {
41685
+ lines.push("No API response yet. Send a message to see actual usage.");
41686
+ lines.push("Estimated pre-conversation overhead");
41687
+ }
41688
+ lines.push(
41689
+ `Model: ${modelName} Context window: ${fmtTokensShort(windowSize)} tokens`
41690
+ );
41691
+ if (totalTokens > 0) {
41692
+ if (isEstimated) {
41693
+ lines.push("Token usage is estimated until provider usage is received.");
41694
+ }
41695
+ const free = Number(breakdown["freeSpace"] ?? 0);
41696
+ const buffer = Number(breakdown["autocompactBuffer"] ?? 0);
41697
+ lines.push("");
41698
+ lines.push(
41699
+ `\u2588 Used ${fmtTokensShort(totalTokens)} tokens (${pct(totalTokens, windowSize)}%)`
41700
+ );
41701
+ lines.push(
41702
+ `\u2591 Free ${fmtTokensShort(free)} tokens (${pct(free, windowSize)}%)`
41703
+ );
41704
+ lines.push(
41705
+ `\u2592 Autocompact buffer ${fmtTokensShort(buffer)} tokens (${pct(buffer, windowSize)}%)`
41706
+ );
41707
+ }
41708
+ lines.push("");
41709
+ lines.push("Usage by category");
41710
+ const categories = [
41711
+ ["System prompt", "systemPrompt"],
41712
+ ["Built-in tools", "builtinTools"],
41713
+ ["MCP tools", "mcpTools"],
41714
+ ["Memory files", "memoryFiles"],
41715
+ ["Skills", "skills"]
41716
+ ];
41717
+ for (const [label, key] of categories) {
41718
+ const value = Number(breakdown[key] ?? 0);
41719
+ if (key === "mcpTools" && value <= 0) continue;
41720
+ lines.push(
41721
+ `\u2588 ${label} ${fmtTokensShort(value)} tokens (${pct(value, windowSize)}%)`
41722
+ );
41723
+ }
41724
+ if (totalTokens > 0) {
41725
+ const messages = Number(breakdown["messages"] ?? 0);
41726
+ lines.push(
41727
+ `\u2588 Messages ${fmtTokensShort(messages)} tokens (${pct(messages, windowSize)}%)`
41728
+ );
41729
+ }
41730
+ const thresholds = breakdown["thresholds"];
41731
+ const currentTier = breakdown["currentTier"];
41732
+ if (thresholds && currentTier) {
41733
+ lines.push("");
41734
+ lines.push("Compaction thresholds");
41735
+ const tierRows = [
41736
+ ["Effective window", thresholds.effectiveWindow, ""],
41737
+ ["Warn threshold", thresholds.warn, "warn"],
41738
+ ["Auto threshold", thresholds.auto, "auto"],
41739
+ ["Hard threshold", thresholds.hard, "hard"]
41740
+ ];
41741
+ for (const [label, tokens, tier] of tierRows) {
41742
+ const marker = tier && currentTier === tier ? "\u25B6" : " ";
41743
+ lines.push(`${marker} ${label} ${fmtTokensShort(tokens)} tokens`);
41744
+ }
41745
+ lines.push(` Current tier ${currentTier}`);
41746
+ }
41747
+ if (showDetails) {
41748
+ const byTokens = /* @__PURE__ */ __name((a, b3) => b3.tokens - a.tokens, "byTokens");
41749
+ const detail = /* @__PURE__ */ __name((title, entries) => {
41750
+ if (entries.length === 0) return;
41751
+ lines.push("");
41752
+ lines.push(title);
41753
+ for (const entry of entries) {
41754
+ const name = entry.name.length > 30 ? `${entry.name.slice(0, 29)}\u2026` : entry.name;
41755
+ lines.push(
41756
+ ` \u2514 ${name.padEnd(30)} ${fmtTokensShort(entry.tokens)} tokens`
41757
+ );
41758
+ }
41759
+ }, "detail");
41760
+ detail(
41761
+ "Built-in tools",
41762
+ [
41763
+ ...item["builtinTools"] ?? []
41764
+ ].sort(byTokens)
41765
+ );
41766
+ detail(
41767
+ "MCP tools",
41768
+ [
41769
+ ...item["mcpTools"] ?? []
41770
+ ].sort(byTokens)
41771
+ );
41772
+ detail(
41773
+ "Memory files",
41774
+ // The producer emits ContextMemoryDetail ({ path, tokens }); map to
41775
+ // the name field detail() renders.
41776
+ [
41777
+ ...item["memoryFiles"] ?? []
41778
+ ].map((file) => ({ name: file.path, tokens: file.tokens })).sort(byTokens)
41779
+ );
41780
+ const skills = [
41781
+ ...item["skills"] ?? []
41782
+ ];
41783
+ skills.sort((a, b3) => {
41784
+ if (a.loaded !== b3.loaded) return a.loaded ? -1 : 1;
41785
+ const aTotal = a.tokens + (a.bodyTokens ?? 0);
41786
+ const bTotal = b3.tokens + (b3.bodyTokens ?? 0);
41787
+ return bTotal - aTotal;
41788
+ });
41789
+ if (skills.length > 0) {
41790
+ lines.push("");
41791
+ lines.push("Skills");
41792
+ for (const skill of skills) {
41793
+ const name = skill.name.length > 30 ? `${skill.name.slice(0, 29)}\u2026` : skill.name;
41794
+ const suffix2 = skill.loaded ? ` (+${fmtTokensShort(skill.bodyTokens ?? 0)} body)` : "";
41795
+ lines.push(
41796
+ ` ${skill.loaded ? "*" : " "} ${name.padEnd(28)} ${fmtTokensShort(skill.tokens)} tokens${suffix2}`
41797
+ );
41798
+ }
41799
+ }
41800
+ } else {
41801
+ lines.push("");
41802
+ lines.push("Run /context detail for per-item breakdown.");
41803
+ }
41804
+ return lines.join("\n");
41805
+ }
41806
+ __name(projectContextUsage, "projectContextUsage");
41807
+ function projectDoctor(checks, summary) {
41808
+ const lines = ["Doctor Report", ""];
41809
+ const categories = [];
41810
+ for (const check of checks) {
41811
+ if (!categories.includes(check.category)) categories.push(check.category);
41812
+ }
41813
+ const icon = /* @__PURE__ */ __name((status) => status === "pass" ? "\u2713" : status === "warn" ? "\u26A0" : "\u2717", "icon");
41814
+ for (const category of categories) {
41815
+ lines.push(category);
41816
+ for (const check of checks.filter((c2) => c2.category === category)) {
41817
+ lines.push(` ${icon(check.status)} ${check.name}: ${check.message}`);
41818
+ if (check.detail) lines.push(` -> ${check.detail}`);
41819
+ }
41820
+ lines.push("");
41821
+ }
41822
+ lines.push(
41823
+ `-- ${summary.pass} passed, ${summary.warn} warnings, ${summary.fail} failures`
41824
+ );
41825
+ return lines.join("\n");
41826
+ }
41827
+ __name(projectDoctor, "projectDoctor");
41828
+ function projectMcpStatus(item) {
41829
+ const servers = item["servers"] ?? {};
41830
+ const tools = item["tools"] ?? [];
41831
+ const prompts = item["prompts"] ?? [];
41832
+ const authStatus = item["authStatus"] ?? {};
41833
+ const blocked = item["blockedServers"] ?? [];
41834
+ const showDescriptions = Boolean(item["showDescriptions"]);
41835
+ const showSchema = Boolean(item["showSchema"]);
41836
+ const showTips = Boolean(item["showTips"]);
41837
+ const discoveryInProgress = Boolean(item["discoveryInProgress"]);
41838
+ const connecting = item["connectingServers"] ?? [];
41839
+ if (Object.keys(servers).length === 0 && blocked.length === 0) {
41840
+ return "No MCP servers configured.";
41841
+ }
41842
+ const lines = [];
41843
+ if (discoveryInProgress) {
41844
+ lines.push(
41845
+ `\u25CC MCP servers are starting up (${connecting.length} initializing)...`
41846
+ );
41847
+ lines.push(
41848
+ "Note: First startup may take longer. Tool availability will update automatically."
41849
+ );
41850
+ lines.push("");
41851
+ }
41852
+ lines.push("Configured MCP servers:");
41853
+ lines.push("");
41854
+ const authSuffix = /* @__PURE__ */ __name((name) => {
41855
+ switch (authStatus[name]) {
41856
+ case "authenticated":
41857
+ return " (OAuth)";
41858
+ case "expired":
41859
+ return " (OAuth expired)";
41860
+ case "unauthenticated":
41861
+ return " (OAuth not authenticated)";
41862
+ default:
41863
+ return "";
41864
+ }
41865
+ }, "authSuffix");
41866
+ for (const [name, serverConfig] of Object.entries(servers)) {
41867
+ const serverTools = tools.filter((tool) => tool.serverName === name);
41868
+ const serverPrompts = prompts.filter((p2) => p2.serverName === name);
41869
+ const from = serverConfig.extensionName ? ` (from ${serverConfig.extensionName})` : "";
41870
+ let status = getMCPServerStatus(name);
41871
+ if (status === "disconnected" /* DISCONNECTED */ && // ink upgrades on cached tools OR cached prompts (hasCachedItems):
41872
+ // saved transcripts replay these, so reachability must not flip them
41873
+ // to Disconnected.
41874
+ (serverTools.length > 0 || serverPrompts.length > 0)) {
41875
+ status = "connected" /* CONNECTED */;
41876
+ }
41877
+ if (status === "connecting" /* CONNECTING */) {
41878
+ lines.push(
41879
+ `\u25D0 ${name}${from} - Starting... (first startup may take longer)${authSuffix(name)}`
41880
+ );
41881
+ lines.push(" (tools and prompts will appear when ready)");
41882
+ } else if (status === "connected" /* CONNECTED */) {
41883
+ const parts = [];
41884
+ if (serverTools.length > 0) {
41885
+ parts.push(
41886
+ `${serverTools.length} ${serverTools.length === 1 ? "tool" : "tools"}`
41887
+ );
41888
+ }
41889
+ if (serverPrompts.length > 0) {
41890
+ parts.push(
41891
+ `${serverPrompts.length} ${serverPrompts.length === 1 ? "prompt" : "prompts"}`
41892
+ );
41893
+ }
41894
+ lines.push(
41895
+ `\u25CF ${name}${from} - Ready${parts.length > 0 ? ` (${parts.join(", ")})` : ""}${authSuffix(name)}`
41896
+ );
41897
+ } else {
41898
+ lines.push(`\u25CF ${name}${from} - Disconnected${authSuffix(name)}`);
41899
+ if (serverTools.length > 0) {
41900
+ lines.push(`(${serverTools.length} tools cached)`);
41901
+ }
41902
+ }
41903
+ if (showDescriptions && serverConfig.description) {
41904
+ lines.push(serverConfig.description.trim());
41905
+ }
41906
+ if (serverTools.length > 0) {
41907
+ lines.push(" Tools:");
41908
+ for (const tool of serverTools) {
41909
+ lines.push(` - ${tool.name}`);
41910
+ if (showDescriptions && tool.description) {
41911
+ lines.push(` ${tool.description.trim()}`);
41912
+ }
41913
+ const schemaContent = showSchema && tool.schema && (tool.schema.parametersJsonSchema || tool.schema.parameters) ? JSON.stringify(
41914
+ tool.schema.parametersJsonSchema ?? tool.schema.parameters,
41915
+ null,
41916
+ 2
41917
+ ) : null;
41918
+ if (schemaContent) {
41919
+ lines.push(" Parameters:");
41920
+ for (const line of schemaContent.split("\n")) {
41921
+ lines.push(` ${line}`);
41922
+ }
41923
+ }
41924
+ }
41925
+ }
41926
+ if (serverPrompts.length > 0) {
41927
+ lines.push(" Prompts:");
41928
+ for (const prompt of serverPrompts) {
41929
+ lines.push(` - ${prompt.name}`);
41930
+ }
41931
+ }
41932
+ lines.push("");
41933
+ }
41934
+ for (const server of blocked) {
41935
+ const from = server.extensionName ? ` (from ${server.extensionName})` : "";
41936
+ lines.push(`\u25CF ${server.name}${from} - Blocked`);
41937
+ }
41938
+ if (showTips) {
41939
+ lines.push("");
41940
+ lines.push("\u2605 Tips:");
41941
+ lines.push(" - Use /mcp desc to show server and tool descriptions");
41942
+ lines.push(" - Use /mcp schema to show tool parameter schemas");
41943
+ lines.push(" - Use /mcp nodesc to hide descriptions");
41944
+ lines.push(" - Use /mcp to authenticate with OAuth-enabled servers");
41945
+ lines.push(" - Press Ctrl+T to toggle tool descriptions on/off");
41946
+ }
41947
+ return lines.join("\n").trimEnd();
41948
+ }
41949
+ __name(projectMcpStatus, "projectMcpStatus");
41950
+ function projectExtensionsList(config, extensionsUpdateState) {
41951
+ const extensions = config?.getExtensions?.() ?? [];
41952
+ if (extensions.length === 0) return "No extensions installed.";
41953
+ const lines = ["Installed extensions:", ""];
41954
+ for (const extension of extensions) {
41955
+ const displayName = getExtensionDisplayName(
41956
+ extension,
41957
+ // getCurrentLanguage is i18n-internal; the list itself is hardcoded
41958
+ // English in ink, so the default locale resolution is fine here.
41959
+ "en"
41960
+ );
41961
+ const stateText = extensionsUpdateState?.get(extension.name) ?? "unknown state";
41962
+ lines.push(
41963
+ ` ${displayName} (v${extension.version}) - ${extension.isActive ? "active" : "disabled"} (${stateText})`
41964
+ );
41965
+ if (extension.resolvedSettings && extension.resolvedSettings.length > 0) {
41966
+ lines.push(" settings:");
41967
+ for (const setting of extension.resolvedSettings) {
41968
+ lines.push(` - ${setting.name}: ${setting.value}`);
41969
+ }
41970
+ }
41971
+ }
41972
+ return lines.join("\n");
41973
+ }
41974
+ __name(projectExtensionsList, "projectExtensionsList");
41975
+ function projectMemorySaved(writtenCount, verb) {
41976
+ return `${verb ?? "Saved"} ${writtenCount} ${writtenCount === 1 ? "memory" : "memories"}`;
41977
+ }
41978
+ __name(projectMemorySaved, "projectMemorySaved");
41979
+ function projectCompression(compression) {
41980
+ if (compression.isPending) {
41981
+ return "Compressing chat history";
41982
+ }
41983
+ const formatTokens = /* @__PURE__ */ __name((count, isEstimated) => isEstimated ? `~${count}` : String(count), "formatTokens");
41984
+ const original = compression.originalTokenCount ?? 0;
41985
+ const next = compression.newTokenCount ?? 0;
41986
+ switch (compression.compressionStatus) {
41987
+ case 1 /* COMPRESSED */:
41988
+ return `Chat history compressed from ${formatTokens(
41989
+ original,
41990
+ compression.originalTokenCountIsEstimated
41991
+ )} to ${formatTokens(
41992
+ next,
41993
+ compression.newTokenCountIsEstimated
41994
+ )} tokens.`;
41995
+ case 2 /* COMPRESSION_FAILED_INFLATED_TOKEN_COUNT */:
41996
+ return original < 5e4 ? "Compression was not beneficial for this history size." : "Chat history compression did not reduce size. This may indicate issues with the compression prompt.";
41997
+ case 3 /* COMPRESSION_FAILED_TOKEN_COUNT_ERROR */:
41998
+ return "Could not compress chat history due to a token counting error.";
41999
+ case 5 /* NOOP */:
42000
+ return "Nothing to compress.";
42001
+ default:
42002
+ return "";
42003
+ }
42004
+ }
42005
+ __name(projectCompression, "projectCompression");
42006
+ function renderStatsSections(duration, stats) {
42007
+ const lines = [];
42008
+ const metrics = stats.metrics;
42009
+ const computed = computeSessionStats(metrics);
42010
+ lines.push("Interaction Summary");
42011
+ lines.push(`Session ID: ${stats.sessionId}`);
42012
+ const tools = metrics.tools;
42013
+ lines.push(
42014
+ `Tool Calls: ${tools.totalCalls} ( \u2713 ${tools.totalSuccess} x ${tools.totalFail} )`
42015
+ );
42016
+ lines.push(`Success Rate: ${computed.successRate.toFixed(1)}%`);
42017
+ if (computed.totalDecisions > 0) {
42018
+ lines.push(
42019
+ `User Agreement: ${computed.agreementRate.toFixed(1)}% (${computed.totalDecisions} reviewed)`
42020
+ );
42021
+ }
42022
+ if (computed.totalLinesAdded > 0 || computed.totalLinesRemoved > 0) {
42023
+ lines.push(
42024
+ `Code Changes: +${computed.totalLinesAdded} -${computed.totalLinesRemoved}`
42025
+ );
42026
+ }
42027
+ lines.push("");
42028
+ lines.push("Performance");
42029
+ lines.push(`Wall Time: ${duration}`);
42030
+ lines.push(`Agent Active: ${formatDuration(computed.agentActiveTime)}`);
42031
+ lines.push(
42032
+ `\xBB API Time: ${formatDuration(computed.totalApiTime)} (${computed.apiTimePercent.toFixed(1)}%)`
42033
+ );
42034
+ lines.push(
42035
+ `\xBB Tool Time: ${formatDuration(computed.totalToolTime)} (${computed.toolTimePercent.toFixed(1)}%)`
42036
+ );
42037
+ const entries = flattenActiveModels(metrics);
42038
+ if (entries.length > 0) {
42039
+ lines.push("");
42040
+ lines.push("Model Usage");
42041
+ for (const entry of entries) {
42042
+ lines.push(
42043
+ `${entry.label}: ${entry.metrics.api.totalRequests} requests, ${entry.metrics.tokens.prompt.toLocaleString()} input tokens, ${entry.metrics.tokens.candidates.toLocaleString()} output tokens`
42044
+ );
42045
+ }
42046
+ if (computed.cacheEfficiency > 0) {
42047
+ lines.push("");
42048
+ lines.push(
42049
+ `Savings Highlight: ${computed.totalCachedTokens.toLocaleString()} (${computed.cacheEfficiency.toFixed(1)}%) of input tokens were served from the cache, reducing costs.`
42050
+ );
42051
+ lines.push("");
42052
+ lines.push("\xBB Tip: For a full token breakdown, run `/stats model`.");
42053
+ }
42054
+ }
42055
+ return lines;
42056
+ }
42057
+ __name(renderStatsSections, "renderStatsSections");
42058
+ function projectQuit(duration, stats, config) {
42059
+ const lines = ["Agent powering down. Goodbye!", ""];
42060
+ if (stats) {
42061
+ lines.push(...renderStatsSections(duration, stats));
42062
+ } else {
42063
+ lines.push(`Session duration: ${duration}`);
42064
+ }
42065
+ if (stats && stats.promptCount > 0 && config?.getChatRecordingService?.()) {
42066
+ lines.push("");
42067
+ lines.push(
42068
+ `To continue this session, run qwen --resume ${stats.sessionId}`
42069
+ );
42070
+ }
42071
+ return lines.join("\n");
42072
+ }
42073
+ __name(projectQuit, "projectQuit");
42074
+ function projectStats(duration, stats) {
42075
+ const lines = ["Session Stats", ""];
42076
+ if (stats) {
42077
+ lines.push(...renderStatsSections(duration, stats));
42078
+ } else {
42079
+ lines.push(`Session duration: ${duration}`);
42080
+ }
42081
+ return lines.join("\n");
42082
+ }
42083
+ __name(projectStats, "projectStats");
42084
+ function projectBtw(btw) {
42085
+ const lines = [`/btw ${btw.question}`, ""];
42086
+ if (btw.isPending) {
42087
+ lines.push("+ Answering...");
42088
+ } else {
42089
+ lines.push(btw.answer);
42090
+ }
42091
+ return lines.join("\n");
42092
+ }
42093
+ __name(projectBtw, "projectBtw");
42094
+ function projectSpecialItemText(item, ctx) {
42095
+ const record = item;
42096
+ switch (item.type) {
42097
+ case "about":
42098
+ return projectAbout(
42099
+ record["systemInfo"] ?? {}
42100
+ );
42101
+ case "tools_list":
42102
+ return projectToolsList(
42103
+ record["tools"] ?? [] ?? [],
42104
+ Boolean(record["showDescriptions"])
42105
+ );
42106
+ case "model_stats": {
42107
+ const metrics = ctx.stats?.metrics ?? uiTelemetryService.getMetrics();
42108
+ const modelPricing = ctx.settings?.merged?.modelPricing;
42109
+ return projectModelStats(metrics, modelPricing);
42110
+ }
42111
+ case "tool_stats":
42112
+ return projectToolStats(
42113
+ ctx.stats?.metrics ?? uiTelemetryService.getMetrics()
42114
+ );
42115
+ case "skill_stats":
42116
+ return projectSkillStats(
42117
+ ctx.stats?.metrics ?? uiTelemetryService.getMetrics()
42118
+ );
42119
+ case "summary":
42120
+ return projectSummary(
42121
+ record["summary"] ?? {}
42122
+ );
42123
+ case "insight_progress":
42124
+ return projectInsightProgress(
42125
+ record["progress"] ?? {}
42126
+ );
42127
+ case "context_usage":
42128
+ return projectContextUsage(record);
42129
+ case "doctor":
42130
+ return projectDoctor(
42131
+ record["checks"] ?? [],
42132
+ record["summary"] ?? { pass: 0, warn: 0, fail: 0 }
42133
+ );
42134
+ case "mcp_status":
42135
+ return projectMcpStatus(record);
42136
+ case "extensions_list":
42137
+ return projectExtensionsList(ctx.config, ctx.extensionsUpdateState);
42138
+ case "skills_list":
42139
+ return projectSkillsList(
42140
+ record["skills"] ?? []
42141
+ );
42142
+ case "memory_saved":
42143
+ return projectMemorySaved(
42144
+ Number(record["writtenCount"] ?? 0),
42145
+ record["verb"]
42146
+ );
42147
+ case "quit":
42148
+ return projectQuit(
42149
+ String(record["duration"] ?? ""),
42150
+ ctx.stats,
42151
+ ctx.config
42152
+ );
42153
+ case "compression":
42154
+ return projectCompression(
42155
+ record["compression"] ?? {}
42156
+ );
42157
+ case "stats":
42158
+ return projectStats(String(record["duration"] ?? ""), ctx.stats);
42159
+ case "btw": {
42160
+ const btw = record["btw"];
42161
+ return btw ? projectBtw(btw) : null;
42162
+ }
42163
+ case "info": {
42164
+ const text = typeof record["text"] === "string" ? record["text"] : null;
42165
+ const linkUrl = typeof record["linkUrl"] === "string" ? record["linkUrl"] : null;
42166
+ if (!text) return null;
42167
+ if (!linkUrl) return text;
42168
+ const linkText = typeof record["linkText"] === "string" && record["linkText"] ? `${record["linkText"]}: ` : "";
42169
+ return `${text}
42170
+ ${linkText}${linkUrl}`;
42171
+ }
42172
+ case "warning":
42173
+ case "success":
42174
+ return typeof record["text"] === "string" ? record["text"] : null;
42175
+ case "error": {
42176
+ const hint = typeof record["hint"] === "string" && record["hint"] ? `
42177
+ ${record["hint"]}` : "";
42178
+ return typeof record["text"] === "string" ? record["text"] + hint : null;
42179
+ }
42180
+ default:
42181
+ return null;
42182
+ }
42183
+ }
42184
+ __name(projectSpecialItemText, "projectSpecialItemText");
42185
+ function projectItemToStreamEvent(item, ctx) {
42186
+ const viaSpecialText = /* @__PURE__ */ __name(() => {
42187
+ const text = projectSpecialItemText(item, ctx);
42188
+ return text === null ? null : { type: "info", text };
42189
+ }, "viaSpecialText");
42190
+ switch (item.type) {
42191
+ case "user":
42192
+ return {
42193
+ type: "user",
42194
+ text: item.text,
42195
+ sentToModel: item.sentToModel ?? false,
42196
+ ...item.promptId ? { promptId: item.promptId } : {}
42197
+ };
42198
+ case "info":
42199
+ return viaSpecialText();
42200
+ case "warning":
42201
+ return { type: "warning", text: item.text };
42202
+ // No success row in the live model yet; ink's green SuccessMessage
42203
+ // renders as the info row. Reachable here only through /arena.
42204
+ case "success":
42205
+ return { type: "info", text: item.text };
42206
+ case "error":
42207
+ return {
42208
+ type: "error",
42209
+ text: item.text,
42210
+ ...item.hint ? { hint: item.hint } : {}
42211
+ };
42212
+ case "goal_state":
42213
+ return { type: "goal", snapshot: item.snapshot, cause: item.cause };
42214
+ case "goal_status":
42215
+ return {
42216
+ type: "goal-legacy",
42217
+ kind: item.kind,
42218
+ condition: item.condition,
42219
+ iterations: item.iterations,
42220
+ durationMs: item.durationMs,
42221
+ lastReason: item.lastReason
42222
+ };
42223
+ case "stop_hook_system_message":
42224
+ return { type: "stop-hook-message", message: item.message };
42225
+ case "stop_hook_loop":
42226
+ return {
42227
+ type: "info",
42228
+ text: formatStopHookLoopText(item.stopHookCount, item.reasons)
42229
+ };
42230
+ case "user_prompt_submit_blocked":
42231
+ return {
42232
+ type: "warning",
42233
+ text: formatUserPromptSubmitBlocked(item.reason, item.originalPrompt)
42234
+ };
42235
+ case "about":
42236
+ case "tools_list":
42237
+ case "model_stats":
42238
+ case "tool_stats":
42239
+ case "skill_stats":
42240
+ case "summary":
42241
+ case "insight_progress":
42242
+ case "context_usage":
42243
+ case "doctor":
42244
+ case "mcp_status":
42245
+ case "extensions_list":
42246
+ case "skills_list":
42247
+ case "memory_saved":
42248
+ case "quit":
42249
+ case "compression":
42250
+ case "stats":
42251
+ case "btw":
42252
+ return viaSpecialText();
42253
+ // Explicit no-ops, each a decision rather than an accident:
42254
+ // - `tool_group`: tool cards come from the live stream's own events; a
42255
+ // dispatcher-written group would duplicate them.
42256
+ // - `retry_countdown`, `vision_notice`, `gemini*`: the live stream folds
42257
+ // these from events already; a history copy would render the row twice.
42258
+ // - `help`: `/help` resolves to a dialog and the overlay renders from
42259
+ // help-content.ts; no command returns a HELP message, so nothing writes
42260
+ // this item in either renderer.
42261
+ // - the rest: ink renders these through dedicated components and this
42262
+ // renderer has no row shape for them yet. `/advisor`, `/arena` and
42263
+ // `/recap` are registered here and do write four of these kinds, so
42264
+ // their output stays invisible — a registered gap (U-34), not an
42265
+ // accident of the switch.
42266
+ case "tool_group":
42267
+ case "retry_countdown":
42268
+ case "vision_notice":
42269
+ case "gemini":
42270
+ case "gemini_content":
42271
+ case "gemini_thought":
42272
+ case "gemini_thought_content":
42273
+ case "help":
42274
+ case "notification":
42275
+ case "user_shell":
42276
+ case "advisor":
42277
+ case "arena_agent_complete":
42278
+ case "arena_session_complete":
42279
+ case "away_recap":
42280
+ case "tool_use_summary":
42281
+ case "diff_stats":
42282
+ return null;
42283
+ default: {
42284
+ const exhaustive = item;
42285
+ return exhaustive;
42286
+ }
42287
+ }
42288
+ }
42289
+ __name(projectItemToStreamEvent, "projectItemToStreamEvent");
42290
+
42291
+ // packages/cli/src/ui/opentui/session-switch.ts
42292
+ init_esbuild_shims();
42293
+ import { randomUUID } from "node:crypto";
42294
+
42295
+ // packages/cli/src/ui/opentui/resume-session.ts
42296
+ init_esbuild_shims();
42297
+
41395
42298
  // packages/cli/src/ui/opentui/transcript-adapter.ts
42299
+ init_esbuild_shims();
41396
42300
  function transcribeSession(jsonl, opts = {}) {
41397
42301
  const events = [];
41398
42302
  const prompts = [];
@@ -41836,6 +42740,13 @@ var OpenTuiAppHost = class {
41836
42740
  if (!(prev.length > 0 && prev[prev.length - 1].type === "user" && newItem.type === "user" && prev[prev.length - 1].text === newItem.text)) {
41837
42741
  const next = [...prev, newItem];
41838
42742
  this.history = newItem.type === "tool_group" && newItem.tools.some((tool) => isFindingsListDisplay(tool.resultDisplay)) ? coalesceFindingsHistoryItems(next) : next;
42743
+ const event = projectItemToStreamEvent(newItem, {
42744
+ config: this.config,
42745
+ stats: this.sessionStats,
42746
+ settings: this.settings,
42747
+ extensionsUpdateState: this.extensionsUpdateState
42748
+ });
42749
+ if (event) this.transcript.append(event);
41839
42750
  }
41840
42751
  this.notify();
41841
42752
  return id;
@@ -41851,6 +42762,7 @@ var OpenTuiAppHost = class {
41851
42762
  clearItems = /* @__PURE__ */ __name(() => {
41852
42763
  this.history = [];
41853
42764
  this.messageIdCounter = 0;
42765
+ this.transcript.clear();
41854
42766
  this.notify();
41855
42767
  }, "clearItems");
41856
42768
  loadHistory = /* @__PURE__ */ __name((newHistory) => {
@@ -42204,7 +43116,10 @@ function createOpenTuiCommandContext(host, services) {
42204
43116
  session: {
42205
43117
  stats: host.sessionStats,
42206
43118
  sessionShellAllowlist: host.sessionShellAllowlist,
42207
- startNewSession: host.startNewSession
43119
+ // Bound: the host's method reads `this.deps`, and `/clear` calls this
43120
+ // before `ui.clear()` — a bare reference threw and left the transcript
43121
+ // standing.
43122
+ startNewSession: host.startNewSession?.bind(host)
42208
43123
  }
42209
43124
  };
42210
43125
  }
@@ -42570,14 +43485,14 @@ var OpenTuiSlashDispatcher = class {
42570
43485
  );
42571
43486
  }
42572
43487
  /**
42573
- * Startup-window self-heal: the first dispatcher can attach a registry
42574
- * built while config.initialize() was still in flight — the second
42575
- * initialize() call throws "already initialized", the catch proceeds, and
42576
- * the skill loaders run before the skill manager exists, so builtin
42577
- * commands resolve but every skill (e.g. /qc-helper) reports "Unknown
42578
- * command" until the config-ready dispatcher replaces this one. One
42579
- * bounded retry per dispatcher lifetime: wait for the skill manager, then
42580
- * reload the registry so the re-parse sees the complete list.
43488
+ * Startup-window self-heal: the dispatcher can be attached with a registry
43489
+ * snapshot taken before config.initialize() finished — the skill manager
43490
+ * does not exist yet, so builtin commands resolve but every skill (e.g.
43491
+ * /qc-helper) reports "Unknown command". A concurrent initialize() call
43492
+ * now joins the in-flight run instead of throwing, so only a failed first
43493
+ * flight still lands the loader in its partial-commands catch. One bounded
43494
+ * retry per dispatcher lifetime: wait for the skill manager, then reload
43495
+ * the registry so the re-parse sees the complete list.
42581
43496
  */
42582
43497
  async ensureCommandsLoaded() {
42583
43498
  if (this.startupRetryUsed || !this.services.config) {
@@ -48098,6 +49013,16 @@ function isPerfectSlashMatch(parsed) {
48098
49013
  return false;
48099
49014
  }
48100
49015
  __name(isPerfectSlashMatch, "isPerfectSlashMatch");
49016
+ function isPerfectMatchForTarget(target, slashCommands) {
49017
+ if (target.mode !== "SLASH" /* SLASH */) return false;
49018
+ return isPerfectSlashMatch(
49019
+ parseSlashCommandQuery(
49020
+ target.query,
49021
+ slashCommandPool(target, slashCommands)
49022
+ )
49023
+ );
49024
+ }
49025
+ __name(isPerfectMatchForTarget, "isPerfectMatchForTarget");
48101
49026
  function subcommandSuggestions(parsed, recentCommands) {
48102
49027
  const level = parsed.currentLevel ?? [];
48103
49028
  const visible = level.filter((cmd) => cmd.description && !cmd.hidden);
@@ -50477,29 +51402,61 @@ function OpenTuiEffortDialog(props) {
50477
51402
  }
50478
51403
  __name(OpenTuiEffortDialog, "OpenTuiEffortDialog");
50479
51404
  var DEFAULT_STYLE_DESC = "The standard prompt, with no extra style";
51405
+ function containsStyle(styles, name) {
51406
+ const wanted = name.toLowerCase();
51407
+ return styles.some((style) => style.name.toLowerCase() === wanted);
51408
+ }
51409
+ __name(containsStyle, "containsStyle");
50480
51410
  function OpenTuiOutputStyleDialog(props) {
50481
51411
  const { config, settings, onClose, notify } = props;
50482
- const items = [
51412
+ const [styles, setStyles] = (0, import_react41.useState)();
51413
+ const onCloseRef = (0, import_react41.useRef)(onClose);
51414
+ onCloseRef.current = onClose;
51415
+ const notifyRef = (0, import_react41.useRef)(notify);
51416
+ notifyRef.current = notify;
51417
+ (0, import_react41.useEffect)(() => {
51418
+ let cancelled = false;
51419
+ void loadSessionOutputStyles(config).then(
51420
+ (loaded) => {
51421
+ if (!cancelled) setStyles(loaded);
51422
+ },
51423
+ (error) => {
51424
+ if (!cancelled) {
51425
+ notifyRef.current(
51426
+ `Failed to load output styles: ${error instanceof Error ? error.message : String(error)}`
51427
+ );
51428
+ onCloseRef.current();
51429
+ }
51430
+ }
51431
+ );
51432
+ return () => {
51433
+ cancelled = true;
51434
+ };
51435
+ }, [config]);
51436
+ const currentStyle = config.getOutputStyle();
51437
+ const current = currentStyle?.name;
51438
+ const catalog = styles && currentStyle && !containsStyle(styles, currentStyle.name) ? [...styles, currentStyle] : styles;
51439
+ const items = catalog ? [
50483
51440
  {
50484
51441
  key: "default",
50485
51442
  label: "default",
50486
51443
  desc: DEFAULT_STYLE_DESC,
50487
51444
  style: void 0
50488
51445
  },
50489
- ...BUILT_IN_OUTPUT_STYLES.map((style) => ({
51446
+ ...catalog.map((style) => ({
50490
51447
  key: style.name,
50491
51448
  label: style.name,
50492
- desc: style.description,
51449
+ desc: style.source === "built-in" ? style.description : `${style.description} (${style.source})`,
50493
51450
  style
50494
51451
  }))
50495
- ];
50496
- const current = config.getOutputStyle()?.name;
50497
- const [sel, setSel] = (0, import_react41.useState)(
50498
- Math.max(
50499
- 0,
50500
- items.findIndex((item) => item.key === current)
50501
- )
50502
- );
51452
+ ] : [];
51453
+ const [sel, setSel] = (0, import_react41.useState)(0);
51454
+ (0, import_react41.useEffect)(() => {
51455
+ if (!styles) return;
51456
+ const wanted = current?.toLowerCase();
51457
+ const index = items.findIndex((item) => item.key.toLowerCase() === wanted);
51458
+ setSel(index >= 0 ? index : 0);
51459
+ }, [styles, current]);
50503
51460
  useEsc3(onClose);
50504
51461
  const pick = /* @__PURE__ */ __name(() => {
50505
51462
  const item = items[sel];
@@ -50510,7 +51467,7 @@ function OpenTuiOutputStyleDialog(props) {
50510
51467
  (error) => notify(error instanceof Error ? error.message : String(error))
50511
51468
  );
50512
51469
  }, "pick");
50513
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Shell3, { title: "Output Style", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
51470
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Shell3, { title: "Output Style", children: styles ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
50514
51471
  RadioList2,
50515
51472
  {
50516
51473
  items,
@@ -50518,7 +51475,7 @@ function OpenTuiOutputStyleDialog(props) {
50518
51475
  onMove: (d3) => setSel((s) => Math.min(items.length - 1, Math.max(0, s + d3))),
50519
51476
  onPick: pick
50520
51477
  }
50521
- ) });
51478
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("text", { fg: C2.dim, children: "Loading output styles\u2026" }) });
50522
51479
  }
50523
51480
  __name(OpenTuiOutputStyleDialog, "OpenTuiOutputStyleDialog");
50524
51481
 
@@ -51124,7 +52081,7 @@ function OpenTuiInputPrompt(props) {
51124
52081
  const fileSearchReadyRef = (0, import_react45.useRef)(null);
51125
52082
  const atSearchSeqRef = (0, import_react45.useRef)(0);
51126
52083
  const commandsRef = (0, import_react45.useRef)([]);
51127
- const slashStateRef = (0, import_react45.useRef)(null);
52084
+ const slashRangeRef = (0, import_react45.useRef)(null);
51128
52085
  const slashSearchSeqRef = (0, import_react45.useRef)(0);
51129
52086
  const suggestionNavigatedRef = (0, import_react45.useRef)(false);
51130
52087
  const pendingPastesRef = (0, import_react45.useRef)(/* @__PURE__ */ new Map());
@@ -51170,13 +52127,13 @@ function OpenTuiInputPrompt(props) {
51170
52127
  },
51171
52128
  []
51172
52129
  );
51173
- const refreshCompletion = (0, import_react45.useCallback)(() => {
52130
+ const currentCompletionTarget = (0, import_react45.useCallback)(() => {
51174
52131
  const el = editorRef.current;
51175
- if (!el) return;
52132
+ if (!el) return null;
51176
52133
  const text = el.plainText;
51177
52134
  const cursor = el.logicalCursor;
51178
52135
  const lines = text.split("\n");
51179
- const target = detectCompletionTarget(
52136
+ return detectCompletionTarget(
51180
52137
  lines,
51181
52138
  cursor.row,
51182
52139
  displayColToCodePointIndex(lines[cursor.row] ?? "", cursor.col),
@@ -51184,12 +52141,18 @@ function OpenTuiInputPrompt(props) {
51184
52141
  displayOffsetToCodePointIndex(text, cursor.offset),
51185
52142
  commandsRef.current
51186
52143
  );
52144
+ }, []);
52145
+ const refreshCompletion = (0, import_react45.useCallback)(() => {
52146
+ const el = editorRef.current;
52147
+ if (!el) return;
52148
+ const text = el.plainText;
52149
+ const target = currentCompletionTarget();
51187
52150
  const restored = historyRestoredTextRef.current;
51188
52151
  const suppressedByHistory = restored !== null && text === restored;
51189
52152
  const dismissed = dismissedUntilChangeRef.current !== null && dismissedUntilChangeRef.current === text;
51190
52153
  if (!target || suppressedByHistory || dismissed) {
51191
52154
  completionModeRef.current = "IDLE" /* IDLE */;
51192
- slashStateRef.current = null;
52155
+ slashRangeRef.current = null;
51193
52156
  suggestionNavigatedRef.current = false;
51194
52157
  setSuggestions([]);
51195
52158
  setActiveIndex(0);
@@ -51201,10 +52164,7 @@ function OpenTuiInputPrompt(props) {
51201
52164
  if (target.mode === "SLASH" /* SLASH */) {
51202
52165
  const pool = slashCommandPool(target, commandsRef.current);
51203
52166
  const parsed = parseSlashCommandQuery(target.query, pool);
51204
- slashStateRef.current = {
51205
- range: slashCompletionPositions(target.query, parsed),
51206
- perfect: isPerfectSlashMatch(parsed)
51207
- };
52167
+ slashRangeRef.current = slashCompletionPositions(target.query, parsed);
51208
52168
  const leaf = parsed.leafCommand;
51209
52169
  const complete = leaf?.completion;
51210
52170
  if (parsed.isArgumentCompletion && leaf && complete) {
@@ -51256,7 +52216,7 @@ function OpenTuiInputPrompt(props) {
51256
52216
  if (atSearchSeqRef.current === seq) setLoadingSuggestions(false);
51257
52217
  }
51258
52218
  });
51259
- }, [ensureFileSearch, config]);
52219
+ }, [ensureFileSearch, config, currentCompletionTarget]);
51260
52220
  (0, import_react45.useEffect)(() => {
51261
52221
  const el = editorRef.current;
51262
52222
  if (!el || textVersion === 0) return;
@@ -51287,25 +52247,17 @@ function OpenTuiInputPrompt(props) {
51287
52247
  const el = editorRef.current;
51288
52248
  const suggestion = suggestions[index];
51289
52249
  if (!el || !suggestion) return;
51290
- const text = el.plainText;
51291
- const cursor = el.logicalCursor;
51292
- const lines = text.split("\n");
51293
- const target = detectCompletionTarget(
51294
- lines,
51295
- cursor.row,
51296
- displayColToCodePointIndex(lines[cursor.row] ?? "", cursor.col),
51297
- text,
51298
- displayOffsetToCodePointIndex(text, cursor.offset),
51299
- commandsRef.current
51300
- );
52250
+ const target = currentCompletionTarget();
51301
52251
  if (!target) return;
52252
+ const cursor = el.logicalCursor;
52253
+ const lines = el.plainText.split("\n");
51302
52254
  suggestionNavigatedRef.current = false;
51303
52255
  const applied = applyCompletion(
51304
52256
  lines[cursor.row] ?? "",
51305
52257
  target,
51306
52258
  suggestion,
51307
52259
  viaEnter,
51308
- target.mode === "SLASH" /* SLASH */ ? slashStateRef.current?.range ?? void 0 : void 0
52260
+ target.mode === "SLASH" /* SLASH */ ? slashRangeRef.current ?? void 0 : void 0
51309
52261
  );
51310
52262
  if (applied.submitNow) {
51311
52263
  let finalText = applied.submitNow;
@@ -51335,7 +52287,13 @@ function OpenTuiInputPrompt(props) {
51335
52287
  }, "apply");
51336
52288
  apply();
51337
52289
  },
51338
- [suggestions, applyTextToEditor, onSubmit, attachments]
52290
+ [
52291
+ suggestions,
52292
+ applyTextToEditor,
52293
+ onSubmit,
52294
+ attachments,
52295
+ currentCompletionTarget
52296
+ ]
51339
52297
  );
51340
52298
  const handleClipboardImage = (0, import_react45.useCallback)(async () => {
51341
52299
  try {
@@ -51445,7 +52403,8 @@ function OpenTuiInputPrompt(props) {
51445
52403
  return;
51446
52404
  }
51447
52405
  const showing2 = suggestions.length > 0;
51448
- const isPerfectMatch = completionModeRef.current === "SLASH" /* SLASH */ && (slashStateRef.current?.perfect ?? false);
52406
+ const liveTarget = currentCompletionTarget();
52407
+ const isPerfectMatch = liveTarget !== null && isPerfectMatchForTarget(liveTarget, commandsRef.current);
51449
52408
  if (showing2 && (!isPerfectMatch || suggestionNavigatedRef.current)) {
51450
52409
  key.preventDefault();
51451
52410
  acceptSuggestion(activeIndex, true);
@@ -52527,6 +53486,7 @@ function OpenTuiApp(props) {
52527
53486
  onSubmitPrompt,
52528
53487
  onQuit,
52529
53488
  onTranscriptReset,
53489
+ onTranscriptEvent,
52530
53490
  onStartNewSession,
52531
53491
  onToggleVim,
52532
53492
  updateNotice,
@@ -52589,9 +53549,13 @@ function OpenTuiApp(props) {
52589
53549
  const activeToolCall = waitingToolCalls?.[0] ?? null;
52590
53550
  const transcript = (0, import_react49.useMemo)(
52591
53551
  () => ({
52592
- reset: /* @__PURE__ */ __name((events) => onTranscriptReset?.(events), "reset")
53552
+ reset: /* @__PURE__ */ __name((events) => onTranscriptReset?.(events), "reset"),
53553
+ // /clear semantics: a fresh transcript — the live turn's reset with an
53554
+ // empty batch (it also drops a stray steering queue).
53555
+ clear: /* @__PURE__ */ __name(() => onTranscriptReset?.([]), "clear"),
53556
+ append: /* @__PURE__ */ __name((event) => onTranscriptEvent?.(event), "append")
52593
53557
  }),
52594
- [onTranscriptReset]
53558
+ [onTranscriptReset, onTranscriptEvent]
52595
53559
  );
52596
53560
  const host = (0, import_react49.useMemo)(
52597
53561
  () => new OpenTuiAppHost({
@@ -52681,7 +53645,8 @@ function OpenTuiApp(props) {
52681
53645
  onSubmitPrompt(outcome.content, void 0, {
52682
53646
  modelOverride: outcome.modelOverride,
52683
53647
  refreshContextFilesOnWrite: outcome.refreshContextFilesOnWrite,
52684
- onComplete: outcome.onComplete
53648
+ onComplete: outcome.onComplete,
53649
+ invocationEchoed: true
52685
53650
  });
52686
53651
  else notify("The live prompt turn is not wired in this shell.");
52687
53652
  return;
@@ -52984,6 +53949,7 @@ function foldLiveEvent(prev, ev) {
52984
53949
  const last = items[items.length - 1];
52985
53950
  switch (ev.type) {
52986
53951
  case "user": {
53952
+ if (last?.kind === "user" && last.text === ev.text) return prev;
52987
53953
  if (last?.kind === "assistant" && last.streaming)
52988
53954
  items[items.length - 1] = { ...last, streaming: false };
52989
53955
  items.push({
@@ -54407,6 +55373,26 @@ async function expandAtMentions(config, query, signal) {
54407
55373
  return { parts: result.processedQuery, events, declined: false };
54408
55374
  }
54409
55375
  __name(expandAtMentions, "expandAtMentions");
55376
+ function hasUnsupportedImageFormat(parts) {
55377
+ if (typeof parts === "string") return false;
55378
+ for (const part of Array.isArray(parts) ? parts : [parts]) {
55379
+ if (typeof part === "string") continue;
55380
+ let mimeType;
55381
+ if ("inlineData" in part && part.inlineData?.mimeType?.startsWith("image/")) {
55382
+ mimeType = part.inlineData.mimeType;
55383
+ }
55384
+ if ("fileData" in part && part.fileData?.mimeType?.startsWith("image/")) {
55385
+ mimeType = part.fileData.mimeType;
55386
+ }
55387
+ if (mimeType && !isSupportedImageMimeType(mimeType)) return true;
55388
+ }
55389
+ return false;
55390
+ }
55391
+ __name(hasUnsupportedImageFormat, "hasUnsupportedImageFormat");
55392
+ function imageFormatWarningEvent() {
55393
+ return { type: "info", text: getUnsupportedImageFormatWarning() };
55394
+ }
55395
+ __name(imageFormatWarningEvent, "imageFormatWarningEvent");
54410
55396
  async function applyPromptVisionBridge(config, parts, signal, turnModel) {
54411
55397
  const events = [];
54412
55398
  if (!hasImageParts(parts)) return { parts, events };
@@ -54508,7 +55494,11 @@ async function resolveSteeredPromptParts(config, texts, signal, turnModel) {
54508
55494
  continue;
54509
55495
  }
54510
55496
  const messageParts = normalizeParts(bridged.parts);
55497
+ if (hasUnsupportedImageFormat(messageParts)) {
55498
+ events.push(imageFormatWarningEvent());
55499
+ }
54511
55500
  if (messageParts.length > 0) segments.push(messageParts);
55501
+ events.push({ type: "user", text: message, sentToModel: false });
54512
55502
  }
54513
55503
  const parts = [];
54514
55504
  for (const segment of segments) {
@@ -54518,12 +55508,25 @@ async function resolveSteeredPromptParts(config, texts, signal, turnModel) {
54518
55508
  return { parts, events, restore: [] };
54519
55509
  }
54520
55510
  __name(resolveSteeredPromptParts, "resolveSteeredPromptParts");
55511
+ var STARTUP_CHAT_WAIT_MS = 15e3;
55512
+ var STARTUP_CHAT_POLL_MS = 100;
54521
55513
  async function* livePromptEvents(config, prompt, signal, options) {
54522
55514
  try {
54523
55515
  await config.initialize();
54524
55516
  } catch {
54525
55517
  }
54526
55518
  const client = config.getGeminiClient();
55519
+ const chatDeadline = Date.now() + STARTUP_CHAT_WAIT_MS;
55520
+ const chatReady = /* @__PURE__ */ __name(() => client.isInitialized() && client.getChat().getGenerationConfig().tools !== void 0, "chatReady");
55521
+ while (!chatReady() && Date.now() < chatDeadline && !signal?.aborted) {
55522
+ await new Promise((resolve4) => setTimeout(resolve4, STARTUP_CHAT_POLL_MS));
55523
+ }
55524
+ signal?.throwIfAborted();
55525
+ if (client.isInitialized() && !chatReady()) {
55526
+ throw new Error(
55527
+ `Timed out after ${STARTUP_CHAT_WAIT_MS}ms waiting for the startup chat to become ready`
55528
+ );
55529
+ }
54527
55530
  const promptId = options?.promptId ?? nextLivePromptId(config);
54528
55531
  const abort = signal ?? new AbortController().signal;
54529
55532
  const turnModel = {
@@ -54564,6 +55567,9 @@ async function* livePromptEvents(config, prompt, signal, options) {
54564
55567
  for (const ev of bridged.events) yield ev;
54565
55568
  if (bridged.parts === null) return;
54566
55569
  nextPrompt = bridged.parts;
55570
+ if (hasUnsupportedImageFormat(nextPrompt)) {
55571
+ yield imageFormatWarningEvent();
55572
+ }
54567
55573
  let first = true;
54568
55574
  const waitingSeen = /* @__PURE__ */ new Set();
54569
55575
  for (; ; ) {
@@ -54910,7 +55916,9 @@ function useOpenTuiLiveTurn(options) {
54910
55916
  for (const notice of notices) apply({ type: "warning", text: notice });
54911
55917
  const prompt = parts.length > 0 ? [{ text }, ...parts] : content;
54912
55918
  const promptId = nextLivePromptId(config);
54913
- apply({ type: "user", text, promptId, sentToModel: true });
55919
+ if (!options2?.invocationEchoed) {
55920
+ apply({ type: "user", text, promptId, sentToModel: true });
55921
+ }
54914
55922
  void runTurn(prompt, promptId, options2);
54915
55923
  },
54916
55924
  [config, apply, pushQueue, runTurn]
@@ -55196,6 +56204,7 @@ ${error.stack ?? ""}`
55196
56204
  onSubmitPrompt: handleSubmitPrompt,
55197
56205
  onQuit: handleQuit,
55198
56206
  onTranscriptReset: resetTranscript,
56207
+ onTranscriptEvent: applyEvent,
55199
56208
  onStartNewSession: handleStartNewSession,
55200
56209
  updateNotice,
55201
56210
  availableTerminalHeight: height,