@qwen-code/qwen-code 0.20.2-headless-image-routing.1 → 0.21.0

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 (370) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +5 -0
  2. package/bundled/qc-helper/docs/features/sub-agents.md +23 -5
  3. package/bundled/qc-helper/docs/integration-github-action.md +9 -9
  4. package/bundled/review/SKILL.md +7 -3
  5. package/chunks/MaxSizedBox-5DPPWPGT.js +85 -0
  6. package/chunks/{StandaloneSessionPicker-PLQQB22E.js → StandaloneSessionPicker-BIRMPLRD.js} +66 -59
  7. package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
  8. package/chunks/{acpAgent-AIVK2EM5.js → acpAgent-6J2U72PQ.js} +705 -182
  9. package/chunks/agent-6ODUANDO.js +81 -0
  10. package/chunks/agent-headless-7BYQTMHW.js +75 -0
  11. package/chunks/{anthropicContentGenerator-HGWAHO24.js → anthropicContentGenerator-75BKLTSP.js} +117 -43
  12. package/chunks/{artifact-tool-56T5IMBP.js → artifact-tool-Y5T7GG7F.js} +3 -3
  13. package/chunks/{askUserQuestion-E25OBIC2.js → askUserQuestion-2H6747FR.js} +3 -3
  14. package/chunks/bridge-ZUB64FAE.js +90 -0
  15. package/chunks/{build-GHIZ4MSZ.js → build-RV63TIRH.js} +2 -3
  16. package/chunks/{ca-N6VVUFVB.js → ca-25EDXPFZ.js} +2 -0
  17. package/chunks/{channel-worker-group-QZV2SP5U.js → channel-worker-group-2ZD7TVAT.js} +8 -7
  18. package/chunks/{channel-worker-manager-3GMAU45H.js → channel-worker-manager-4OA4BCGB.js} +190 -30
  19. package/chunks/{channel-worker-supervisor-QCXSXCRY.js → channel-worker-supervisor-V7KCFJTS.js} +7 -6
  20. package/chunks/{chunk-TYQMGACW.js → chunk-22C7BQ6D.js} +508 -10967
  21. package/chunks/chunk-2JZBVYTU.js +452 -0
  22. package/chunks/{chunk-H2XVO6NE.js → chunk-2MIN6GRR.js} +1 -1
  23. package/chunks/{chunk-4DWTDZGS.js → chunk-2NH6DYI4.js} +12 -12
  24. package/chunks/chunk-2SCDWPXI.js +246 -0
  25. package/chunks/{chunk-QE4KFTBS.js → chunk-2X55UKQE.js} +3 -3
  26. package/chunks/{chunk-QBUDF33N.js → chunk-3QMGYBFN.js} +1 -1
  27. package/chunks/{chunk-3OAKYHRG.js → chunk-3RN6GBKS.js} +1 -1
  28. package/chunks/{chunk-QR6U5QPP.js → chunk-3SJ43L4W.js} +4 -0
  29. package/chunks/chunk-46UV252V.js +128 -0
  30. package/chunks/{chunk-GHRSKGHF.js → chunk-4WIZGAH3.js} +7 -7
  31. package/chunks/{chunk-CAS7CB3T.js → chunk-55DJUCI2.js} +87 -29
  32. package/chunks/{chunk-QNLNLENL.js → chunk-5I2IWRSH.js} +2 -2
  33. package/chunks/{chunk-H24SOJIQ.js → chunk-5NBDS5S6.js} +147 -7
  34. package/chunks/{chunk-E4IMU4Y5.js → chunk-63P4EL5V.js} +1 -1
  35. package/chunks/chunk-6FGBXPWM.js +293 -0
  36. package/chunks/{chunk-FFFM6NJV.js → chunk-6GMVPFB2.js} +155 -73
  37. package/chunks/{chunk-KWK7UE6L.js → chunk-6OUGMXDC.js} +6 -6
  38. package/chunks/{chunk-QRUIS3DN.js → chunk-6PEXNQTX.js} +22 -1
  39. package/chunks/{chunk-FZPTCQY7.js → chunk-7JURR4JT.js} +1 -1
  40. package/chunks/{chunk-Q6NAKZTA.js → chunk-7MVVZO4N.js} +4 -4
  41. package/chunks/{chunk-6ZBPS62S.js → chunk-7ZCNENPP.js} +1 -1
  42. package/chunks/{chunk-6X4GWOPW.js → chunk-A5L3JMUA.js} +1 -1
  43. package/chunks/{chunk-YO2XRXY6.js → chunk-ACY3A37B.js} +3 -3
  44. package/chunks/chunk-AMDSOFFV.js +10860 -0
  45. package/chunks/{chunk-RV4C2ZFG.js → chunk-BIQWWWJN.js} +1 -1
  46. package/chunks/{chunk-ZHERRXZJ.js → chunk-BJX6ZSUK.js} +4 -4
  47. package/chunks/chunk-BK2UNYWD.js +29 -0
  48. package/chunks/{chunk-FRPDJNK3.js → chunk-BKHWX6I2.js} +3 -3
  49. package/chunks/chunk-BPJSQIJX.js +100 -0
  50. package/chunks/{chunk-M7WBGLYP.js → chunk-BULDBTYC.js} +2 -0
  51. package/chunks/{chunk-ZDP2Y2AL.js → chunk-CIKQ7KKO.js} +4625 -8645
  52. package/chunks/{chunk-PEJWA3QQ.js → chunk-D3UEZIQH.js} +4 -2
  53. package/chunks/chunk-DHHOYAPR.js +1462 -0
  54. package/chunks/{chunk-LESHKUWF.js → chunk-DLWL3Z7A.js} +5 -3
  55. package/chunks/{chunk-XHATNRQA.js → chunk-DP3IHZGG.js} +0 -2
  56. package/chunks/chunk-E5TUC6CA.js +479 -0
  57. package/chunks/{chunk-JC26SJ5Y.js → chunk-EBJQ6AXW.js} +13 -12
  58. package/chunks/{chunk-RCWKCN2Z.js → chunk-EPDRMGT4.js} +164 -17
  59. package/chunks/{chunk-FUFCALSJ.js → chunk-ETSW4KLJ.js} +2 -2
  60. package/chunks/{chunk-KHOVYUHX.js → chunk-FNQ6T3CV.js} +20 -3
  61. package/chunks/{chunk-SP5WRGVG.js → chunk-FQK6JAFG.js} +72 -23
  62. package/chunks/{chunk-NWZY2SPY.js → chunk-FSITMZJH.js} +8 -8
  63. package/chunks/{chunk-6RLROE6G.js → chunk-GLWP3FDB.js} +80 -15
  64. package/chunks/{chunk-KPBVP6SL.js → chunk-GSN55ZRI.js} +5 -5
  65. package/chunks/{chunk-MLYGPZGU.js → chunk-H4SBPHSA.js} +3 -3
  66. package/chunks/chunk-H5FFA6TH.js +902 -0
  67. package/chunks/{chunk-TDKQP3M6.js → chunk-HIJQF5B5.js} +1 -1
  68. package/chunks/{chunk-5G3ZVADU.js → chunk-IJTOWOD7.js} +17 -6
  69. package/chunks/chunk-IKCX4CCL.js +469 -0
  70. package/chunks/{chunk-LPEONXNV.js → chunk-IKYJHJNF.js} +3 -3
  71. package/chunks/{chunk-DTZY2SH2.js → chunk-IO3IX5Q4.js} +1 -1
  72. package/chunks/{chunk-RS7MT2QG.js → chunk-IPUUTYMV.js} +2 -4
  73. package/chunks/{chunk-XU457J4V.js → chunk-IRH27ZC2.js} +2 -2
  74. package/chunks/{chunk-46DK772E.js → chunk-J24WCGIN.js} +4 -4
  75. package/chunks/{chunk-4LVZNIDO.js → chunk-J56UI34H.js} +4 -13
  76. package/chunks/{chunk-TJTKSVIV.js → chunk-JLU636DO.js} +5 -1
  77. package/chunks/{chunk-RKWX4CMO.js → chunk-JVPM2ULZ.js} +6 -6
  78. package/chunks/{chunk-ENPCQK44.js → chunk-JXJFVC6E.js} +37 -18
  79. package/chunks/{chunk-NABLFI57.js → chunk-JZA3JUDJ.js} +1 -1
  80. package/chunks/{chunk-CGLQAVZE.js → chunk-K36B6G2O.js} +5 -5
  81. package/chunks/{chunk-GPSKDNEE.js → chunk-K4XWPEWB.js} +4 -4
  82. package/chunks/{chunk-QOZOIPSF.js → chunk-KIM5GUMA.js} +650 -113
  83. package/chunks/{chunk-JZSM2IZ3.js → chunk-KMQ33DO4.js} +7 -5
  84. package/chunks/{chunk-E2UVIFI2.js → chunk-KRXPRVGL.js} +0 -1
  85. package/chunks/{chunk-WHGVTP7Q.js → chunk-L26JL52R.js} +3 -3
  86. package/chunks/{chunk-7Z6JQEL6.js → chunk-L5UHQJTJ.js} +1 -1
  87. package/chunks/{chunk-O2XSCRCS.js → chunk-LB6DUZ26.js} +259 -67
  88. package/chunks/chunk-LEH5C7FV.js +232 -0
  89. package/chunks/{chunk-RWV32G2M.js → chunk-LH2BYDQ5.js} +6 -4
  90. package/chunks/{chunk-QKTHJXCS.js → chunk-LK7CHLVP.js} +79 -2
  91. package/chunks/{chunk-VRRF3GW5.js → chunk-LKEJ26GS.js} +11 -11
  92. package/chunks/{chunk-SQFXI7VK.js → chunk-LQIW3YFY.js} +227 -41
  93. package/chunks/chunk-LS77BEZP.js +405 -0
  94. package/chunks/{chunk-BSHD62QJ.js → chunk-M4FMGVY4.js} +3 -3
  95. package/chunks/{chunk-57FIIFJN.js → chunk-M5JM7OSF.js} +1 -1
  96. package/chunks/{chunk-7362QS5B.js → chunk-MB4MZHMJ.js} +80 -37
  97. package/chunks/{chunk-4K56OJFJ.js → chunk-MUP3T3AD.js} +1 -1
  98. package/chunks/{chunk-3HFNGB2O.js → chunk-MVSUYZDT.js} +4 -4
  99. package/chunks/{chunk-T5IO6FZ4.js → chunk-MZAXJAUM.js} +1 -1
  100. package/chunks/{chunk-QKNXKTZX.js → chunk-NH6KE4JX.js} +3 -3
  101. package/chunks/chunk-NIBLUX3Y.js +934 -0
  102. package/chunks/{chunk-OQB4EXO4.js → chunk-NL7LTRLR.js} +1 -1
  103. package/chunks/{chunk-CS2FSS7W.js → chunk-OFDOK3VM.js} +5 -5
  104. package/chunks/{chunk-LIZRAKPB.js → chunk-OHNBB4XR.js} +1 -1
  105. package/chunks/{chunk-MDZTPSXO.js → chunk-OKY7HXPG.js} +2 -2
  106. package/chunks/{chunk-NHDKSOEY.js → chunk-P3QQPMQA.js} +5 -5
  107. package/chunks/{chunk-7THPNISK.js → chunk-PC6JANNU.js} +5 -5
  108. package/chunks/{chunk-OTQ6PSZC.js → chunk-PHOF65IG.js} +3498 -1030
  109. package/chunks/{chunk-OQ5SYCPE.js → chunk-PJIZUQVC.js} +2 -2
  110. package/chunks/{chunk-5DTTYNB7.js → chunk-PQNHRFJC.js} +16 -3
  111. package/chunks/{chunk-YM3SZTH4.js → chunk-PR75REBZ.js} +18 -1
  112. package/chunks/{chunk-RECUEJ7B.js → chunk-PSOO6YXD.js} +18 -15
  113. package/chunks/{chunk-X6N25LXS.js → chunk-PWTZEM3C.js} +2 -2
  114. package/chunks/{chunk-5NJTNQUW.js → chunk-PWVFN2LF.js} +1 -1
  115. package/chunks/{chunk-7AUH6A4T.js → chunk-Q4M4MDQ4.js} +2 -2
  116. package/chunks/{chunk-EZPB6S2I.js → chunk-QAF7NMK7.js} +1 -1
  117. package/chunks/{chunk-5GI55PF5.js → chunk-R5AFZNQW.js} +5 -5
  118. package/chunks/{chunk-T5B5NQZX.js → chunk-RF3EXIHJ.js} +47 -60
  119. package/chunks/{chunk-4K7VDKAD.js → chunk-RHLZR4E5.js} +1 -1
  120. package/chunks/{chunk-TJDW42MV.js → chunk-RIBKPMRP.js} +220 -141
  121. package/chunks/{chunk-RVLZCXEE.js → chunk-RWTEFFPU.js} +82 -3
  122. package/chunks/{chunk-L5QZGCRH.js → chunk-RZIX2G32.js} +1 -1
  123. package/chunks/{chunk-LLKWRXSS.js → chunk-SQCQ4KO2.js} +350 -418
  124. package/chunks/{chunk-THJNPLI4.js → chunk-TARRHLLG.js} +1 -0
  125. package/chunks/{chunk-XCXYRDHB.js → chunk-TEHGS6UP.js} +47 -18
  126. package/chunks/{chunk-PQIVAWXN.js → chunk-TGILQ3YH.js} +8 -8
  127. package/chunks/{chunk-Q2YKNMLS.js → chunk-TOFQCPDC.js} +43 -10
  128. package/chunks/{chunk-L3KUB6XM.js → chunk-TPRQ7RZH.js} +586 -242
  129. package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
  130. package/chunks/{chunk-HIP6TVWA.js → chunk-U7M2DMGW.js} +3 -3
  131. package/chunks/{chunk-ACW3VNUE.js → chunk-UDX5OBWR.js} +41 -9
  132. package/chunks/{chunk-LW2FUYBN.js → chunk-USTWD7QV.js} +6 -4
  133. package/chunks/{chunk-NPQDJGKU.js → chunk-UUUTRMI2.js} +1 -1
  134. package/chunks/chunk-UW5EOVUN.js +249 -0
  135. package/chunks/{chunk-6IL7KRLE.js → chunk-VAK25FTU.js} +1 -1
  136. package/chunks/{chunk-O4BHWVUD.js → chunk-VIA5XA4U.js} +5 -2
  137. package/chunks/{chunk-EBXZ2YGV.js → chunk-VRYUBFMC.js} +1 -1
  138. package/chunks/{chunk-TWVE5ZS5.js → chunk-VULLI6WQ.js} +172 -6
  139. package/chunks/{chunk-LNDD3IML.js → chunk-WCXCRJYB.js} +1 -1
  140. package/chunks/{chunk-2LI23QA6.js → chunk-X5XDDSSH.js} +1 -1
  141. package/chunks/{chunk-Q35QUZDQ.js → chunk-Y34KJKDC.js} +1 -1
  142. package/chunks/{chunk-7NR2AIK6.js → chunk-YBL3QUDD.js} +2 -2
  143. package/chunks/{chunk-H4AR2JQF.js → chunk-YH6G52F2.js} +3 -3
  144. package/chunks/{chunk-MBOJHHPI.js → chunk-YPE6A4GC.js} +2 -2
  145. package/chunks/{chunk-3EK5ZOUQ.js → chunk-YX324OPW.js} +1 -1
  146. package/chunks/{chunk-4PTLZ3NX.js → chunk-Z2BC6UJ5.js} +3 -3
  147. package/chunks/{chunk-QLJUC7TG.js → chunk-ZD6UTE4A.js} +1 -1
  148. package/chunks/{chunk-LX3COOXF.js → chunk-ZFDTEDCF.js} +6 -6
  149. package/chunks/chunk-ZJHVAS7M.js +289 -0
  150. package/chunks/{chunk-4OWXOUYF.js → chunk-ZNAUOR2I.js} +15 -12
  151. package/chunks/{chunk-T2L47JJK.js → chunk-ZOIFNCKL.js} +4 -4
  152. package/chunks/{computer-use-2VIV73WK.js → computer-use-SOQ4E3VX.js} +43 -35
  153. package/chunks/{config-utils-FYTBZLCJ.js → config-utils-7V7GGIW6.js} +3 -3
  154. package/chunks/contextCommand-JLHYA34Z.js +80 -0
  155. package/chunks/{create-sub-session-AZ77LBL3.js → create-sub-session-IWW2IZ2T.js} +3 -3
  156. package/chunks/{create-sub-session-XDHHC2P4.js → create-sub-session-QRJLW5BV.js} +43 -35
  157. package/chunks/{cron-create-KTWJM7QT.js → cron-create-YIID5XAW.js} +6 -6
  158. package/chunks/{cron-delete-2P3I5ULL.js → cron-delete-ZVHYCEP2.js} +5 -5
  159. package/chunks/{cron-list-PXDPGEDQ.js → cron-list-XEGS463Q.js} +5 -5
  160. package/chunks/{daemon-RAPSDJH7.js → daemon-YO6433NF.js} +350 -53
  161. package/chunks/daemon-status-provider-2233Q37D.js +89 -0
  162. package/chunks/{de-4IBXM7CN.js → de-HGRCYDEJ.js} +1 -0
  163. package/chunks/{dist-UIFWIFRO.js → dist-46NQKLTW.js} +2 -2
  164. package/chunks/{dist-XRYV6TJP.js → dist-AIKFMUKK.js} +50 -4
  165. package/chunks/{dist-XBJVSWS2.js → dist-BBLXMS3N.js} +14 -2
  166. package/chunks/{dist-OMW6WDEO.js → dist-F6IBUDR4.js} +40 -9
  167. package/chunks/{dist-PJLG2XYX.js → dist-WEAHOXDM.js} +1 -1
  168. package/chunks/{dist-OAV7LJGJ.js → dist-YFNEUWSE.js} +26 -2
  169. package/chunks/earlyInputCapture-A7NDU3PF.js +82 -0
  170. package/chunks/{edit-CS6SFEXC.js → edit-OBDSQURM.js} +43 -35
  171. package/chunks/{en-USMCCJAJ.js → en-MTWBNGDO.js} +15 -0
  172. package/chunks/{enter-worktree-LMAL75DY.js → enter-worktree-U6MRPQ2P.js} +43 -35
  173. package/chunks/{enterPlanMode-WVJB4DSS.js → enterPlanMode-BC5QUZZ2.js} +43 -35
  174. package/chunks/{environment-6YHC4JAJ.js → environment-W5UFC2CH.js} +46 -38
  175. package/chunks/errors-M7CLORXH.js +88 -0
  176. package/chunks/{exit-worktree-KPFD742L.js → exit-worktree-DGNYMECB.js} +43 -35
  177. package/chunks/{exitPlanMode-UEJS6CDY.js → exitPlanMode-GXTBWQAR.js} +43 -35
  178. package/chunks/{fast-path-G2N4NRCA.js → fast-path-JJZFJANL.js} +6 -6
  179. package/chunks/{fast-path-settings-DAOVFADC.js → fast-path-settings-WQJU2LAT.js} +2 -2
  180. package/chunks/{fr-WVHEBDDB.js → fr-45RLL55O.js} +1 -0
  181. package/chunks/{gemini-2MDVIOVT.js → gemini-QS36EBZV.js} +132 -102
  182. package/chunks/{geminiContentGenerator-ZXTDBMFR.js → geminiContentGenerator-AG4KB6CV.js} +14 -8
  183. package/chunks/{getMachineId-bsd-QFVLPUPT.js → getMachineId-bsd-V7W3GODC.js} +1 -1
  184. package/chunks/{getMachineId-darwin-DGMQQE2E.js → getMachineId-darwin-TDO75DQP.js} +1 -1
  185. package/chunks/{getMachineId-linux-R4Z6CSWC.js → getMachineId-linux-TF43WQT2.js} +1 -1
  186. package/chunks/{getMachineId-unsupported-Z3SBVBUV.js → getMachineId-unsupported-ZGUO3TXT.js} +1 -1
  187. package/chunks/{getMachineId-win-SCK5UFDT.js → getMachineId-win-ECFYZZFQ.js} +1 -1
  188. package/chunks/{glob-562XFLIZ.js → glob-V7R3PSK3.js} +43 -35
  189. package/chunks/{grep-MGEFBDQK.js → grep-QYPSK7OP.js} +43 -35
  190. package/chunks/handleAutoUpdate-6DBEZYPV.js +81 -0
  191. package/chunks/{i18n-R6HJENXA.js → i18n-VUJJZIMU.js} +44 -36
  192. package/chunks/image-gen-Z3VPGKRC.js +240 -0
  193. package/chunks/initializer-UWAK5U5O.js +86 -0
  194. package/chunks/installationInfo-6O2YAA52.js +80 -0
  195. package/chunks/{ja-KY4ROZTE.js → ja-B7DF7DFG.js} +1 -0
  196. package/chunks/{keychain-token-storage-6ACJDYIB.js → keychain-token-storage-MDTG3WRM.js} +3 -3
  197. package/chunks/{kittyProtocolDetector-HCNNKJTI.js → kittyProtocolDetector-MBRTDRBK.js} +5 -3
  198. package/chunks/list-GB4ESM3T.js +89 -0
  199. package/chunks/list-agents-5KJJHR6I.js +80 -0
  200. package/chunks/loadedSettingsAdapter-OT6JVQ7U.js +83 -0
  201. package/chunks/loggingContentGenerator-HS3S5H3Q.js +1077 -0
  202. package/chunks/{loop-wakeup-RNMRVA66.js → loop-wakeup-FXKNNYSY.js} +7 -7
  203. package/chunks/{ls-J2ZI5XYK.js → ls-NTK6VOQJ.js} +5 -5
  204. package/chunks/{lsp-UMS3NUB5.js → lsp-2JI24STP.js} +3 -3
  205. package/chunks/{managed-npm-update-4KNYSOYC.js → managed-npm-update-JYEMMXA3.js} +94 -38
  206. package/chunks/mcp-6DBDJPFU.js +83 -0
  207. package/chunks/{monitor-DMHKE4SW.js → monitor-R3ODH5U6.js} +45 -36
  208. package/chunks/node-UUDY34IG.js +305 -0
  209. package/chunks/nonInteractiveCli-MOYCYBBU.js +141 -0
  210. package/chunks/{notebook-edit-35SJGEOR.js → notebook-edit-BNOK452R.js} +43 -35
  211. package/chunks/{openaiContentGenerator-5LPAFXPF.js → openaiContentGenerator-WMCU3O2H.js} +27 -17
  212. package/chunks/pidfile-TFRZZZIO.js +86 -0
  213. package/chunks/{processUtils-GM2I55KF.js → processUtils-RT7UNCC2.js} +2 -2
  214. package/chunks/{pt-OK455PLH.js → pt-22Q3FP73.js} +1 -0
  215. package/chunks/{qwenContentGenerator-HKOYNP7H.js → qwenContentGenerator-HHCRK4SX.js} +56 -42
  216. package/chunks/{qwenOAuth2-NUUYC3V5.js → qwenOAuth2-OWLB5AKH.js} +14 -27
  217. package/chunks/read-file-APMO3PSX.js +31 -0
  218. package/chunks/{read-mcp-resource-F6HYMDUY.js → read-mcp-resource-4DKQWGHD.js} +3 -3
  219. package/chunks/{record-artifact-7GCFLDD7.js → record-artifact-RQKFYO5B.js} +3 -3
  220. package/chunks/resumeHistoryUtils-6KRYEAWZ.js +91 -0
  221. package/chunks/ripGrep-BEJDEDXW.js +73 -0
  222. package/chunks/{ru-7SPDGMGD.js → ru-FZCNZHDC.js} +1 -0
  223. package/chunks/{run-qwen-serve-5VH3F4NW.js → run-qwen-serve-FU6HEM4J.js} +271 -57
  224. package/chunks/{runtime-OH77YH7W.js → runtime-XXRRTNP6.js} +55 -45
  225. package/chunks/{scheduler-WJQSLCSV.js → scheduler-G2ZS2Z7E.js} +43 -35
  226. package/chunks/{sdk-exporters-grpc-ETLH47EP.js → sdk-exporters-grpc-AK3LGHNO.js} +3 -3
  227. package/chunks/{sdk-exporters-http-T3POX73F.js → sdk-exporters-http-FYBSUCPD.js} +6 -6
  228. package/chunks/{sdk-impl-NSLPDH6I.js → sdk-impl-GMVPB7NB.js} +6 -6
  229. package/chunks/{send-message-PYIJ2PZL.js → send-message-Q6OOR6BR.js} +46 -9
  230. package/chunks/serve-7BSTXJ4T.js +89 -0
  231. package/chunks/{server-E4N4AI6Z.js → server-4UMH7OIZ.js} +2362 -411
  232. package/chunks/{session-5YUWIOQE.js → session-K3O3Q2SV.js} +105 -87
  233. package/chunks/{settings-YY7ZSFO7.js → settings-CR2EWTBA.js} +53 -45
  234. package/chunks/shell-HH3PF3A2.js +83 -0
  235. package/chunks/{skill-PAIDX3EU.js → skill-I3SDA4MB.js} +17 -16
  236. package/chunks/spawnChannel-RWNDBXGA.js +82 -0
  237. package/chunks/{src-IZXLJI5M.js → src-GE4TTTML.js} +302 -184
  238. package/chunks/{standalone-update-X675JVBL.js → standalone-update-Q6WFRZZQ.js} +45 -37
  239. package/chunks/{startInteractiveUI-ND2IVBU3.js → startInteractiveUI-SLZGHRPH.js} +747 -310
  240. package/chunks/{syntheticOutput-H7RTI5KL.js → syntheticOutput-I3757IWH.js} +4 -4
  241. package/chunks/{task-create-7474AJJD.js → task-create-N7WQSGYA.js} +10 -10
  242. package/chunks/{task-list-633HGOIB.js → task-list-FOPULZEP.js} +7 -7
  243. package/chunks/{task-stop-MNUGHPIA.js → task-stop-H6RHXFVQ.js} +4 -4
  244. package/chunks/{task-update-66GQB5LI.js → task-update-M57TFZJT.js} +10 -10
  245. package/chunks/{team-create-2DEYNMMN.js → team-create-YJALH5D2.js} +46 -38
  246. package/chunks/{team-delete-BB3CG3QF.js → team-delete-QE2UXJL7.js} +7 -7
  247. package/chunks/{team-plan-approval-65AVAOCT.js → team-plan-approval-34QFYKGN.js} +43 -35
  248. package/chunks/theme-manager-SWRILQHI.js +77 -0
  249. package/chunks/{todoWrite-KRAUN54W.js → todoWrite-VQ7FKOHL.js} +5 -5
  250. package/chunks/{tool-search-ZQP3SMTV.js → tool-search-NF7GB6LE.js} +16 -16
  251. package/chunks/total-session-admission-DLHHHLD3.js +84 -0
  252. package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
  253. package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
  254. package/chunks/{trustedFolders-LURI52LP.js → trustedFolders-KHXHY6PY.js} +44 -36
  255. package/chunks/{update-relaunch-BPWFIDLM.js → update-relaunch-WBUZJC5O.js} +5 -5
  256. package/chunks/updateCheck-RKL6M5XN.js +92 -0
  257. package/chunks/useAutoAcceptIndicator-CFQ5BUJL.js +93 -0
  258. package/chunks/{validateNonInterActiveAuth-HWD6Y22I.js → validateNonInterActiveAuth-3R223G3R.js} +89 -80
  259. package/chunks/{version-OD4JAFG7.js → version-HS7YSFHV.js} +1 -1
  260. package/chunks/{web-fetch-RFBKNU24.js → web-fetch-NKCSG7ZE.js} +18 -16
  261. package/chunks/{web-search-AKTVS5YZ.js → web-search-S62WAP4S.js} +13 -27
  262. package/chunks/{workflow-VZVCOSZN.js → workflow-QAGU5RU4.js} +44 -36
  263. package/chunks/workspace-providers-status-QSVZUETE.js +86 -0
  264. package/chunks/{workspace-registration-store-Q5SFJSX4.js → workspace-registration-store-24JMHDGF.js} +2 -2
  265. package/chunks/workspace-registry-UT4RBNBM.js +88 -0
  266. package/chunks/workspace-service-JFWRUS4V.js +98 -0
  267. package/chunks/workspace-skills-status-ZBBKJOI2.js +85 -0
  268. package/chunks/write-file-VHIXW5M7.js +73 -0
  269. package/chunks/{zh-WY5DWYZD.js → zh-LUIGBD55.js} +15 -0
  270. package/chunks/{zh-TW-BM47YBFH.js → zh-TW-F5KG2IYD.js} +15 -0
  271. package/cli-entry.js +10 -1
  272. package/cli.js +13 -13
  273. package/locales/ca.js +2 -0
  274. package/locales/de.js +1 -0
  275. package/locales/en.js +25 -0
  276. package/locales/fr.js +1 -0
  277. package/locales/ja.js +1 -0
  278. package/locales/pt.js +1 -0
  279. package/locales/ru.js +1 -0
  280. package/locales/zh-TW.js +23 -0
  281. package/locales/zh.js +23 -0
  282. package/package.json +3 -3
  283. package/web-shell/assets/{arc-BWFm0SI0.js → arc-DcbWnB9T.js} +1 -1
  284. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CZ_yL-DQ.js → architectureDiagram-3BPJPVTR-kMMF5sud.js} +1 -1
  285. package/web-shell/assets/{blockDiagram-GPEHLZMM-B9F9mJvG.js → blockDiagram-GPEHLZMM-Htl9vTJS.js} +1 -1
  286. package/web-shell/assets/{c4Diagram-AAUBKEIU-BUdwJW5f.js → c4Diagram-AAUBKEIU-BnZnm0mQ.js} +1 -1
  287. package/web-shell/assets/channel-Cq7YKtfC.js +1 -0
  288. package/web-shell/assets/{chunk-2J33WTMH-w4cF-qlF.js → chunk-2J33WTMH-DziB7kDG.js} +1 -1
  289. package/web-shell/assets/{chunk-4BX2VUAB-BXwURxHJ.js → chunk-4BX2VUAB-CmkD8daw.js} +1 -1
  290. package/web-shell/assets/{chunk-55IACEB6-Gem3LalC.js → chunk-55IACEB6-CHAd9A_U.js} +1 -1
  291. package/web-shell/assets/{chunk-727SXJPM-A3ddVojI.js → chunk-727SXJPM-Dqaam3fE.js} +1 -1
  292. package/web-shell/assets/{chunk-AQP2D5EJ-CjHZ5L_R.js → chunk-AQP2D5EJ-D_-saBYM.js} +1 -1
  293. package/web-shell/assets/{chunk-FMBD7UC4-CKgdgcpv.js → chunk-FMBD7UC4-B9r_veWD.js} +1 -1
  294. package/web-shell/assets/{chunk-ND2GUHAM-Cn2Dykjb.js → chunk-ND2GUHAM-B3EaCSpL.js} +1 -1
  295. package/web-shell/assets/{chunk-QZHKN3VN--0SyraC5.js → chunk-QZHKN3VN-CYq8x9mn.js} +1 -1
  296. package/web-shell/assets/classDiagram-4FO5ZUOK-CQ9aC1Tg.js +1 -0
  297. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ9aC1Tg.js +1 -0
  298. package/web-shell/assets/{cose-bilkent-S5V4N54A-CphhAity.js → cose-bilkent-S5V4N54A-D0ng4uiB.js} +1 -1
  299. package/web-shell/assets/{dagre-BM42HDAG-DU--jiKp.js → dagre-BM42HDAG-DCZollQv.js} +1 -1
  300. package/web-shell/assets/{diagram-2AECGRRQ-BzvuZw1Y.js → diagram-2AECGRRQ-Dfk2pWS0.js} +1 -1
  301. package/web-shell/assets/{diagram-5GNKFQAL-D84-49Y0.js → diagram-5GNKFQAL-kX38ltWR.js} +1 -1
  302. package/web-shell/assets/{diagram-KO2AKTUF-DQTq-3_3.js → diagram-KO2AKTUF-CJz2vsXh.js} +1 -1
  303. package/web-shell/assets/{diagram-LMA3HP47-8FTrshzN.js → diagram-LMA3HP47-BvMLZm_7.js} +1 -1
  304. package/web-shell/assets/{diagram-OG6HWLK6-BCjpDBCm.js → diagram-OG6HWLK6-l7kfStkO.js} +1 -1
  305. package/web-shell/assets/{erDiagram-TEJ5UH35-BtRObkmg.js → erDiagram-TEJ5UH35-BSVa8GGT.js} +1 -1
  306. package/web-shell/assets/{flowDiagram-I6XJVG4X-DTrW6oxy.js → flowDiagram-I6XJVG4X-CoawKIXH.js} +1 -1
  307. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BgPNSW6j.js → ganttDiagram-6RSMTGT7-DFUDH0zF.js} +1 -1
  308. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BTclNgGV.js → gitGraphDiagram-PVQCEYII-Y2pvpT4e.js} +1 -1
  309. package/web-shell/assets/{index-CxA7AqY6.js → index-D0GX0zZf.js} +1 -1
  310. package/web-shell/assets/index-D9haPt0X.css +5 -0
  311. package/web-shell/assets/index-ckX9Pq5k.js +1230 -0
  312. package/web-shell/assets/{infoDiagram-5YYISTIA-DCE4AJt2.js → infoDiagram-5YYISTIA-CU8_zLiX.js} +1 -1
  313. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-C8iE6q4Y.js → ishikawaDiagram-YF4QCWOH-AVQiV0DU.js} +1 -1
  314. package/web-shell/assets/{journeyDiagram-JHISSGLW-C_dxdyEc.js → journeyDiagram-JHISSGLW-DQ0VSKa3.js} +1 -1
  315. package/web-shell/assets/{kanban-definition-UN3LZRKU-Dw3n1u3w.js → kanban-definition-UN3LZRKU-BqnWqsE_.js} +1 -1
  316. package/web-shell/assets/{linear-C2BF2zJ9.js → linear-BkoihsaA.js} +1 -1
  317. package/web-shell/assets/{mermaid.core-CGTQU3MA.js → mermaid.core-5RJs-31j.js} +5 -5
  318. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BVFZm9ZC.js → mindmap-definition-RKZ34NQL-D33Bxnpd.js} +1 -1
  319. package/web-shell/assets/{pieDiagram-4H26LBE5-Cc-TNN3n.js → pieDiagram-4H26LBE5-BuEAw3BH.js} +1 -1
  320. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CgW3Rzsi.js → quadrantDiagram-W4KKPZXB-Kox_usEq.js} +1 -1
  321. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BAaj0Y3B.js → requirementDiagram-4Y6WPE33-CNjeUif0.js} +1 -1
  322. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-XJWmekxS.js → sankeyDiagram-5OEKKPKP-BCd2OL_U.js} +1 -1
  323. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CtRc_0wf.js → sequenceDiagram-3UESZ5HK-CF2ZTsz0.js} +1 -1
  324. package/web-shell/assets/{stateDiagram-AJRCARHV-WCnvMGy5.js → stateDiagram-AJRCARHV-qenSzHtm.js} +1 -1
  325. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B7W4zlCr.js +1 -0
  326. package/web-shell/assets/{timeline-definition-PNZ67QCA-C9cRx49L.js → timeline-definition-PNZ67QCA-B5DyWdgs.js} +1 -1
  327. package/web-shell/assets/{vennDiagram-CIIHVFJN-BvXOCEt-.js → vennDiagram-CIIHVFJN-DqP4I_o_.js} +1 -1
  328. package/web-shell/assets/{wardley-L42UT6IY-ByafGtzu.js → wardley-L42UT6IY-CJe2e4mg.js} +1 -1
  329. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CozAnw8x.js → wardleyDiagram-YWT4CUSO-BMDSw-Rr.js} +1 -1
  330. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Camu9Qvq.js → xychartDiagram-2RQKCTM6-BTVZYkxD.js} +1 -1
  331. package/web-shell/index.html +17 -13
  332. package/chunks/MaxSizedBox-3XQIBACV.js +0 -78
  333. package/chunks/agent-QXD5NSKA.js +0 -73
  334. package/chunks/agent-headless-4VXR2TBK.js +0 -67
  335. package/chunks/bridge-GIBRSPE6.js +0 -81
  336. package/chunks/chunk-CBOQ3HY7.js +0 -2019
  337. package/chunks/chunk-MA6GYKK7.js +0 -6928
  338. package/chunks/contextCommand-XQU7KLIH.js +0 -72
  339. package/chunks/daemon-status-provider-KQVNB4VA.js +0 -80
  340. package/chunks/earlyInputCapture-WP5SA3KH.js +0 -74
  341. package/chunks/errors-JEYPXX4S.js +0 -80
  342. package/chunks/handleAutoUpdate-2VJPAW43.js +0 -73
  343. package/chunks/initializer-UOX67ZFQ.js +0 -78
  344. package/chunks/installationInfo-NQNY34X3.js +0 -72
  345. package/chunks/list-2Z7KS7ZF.js +0 -81
  346. package/chunks/loadedSettingsAdapter-LIYY3LE4.js +0 -75
  347. package/chunks/mcp-AJ4QW3JA.js +0 -75
  348. package/chunks/nonInteractiveCli-PUSO5QF6.js +0 -134
  349. package/chunks/pidfile-EH2JW2PB.js +0 -78
  350. package/chunks/read-file-JZ5VXILQ.js +0 -31
  351. package/chunks/resumeHistoryUtils-Z3HG4WKM.js +0 -84
  352. package/chunks/ripGrep-JNLJCT2B.js +0 -65
  353. package/chunks/serve-NN5FXWR6.js +0 -81
  354. package/chunks/shell-FXT3NVC6.js +0 -75
  355. package/chunks/spawnChannel-XAWLXNOD.js +0 -74
  356. package/chunks/theme-manager-2WZHPK2M.js +0 -69
  357. package/chunks/total-session-admission-HULB2TEQ.js +0 -75
  358. package/chunks/updateCheck-D4ESCHBJ.js +0 -88
  359. package/chunks/useAutoAcceptIndicator-CBNLOF2P.js +0 -86
  360. package/chunks/workspace-providers-status-TJTVHORI.js +0 -78
  361. package/chunks/workspace-registry-H6VM5WXK.js +0 -79
  362. package/chunks/workspace-service-ZNKD3I2J.js +0 -90
  363. package/chunks/workspace-skills-status-OOBIXADG.js +0 -77
  364. package/chunks/write-file-CAKK5IAO.js +0 -65
  365. package/web-shell/assets/channel-DiLlxxIf.js +0 -1
  366. package/web-shell/assets/classDiagram-4FO5ZUOK-CkylTdM4.js +0 -1
  367. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CkylTdM4.js +0 -1
  368. package/web-shell/assets/index-CGtQqOIa.css +0 -5
  369. package/web-shell/assets/index-TtM0hVjU.js +0 -1207
  370. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-D1gzH2Ue.js +0 -1
@@ -1,18 +1,80 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ useAutoAcceptIndicator
5
+ } from "./chunk-2X55UKQE.js";
6
+ import {
7
+ classifyApiError
8
+ } from "./chunk-V7RNNPGC.js";
3
9
  import {
4
10
  buildPermissionSuggestions
5
11
  } from "./chunk-43T5WDQ7.js";
6
12
  import {
7
13
  TUI_CHAT_RECORDING_FAILURE_MESSAGE,
8
14
  reportChatRecordingFailureToAdapter
9
- } from "./chunk-MBOJHHPI.js";
15
+ } from "./chunk-YPE6A4GC.js";
16
+ import {
17
+ MAX_SUGGESTIONS_TO_SHOW,
18
+ SESSION_MENTION_PREFIX,
19
+ buildMcpResourceRef,
20
+ buildMcpServerRef,
21
+ buildSessionRef,
22
+ getExtensionSuggestions,
23
+ handleAtCommand,
24
+ matchMcpServerPrefix,
25
+ resolveAtCommandQuery,
26
+ sanitizeDisplayText
27
+ } from "./chunk-VULLI6WQ.js";
10
28
  import {
11
29
  StreamJsonOutputAdapter
12
- } from "./chunk-FRPDJNK3.js";
30
+ } from "./chunk-BKHWX6I2.js";
31
+ import {
32
+ BuiltinCommandLoader,
33
+ BundledSkillLoader,
34
+ CommandService,
35
+ DISPLAY_HOOK_EVENTS,
36
+ FileCommandLoader,
37
+ MAX_STACKED_SKILLS,
38
+ McpPromptLoader,
39
+ SavedWorkflowLoader,
40
+ SkillCommandLoader,
41
+ addConfigToMatcherGroup,
42
+ appendUserPromptExpansionAdditionalContext,
43
+ copyToClipboard,
44
+ createEmptyHookEventInfo,
45
+ findMidInputSlashCommand,
46
+ findSlashCommandTokens,
47
+ formatApprovalModeDescription,
48
+ formatApprovalModeName,
49
+ formatUserPromptExpansionBlockedMessage,
50
+ getAllConfigs,
51
+ getBestSlashCommandMatch,
52
+ getTranslatedSourceDisplayMap,
53
+ hasBlockingBackgroundWork,
54
+ hasSlashCommandPathSeparator,
55
+ isAtCommand,
56
+ isBtwCommand,
57
+ isMidInputCompletableCommand,
58
+ isSlashCommand,
59
+ normalizePartList,
60
+ parseSlashCommand,
61
+ parseStackedSlashCommands,
62
+ refreshExtensionContentRuntime,
63
+ resetBackgroundStateForSessionSwitch,
64
+ serializeUserPromptExpansionPrompt,
65
+ supportsMatchers
66
+ } from "./chunk-LB6DUZ26.js";
67
+ import "./chunk-R5AFZNQW.js";
13
68
  import {
14
69
  startPostRenderPrefetches
15
- } from "./chunk-4DWTDZGS.js";
70
+ } from "./chunk-2NH6DYI4.js";
71
+ import {
72
+ EXTENSION_RELOAD_FAILED_REASON,
73
+ ExtensionRefreshState,
74
+ appEvents,
75
+ cleanupReviewWorktreeLeases,
76
+ loadHierarchicalGeminiMemory
77
+ } from "./chunk-TPRQ7RZH.js";
16
78
  import {
17
79
  AboutBox,
18
80
  BaseSelectionList,
@@ -65,12 +127,9 @@ import {
65
127
  loadLowlight,
66
128
  logicalPosToOffset,
67
129
  measureElementPosition,
68
- osc8Hyperlink,
69
130
  removeLastGrapheme,
70
131
  renderSoftwareCursor,
71
- sanitizeForOsc,
72
132
  splitFencedMarkdown,
73
- supportsHyperlinks,
74
133
  truncateText,
75
134
  useArenaCommand,
76
135
  useConfig,
@@ -88,101 +147,21 @@ import {
88
147
  useTextBuffer,
89
148
  useUIActions,
90
149
  useUIState
91
- } from "./chunk-LLKWRXSS.js";
92
- import {
93
- GeminiRespondingSpinner,
94
- GeminiSpinner,
95
- SCREEN_READER_USER_PREFIX,
96
- SHELL_COMMAND_NAME,
97
- StreamingContext,
98
- applyCollapsePolicyAndSummary,
99
- buildResumedHistoryItems,
100
- build_default,
101
- expandCollapsedHistory,
102
- isCollapsibleTool,
103
- useStreamingContext
104
- } from "./chunk-ENPCQK44.js";
105
- import {
106
- stopAndGetCapturedInput
107
- } from "./chunk-E4IMU4Y5.js";
108
- import {
109
- useAutoAcceptIndicator
110
- } from "./chunk-QE4KFTBS.js";
150
+ } from "./chunk-SQCQ4KO2.js";
111
151
  import {
112
152
  KeypressProvider,
113
153
  useFocus,
114
154
  useKeypress,
115
155
  useKeypressContext
116
- } from "./chunk-SQFXI7VK.js";
117
- import {
118
- classifyApiError
119
- } from "./chunk-V7RNNPGC.js";
120
- import {
121
- MAX_SUGGESTIONS_TO_SHOW,
122
- buildMcpResourceRef,
123
- buildMcpServerRef,
124
- getExtensionSuggestions,
125
- handleAtCommand,
126
- matchMcpServerPrefix,
127
- resolveAtCommandQuery,
128
- sanitizeDisplayText
129
- } from "./chunk-TWVE5ZS5.js";
130
- import {
131
- BuiltinCommandLoader,
132
- BundledSkillLoader,
133
- CommandService,
134
- DISPLAY_HOOK_EVENTS,
135
- FileCommandLoader,
136
- MAX_STACKED_SKILLS,
137
- McpPromptLoader,
138
- SavedWorkflowLoader,
139
- SkillCommandLoader,
140
- addConfigToMatcherGroup,
141
- appendUserPromptExpansionAdditionalContext,
142
- copyToClipboard,
143
- createEmptyHookEventInfo,
144
- findMidInputSlashCommand,
145
- findSlashCommandTokens,
146
- formatApprovalModeDescription,
147
- formatApprovalModeName,
148
- formatUserPromptExpansionBlockedMessage,
149
- getAllConfigs,
150
- getBestSlashCommandMatch,
151
- getTranslatedSourceDisplayMap,
152
- hasBlockingBackgroundWork,
153
- hasSlashCommandPathSeparator,
154
- isAtCommand,
155
- isBtwCommand,
156
- isMidInputCompletableCommand,
157
- isSlashCommand,
158
- normalizePartList,
159
- parseSlashCommand,
160
- parseStackedSlashCommands,
161
- refreshExtensionContentRuntime,
162
- resetBackgroundStateForSessionSwitch,
163
- serializeUserPromptExpansionPrompt,
164
- supportsMatchers
165
- } from "./chunk-O2XSCRCS.js";
166
- import {
167
- EXTENSION_RELOAD_FAILED_REASON,
168
- ExtensionRefreshState,
169
- appEvents,
170
- cleanupReviewWorktreeLeases,
171
- loadHierarchicalGeminiMemory
172
- } from "./chunk-L3KUB6XM.js";
156
+ } from "./chunk-LQIW3YFY.js";
173
157
  import {
174
158
  getCommandDisplayName,
175
159
  getCommandSourceBadge
176
- } from "./chunk-L5QZGCRH.js";
160
+ } from "./chunk-RZIX2G32.js";
177
161
  import {
178
162
  computeSessionStats,
179
163
  levelLabel
180
- } from "./chunk-HIP6TVWA.js";
181
- import {
182
- disableKittyProtocol,
183
- isKittyProtocolEnabled,
184
- isKittyProtocolSupported
185
- } from "./chunk-5DTTYNB7.js";
164
+ } from "./chunk-U7M2DMGW.js";
186
165
  import {
187
166
  BEL,
188
167
  OSC_PREFIX,
@@ -194,21 +173,31 @@ import {
194
173
  oscITerm2Notify,
195
174
  oscKittyNotify,
196
175
  saveClipboardImage,
197
- wrapForMultiplexer,
198
176
  writeOsc52
199
- } from "./chunk-4LVZNIDO.js";
200
- import "./chunk-5GI55PF5.js";
177
+ } from "./chunk-J56UI34H.js";
201
178
  import "./chunk-4WGODMVR.js";
202
- import "./chunk-CGLQAVZE.js";
203
- import "./chunk-KW7NOTN6.js";
204
179
  import {
205
180
  MaxSizedBox,
206
181
  OverflowProvider,
207
182
  useOverflowState
208
- } from "./chunk-SP5WRGVG.js";
183
+ } from "./chunk-FQK6JAFG.js";
184
+ import {
185
+ GeminiRespondingSpinner,
186
+ GeminiSpinner,
187
+ ICON,
188
+ SCREEN_READER_USER_PREFIX,
189
+ SHELL_COMMAND_NAME,
190
+ StreamingContext,
191
+ applyCollapsePolicyAndSummary,
192
+ buildResumedHistoryItems,
193
+ build_default,
194
+ expandCollapsedHistory,
195
+ isCollapsibleTool,
196
+ useStreamingContext
197
+ } from "./chunk-JXJFVC6E.js";
209
198
  import {
210
199
  theme
211
- } from "./chunk-6IL7KRLE.js";
200
+ } from "./chunk-VAK25FTU.js";
212
201
  import {
213
202
  require_jsx_runtime
214
203
  } from "./chunk-SV5PQVQE.js";
@@ -225,37 +214,51 @@ import {
225
214
  use_is_screen_reader_enabled_default,
226
215
  use_stdin_default,
227
216
  use_stdout_default
228
- } from "./chunk-FFFM6NJV.js";
217
+ } from "./chunk-6GMVPFB2.js";
229
218
  import {
230
- require_react
231
- } from "./chunk-5QWWOFGG.js";
232
- import "./chunk-Q6NAKZTA.js";
233
- import "./chunk-MA6GYKK7.js";
234
- import "./chunk-NHDKSOEY.js";
219
+ stopAndGetCapturedInput
220
+ } from "./chunk-63P4EL5V.js";
221
+ import {
222
+ disableKittyProtocol,
223
+ isKittyProtocolEnabled,
224
+ isKittyProtocolSupported,
225
+ pushKittyProtocolFlags
226
+ } from "./chunk-PQNHRFJC.js";
235
227
  import {
236
228
  relaunchApp
237
- } from "./chunk-Q35QUZDQ.js";
229
+ } from "./chunk-Y34KJKDC.js";
238
230
  import {
239
231
  setUpdateHandler
240
- } from "./chunk-LX3COOXF.js";
241
- import "./chunk-BSHD62QJ.js";
242
- import "./chunk-YAF2MQZ6.js";
232
+ } from "./chunk-ZFDTEDCF.js";
233
+ import "./chunk-M4FMGVY4.js";
234
+ import "./chunk-K36B6G2O.js";
243
235
  import {
244
236
  AUTO_THEME_NAME,
245
237
  DEFAULT_THEME,
246
238
  themeManager
247
- } from "./chunk-7Z6JQEL6.js";
239
+ } from "./chunk-L5UHQJTJ.js";
240
+ import "./chunk-KW7NOTN6.js";
241
+ import {
242
+ require_react
243
+ } from "./chunk-5QWWOFGG.js";
244
+ import "./chunk-GSN55ZRI.js";
245
+ import "./chunk-6H67XLET.js";
246
+ import "./chunk-7MVVZO4N.js";
247
+ import {
248
+ getErrorMessage as getErrorMessage2
249
+ } from "./chunk-IKYJHJNF.js";
250
+ import "./chunk-2SCDWPXI.js";
251
+ import "./chunk-YAF2MQZ6.js";
248
252
  import {
249
253
  openQwenAsrRealtimeStream,
250
254
  openVoiceStream,
251
255
  openVoiceStreamWithRetry
252
- } from "./chunk-ZHERRXZJ.js";
256
+ } from "./chunk-BJX6ZSUK.js";
253
257
  import {
254
258
  recordGoalStatusItem,
255
259
  restoreGoalFromHistory
256
- } from "./chunk-JC26SJ5Y.js";
257
- import "./chunk-4K7VDKAD.js";
258
- import "./chunk-LNDD3IML.js";
260
+ } from "./chunk-EBJQ6AXW.js";
261
+ import "./chunk-RHLZR4E5.js";
259
262
  import {
260
263
  cpLen,
261
264
  cpSlice,
@@ -267,70 +270,69 @@ import {
267
270
  sanitizeTerminalText,
268
271
  stripUnsafeCharacters,
269
272
  toCodePoints
270
- } from "./chunk-RS7MT2QG.js";
273
+ } from "./chunk-IPUUTYMV.js";
274
+ import "./chunk-WCXCRJYB.js";
271
275
  import {
272
276
  stringWidth
273
- } from "./chunk-H2XVO6NE.js";
277
+ } from "./chunk-2MIN6GRR.js";
274
278
  import "./chunk-QHTIBUWB.js";
275
279
  import {
276
280
  isHistoryItemVisibleAfterRestore
277
281
  } from "./chunk-QTERJVPZ.js";
278
282
  import "./chunk-3Z43GZUQ.js";
279
- import "./chunk-RXFQM6FQ.js";
280
- import "./chunk-KPBVP6SL.js";
281
- import "./chunk-6H67XLET.js";
282
- import {
283
- getErrorMessage as getErrorMessage2
284
- } from "./chunk-LPEONXNV.js";
285
- import {
286
- getExtendedSystemInfo
287
- } from "./chunk-3HFNGB2O.js";
288
- import {
289
- formatDuration,
290
- formatMemoryUsage,
291
- formatRelativeTime,
292
- formatTokenCount
293
- } from "./chunk-E5Z2AVNV.js";
294
- import {
295
- isInlineModelOverrideAllowed
296
- } from "./chunk-JZSM2IZ3.js";
297
283
  import {
298
284
  assertVoiceBaseUrlNetworkAllowed,
299
285
  isKeytermEcho,
300
286
  isStreamingVoiceModel,
301
287
  resolveVoiceStreamConfig,
302
288
  transcribeVoiceAudio
303
- } from "./chunk-MLYGPZGU.js";
289
+ } from "./chunk-H4SBPHSA.js";
304
290
  import {
305
291
  formatUnsupportedVoiceModelMessage,
306
292
  isSelectableVoiceModel
307
- } from "./chunk-7NR2AIK6.js";
308
- import "./chunk-QLJUC7TG.js";
309
- import "./chunk-6RLROE6G.js";
310
- import "./chunk-COH43MRJ.js";
311
- import "./chunk-RECUEJ7B.js";
293
+ } from "./chunk-YBL3QUDD.js";
294
+ import "./chunk-ZD6UTE4A.js";
295
+ import "./chunk-RXFQM6FQ.js";
296
+ import "./chunk-PSOO6YXD.js";
312
297
  import {
313
298
  requestConsentInteractive,
314
299
  requestConsentOrFail
315
- } from "./chunk-7THPNISK.js";
300
+ } from "./chunk-PC6JANNU.js";
316
301
  import "./chunk-57OAHC2Y.js";
317
- import "./chunk-GHRSKGHF.js";
318
- import "./chunk-6ZBPS62S.js";
319
- import "./chunk-V6WHFGST.js";
320
302
  import {
321
303
  createLoadedSettingsAdapter
322
- } from "./chunk-DTZY2SH2.js";
304
+ } from "./chunk-IO3IX5Q4.js";
305
+ import {
306
+ getExtendedSystemInfo
307
+ } from "./chunk-MVSUYZDT.js";
308
+ import {
309
+ formatDuration,
310
+ formatMemoryUsage,
311
+ formatRelativeTime,
312
+ formatTokenCount
313
+ } from "./chunk-E5Z2AVNV.js";
314
+ import "./chunk-GLWP3FDB.js";
315
+ import "./chunk-COH43MRJ.js";
316
+ import {
317
+ isInlineModelOverrideAllowed
318
+ } from "./chunk-KMQ33DO4.js";
319
+ import "./chunk-X5XDDSSH.js";
320
+ import "./chunk-4WIZGAH3.js";
321
+ import "./chunk-7ZCNENPP.js";
322
+ import "./chunk-V6WHFGST.js";
323
+ import {
324
+ loadMcpApprovals
325
+ } from "./chunk-JVPM2ULZ.js";
326
+ import "./chunk-DP3IHZGG.js";
327
+ import "./chunk-ZNAUOR2I.js";
323
328
  import "./chunk-2RFKHEXL.js";
324
- import "./chunk-QKTHJXCS.js";
325
- import "./chunk-TJTKSVIV.js";
329
+ import "./chunk-LK7CHLVP.js";
330
+ import "./chunk-JLU636DO.js";
331
+ import "./chunk-BK2UNYWD.js";
326
332
  import "./chunk-M5GB774H.js";
327
- import "./chunk-RV4C2ZFG.js";
328
- import "./chunk-2LI23QA6.js";
329
- import "./chunk-RVLZCXEE.js";
333
+ import "./chunk-RWTEFFPU.js";
330
334
  import "./chunk-UDXSXLER.js";
331
- import {
332
- loadMcpApprovals
333
- } from "./chunk-RKWX4CMO.js";
335
+ import "./chunk-BIQWWWJN.js";
334
336
  import {
335
337
  CORRUPTED_SUFFIX,
336
338
  SettingScope,
@@ -353,30 +355,27 @@ import {
353
355
  settingExistsInScope,
354
356
  validateSettingValue,
355
357
  writeOutputLanguageAndRegisterPath
356
- } from "./chunk-XCXYRDHB.js";
358
+ } from "./chunk-TEHGS6UP.js";
357
359
  import "./chunk-RKUWKYED.js";
360
+ import "./chunk-GOXKNSDZ.js";
361
+ import "./chunk-IDS7MSUP.js";
358
362
  import {
359
363
  getCurrentLanguage,
360
364
  localizeToolDisplayName,
361
365
  t,
362
366
  ta
363
- } from "./chunk-VRRF3GW5.js";
364
- import "./chunk-RWV32G2M.js";
365
- import "./chunk-XHATNRQA.js";
366
- import "./chunk-4OWXOUYF.js";
367
- import "./chunk-GOXKNSDZ.js";
368
- import "./chunk-IDS7MSUP.js";
369
- import "./chunk-QRUIS3DN.js";
370
- import "./chunk-XFSFZCM5.js";
367
+ } from "./chunk-LKEJ26GS.js";
368
+ import "./chunk-LH2BYDQ5.js";
369
+ import "./chunk-6PEXNQTX.js";
371
370
  import "./chunk-URK542T4.js";
372
371
  import {
373
372
  getCliVersion
374
- } from "./chunk-3EK5ZOUQ.js";
373
+ } from "./chunk-YX324OPW.js";
375
374
  import "./chunk-VJNBRRZG.js";
376
375
  import {
377
376
  isWorkspaceTrusted,
378
377
  loadTrustedFolders
379
- } from "./chunk-4PTLZ3NX.js";
378
+ } from "./chunk-Z2BC6UJ5.js";
380
379
  import {
381
380
  require_strip_json_comments
382
381
  } from "./chunk-ALGGS7UH.js";
@@ -385,6 +384,7 @@ import {
385
384
  clearScreen,
386
385
  writeStderrLine
387
386
  } from "./chunk-OWAK7LMW.js";
387
+ import "./chunk-XFSFZCM5.js";
388
388
  import {
389
389
  ALIBABA_PROVIDERS,
390
390
  AsyncFzf,
@@ -491,47 +491,52 @@ import {
491
491
  validateWorkflowName,
492
492
  watchRepoBranch,
493
493
  writeRuntimeStatus
494
- } from "./chunk-OTQ6PSZC.js";
495
- import "./chunk-T4TZQJ7W.js";
496
- import "./chunk-H6XPXXMH.js";
494
+ } from "./chunk-PHOF65IG.js";
497
495
  import "./chunk-5M6IDOMF.js";
498
- import "./chunk-T2L47JJK.js";
499
- import "./chunk-GPSKDNEE.js";
500
- import "./chunk-X6N25LXS.js";
501
- import "./chunk-E2UVIFI2.js";
496
+ import "./chunk-TWPJO254.js";
497
+ import "./chunk-H6XPXXMH.js";
498
+ import "./chunk-K4XWPEWB.js";
499
+ import "./chunk-TOFQCPDC.js";
500
+ import "./chunk-IRH27ZC2.js";
501
+ import "./chunk-VDDGDZMA.js";
502
+ import "./chunk-FNQ6T3CV.js";
503
+ import "./chunk-ZOIFNCKL.js";
504
+ import "./chunk-PWTZEM3C.js";
505
+ import "./chunk-KRXPRVGL.js";
506
+ import "./chunk-6PVPNMXU.js";
502
507
  import {
503
508
  resolveModelId
504
- } from "./chunk-T5IO6FZ4.js";
505
- import "./chunk-Q2YKNMLS.js";
506
- import "./chunk-XU457J4V.js";
507
- import "./chunk-VDDGDZMA.js";
508
- import "./chunk-KHOVYUHX.js";
509
+ } from "./chunk-MZAXJAUM.js";
509
510
  import "./chunk-SZRN75WQ.js";
510
- import "./chunk-6PVPNMXU.js";
511
+ import "./chunk-HTO4JFDZ.js";
511
512
  import "./chunk-CPBF7KYF.js";
512
- import "./chunk-NABLFI57.js";
513
- import {
514
- HOOKS_CONFIG_FIELDS
515
- } from "./chunk-QBUDF33N.js";
516
- import "./chunk-LIZRAKPB.js";
517
513
  import {
518
514
  APPROVAL_MODES,
519
515
  getStartupContextLength,
520
516
  isSystemReminderContent,
521
517
  runOutsideAgentContext
522
- } from "./chunk-WHGVTP7Q.js";
518
+ } from "./chunk-L26JL52R.js";
523
519
  import "./chunk-6AM5D4ME.js";
520
+ import "./chunk-JZA3JUDJ.js";
521
+ import {
522
+ HOOKS_CONFIG_FIELDS
523
+ } from "./chunk-3QMGYBFN.js";
524
524
  import "./chunk-JCW2R7WC.js";
525
525
  import {
526
526
  isPathWithinRoot
527
- } from "./chunk-57FIIFJN.js";
528
- import "./chunk-HTO4JFDZ.js";
527
+ } from "./chunk-M5JM7OSF.js";
528
+ import "./chunk-OHNBB4XR.js";
529
+ import "./chunk-E5TUC6CA.js";
529
530
  import {
530
- qwenOAuth2Events
531
- } from "./chunk-RCWKCN2Z.js";
531
+ osc8Hyperlink,
532
+ qwenOAuth2Events,
533
+ sanitizeForOsc,
534
+ supportsHyperlinks,
535
+ wrapForMultiplexer
536
+ } from "./chunk-EPDRMGT4.js";
532
537
  import "./chunk-JESCGQM3.js";
533
- import "./chunk-QKNXKTZX.js";
534
- import "./chunk-LW2FUYBN.js";
538
+ import "./chunk-NH6KE4JX.js";
539
+ import "./chunk-USTWD7QV.js";
535
540
  import {
536
541
  REASONING_EFFORT_TIERS
537
542
  } from "./chunk-XVNQMZ2I.js";
@@ -541,12 +546,17 @@ import {
541
546
  } from "./chunk-FODK6UMO.js";
542
547
  import "./chunk-GLNBDYUX.js";
543
548
  import "./chunk-DJ2GSRLV.js";
549
+ import "./chunk-ZJHVAS7M.js";
550
+ import "./chunk-NIBLUX3Y.js";
551
+ import "./chunk-BPJSQIJX.js";
552
+ import "./chunk-P3QQPMQA.js";
553
+ import "./chunk-6FGBXPWM.js";
554
+ import "./chunk-LS77BEZP.js";
544
555
  import {
545
556
  ApiCancelEvent,
546
557
  AuthEvent,
547
558
  ConversationFinishedEvent,
548
559
  DiscoveredMCPTool,
549
- MAINLINE_CODER_MODEL,
550
560
  ModelSlashCommandEvent,
551
561
  PromptSuggestionEvent,
552
562
  SpeculationEvent,
@@ -582,7 +592,7 @@ import {
582
592
  runVisionBridge,
583
593
  shouldRunVisionBridge,
584
594
  splitImageParts
585
- } from "./chunk-ZDP2Y2AL.js";
595
+ } from "./chunk-CIKQ7KKO.js";
586
596
  import "./chunk-VGC4I5JJ.js";
587
597
  import {
588
598
  AUTO_MEMORY_INDEX_FILENAME,
@@ -590,30 +600,30 @@ import {
590
600
  getAutoMemoryRoot,
591
601
  getUserAutoMemoryRoot,
592
602
  isAnyAutoMemPath
593
- } from "./chunk-4K56OJFJ.js";
603
+ } from "./chunk-MUP3T3AD.js";
594
604
  import {
595
- DEFAULT_TOKEN_LIMIT
596
- } from "./chunk-CBOQ3HY7.js";
605
+ MAINLINE_CODER_MODEL
606
+ } from "./chunk-IKCX4CCL.js";
607
+ import "./chunk-46UV252V.js";
597
608
  import "./chunk-A4UCTEB5.js";
598
609
  import "./chunk-XWRJCPHC.js";
599
- import "./chunk-QNLNLENL.js";
600
610
  import {
601
- atomicWriteFileSync
602
- } from "./chunk-6X4GWOPW.js";
611
+ DEFAULT_TOKEN_LIMIT
612
+ } from "./chunk-UW5EOVUN.js";
613
+ import "./chunk-2JZBVYTU.js";
614
+ import "./chunk-5I2IWRSH.js";
603
615
  import {
604
- FinishReason
605
- } from "./chunk-TYQMGACW.js";
606
- import "./chunk-TYAMGABM.js";
607
- import "./chunk-FCMNKVXT.js";
608
- import "./chunk-7362QS5B.js";
616
+ atomicWriteFileSync
617
+ } from "./chunk-A5L3JMUA.js";
618
+ import "./chunk-MB4MZHMJ.js";
609
619
  import "./chunk-HTR4WV6U.js";
610
- import "./chunk-M7WBGLYP.js";
620
+ import "./chunk-BULDBTYC.js";
611
621
  import "./chunk-U7ZFW55U.js";
612
- import "./chunk-NPQDJGKU.js";
622
+ import "./chunk-UUUTRMI2.js";
613
623
  import {
614
624
  ToolNames,
615
625
  isShellProgressData
616
- } from "./chunk-YM3SZTH4.js";
626
+ } from "./chunk-PR75REBZ.js";
617
627
  import {
618
628
  Storage,
619
629
  UnauthorizedError,
@@ -625,21 +635,27 @@ import {
625
635
  isNodeError,
626
636
  shortenPath,
627
637
  tildeifyPath
628
- } from "./chunk-OQB4EXO4.js";
629
- import "./chunk-EZPB6S2I.js";
638
+ } from "./chunk-NL7LTRLR.js";
639
+ import "./chunk-QAF7NMK7.js";
640
+ import {
641
+ registerCleanup,
642
+ runExitCleanup
643
+ } from "./chunk-PWVFN2LF.js";
630
644
  import {
631
645
  finalizeStartupProfile,
632
646
  profileCheckpoint
633
647
  } from "./chunk-QSWDGAIC.js";
634
648
  import "./chunk-Q7YDKOGY.js";
635
- import {
636
- registerCleanup,
637
- runExitCleanup
638
- } from "./chunk-5NJTNQUW.js";
639
649
  import "./chunk-75DOP5OR.js";
640
650
  import "./chunk-DMTGGOSA.js";
641
651
  import "./chunk-YQ3U5MUC.js";
642
- import "./chunk-THJNPLI4.js";
652
+ import {
653
+ FinishReason
654
+ } from "./chunk-22C7BQ6D.js";
655
+ import "./chunk-TYAMGABM.js";
656
+ import "./chunk-FCMNKVXT.js";
657
+ import "./chunk-AMDSOFFV.js";
658
+ import "./chunk-TARRHLLG.js";
643
659
  import {
644
660
  init_esbuild_shims
645
661
  } from "./chunk-5O2XNYP6.js";
@@ -2282,10 +2298,15 @@ function isSyntheticHistoryItem(item) {
2282
2298
  case "stop_hook_loop":
2283
2299
  case "stop_hook_system_message":
2284
2300
  return true;
2301
+ // Steer messages (mid-turn user injections) are typed 'user' but
2302
+ // carry sentToModel === false; treat them as synthetic so the
2303
+ // cancel handler can still do a full rewind when only a steer
2304
+ // follows the real prompt.
2305
+ case "user":
2306
+ return item.sentToModel === false;
2285
2307
  // Meaningful: user input, model text, tool runs, slash-command
2286
2308
  // results the user explicitly asked for. Auto-restore must bail
2287
2309
  // when any of these appear after the candidate user prompt.
2288
- case "user":
2289
2310
  case "user_shell":
2290
2311
  case "gemini":
2291
2312
  case "gemini_content":
@@ -2329,11 +2350,18 @@ function itemsAfterAreOnlySynthetic(history, fromIndex) {
2329
2350
  __name(itemsAfterAreOnlySynthetic, "itemsAfterAreOnlySynthetic");
2330
2351
  function findLastUserItemIndex(history) {
2331
2352
  for (let i = history.length - 1; i >= 0; i--) {
2332
- if (history[i].type === "user") return i;
2353
+ const item = history[i];
2354
+ if (item.type === "user" && item.sentToModel !== false) return i;
2333
2355
  }
2334
2356
  return -1;
2335
2357
  }
2336
2358
  __name(findLastUserItemIndex, "findLastUserItemIndex");
2359
+ function realUserPromptTexts(history) {
2360
+ return history.filter(
2361
+ (item) => item.type === "user" && item.sentToModel !== false && typeof item.text === "string" && item.text.trim() !== ""
2362
+ ).map((item) => item.text);
2363
+ }
2364
+ __name(realUserPromptTexts, "realUserPromptTexts");
2337
2365
  function buildThoughtHeadIdMap(items) {
2338
2366
  const map = /* @__PURE__ */ new Map();
2339
2367
  for (let i = 0; i < items.length; i++) {
@@ -2989,9 +3017,9 @@ function VirtualizedList(props, ref) {
2989
3017
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { width: 1, flexDirection: "column", flexShrink: 0, children: Array.from({ length: trackLen }, (_, i) => {
2990
3018
  const inThumb = i >= thumbTop && i < thumbTop + thumbLen;
2991
3019
  if (!scrollbarThumbActive) {
2992
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { children: " " }, i);
3020
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { selectable: false, children: " " }, i);
2993
3021
  }
2994
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { dimColor: !inThumb, children: inThumb ? "\u2588" : "\u2502" }, i);
3022
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { dimColor: !inThumb, selectable: false, children: inThumb ? "\u2588" : "\u2502" }, i);
2995
3023
  }) });
2996
3024
  }, [
2997
3025
  showScrollbar,
@@ -3289,24 +3317,79 @@ function getSelectedText(frame, selection) {
3289
3317
  return "";
3290
3318
  }
3291
3319
  const { sx, sy, ex, ey } = selection;
3292
- const lines = [];
3320
+ let text = "";
3293
3321
  for (let y = sy; y <= ey; y++) {
3294
3322
  const row = frame.cells[y];
3295
3323
  if (!row) {
3296
- lines.push("");
3324
+ if (y < ey) {
3325
+ text += "\n";
3326
+ }
3297
3327
  continue;
3298
3328
  }
3299
3329
  const startX = y === sy ? sx : 0;
3300
3330
  const endX = y === ey ? ex : row.length - 1;
3301
- let text = "";
3302
3331
  for (let x = Math.max(0, startX); x <= endX && x < row.length; x++) {
3303
- text += row[x].value;
3332
+ if (row[x].selectable) {
3333
+ text += row[x].value;
3334
+ }
3335
+ }
3336
+ if (y < ey) {
3337
+ text += boundaryJoiner(frame, selection, y);
3304
3338
  }
3305
- lines.push(text.replace(/\s+$/u, ""));
3306
3339
  }
3307
- return lines.join("\n");
3340
+ return text;
3308
3341
  }
3309
3342
  __name(getSelectedText, "getSelectedText");
3343
+ function selectedFlows(frame, selection, y) {
3344
+ const row = frame.cells[y] ?? [];
3345
+ const startX = y === selection.sy ? selection.sx : 0;
3346
+ const endX = y === selection.ey ? selection.ex : row.length - 1;
3347
+ const flows = /* @__PURE__ */ new Set();
3348
+ for (let x = Math.max(0, startX); x <= endX && x < row.length; x++) {
3349
+ const cell = row[x];
3350
+ if (cell.selectable && cell.flowId !== null) {
3351
+ flows.add(cell.flowId);
3352
+ }
3353
+ }
3354
+ if (flows.size > 0) {
3355
+ return flows;
3356
+ }
3357
+ for (const boundaryY of [y - 1, y]) {
3358
+ const boundaryRow = frame.boundaries[boundaryY] ?? [];
3359
+ for (let x = Math.max(0, startX); x <= endX && x < boundaryRow.length; x++) {
3360
+ const claim = boundaryRow[x];
3361
+ if (claim?.selectable) {
3362
+ flows.add(claim.flowId);
3363
+ }
3364
+ }
3365
+ }
3366
+ return flows;
3367
+ }
3368
+ __name(selectedFlows, "selectedFlows");
3369
+ function boundaryJoiner(frame, selection, y) {
3370
+ const currentFlows = selectedFlows(frame, selection, y);
3371
+ const nextFlows = selectedFlows(frame, selection, y + 1);
3372
+ const [currentFlow] = currentFlows;
3373
+ const [nextFlow] = nextFlows;
3374
+ if (currentFlows.size !== 1 || nextFlows.size !== 1 || currentFlow !== nextFlow) {
3375
+ return "\n";
3376
+ }
3377
+ const flowId = currentFlow;
3378
+ const claims = (frame.boundaries[y] ?? []).filter(
3379
+ (claim) => claim !== null && claim.selectable && claim.flowId === flowId
3380
+ );
3381
+ if (claims.length === 0) {
3382
+ return "\n";
3383
+ }
3384
+ const first = claims[0];
3385
+ if (claims.some(
3386
+ (claim) => claim.kind !== first.kind || claim.joiner !== first.joiner
3387
+ )) {
3388
+ return "\n";
3389
+ }
3390
+ return first.kind === "soft" ? first.joiner : "\n";
3391
+ }
3392
+ __name(boundaryJoiner, "boundaryJoiner");
3310
3393
 
3311
3394
  // packages/cli/src/ui/selection/selection-span.ts
3312
3395
  init_esbuild_shims();
@@ -3647,7 +3730,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
3647
3730
  addSourceBlockCounts(runningOffsets, item.text);
3648
3731
  return { item, sourceCopyIndexOffsets: offsets };
3649
3732
  }
3650
- if (item.type === "user") {
3733
+ if (item.type === "user" && item.sentToModel !== false) {
3651
3734
  runningOffsets = createEmptySourceCopyOffsets();
3652
3735
  }
3653
3736
  return { item, sourceCopyIndexOffsets: void 0 };
@@ -3671,7 +3754,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
3671
3754
  addSourceBlockCounts(runningOffsets, item.text);
3672
3755
  return { item, sourceCopyIndexOffsets: offsets };
3673
3756
  }
3674
- if (item.type === "user") {
3757
+ if (item.type === "user" && item.sentToModel !== false) {
3675
3758
  runningOffsets = createEmptySourceCopyOffsets();
3676
3759
  }
3677
3760
  return { item, sourceCopyIndexOffsets: void 0 };
@@ -5291,7 +5374,7 @@ var SessionTab = /* @__PURE__ */ __name(() => {
5291
5374
  Object.keys(metrics.models).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
5292
5375
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { bold: true, color: theme.text.primary, children: t("Models") }),
5293
5376
  Object.entries(metrics.models).map(([name, m], i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5294
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: SERIES_COLORS[i % SERIES_COLORS.length], children: "\u25CF " }),
5377
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: SERIES_COLORS[i % SERIES_COLORS.length], children: ICON.CIRCLE_FILLED + " " }),
5295
5378
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.primary, children: [
5296
5379
  name,
5297
5380
  " "
@@ -7162,7 +7245,7 @@ function SettingsDialog({
7162
7245
  Text,
7163
7246
  {
7164
7247
  color: isActive ? theme.status.success : theme.text.secondary,
7165
- children: isActive ? "\u25CF" : ""
7248
+ children: isActive ? ICON.CIRCLE_FILLED : ""
7166
7249
  }
7167
7250
  ) }),
7168
7251
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Box_default, { flexGrow: 1, flexShrink: 1, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
@@ -9068,7 +9151,7 @@ function ModelIdsStep({
9068
9151
  const isSelected = selectedRecommendationKeys.includes(item.key);
9069
9152
  const textColor = isFocused ? theme.status.success : isSelected ? theme.text.accent : theme.text.primary;
9070
9153
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Box_default, { alignItems: "flex-start", children: [
9071
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Box_default, { minWidth: 4, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { color: textColor, children: isSelected ? "\u25C9" : "\u25CB" }) }),
9154
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Box_default, { minWidth: 4, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { color: textColor, children: isSelected ? ICON.RADIO_FILLED : ICON.CIRCLE_EMPTY }) }),
9072
9155
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { color: textColor, children: item.label }) })
9073
9156
  ] }, item.key);
9074
9157
  }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { color: theme.text.secondary, children: t("No recommended models match.") }) }),
@@ -9110,7 +9193,7 @@ function AdvancedConfigStep({
9110
9193
  modalityPdf,
9111
9194
  contextWindowSize
9112
9195
  } = flow.state;
9113
- const checkmark = /* @__PURE__ */ __name((v) => v ? "\u25C9" : "\u25CB", "checkmark");
9196
+ const checkmark = /* @__PURE__ */ __name((v) => v ? ICON.RADIO_FILLED : ICON.CIRCLE_EMPTY, "checkmark");
9114
9197
  const cursor = /* @__PURE__ */ __name((index) => focusedConfigIndex === index ? "\u203A" : " ", "cursor");
9115
9198
  const ctxIdx = modalityEnabled ? 6 : 2;
9116
9199
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Box_default, { marginTop: 1, flexDirection: "column", children: [
@@ -10858,6 +10941,7 @@ function ModelDialog({
10858
10941
  isFastModelMode,
10859
10942
  isVoiceModelMode,
10860
10943
  isVisionModelMode,
10944
+ isImageModelMode,
10861
10945
  persistScope,
10862
10946
  availableTerminalHeight
10863
10947
  }) {
@@ -10869,10 +10953,14 @@ function ModelDialog({
10869
10953
  const authType = config?.getAuthType();
10870
10954
  const availableModelEntries = (0, import_react34.useMemo)(() => {
10871
10955
  const allModels = config ? config.getAllConfiguredModels() : [];
10872
- const runtimeModels = allModels.filter((m) => m.isRuntimeModel);
10873
- const registryModels = allModels.filter(
10874
- (m) => !m.isRuntimeModel && (m.authType !== "qwen-oauth" /* QWEN_OAUTH */ || authType === "qwen-oauth" /* QWEN_OAUTH */) && (isFastModelMode || !m.fastOnly) && (isVoiceModelMode || !m.voiceOnly)
10875
- );
10956
+ const runtimeModels = isImageModelMode ? [] : allModels.filter((m) => m.isRuntimeModel);
10957
+ const registryModels = allModels.filter((m) => {
10958
+ const imageModelSelector = encodeVisionModelSelector(
10959
+ buildModelSelectionKey(m.authType, m.id, m.baseUrl)
10960
+ );
10961
+ const isSelectableImageModel = isImageModelMode ? m.imageOnly === true && config?.resolveImageGenerationModel(imageModelSelector) !== void 0 : m.imageOnly !== true;
10962
+ return !m.isRuntimeModel && (m.authType !== "qwen-oauth" /* QWEN_OAUTH */ || authType === "qwen-oauth" /* QWEN_OAUTH */) && isSelectableImageModel && (isFastModelMode || !m.fastOnly) && (isVoiceModelMode || !m.voiceOnly);
10963
+ });
10876
10964
  const modelsByAuthTypeMap = /* @__PURE__ */ new Map();
10877
10965
  for (const model of registryModels) {
10878
10966
  const authType2 = model.authType;
@@ -10907,7 +10995,7 @@ function ModelDialog({
10907
10995
  }
10908
10996
  }
10909
10997
  return result;
10910
- }, [authType, config, isFastModelMode, isVoiceModelMode]);
10998
+ }, [authType, config, isFastModelMode, isImageModelMode, isVoiceModelMode]);
10911
10999
  const MODEL_OPTIONS = (0, import_react34.useMemo)(
10912
11000
  () => availableModelEntries.map(
10913
11001
  ({ authType: t2, model, isRuntime, snapshotId }) => {
@@ -10973,7 +11061,9 @@ function ModelDialog({
10973
11061
  const fastModelSetting = settings?.merged?.fastModel;
10974
11062
  const voiceModelSetting = settings?.merged?.voiceModel;
10975
11063
  const visionModelSetting = settings?.merged?.visionModel;
11064
+ const imageModelSetting = settings?.merged?.imageModel;
10976
11065
  const parsedVisionModelValue = parseVisionModelSetting(visionModelSetting);
11066
+ const parsedImageModelValue = parseVisionModelSetting(imageModelSetting);
10977
11067
  const parsedFastModelSetting = (0, import_react34.useMemo)(() => {
10978
11068
  if (!isFastModelMode) return void 0;
10979
11069
  try {
@@ -10990,8 +11080,16 @@ function ModelDialog({
10990
11080
  return void 0;
10991
11081
  }
10992
11082
  }, [parsedVisionModelValue?.selector, isVisionModelMode]);
10993
- const preferredModelId = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.modelId : isVisionModelMode && parsedVisionModelSetting ? parsedVisionModelSetting.modelId : config?.getModel() || MAINLINE_CODER_MODEL;
10994
- const activeRuntimeSnapshot = isFastModelMode || isVoiceModelMode || isVisionModelMode ? void 0 : config?.getActiveRuntimeModelSnapshot?.();
11083
+ const parsedImageModelSetting = (0, import_react34.useMemo)(() => {
11084
+ if (!isImageModelMode) return void 0;
11085
+ try {
11086
+ return resolveModelId(parsedImageModelValue?.selector);
11087
+ } catch {
11088
+ return void 0;
11089
+ }
11090
+ }, [parsedImageModelValue?.selector, isImageModelMode]);
11091
+ const preferredModelId = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.modelId : isVisionModelMode && parsedVisionModelSetting ? parsedVisionModelSetting.modelId : isImageModelMode && parsedImageModelSetting ? parsedImageModelSetting.modelId : config?.getModel() || MAINLINE_CODER_MODEL;
11092
+ const activeRuntimeSnapshot = isFastModelMode || isVoiceModelMode || isVisionModelMode || isImageModelMode ? void 0 : config?.getActiveRuntimeModelSnapshot?.();
10995
11093
  const currentBaseUrl = config?.getModelsConfig().getGenerationConfig()?.baseUrl;
10996
11094
  const preferredFastModelEntry = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.authType ? availableModelEntries.find(
10997
11095
  ({ authType: t2, model }) => t2 === parsedFastModelSetting.authType && model.id === parsedFastModelSetting.modelId
@@ -11007,6 +11105,11 @@ function ModelDialog({
11007
11105
  ) : availableModelEntries.find(
11008
11106
  ({ model }) => model.id === parsedVisionModelSetting.modelId && matchesVisionModelBaseUrl(model)
11009
11107
  ) : void 0;
11108
+ const preferredImageModelEntry = isImageModelMode && parsedImageModelSetting ? parsedImageModelSetting.authType ? availableModelEntries.find(
11109
+ ({ authType: t2, model }) => t2 === parsedImageModelSetting.authType && model.id === parsedImageModelSetting.modelId && (!parsedImageModelValue?.baseUrl || model.baseUrl === parsedImageModelValue.baseUrl)
11110
+ ) : availableModelEntries.find(
11111
+ ({ model }) => model.id === parsedImageModelSetting.modelId && (!parsedImageModelValue?.baseUrl || model.baseUrl === parsedImageModelValue.baseUrl)
11112
+ ) : void 0;
11010
11113
  const preferredKey = activeRuntimeSnapshot ? activeRuntimeSnapshot.id : preferredVoiceModelEntry ? buildModelSelectionKey(
11011
11114
  preferredVoiceModelEntry.authType,
11012
11115
  preferredVoiceModelEntry.model.id,
@@ -11015,14 +11118,22 @@ function ModelDialog({
11015
11118
  preferredVisionModelEntry.authType,
11016
11119
  preferredVisionModelEntry.model.id,
11017
11120
  preferredVisionModelEntry.model.baseUrl
11121
+ ) : preferredImageModelEntry ? buildModelSelectionKey(
11122
+ preferredImageModelEntry.authType,
11123
+ preferredImageModelEntry.model.id,
11124
+ preferredImageModelEntry.model.baseUrl
11018
11125
  ) : preferredFastModelEntry ? buildModelSelectionKey(
11019
11126
  preferredFastModelEntry.authType,
11020
11127
  preferredFastModelEntry.model.id,
11021
11128
  preferredFastModelEntry.model.baseUrl
11022
- ) : authType ? buildModelSelectionKey(authType, preferredModelId, currentBaseUrl) : "";
11129
+ ) : authType ? buildModelSelectionKey(
11130
+ authType,
11131
+ preferredModelId,
11132
+ currentBaseUrl
11133
+ ) : "";
11023
11134
  useKeypress(
11024
11135
  (key) => {
11025
- if (key.name === "escape" || key.name === "left" && (isFastModelMode || isVoiceModelMode || isVisionModelMode)) {
11136
+ if (key.name === "escape" || key.name === "left" && (isFastModelMode || isVoiceModelMode || isVisionModelMode || isImageModelMode)) {
11026
11137
  onClose();
11027
11138
  }
11028
11139
  },
@@ -11135,6 +11246,36 @@ ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge ma
11135
11246
  onClose();
11136
11247
  return;
11137
11248
  }
11249
+ if (isImageModelMode) {
11250
+ if (!selectedEntry || !config) {
11251
+ setErrorMessage(t("Selected image model is unavailable."));
11252
+ return;
11253
+ }
11254
+ const imageModel = encodeVisionModelSelector(selected);
11255
+ const imageModelDisplay = parseVisionModelSetting(imageModel)?.selector ?? imageModel;
11256
+ if (!config.resolveImageGenerationModel(imageModel)) {
11257
+ setErrorMessage(
11258
+ t(
11259
+ "'{{model}}' must declare a valid HTTPS baseUrl and credential environment variable.",
11260
+ { model: imageModelDisplay }
11261
+ )
11262
+ );
11263
+ return;
11264
+ }
11265
+ const scope = resolvePersistScope(settings, persistScope);
11266
+ settings.setValue(scope, "imageModel", imageModel);
11267
+ await config.setImageModel(imageModel);
11268
+ const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11269
+ uiState?.historyManager.addItem(
11270
+ {
11271
+ type: "success",
11272
+ text: `${t("Image Model")}: ${imageModelDisplay}${scopeSuffix}`
11273
+ },
11274
+ Date.now()
11275
+ );
11276
+ onClose();
11277
+ return;
11278
+ }
11138
11279
  const isQwenOAuthSelection = selected.startsWith(`${"qwen-oauth" /* QWEN_OAUTH */}::`) || selected.startsWith("$runtime|") && selected.split("|")[1] === "qwen-oauth" /* QWEN_OAUTH */;
11139
11280
  const isRuntimeOAuthSelection = selected.startsWith(
11140
11281
  `$runtime|${"qwen-oauth" /* QWEN_OAUTH */}|`
@@ -11222,6 +11363,7 @@ ${baseErrorMessage}`);
11222
11363
  isFastModelMode,
11223
11364
  isVoiceModelMode,
11224
11365
  isVisionModelMode,
11366
+ isImageModelMode,
11225
11367
  availableModelEntries,
11226
11368
  persistScope
11227
11369
  ]
@@ -11236,7 +11378,7 @@ ${baseErrorMessage}`);
11236
11378
  padding: 1,
11237
11379
  width: "100%",
11238
11380
  children: [
11239
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { bold: true, children: (isVoiceModelMode ? t("Select Voice Model") : isVisionModelMode ? t("Select Vision Model") : isFastModelMode ? t("Select Fast Model") : t("Select Model")) + (persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "") }),
11381
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { bold: true, children: (isVoiceModelMode ? t("Select Voice Model") : isVisionModelMode ? t("Select Vision Model") : isImageModelMode ? t("Select Image Model") : isFastModelMode ? t("Select Fast Model") : t("Select Model")) + (persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "") }),
11240
11382
  !hasModels ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Box_default, { marginTop: 1, flexDirection: "column", children: [
11241
11383
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { color: theme.status.warning, children: t(
11242
11384
  "No models available for the current authentication type ({{authType}}).",
@@ -11332,7 +11474,9 @@ function ArenaStartDialog({
11332
11474
  const [selectedKeys, setSelectedKeys] = (0, import_react35.useState)([]);
11333
11475
  const modelItems = (0, import_react35.useMemo)(() => {
11334
11476
  const allModels = config.getAllConfiguredModels();
11335
- const selectableModels = allModels.filter((model) => !model.isRuntimeModel);
11477
+ const selectableModels = allModels.filter(
11478
+ (model) => !model.isRuntimeModel && !model.imageOnly
11479
+ );
11336
11480
  return selectableModels.map((model) => {
11337
11481
  const token = `${model.authType}:${model.id}`;
11338
11482
  const isQwenOauth = model.authType === "qwen-oauth" /* QWEN_OAUTH */;
@@ -13926,7 +14070,7 @@ var AgentSelectionStep = /* @__PURE__ */ __name(({
13926
14070
  const renderAgentItem = /* @__PURE__ */ __name((agent, index, isSelected) => {
13927
14071
  const textColor = isSelected ? theme.text.accent : theme.text.primary;
13928
14072
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Box_default, { alignItems: "center", children: [
13929
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Text, { color: isSelected ? theme.text.accent : theme.text.primary, children: isSelected ? "\u25CF" : " " }) }),
14073
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Text, { color: isSelected ? theme.text.accent : theme.text.primary, children: isSelected ? ICON.CIRCLE_FILLED : " " }) }),
13930
14074
  /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Text, { color: textColor, wrap: "truncate", children: [
13931
14075
  agent.name,
13932
14076
  agent.isBuiltin && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Text, { color: isSelected ? theme.text.accent : theme.text.secondary, children: [
@@ -18001,7 +18145,7 @@ var InstalledTab = /* @__PURE__ */ __name(({
18001
18145
  const item = row.item;
18002
18146
  const globalIndex = indexByKey.get(item.key) ?? -1;
18003
18147
  const isSelected = globalIndex === selectedIndex;
18004
- const marker = isSelected ? "\u25CF" : " ";
18148
+ const marker = isSelected ? ICON.CIRCLE_FILLED : " ";
18005
18149
  const isChild = item.kind === "mcp" && !!item.parentExtension;
18006
18150
  const kindBadge = item.kind === "mcp" ? t("MCP") : t("Extension v{{version}}", {
18007
18151
  // Persisted marketplace metadata: `version` is stored verbatim
@@ -18040,7 +18184,10 @@ var InstalledTab = /* @__PURE__ */ __name(({
18040
18184
  isChild ? " \u2514 " : "",
18041
18185
  item.name
18042
18186
  ] }),
18043
- item.isFavorite ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Text, { color: theme.status.warning, children: " \u2605" }) : null
18187
+ item.isFavorite ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Text, { color: theme.status.warning, children: [
18188
+ " ",
18189
+ ICON.STAR
18190
+ ] }) : null
18044
18191
  ] }),
18045
18192
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Text, { color: isSelected ? theme.text.accent : theme.text.secondary, children: [
18046
18193
  kindBadge,
@@ -18463,7 +18610,7 @@ var SourcesTab = /* @__PURE__ */ __name(({
18463
18610
  count: String(installedHere.length)
18464
18611
  }) }),
18465
18612
  installedHere.slice(0, INSTALLED_PREVIEW_LIMIT).map((p) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Box_default, { children: [
18466
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.status.success, children: "\u25CF" }) }),
18613
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.status.success, children: ICON.CIRCLE_FILLED }) }),
18467
18614
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.text.primary, children: stripUnsafeCharacters(p.name) })
18468
18615
  ] }, p.name)),
18469
18616
  installedHere.length > INSTALLED_PREVIEW_LIMIT ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.text.secondary, children: t("... and {{count}} more", {
@@ -18514,7 +18661,7 @@ var SourcesTab = /* @__PURE__ */ __name(({
18514
18661
  const isSelected = index === selectedIndex;
18515
18662
  const labelColor = isSelected ? theme.text.accent : isAction ? theme.text.link : theme.text.primary;
18516
18663
  return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Box_default, { children: [
18517
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: isSelected ? theme.text.accent : theme.text.primary, children: isSelected ? "\u25CF" : " " }) }),
18664
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Box_default, { minWidth: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: isSelected ? theme.text.accent : theme.text.primary, children: isSelected ? ICON.CIRCLE_FILLED : " " }) }),
18518
18665
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: labelColor, children: label }) }),
18519
18666
  rightText ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.text.secondary, children: rightText }) : null
18520
18667
  ] }, `row-${index}`);
@@ -18889,7 +19036,8 @@ var ServerListStep = /* @__PURE__ */ __name(({
18889
19036
  servers.some(
18890
19037
  (s) => s.status === "disconnected" && !s.isDisabled && !s.approvalState
18891
19038
  ) && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Text, { color: theme.status.warning, children: [
18892
- "\u203B ",
19039
+ ICON.REFERENCE,
19040
+ " ",
18893
19041
  t("Run qwen --debug to see error logs")
18894
19042
  ] }) })
18895
19043
  ] });
@@ -22502,7 +22650,7 @@ __name(treeRowPrefix, "treeRowPrefix");
22502
22650
  function statusGlyph(status) {
22503
22651
  switch (status) {
22504
22652
  case "running":
22505
- return "\u25CB";
22653
+ return ICON.CIRCLE_EMPTY;
22506
22654
  case "paused":
22507
22655
  return "\u23F8";
22508
22656
  case "completed":
@@ -22511,7 +22659,7 @@ function statusGlyph(status) {
22511
22659
  case "cancelled":
22512
22660
  return "\u2716";
22513
22661
  default:
22514
- return "\u25CB";
22662
+ return ICON.CIRCLE_EMPTY;
22515
22663
  }
22516
22664
  }
22517
22665
  __name(statusGlyph, "statusGlyph");
@@ -24134,6 +24282,7 @@ var DialogManager = /* @__PURE__ */ __name(({
24134
24282
  isFastModelMode: uiState.isFastModelMode,
24135
24283
  isVoiceModelMode: uiState.isVoiceModelMode,
24136
24284
  isVisionModelMode: uiState.isVisionModelMode,
24285
+ isImageModelMode: uiState.isImageModelMode,
24137
24286
  persistScope: uiState.modelDialogPersistScope,
24138
24287
  availableTerminalHeight: listDialogHeight
24139
24288
  }
@@ -24665,6 +24814,23 @@ var PrepareLabel = import_react80.default.memo(_PrepareLabel);
24665
24814
 
24666
24815
  // packages/cli/src/ui/components/SuggestionsDisplay.tsx
24667
24816
  var import_jsx_runtime103 = __toESM(require_jsx_runtime(), 1);
24817
+ function categoryLabel(cat) {
24818
+ switch (cat) {
24819
+ case "all":
24820
+ return t("All");
24821
+ case "file":
24822
+ return t("Files");
24823
+ case "session":
24824
+ return t("Sessions");
24825
+ case "mcp":
24826
+ return t("MCP");
24827
+ case "extension":
24828
+ return t("Extensions");
24829
+ default:
24830
+ return cat;
24831
+ }
24832
+ }
24833
+ __name(categoryLabel, "categoryLabel");
24668
24834
  var MIN_DESCRIPTION_WIDTH = 12;
24669
24835
  var ACTIVE_MARKER_WIDTH = 2;
24670
24836
  function normalizeDescription(description) {
@@ -24682,27 +24848,31 @@ function SuggestionsDisplay({
24682
24848
  expandedIndex,
24683
24849
  onHoverIndex,
24684
24850
  onSelectIndex,
24685
- mouseEnabled
24851
+ mouseEnabled,
24852
+ activeCategory = "all",
24853
+ availableCategories
24686
24854
  }) {
24687
24855
  const containerRef = (0, import_react81.useRef)(null);
24688
24856
  const itemRefs = (0, import_react81.useRef)([]);
24689
24857
  if (isLoading) {
24690
24858
  return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Box_default, { width, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: "gray", children: t("Loading suggestions...") }) });
24691
24859
  }
24692
- if (suggestions.length === 0) {
24860
+ const filteredSuggestions = activeCategory === "all" ? suggestions : suggestions.filter((s) => (s.category ?? "file") === activeCategory);
24861
+ const showTabBar = (availableCategories?.length ?? 0) > 2;
24862
+ if (filteredSuggestions.length === 0) {
24693
24863
  return null;
24694
24864
  }
24695
24865
  const startIndex = scrollOffset;
24696
24866
  const endIndex = Math.min(
24697
24867
  scrollOffset + MAX_SUGGESTIONS_TO_SHOW,
24698
- suggestions.length
24868
+ filteredSuggestions.length
24699
24869
  );
24700
- const visibleSuggestions = suggestions.slice(startIndex, endIndex);
24870
+ const visibleSuggestions = filteredSuggestions.slice(startIndex, endIndex);
24701
24871
  const getFullLabel = /* @__PURE__ */ __name((s) => [s.label, s.argumentHint, s.sourceBadge].filter(Boolean).join(" "), "getFullLabel");
24702
24872
  const maxLabelLength = Math.max(
24703
- ...suggestions.map((s) => getFullLabel(s).length)
24873
+ ...filteredSuggestions.map((s) => getFullLabel(s).length)
24704
24874
  );
24705
- const describedLabelLengths = suggestions.filter((s) => s.description).map((s) => getFullLabel(s).length);
24875
+ const describedLabelLengths = filteredSuggestions.filter((s) => s.description).map((s) => getFullLabel(s).length);
24706
24876
  const contentWidth = Math.max(width - ACTIVE_MARKER_WIDTH, 1);
24707
24877
  const labelColumnWidth = mode === "slash" ? Math.min(maxLabelLength, Math.floor(contentWidth * 0.5)) : describedLabelLengths.length > 0 ? Math.min(
24708
24878
  Math.max(...describedLabelLengths),
@@ -24719,6 +24889,20 @@ function SuggestionsDisplay({
24719
24889
  onSelectIndex
24720
24890
  }
24721
24891
  ),
24892
+ showTabBar && availableCategories && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Box_default, { flexDirection: "row", marginBottom: 1, children: [
24893
+ availableCategories.map((cat, i) => {
24894
+ const active = cat === activeCategory;
24895
+ return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Box_default, { marginLeft: i === 0 ? 0 : 1, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
24896
+ Text,
24897
+ {
24898
+ color: active ? theme.background.primary : theme.text.secondary,
24899
+ backgroundColor: active ? theme.text.accent : void 0,
24900
+ children: ` ${categoryLabel(cat)} `
24901
+ }
24902
+ ) }, cat);
24903
+ }),
24904
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Box_default, { marginLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: theme.text.secondary, children: t("(Ctrl+\u2190/\u2192 to switch)") }) })
24905
+ ] }),
24722
24906
  scrollOffset > 0 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: theme.text.primary, children: "\u25B2" }),
24723
24907
  visibleSuggestions.map((suggestion, index) => {
24724
24908
  const originalIndex = startIndex + index;
@@ -24784,12 +24968,12 @@ function SuggestionsDisplay({
24784
24968
  `${suggestion.value}-${originalIndex}`
24785
24969
  );
24786
24970
  }),
24787
- endIndex < suggestions.length && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: "gray", children: "\u25BC" }),
24788
- suggestions.length > MAX_SUGGESTIONS_TO_SHOW && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Text, { color: "gray", children: [
24971
+ endIndex < filteredSuggestions.length && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: "gray", children: "\u25BC" }),
24972
+ filteredSuggestions.length > MAX_SUGGESTIONS_TO_SHOW && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Text, { color: "gray", children: [
24789
24973
  "(",
24790
24974
  activeIndex + 1,
24791
24975
  "/",
24792
- suggestions.length,
24976
+ filteredSuggestions.length,
24793
24977
  ")"
24794
24978
  ] })
24795
24979
  ] });
@@ -25015,8 +25199,15 @@ var import_react85 = __toESM(require_react(), 1);
25015
25199
  // packages/cli/src/ui/hooks/useCompletion.ts
25016
25200
  init_esbuild_shims();
25017
25201
  var import_react84 = __toESM(require_react(), 1);
25202
+ var CATEGORY_ORDER = [
25203
+ "file",
25204
+ "session",
25205
+ "mcp",
25206
+ "extension"
25207
+ ];
25018
25208
  function useCompletion(options = {}) {
25019
- const [suggestions, setSuggestions] = (0, import_react84.useState)([]);
25209
+ const [rawSuggestions, setSuggestions] = (0, import_react84.useState)([]);
25210
+ const [activeCategory, setActiveCategory] = (0, import_react84.useState)("all");
25020
25211
  const [activeSuggestionIndex, setActiveSuggestionIndex] = (0, import_react84.useState)(-1);
25021
25212
  const [visibleStartIndex, setVisibleStartIndex] = (0, import_react84.useState)(0);
25022
25213
  const [showSuggestions, setShowSuggestions] = (0, import_react84.useState)(false);
@@ -25024,8 +25215,48 @@ function useCompletion(options = {}) {
25024
25215
  const [isPerfectMatch, setIsPerfectMatch] = (0, import_react84.useState)(false);
25025
25216
  const [dismissed, setDismissed] = (0, import_react84.useState)(false);
25026
25217
  const skipNextClearRef = (0, import_react84.useRef)(false);
25218
+ const availableCategories = (0, import_react84.useMemo)(() => {
25219
+ const present = new Set(rawSuggestions.map((s) => s.category ?? "file"));
25220
+ const ordered = CATEGORY_ORDER.filter((c) => present.has(c));
25221
+ return ordered.length > 1 ? ["all", ...ordered] : ["all"];
25222
+ }, [rawSuggestions]);
25223
+ const suggestions = (0, import_react84.useMemo)(
25224
+ () => activeCategory === "all" ? rawSuggestions : rawSuggestions.filter(
25225
+ (s) => (s.category ?? "file") === activeCategory
25226
+ ),
25227
+ [rawSuggestions, activeCategory]
25228
+ );
25229
+ (0, import_react84.useEffect)(() => {
25230
+ if (!availableCategories.includes(activeCategory)) {
25231
+ setActiveCategory("all");
25232
+ setActiveSuggestionIndex(0);
25233
+ setVisibleStartIndex(0);
25234
+ }
25235
+ }, [availableCategories, activeCategory]);
25236
+ (0, import_react84.useEffect)(() => {
25237
+ setActiveSuggestionIndex(
25238
+ (prev) => prev >= suggestions.length && suggestions.length > 0 ? suggestions.length - 1 : prev
25239
+ );
25240
+ setVisibleStartIndex(
25241
+ (prev) => prev >= suggestions.length ? Math.max(0, suggestions.length - MAX_SUGGESTIONS_TO_SHOW) : prev
25242
+ );
25243
+ }, [suggestions.length]);
25244
+ const switchCategory = (0, import_react84.useCallback)(
25245
+ (direction) => {
25246
+ setActiveCategory((cur) => {
25247
+ const idx = availableCategories.indexOf(cur);
25248
+ if (idx === -1) return "all";
25249
+ const next = (idx + direction + availableCategories.length) % availableCategories.length;
25250
+ return availableCategories[next];
25251
+ });
25252
+ setActiveSuggestionIndex(0);
25253
+ setVisibleStartIndex(0);
25254
+ },
25255
+ [availableCategories]
25256
+ );
25027
25257
  const resetCompletionState = (0, import_react84.useCallback)(() => {
25028
25258
  setSuggestions([]);
25259
+ setActiveCategory("all");
25029
25260
  setActiveSuggestionIndex(-1);
25030
25261
  setVisibleStartIndex(0);
25031
25262
  setShowSuggestions(false);
@@ -25099,7 +25330,10 @@ function useCompletion(options = {}) {
25099
25330
  resetCompletionState,
25100
25331
  dismissCompletion,
25101
25332
  navigateUp,
25102
- navigateDown
25333
+ navigateDown,
25334
+ activeCategory,
25335
+ availableCategories,
25336
+ switchCategory
25103
25337
  };
25104
25338
  }
25105
25339
  __name(useCompletion, "useCompletion");
@@ -25221,6 +25455,52 @@ var import_react88 = __toESM(require_react(), 1);
25221
25455
  // packages/cli/src/ui/hooks/useAtCompletion.ts
25222
25456
  init_esbuild_shims();
25223
25457
  var import_react86 = __toESM(require_react(), 1);
25458
+
25459
+ // packages/cli/src/ui/hooks/session-completion.ts
25460
+ init_esbuild_shims();
25461
+ var MAX_SESSION_SUGGESTIONS = 20;
25462
+ var SESSION_LIST_CACHE_TTL_MS = 3e3;
25463
+ var listingCache = /* @__PURE__ */ new Map();
25464
+ async function listSessionsCached(cwd3, nowMs) {
25465
+ const cached = listingCache.get(cwd3);
25466
+ if (cached && cached.expiresAt > nowMs) {
25467
+ return cached.items;
25468
+ }
25469
+ try {
25470
+ const res = await new SessionService(cwd3).listSessions({
25471
+ size: MAX_SESSION_SUGGESTIONS
25472
+ });
25473
+ listingCache.set(cwd3, {
25474
+ items: res.items,
25475
+ expiresAt: nowMs + SESSION_LIST_CACHE_TTL_MS
25476
+ });
25477
+ return res.items;
25478
+ } catch {
25479
+ return [];
25480
+ }
25481
+ }
25482
+ __name(listSessionsCached, "listSessionsCached");
25483
+ async function getSessionSuggestions(cwd3, pattern, nowMs = Date.now()) {
25484
+ const items = await listSessionsCached(cwd3, nowMs);
25485
+ const stripped = pattern.startsWith(SESSION_MENTION_PREFIX) ? pattern.slice(SESSION_MENTION_PREFIX.length) : pattern.toLowerCase() === "session" ? "" : pattern;
25486
+ const needle = stripped.trim().toLowerCase();
25487
+ return items.map((s) => {
25488
+ const label = s.customTitle?.trim() || s.prompt || s.sessionId;
25489
+ const description = s.customTitle ? s.prompt : void 0;
25490
+ return {
25491
+ label,
25492
+ value: buildSessionRef(s.sessionId),
25493
+ description,
25494
+ sourceBadge: t("Session"),
25495
+ category: "session"
25496
+ };
25497
+ }).filter(
25498
+ (sug) => needle.length === 0 ? true : `${sug.label} ${sug.description ?? ""}`.toLowerCase().includes(needle)
25499
+ );
25500
+ }
25501
+ __name(getSessionSuggestions, "getSessionSuggestions");
25502
+
25503
+ // packages/cli/src/ui/hooks/useAtCompletion.ts
25224
25504
  function rankResourceMatch(uri, friendly, query) {
25225
25505
  if (uri.startsWith(query)) return 0;
25226
25506
  if (friendly.startsWith(query)) return 1;
@@ -25465,13 +25745,21 @@ function useAtCompletion(props) {
25465
25745
  ...mcpServerMentionSuggestions,
25466
25746
  ...serverSuggestions,
25467
25747
  ...globalResourceSuggestions
25468
- ];
25748
+ ].map((s) => ({ ...s, category: s.category ?? "mcp" }));
25749
+ const sessionPromise = getSessionSuggestions(cwd3, state.pattern);
25469
25750
  if (!fileSearch.current) {
25470
- if (mcpSuggestions.length > 0) {
25751
+ const sessionSuggestions = await sessionPromise.catch(
25752
+ () => []
25753
+ );
25754
+ if (cancelled) {
25755
+ return;
25756
+ }
25757
+ const scoped = [...mcpSuggestions, ...sessionSuggestions];
25758
+ if (scoped.length > 0) {
25471
25759
  if (slowSearchTimer.current) {
25472
25760
  clearTimeout(slowSearchTimer.current);
25473
25761
  }
25474
- dispatch({ type: "SEARCH_SUCCESS", payload: mcpSuggestions });
25762
+ dispatch({ type: "SEARCH_SUCCESS", payload: scoped });
25475
25763
  }
25476
25764
  return;
25477
25765
  }
@@ -25497,16 +25785,34 @@ function useAtCompletion(props) {
25497
25785
  const fileSuggestions = results.map((p) => ({
25498
25786
  label: p,
25499
25787
  value: escapePath(p),
25500
- isDirectory: p.endsWith("/")
25788
+ isDirectory: p.endsWith("/"),
25789
+ category: "file"
25501
25790
  }));
25791
+ const sessionSuggestions = await sessionPromise.catch(
25792
+ () => []
25793
+ );
25794
+ if (controller.signal.aborted || cancelled) {
25795
+ return;
25796
+ }
25502
25797
  dispatch({
25503
25798
  type: "SEARCH_SUCCESS",
25504
- payload: [...mcpSuggestions, ...fileSuggestions]
25799
+ payload: [
25800
+ ...mcpSuggestions,
25801
+ ...fileSuggestions,
25802
+ ...sessionSuggestions
25803
+ ]
25505
25804
  });
25506
25805
  } catch (error) {
25507
25806
  if (!(error instanceof Error && error.name === "AbortError")) {
25508
- if (mcpSuggestions.length > 0) {
25509
- dispatch({ type: "SEARCH_SUCCESS", payload: mcpSuggestions });
25807
+ const sessionSuggestions = await sessionPromise.catch(
25808
+ () => []
25809
+ );
25810
+ if (cancelled) {
25811
+ return;
25812
+ }
25813
+ const scoped = [...mcpSuggestions, ...sessionSuggestions];
25814
+ if (scoped.length > 0) {
25815
+ dispatch({ type: "SEARCH_SUCCESS", payload: scoped });
25510
25816
  } else {
25511
25817
  dispatch({ type: "ERROR" });
25512
25818
  }
@@ -26165,7 +26471,10 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26165
26471
  resetCompletionState,
26166
26472
  dismissCompletion,
26167
26473
  navigateUp,
26168
- navigateDown
26474
+ navigateDown,
26475
+ activeCategory,
26476
+ availableCategories,
26477
+ switchCategory
26169
26478
  } = useCompletion({ query });
26170
26479
  useAtCompletion({
26171
26480
  enabled: completionMode === "AT" /* AT */,
@@ -26316,7 +26625,10 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26316
26625
  navigateDown,
26317
26626
  handleAutocomplete,
26318
26627
  completionMode,
26319
- midInputGhostText
26628
+ midInputGhostText,
26629
+ activeCategory,
26630
+ availableCategories,
26631
+ switchCategory
26320
26632
  };
26321
26633
  }
26322
26634
  __name(useCommandCompletion, "useCommandCompletion");
@@ -27148,7 +27460,7 @@ var FeedbackDialog = /* @__PURE__ */ __name(() => {
27148
27460
  );
27149
27461
  return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Box_default, { flexDirection: "column", marginY: 1, children: [
27150
27462
  /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Box_default, { children: [
27151
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Text, { color: "cyan", children: "\u25CF " }),
27463
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Text, { color: "cyan", children: ICON.CIRCLE_FILLED + " " }),
27152
27464
  /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Text, { bold: true, children: t("How is Qwen doing this session? (optional)") })
27153
27465
  ] }),
27154
27466
  /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Box_default, { marginTop: 1, children: [
@@ -29511,6 +29823,18 @@ ${currentText}`);
29511
29823
  return true;
29512
29824
  }
29513
29825
  if (showCompletionSuggestions) {
29826
+ if ((completion.availableCategories?.length ?? 0) > 2) {
29827
+ if (keyMatchers["completionTabRight" /* COMPLETION_TAB_RIGHT */](key)) {
29828
+ completion.switchCategory(1);
29829
+ setExpandedSuggestionIndex(-1);
29830
+ return true;
29831
+ }
29832
+ if (keyMatchers["completionTabLeft" /* COMPLETION_TAB_LEFT */](key)) {
29833
+ completion.switchCategory(-1);
29834
+ setExpandedSuggestionIndex(-1);
29835
+ return true;
29836
+ }
29837
+ }
29514
29838
  if (completion.suggestions.length > 1) {
29515
29839
  const isCompletionUpKey = keyMatchers["completionUp" /* COMPLETION_UP */](key);
29516
29840
  const isCompletionDownKey = keyMatchers["completionDown" /* COMPLETION_DOWN */](key);
@@ -30051,6 +30375,8 @@ ${currentText}`);
30051
30375
  mode: buffer.text.startsWith("/") && !reverseSearchActive && !commandSearchActive ? "slash" : "reverse",
30052
30376
  expandedIndex: expandedSuggestionIndex,
30053
30377
  mouseEnabled: mouseInteractionsEnabled,
30378
+ activeCategory: suggestionsFromExport || commandSearchActive || reverseSearchActive ? void 0 : completion.activeCategory,
30379
+ availableCategories: suggestionsFromExport || commandSearchActive || reverseSearchActive ? void 0 : completion.availableCategories,
30054
30380
  onHoverIndex: suggestionsFromExport ? void 0 : handleSuggestionHover,
30055
30381
  onSelectIndex: suggestionsFromExport ? void 0 : handleSuggestionSelect
30056
30382
  }
@@ -30848,7 +31174,8 @@ var CronPill = /* @__PURE__ */ __name(({ count }) => {
30848
31174
  if (count <= 0) return null;
30849
31175
  const noun = count === 1 ? "scheduled task" : "scheduled tasks";
30850
31176
  return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(Text, { color: theme.text.accent, children: [
30851
- "\u25CE ",
31177
+ ICON.BULLSEYE,
31178
+ " ",
30852
31179
  count,
30853
31180
  " ",
30854
31181
  noun
@@ -30857,11 +31184,24 @@ var CronPill = /* @__PURE__ */ __name(({ count }) => {
30857
31184
 
30858
31185
  // packages/cli/src/ui/components/Footer.tsx
30859
31186
  var import_jsx_runtime116 = __toESM(require_jsx_runtime(), 1);
31187
+ var PasteProgressBar = /* @__PURE__ */ __name(({
31188
+ progress
31189
+ }) => {
31190
+ const { receivedBytes } = progress;
31191
+ const kb = receivedBytes / 1024;
31192
+ const label = kb >= 1 ? `${kb.toFixed(0)} KB` : `${receivedBytes} B`;
31193
+ return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Text, { dimColor: true, children: [
31194
+ t("Pasting\u2026"),
31195
+ " ",
31196
+ label
31197
+ ] });
31198
+ }, "PasteProgressBar");
30860
31199
  var Footer = /* @__PURE__ */ __name(() => {
30861
31200
  const uiState = useUIState();
30862
31201
  const config = useConfig();
30863
31202
  const settings = useSettings();
30864
31203
  const { vimEnabled, vimMode } = useVimModeState();
31204
+ const { pasteProgress } = useKeypressContext();
30865
31205
  const {
30866
31206
  lines: statusLineLines,
30867
31207
  useThemeColors,
@@ -30880,7 +31220,7 @@ var Footer = /* @__PURE__ */ __name(() => {
30880
31220
  const debugMode = config.getDebugMode();
30881
31221
  const contextWindowSize = config.getContentGeneratorConfig()?.contextWindowSize;
30882
31222
  const suppressHint = statusLineLines.length > 0;
30883
- const leftBottomContent = uiState.ctrlCPressedOnce ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.status.warning, children: t("Press Ctrl+C again to exit.") }) : uiState.ctrlDPressedOnce ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.status.warning, children: t("Press Ctrl+D again to exit.") }) : uiState.showEscapePrompt ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: t("Press Esc again to clear.") }) : uiState.rewindEscPending ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: t("Press Esc again to rewind conversation.") }) : vimEnabled && vimMode === "INSERT" ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: "-- INSERT --" }) : vimEnabled && vimMode === "NORMAL" ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: "-- NORMAL --" }) : uiState.shellModeActive ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ShellModeIndicator, {}) : configInitMessage ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Text, { color: theme.text.secondary, children: [
31223
+ const leftBottomContent = uiState.ctrlCPressedOnce ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.status.warning, children: t("Press Ctrl+C again to exit.") }) : uiState.ctrlDPressedOnce ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.status.warning, children: t("Press Ctrl+D again to exit.") }) : uiState.showEscapePrompt ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: t("Press Esc again to clear.") }) : pasteProgress.active ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(PasteProgressBar, { progress: pasteProgress }) : uiState.rewindEscPending ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: t("Press Esc again to rewind conversation.") }) : vimEnabled && vimMode === "INSERT" ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: "-- INSERT --" }) : vimEnabled && vimMode === "NORMAL" ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Text, { color: theme.text.secondary, children: "-- NORMAL --" }) : uiState.shellModeActive ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ShellModeIndicator, {}) : configInitMessage ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Text, { color: theme.text.secondary, children: [
30884
31224
  /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(GeminiSpinner, {}),
30885
31225
  " ",
30886
31226
  configInitMessage
@@ -31375,9 +31715,9 @@ __name(getStickyTodoMaxVisibleItemsForMode, "getStickyTodoMaxVisibleItemsForMode
31375
31715
  // packages/cli/src/ui/components/StickyTodoList.tsx
31376
31716
  var import_jsx_runtime121 = __toESM(require_jsx_runtime(), 1);
31377
31717
  var STATUS_ICONS = {
31378
- pending: "\u25CB",
31379
- in_progress: "\u25D0",
31380
- completed: "\u25CF"
31718
+ pending: ICON.CIRCLE_EMPTY,
31719
+ in_progress: ICON.CIRCLE_LEFT_HALF,
31720
+ completed: ICON.CIRCLE_FILLED
31381
31721
  };
31382
31722
  function clampVisibleTodoCount(value) {
31383
31723
  if (!Number.isFinite(value)) {
@@ -33076,16 +33416,21 @@ var useModelCommand = /* @__PURE__ */ __name(() => {
33076
33416
  const [isFastModelMode, setIsFastModelMode] = (0, import_react123.useState)(false);
33077
33417
  const [isVoiceModelMode, setIsVoiceModelMode] = (0, import_react123.useState)(false);
33078
33418
  const [isVisionModelMode, setIsVisionModelMode] = (0, import_react123.useState)(false);
33419
+ const [isImageModelMode, setIsImageModelMode] = (0, import_react123.useState)(false);
33079
33420
  const [modelDialogPersistScope, setModelDialogPersistScope] = (0, import_react123.useState)(void 0);
33080
33421
  const openModelDialog = (0, import_react123.useCallback)(
33081
33422
  (options) => {
33082
33423
  const voiceModelMode = options?.voiceModelMode ?? false;
33083
33424
  const visionModelMode = options?.visionModelMode ?? false;
33425
+ const imageModelMode = options?.imageModelMode ?? false;
33084
33426
  setIsFastModelMode(
33085
- voiceModelMode || visionModelMode ? false : options?.fastModelMode ?? false
33427
+ voiceModelMode || visionModelMode || imageModelMode ? false : options?.fastModelMode ?? false
33428
+ );
33429
+ setIsVoiceModelMode(
33430
+ visionModelMode || imageModelMode ? false : voiceModelMode
33086
33431
  );
33087
- setIsVoiceModelMode(visionModelMode ? false : voiceModelMode);
33088
- setIsVisionModelMode(visionModelMode);
33432
+ setIsVisionModelMode(imageModelMode ? false : visionModelMode);
33433
+ setIsImageModelMode(imageModelMode);
33089
33434
  setModelDialogPersistScope(options?.persistScope);
33090
33435
  setIsModelDialogOpen(true);
33091
33436
  },
@@ -33096,6 +33441,7 @@ var useModelCommand = /* @__PURE__ */ __name(() => {
33096
33441
  setIsFastModelMode(false);
33097
33442
  setIsVoiceModelMode(false);
33098
33443
  setIsVisionModelMode(false);
33444
+ setIsImageModelMode(false);
33099
33445
  setModelDialogPersistScope(void 0);
33100
33446
  }, []);
33101
33447
  return {
@@ -33103,6 +33449,7 @@ var useModelCommand = /* @__PURE__ */ __name(() => {
33103
33449
  isFastModelMode,
33104
33450
  isVoiceModelMode,
33105
33451
  isVisionModelMode,
33452
+ isImageModelMode,
33106
33453
  modelDialogPersistScope,
33107
33454
  openModelDialog,
33108
33455
  closeModelDialog
@@ -33203,6 +33550,7 @@ var useEffortCommand = /* @__PURE__ */ __name((loadedSettings, config, addItem)
33203
33550
  init_esbuild_shims();
33204
33551
  var import_react126 = __toESM(require_react(), 1);
33205
33552
  import { randomUUID } from "node:crypto";
33553
+ var BACKGROUND_WORK_BRANCH_BLOCKED_MESSAGE = "Stop the current session's running background tasks before branching the conversation.";
33206
33554
  function deriveFirstPrompt(messages) {
33207
33555
  for (const record of messages) {
33208
33556
  if (record.type !== "user") continue;
@@ -33224,6 +33572,16 @@ function useBranchCommand(options) {
33224
33572
  const handleBranch = (0, import_react126.useCallback)(
33225
33573
  async (name) => {
33226
33574
  if (!config) return;
33575
+ if (hasBlockingBackgroundWork(config)) {
33576
+ historyManager.addItem(
33577
+ {
33578
+ type: "error",
33579
+ text: t(BACKGROUND_WORK_BRANCH_BLOCKED_MESSAGE)
33580
+ },
33581
+ Date.now()
33582
+ );
33583
+ return;
33584
+ }
33227
33585
  const oldSessionId = config.getSessionId();
33228
33586
  const newSessionId = randomUUID();
33229
33587
  const sessionService = config.getSessionService();
@@ -33277,6 +33635,7 @@ function useBranchCommand(options) {
33277
33635
  historyManager.clearItems();
33278
33636
  historyManager.loadHistory(uiHistoryItems);
33279
33637
  uiSwapped = true;
33638
+ resetBackgroundStateForSessionSwitch(config);
33280
33639
  try {
33281
33640
  restoreGoalFromHistory(
33282
33641
  uiHistoryItems,
@@ -33395,6 +33754,7 @@ function useResumeCommand(options) {
33395
33754
  const oldSessionId = config.getSessionId();
33396
33755
  let coreSwapped = false;
33397
33756
  let uiSwapped = false;
33757
+ let recoveredBackgroundAgentsNotice = null;
33398
33758
  try {
33399
33759
  const cwd3 = config.getTargetDir();
33400
33760
  const sessionService = new SessionService(cwd3);
@@ -33435,22 +33795,30 @@ function useResumeCommand(options) {
33435
33795
  await config.getGeminiClient()?.initialize?.();
33436
33796
  const recovered = await config.loadPausedBackgroundAgents(sessionId);
33437
33797
  if (recovered.length > 0) {
33438
- const recoveredMessage = {
33439
- type: "info" /* INFO */,
33440
- text: config.getBackgroundAgentResumeService().buildRecoveredBackgroundAgentsNotice(recovered.length)
33441
- };
33442
- addItem(recoveredMessage, Date.now());
33798
+ recoveredBackgroundAgentsNotice = config.getBackgroundAgentResumeService().buildRecoveredBackgroundAgentsNotice(recovered.length);
33443
33799
  }
33444
33800
  startNewSession(sessionId);
33445
33801
  setSessionName?.(customTitle ?? null);
33446
33802
  clearItems();
33447
33803
  loadHistory(uiHistoryItems);
33804
+ if (recoveredBackgroundAgentsNotice) {
33805
+ addItem(
33806
+ {
33807
+ type: "info" /* INFO */,
33808
+ text: recoveredBackgroundAgentsNotice
33809
+ },
33810
+ Date.now()
33811
+ );
33812
+ }
33448
33813
  uiSwapped = true;
33449
33814
  remount?.();
33450
33815
  } catch (error) {
33451
33816
  if (coreSwapped && !uiSwapped) {
33452
33817
  try {
33818
+ resetBackgroundStateForSessionSwitch(config);
33453
33819
  config.startNewSession(oldSessionId, void 0);
33820
+ await config.loadPausedBackgroundAgents(oldSessionId).catch(() => {
33821
+ });
33454
33822
  } catch (rollbackErr) {
33455
33823
  config.getDebugLogger().warn(
33456
33824
  `Rollback after failed /resume init failed: ${rollbackErr}`
@@ -34510,6 +34878,12 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
34510
34878
  persistScope: result.persistScope
34511
34879
  });
34512
34880
  return { type: "handled" };
34881
+ case "image-model":
34882
+ actions.openModelDialog({
34883
+ imageModelMode: true,
34884
+ persistScope: result.persistScope
34885
+ });
34886
+ return { type: "handled" };
34513
34887
  case "trust":
34514
34888
  actions.openTrustDialog();
34515
34889
  return { type: "handled" };
@@ -35932,9 +36306,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
35932
36306
  }, [isResponding, toolCalls]);
35933
36307
  (0, import_react136.useEffect)(() => {
35934
36308
  if (config.getApprovalMode() === "yolo" /* YOLO */ && streamingState === "idle" /* Idle */) {
35935
- const lastUserMessageIndex = history.findLastIndex(
35936
- (item) => item.type === "user" /* USER */
35937
- );
36309
+ const lastUserMessageIndex = findLastUserItemIndex(history);
35938
36310
  const turnCount = lastUserMessageIndex === -1 ? 0 : history.length - lastUserMessageIndex;
35939
36311
  if (turnCount > 0) {
35940
36312
  logConversationFinishedEvent(
@@ -37236,7 +37608,12 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37236
37608
  for (const sideEffect of sideEffects) sideEffect();
37237
37609
  config.getChatRecordingService?.()?.recordMidTurnUserMessage(parts, message);
37238
37610
  addItem(
37239
- { type: "notification" /* NOTIFICATION */, text: message },
37611
+ {
37612
+ type: "user" /* USER */,
37613
+ text: message,
37614
+ // Intentionally false: preserves isRealUserTurn/rewind semantics (steer is not a standalone user turn).
37615
+ sentToModel: false
37616
+ },
37240
37617
  Date.now()
37241
37618
  );
37242
37619
  }
@@ -37894,6 +38271,15 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37894
38271
  if (modelSwitchedFromQuotaError) {
37895
38272
  return;
37896
38273
  }
38274
+ const backgroundTaskRegistry = config.getBackgroundTaskRegistry();
38275
+ const backgroundLaunchExhaustedCapacity = backgroundTaskRegistry.getMaxConcurrentBackgroundAgents() === 1 && !backgroundTaskRegistry.canStartBackgroundAgent() && geminiTools.some((toolCall) => {
38276
+ const display = toolCall.response.resultDisplay;
38277
+ return toolCall.request.name === ToolNames.AGENT && typeof display === "object" && display !== null && "type" in display && "status" in display && display.type === "task_execution" && display.status === "background";
38278
+ });
38279
+ if (backgroundLaunchExhaustedCapacity) {
38280
+ geminiClient?.addHistory({ role: "user", parts: responsesToSend });
38281
+ return;
38282
+ }
37897
38283
  const drained = turnCancelledRef.current || abortControllerRef.current?.signal.aborted ? [] : midTurnDrainRef?.current?.() ?? [];
37898
38284
  let drainedSteer;
37899
38285
  if (drained.length > 0) {
@@ -38136,7 +38522,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38136
38522
  notificationQueueRef.current.push({
38137
38523
  displayText,
38138
38524
  modelText,
38139
- sendMessageType: "notification" /* Notification */
38525
+ sendMessageType: "notification" /* Notification */,
38526
+ monitor: { id: meta.monitorId, status: meta.status }
38140
38527
  });
38141
38528
  setNotificationTrigger((n) => n + 1);
38142
38529
  });
@@ -38148,6 +38535,16 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38148
38535
  if (streamingState === "idle" /* Idle */ && !isSubmittingQueryRef.current && notificationQueueRef.current.length > 0) {
38149
38536
  runOutsideAgentContext(() => {
38150
38537
  const queue = notificationQueueRef.current;
38538
+ const monitorRegistry = config.getMonitorRegistry();
38539
+ for (let i = queue.length - 1; i >= 0; i--) {
38540
+ const monitor = queue[i].monitor;
38541
+ if (monitor?.status === "running" && monitorRegistry.get(monitor.id)?.status === "cancelled") {
38542
+ queue.splice(i, 1);
38543
+ }
38544
+ }
38545
+ if (queue.length === 0) {
38546
+ return;
38547
+ }
38151
38548
  const targetType = queue[0].sendMessageType;
38152
38549
  if (targetType === "cron" /* Cron */) {
38153
38550
  const item = queue.shift();
@@ -38181,7 +38578,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38181
38578
  });
38182
38579
  });
38183
38580
  }
38184
- }, [streamingState, submitQuery, notificationTrigger, addItem]);
38581
+ }, [streamingState, submitQuery, notificationTrigger, addItem, config]);
38185
38582
  const teammateQueueRef = (0, import_react136.useRef)([]);
38186
38583
  const [teammateTrigger, setTeammateTrigger] = (0, import_react136.useState)(0);
38187
38584
  (0, import_react136.useEffect)(() => {
@@ -38216,17 +38613,19 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38216
38613
  }, [config]);
38217
38614
  (0, import_react136.useEffect)(() => {
38218
38615
  if (streamingState === "idle" /* Idle */ && !isSubmittingQueryRef.current && teammateQueueRef.current.length > 0) {
38219
- const batch = teammateQueueRef.current.splice(0);
38220
- for (const entry of batch) {
38221
- addItem(
38222
- { type: "notification", text: entry.display },
38223
- Date.now()
38224
- );
38225
- }
38226
- const modelText = batch.map((e) => e.modelText).join("\n\n");
38227
- const display = batch.map((e) => e.display).join("; ");
38228
- submitQuery(modelText, "teammate" /* Teammate */, void 0, {
38229
- notificationDisplayText: display
38616
+ runOutsideAgentContext(() => {
38617
+ const batch = teammateQueueRef.current.splice(0);
38618
+ for (const entry of batch) {
38619
+ addItem(
38620
+ { type: "notification", text: entry.display },
38621
+ Date.now()
38622
+ );
38623
+ }
38624
+ const modelText = batch.map((e) => e.modelText).join("\n\n");
38625
+ const display = batch.map((e) => e.display).join("; ");
38626
+ submitQuery(modelText, "teammate" /* Teammate */, void 0, {
38627
+ notificationDisplayText: display
38628
+ });
38230
38629
  });
38231
38630
  }
38232
38631
  }, [streamingState, submitQuery, teammateTrigger, addItem]);
@@ -39894,14 +40293,15 @@ function shouldFireRecap(history) {
39894
40293
  let lastRecapIndex = -1;
39895
40294
  for (let i = 0; i < history.length; i++) {
39896
40295
  const item = history[i];
39897
- if (item.type === "user") userMessageCount++;
40296
+ if (item.type === "user" && item.sentToModel !== false) userMessageCount++;
39898
40297
  if (item.type === "away_recap") lastRecapIndex = i;
39899
40298
  }
39900
40299
  if (userMessageCount < MIN_USER_MESSAGES_TO_FIRE) return false;
39901
40300
  if (lastRecapIndex === -1) return true;
39902
40301
  let userSinceLast = 0;
39903
40302
  for (let i = lastRecapIndex + 1; i < history.length; i++) {
39904
- if (history[i].type === "user") userSinceLast++;
40303
+ const item = history[i];
40304
+ if (item.type === "user" && item.sentToModel !== false) userSinceLast++;
39905
40305
  }
39906
40306
  return userSinceLast >= MIN_USER_MESSAGES_SINCE_LAST_RECAP;
39907
40307
  }
@@ -40920,16 +41320,23 @@ var AlternateScreen = /* @__PURE__ */ __name(({
40920
41320
  init_esbuild_shims();
40921
41321
  var import_react150 = __toESM(require_react(), 1);
40922
41322
  var import_jsx_runtime133 = __toESM(require_jsx_runtime(), 1);
41323
+ function normalizeError(error) {
41324
+ if (error instanceof Error) {
41325
+ return error;
41326
+ }
41327
+ return new Error(String(error));
41328
+ }
41329
+ __name(normalizeError, "normalizeError");
40923
41330
  var ErrorBoundary = class extends import_react150.Component {
40924
41331
  static {
40925
41332
  __name(this, "ErrorBoundary");
40926
41333
  }
40927
41334
  state = { error: null };
40928
41335
  static getDerivedStateFromError(error) {
40929
- return { error };
41336
+ return { error: normalizeError(error) };
40930
41337
  }
40931
41338
  componentDidCatch(error, info) {
40932
- this.props.onError?.(error, info);
41339
+ this.props.onError?.(normalizeError(error), info);
40933
41340
  }
40934
41341
  reset = /* @__PURE__ */ __name(() => {
40935
41342
  this.setState({ error: null });
@@ -42113,9 +42520,9 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42113
42520
  (0, import_react165.useEffect)(() => {
42114
42521
  const fetchUserMessages = /* @__PURE__ */ __name(async () => {
42115
42522
  const pastMessagesRaw = await logger?.getPreviousUserMessages() || [];
42116
- const currentSessionUserMessages = historyManager.history.filter(
42117
- (item) => item.type === "user" && typeof item.text === "string" && item.text.trim() !== ""
42118
- ).map((item) => item.text).reverse();
42523
+ const currentSessionUserMessages = realUserPromptTexts(
42524
+ historyManager.history
42525
+ ).reverse();
42119
42526
  const combinedMessages = [
42120
42527
  ...currentSessionUserMessages,
42121
42528
  ...pastMessagesRaw
@@ -42244,6 +42651,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42244
42651
  isFastModelMode,
42245
42652
  isVoiceModelMode,
42246
42653
  isVisionModelMode,
42654
+ isImageModelMode,
42247
42655
  modelDialogPersistScope,
42248
42656
  openModelDialog,
42249
42657
  closeModelDialog
@@ -42882,6 +43290,20 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42882
43290
  }
42883
43291
  }
42884
43292
  const userPromptText = submittedValue;
43293
+ if (["/quit", "/exit", "exit", "quit", ":q", ":q!", ":wq", ":wq!"].includes(
43294
+ userPromptText.trim()
43295
+ )) {
43296
+ void handleSlashCommand("/quit");
43297
+ return;
43298
+ }
43299
+ const recoveredAgentsNotice = !isSlashCommand(userPromptText) && !isBtwCommand(userPromptText) ? config.consumePendingRecoveredAgentsNotice() : null;
43300
+ if (recoveredAgentsNotice) {
43301
+ submittedValue = `<system-reminder>
43302
+ ${recoveredAgentsNotice}
43303
+ </system-reminder>
43304
+
43305
+ ` + submittedValue;
43306
+ }
42885
43307
  const worktreeNotice = pendingWorktreeNoticeRef.current;
42886
43308
  if (worktreeNotice && !isSlashCommand(submittedValue)) {
42887
43309
  pendingWorktreeNoticeRef.current = null;
@@ -42912,12 +43334,6 @@ ${buildWorkflowSteeringNotice()}
42912
43334
  void submitQuery(submittedValue);
42913
43335
  return;
42914
43336
  }
42915
- if (["/quit", "/exit", "exit", "quit", ":q", ":q!", ":wq", ":wq!"].includes(
42916
- submittedValue.trim()
42917
- )) {
42918
- void handleSlashCommand("/quit");
42919
- return;
42920
- }
42921
43337
  const spec = speculationRef.current;
42922
43338
  if (spec.status !== "idle" && spec.suggestion === submittedValue && spec.status === "completed") {
42923
43339
  acceptSpeculation(spec, geminiClient).then((result) => {
@@ -44148,6 +44564,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44148
44564
  isFastModelMode,
44149
44565
  isVoiceModelMode,
44150
44566
  isVisionModelMode,
44567
+ isImageModelMode,
44151
44568
  modelDialogPersistScope,
44152
44569
  isTrustDialogOpen,
44153
44570
  activeArenaDialog,
@@ -44291,6 +44708,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44291
44708
  isFastModelMode,
44292
44709
  isVoiceModelMode,
44293
44710
  isVisionModelMode,
44711
+ isImageModelMode,
44294
44712
  modelDialogPersistScope,
44295
44713
  isTrustDialogOpen,
44296
44714
  activeArenaDialog,
@@ -44924,14 +45342,33 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
44924
45342
  if (useVP) {
44925
45343
  process.stdout.setMaxListeners(0);
44926
45344
  }
45345
+ const appTree = /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
45346
+ ErrorBoundary,
45347
+ {
45348
+ onError: (error, info) => {
45349
+ debugLogger41.error(
45350
+ `[FATAL_RENDER_ERROR] ${error.message}
45351
+ ${info.componentStack ?? ""}
45352
+ ${error.stack ?? ""}`
45353
+ );
45354
+ setTimeout(() => {
45355
+ void runExitCleanup().then(() => process.exit(1));
45356
+ }, 5e3);
45357
+ },
45358
+ children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(AppWrapper, {})
45359
+ }
45360
+ );
44927
45361
  const instance = render_default(
44928
- process.env["DEBUG"] ? /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(import_react167.default.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(AppWrapper, {}) }) : /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(AppWrapper, {}),
45362
+ process.env["DEBUG"] ? /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(import_react167.default.StrictMode, { children: appTree }) : appTree,
44929
45363
  {
44930
45364
  exitOnCtrlC: false,
44931
45365
  isScreenReaderEnabled: config.getScreenReader(),
44932
45366
  alternateScreen: useVP
44933
45367
  }
44934
45368
  );
45369
+ if (useVP) {
45370
+ pushKittyProtocolFlags();
45371
+ }
44935
45372
  profileCheckpoint("first_paint");
44936
45373
  startPostRenderPrefetches(config, settings, {
44937
45374
  connectIde: options.postRenderConnectIde ?? false,