@qwen-code/qwen-code 0.20.2-jobbench-no-todo-write.0 → 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-WBRBHD2M.js → StandaloneSessionPicker-BIRMPLRD.js} +66 -58
  7. package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
  8. package/chunks/{acpAgent-BBQZ33CA.js → acpAgent-6J2U72PQ.js} +706 -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-SSCNEHZZ.js → build-RV63TIRH.js} +2 -3
  16. package/chunks/{ca-N6VVUFVB.js → ca-25EDXPFZ.js} +2 -0
  17. package/chunks/{channel-worker-group-LFBT7K64.js → channel-worker-group-2ZD7TVAT.js} +7 -6
  18. package/chunks/{channel-worker-manager-3RUPERG2.js → channel-worker-manager-4OA4BCGB.js} +189 -29
  19. package/chunks/{channel-worker-supervisor-A3KVATD3.js → channel-worker-supervisor-V7KCFJTS.js} +6 -5
  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-B2HSPMD4.js → chunk-2NH6DYI4.js} +12 -12
  24. package/chunks/chunk-2SCDWPXI.js +246 -0
  25. package/chunks/{chunk-JK26TQON.js → chunk-2X55UKQE.js} +3 -3
  26. package/chunks/{chunk-7VUQQBR7.js → chunk-3QMGYBFN.js} +2 -65
  27. package/chunks/{chunk-UMCULC5M.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-GPMVHZP4.js → chunk-4WIZGAH3.js} +7 -7
  31. package/chunks/{chunk-CI3GWKGJ.js → chunk-55DJUCI2.js} +87 -29
  32. package/chunks/{chunk-QNLNLENL.js → chunk-5I2IWRSH.js} +2 -2
  33. package/chunks/{chunk-D7WXIW7H.js → chunk-5NBDS5S6.js} +145 -5
  34. package/chunks/{chunk-E4IMU4Y5.js → chunk-63P4EL5V.js} +1 -1
  35. package/chunks/chunk-6FGBXPWM.js +293 -0
  36. package/chunks/{chunk-NEEB7UEN.js → chunk-6GMVPFB2.js} +153 -72
  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-77OZOGPT.js → chunk-7JURR4JT.js} +1 -1
  40. package/chunks/{chunk-4MWNZNJ4.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-B3I77W5J.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-7TLUW4ZE.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-H4A4A2SY.js → chunk-CIKQ7KKO.js} +4625 -8645
  52. package/chunks/{chunk-QZJY47IE.js → chunk-D3UEZIQH.js} +7 -5
  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-6NRFYMKG.js → chunk-EBJQ6AXW.js} +11 -10
  58. package/chunks/{chunk-HABKX6LY.js → chunk-EPDRMGT4.js} +164 -17
  59. package/chunks/{chunk-P2BQZ7H7.js → chunk-ETSW4KLJ.js} +2 -2
  60. package/chunks/{chunk-KHOVYUHX.js → chunk-FNQ6T3CV.js} +20 -3
  61. package/chunks/{chunk-64EG42HV.js → chunk-FQK6JAFG.js} +72 -23
  62. package/chunks/{chunk-L6U47G5P.js → chunk-FSITMZJH.js} +8 -8
  63. package/chunks/{chunk-6RLROE6G.js → chunk-GLWP3FDB.js} +80 -15
  64. package/chunks/{chunk-CXIOPXRR.js → chunk-GSN55ZRI.js} +5 -5
  65. package/chunks/{chunk-LVA5OHQO.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-NXE6SQIV.js → chunk-IJTOWOD7.js} +14 -3
  69. package/chunks/chunk-IKCX4CCL.js +469 -0
  70. package/chunks/{chunk-7SSWNGEJ.js → chunk-IKYJHJNF.js} +3 -3
  71. package/chunks/{chunk-64XKYOXK.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-SVIMKSEI.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-7PIL2BYF.js → chunk-JVPM2ULZ.js} +6 -6
  78. package/chunks/{chunk-KBB5O3JO.js → chunk-JXJFVC6E.js} +37 -18
  79. package/chunks/chunk-JZA3JUDJ.js +82 -0
  80. package/chunks/{chunk-45PO6ZIS.js → chunk-K36B6G2O.js} +5 -5
  81. package/chunks/{chunk-GPSKDNEE.js → chunk-K4XWPEWB.js} +4 -4
  82. package/chunks/{chunk-K7EUPLIP.js → chunk-KIM5GUMA.js} +654 -117
  83. package/chunks/{chunk-42W5BDEY.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-26CBI4DC.js → chunk-LB6DUZ26.js} +259 -67
  88. package/chunks/chunk-LEH5C7FV.js +232 -0
  89. package/chunks/{chunk-UTGFTJ2H.js → chunk-LH2BYDQ5.js} +6 -4
  90. package/chunks/{chunk-QKTHJXCS.js → chunk-LK7CHLVP.js} +79 -2
  91. package/chunks/{chunk-V7WNRZL7.js → chunk-LKEJ26GS.js} +11 -11
  92. package/chunks/{chunk-6VPLV3L3.js → chunk-LQIW3YFY.js} +227 -41
  93. package/chunks/chunk-LS77BEZP.js +405 -0
  94. package/chunks/{chunk-5WDRI7US.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-CJQ3FZ2G.js → chunk-MVSUYZDT.js} +4 -4
  99. package/chunks/{chunk-6FZYKBKV.js → chunk-MZAXJAUM.js} +1 -1
  100. package/chunks/{chunk-32L4D2O2.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-6S5HSCOI.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-4SCOLXTD.js → chunk-PC6JANNU.js} +5 -5
  108. package/chunks/{chunk-IWALV67J.js → chunk-PHOF65IG.js} +4300 -1284
  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-5XORMWA2.js → chunk-PSOO6YXD.js} +18 -15
  113. package/chunks/{chunk-X6N25LXS.js → chunk-PWTZEM3C.js} +2 -2
  114. package/chunks/{chunk-GSX6P2JW.js → chunk-PWVFN2LF.js} +1 -1
  115. package/chunks/{chunk-AHX6AKPD.js → chunk-Q4M4MDQ4.js} +2 -2
  116. package/chunks/{chunk-3EHJ44GG.js → chunk-QAF7NMK7.js} +1 -1
  117. package/chunks/{chunk-WSYKDFYR.js → chunk-R5AFZNQW.js} +5 -5
  118. package/chunks/{chunk-63DJBU32.js → chunk-RF3EXIHJ.js} +39 -18
  119. package/chunks/{chunk-4K7VDKAD.js → chunk-RHLZR4E5.js} +1 -1
  120. package/chunks/{chunk-SXPSOMQ4.js → chunk-RIBKPMRP.js} +220 -141
  121. package/chunks/{chunk-RVLZCXEE.js → chunk-RWTEFFPU.js} +82 -3
  122. package/chunks/{chunk-ZUTM4LHM.js → chunk-RZIX2G32.js} +1 -1
  123. package/chunks/{chunk-ZKBNRL6O.js → chunk-SQCQ4KO2.js} +336 -404
  124. package/chunks/{chunk-THJNPLI4.js → chunk-TARRHLLG.js} +1 -0
  125. package/chunks/{chunk-RHYFF54J.js → chunk-TEHGS6UP.js} +50 -21
  126. package/chunks/{chunk-ACQJPDDS.js → chunk-TGILQ3YH.js} +8 -8
  127. package/chunks/{chunk-Q2YKNMLS.js → chunk-TOFQCPDC.js} +43 -10
  128. package/chunks/{chunk-ACZIBDYD.js → chunk-TPRQ7RZH.js} +587 -176
  129. package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
  130. package/chunks/{chunk-7MWABCXU.js → chunk-U7M2DMGW.js} +3 -3
  131. package/chunks/{chunk-KQQ757OQ.js → chunk-UDX5OBWR.js} +41 -9
  132. package/chunks/{chunk-SRPZG4ER.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-TDDFEPBX.js → chunk-VIA5XA4U.js} +5 -2
  137. package/chunks/{chunk-3BJDQVE6.js → chunk-VRYUBFMC.js} +1 -1
  138. package/chunks/{chunk-PLQODS7F.js → chunk-VULLI6WQ.js} +172 -6
  139. package/chunks/{chunk-GN45XAAU.js → chunk-WCXCRJYB.js} +1 -1
  140. package/chunks/{chunk-2LI23QA6.js → chunk-X5XDDSSH.js} +1 -1
  141. package/chunks/{chunk-O32RMIMO.js → chunk-Y34KJKDC.js} +1 -1
  142. package/chunks/{chunk-7ZD5EKXE.js → chunk-YBL3QUDD.js} +2 -2
  143. package/chunks/{chunk-H4AR2JQF.js → chunk-YH6G52F2.js} +3 -3
  144. package/chunks/{chunk-3G3UUMRS.js → chunk-YPE6A4GC.js} +2 -2
  145. package/chunks/{chunk-3F2JUWCH.js → chunk-YX324OPW.js} +1 -1
  146. package/chunks/{chunk-CGIDQG6J.js → chunk-Z2BC6UJ5.js} +3 -3
  147. package/chunks/{chunk-QLJUC7TG.js → chunk-ZD6UTE4A.js} +1 -1
  148. package/chunks/{chunk-ZPWJZHJ2.js → chunk-ZFDTEDCF.js} +6 -6
  149. package/chunks/chunk-ZJHVAS7M.js +289 -0
  150. package/chunks/{chunk-XAGLQITN.js → chunk-ZNAUOR2I.js} +15 -12
  151. package/chunks/{chunk-T2L47JJK.js → chunk-ZOIFNCKL.js} +4 -4
  152. package/chunks/{computer-use-RZ3UUWYW.js → computer-use-SOQ4E3VX.js} +43 -34
  153. package/chunks/{config-utils-SQUBZEQM.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-EQG73FT6.js → create-sub-session-QRJLW5BV.js} +43 -34
  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-XRSKQPHQ.js → edit-OBDSQURM.js} +43 -34
  171. package/chunks/{en-USMCCJAJ.js → en-MTWBNGDO.js} +15 -0
  172. package/chunks/{enter-worktree-WAHCWE6I.js → enter-worktree-U6MRPQ2P.js} +43 -34
  173. package/chunks/{enterPlanMode-QIOYLDCF.js → enterPlanMode-BC5QUZZ2.js} +43 -34
  174. package/chunks/{environment-T3FXCDJI.js → environment-W5UFC2CH.js} +46 -37
  175. package/chunks/errors-M7CLORXH.js +88 -0
  176. package/chunks/{exit-worktree-RHVTLX6T.js → exit-worktree-DGNYMECB.js} +43 -34
  177. package/chunks/{exitPlanMode-UATOE2GQ.js → exitPlanMode-GXTBWQAR.js} +43 -34
  178. package/chunks/{fast-path-J3RHOYSZ.js → fast-path-JJZFJANL.js} +6 -6
  179. package/chunks/{fast-path-settings-XB3CPUJT.js → fast-path-settings-WQJU2LAT.js} +2 -2
  180. package/chunks/{fr-WVHEBDDB.js → fr-45RLL55O.js} +1 -0
  181. package/chunks/{gemini-P72OGOH6.js → gemini-QS36EBZV.js} +133 -102
  182. package/chunks/{geminiContentGenerator-F6EG5FXF.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-WHASQZRX.js → glob-V7R3PSK3.js} +43 -34
  189. package/chunks/{grep-LS7AADJ3.js → grep-QYPSK7OP.js} +43 -34
  190. package/chunks/handleAutoUpdate-6DBEZYPV.js +81 -0
  191. package/chunks/{i18n-IMVASWIF.js → i18n-VUJJZIMU.js} +44 -35
  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-L6UY7OM7.js → managed-npm-update-JYEMMXA3.js} +94 -37
  206. package/chunks/mcp-6DBDJPFU.js +83 -0
  207. package/chunks/{monitor-DXYFB5QD.js → monitor-R3ODH5U6.js} +45 -35
  208. package/chunks/node-UUDY34IG.js +305 -0
  209. package/chunks/nonInteractiveCli-MOYCYBBU.js +141 -0
  210. package/chunks/{notebook-edit-KGD7YJEA.js → notebook-edit-BNOK452R.js} +43 -34
  211. package/chunks/{openaiContentGenerator-C74A2XAU.js → openaiContentGenerator-WMCU3O2H.js} +27 -17
  212. package/chunks/pidfile-TFRZZZIO.js +86 -0
  213. package/chunks/{processUtils-GUT5B4R6.js → processUtils-RT7UNCC2.js} +2 -2
  214. package/chunks/{pt-OK455PLH.js → pt-22Q3FP73.js} +1 -0
  215. package/chunks/{qwenContentGenerator-PT46FQPA.js → qwenContentGenerator-HHCRK4SX.js} +56 -41
  216. package/chunks/{qwenOAuth2-S7DZHUUU.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-QO4PT5NV.js → run-qwen-serve-FU6HEM4J.js} +276 -62
  224. package/chunks/{runtime-EOTXBUM6.js → runtime-XXRRTNP6.js} +55 -44
  225. package/chunks/{scheduler-MAIQ2PHR.js → scheduler-G2ZS2Z7E.js} +43 -34
  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-CBCC3XQC.js → server-4UMH7OIZ.js} +2348 -396
  232. package/chunks/{session-RQUEFQDL.js → session-K3O3Q2SV.js} +107 -88
  233. package/chunks/{settings-QHXCJDSR.js → settings-CR2EWTBA.js} +53 -44
  234. package/chunks/shell-HH3PF3A2.js +83 -0
  235. package/chunks/{skill-WHSGTGKP.js → skill-I3SDA4MB.js} +17 -15
  236. package/chunks/spawnChannel-RWNDBXGA.js +82 -0
  237. package/chunks/{src-F3HKX47D.js → src-GE4TTTML.js} +290 -171
  238. package/chunks/{standalone-update-BKLONSVI.js → standalone-update-Q6WFRZZQ.js} +45 -36
  239. package/chunks/{startInteractiveUI-TNJ37X5W.js → startInteractiveUI-SLZGHRPH.js} +736 -298
  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-LUHJ7ZCC.js → team-create-YJALH5D2.js} +44 -35
  246. package/chunks/{team-delete-BB3CG3QF.js → team-delete-QE2UXJL7.js} +7 -7
  247. package/chunks/{team-plan-approval-X3DYRL6L.js → team-plan-approval-34QFYKGN.js} +43 -34
  248. package/chunks/theme-manager-SWRILQHI.js +77 -0
  249. package/chunks/todoWrite-VQ7FKOHL.js +358 -0
  250. package/chunks/{tool-search-BAWOETUY.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-4UEOIKOF.js → trustedFolders-KHXHY6PY.js} +44 -35
  255. package/chunks/{update-relaunch-WDWABT5P.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-OKUE3JLF.js → validateNonInterActiveAuth-3R223G3R.js} +91 -81
  259. package/chunks/{version-GMUULLWB.js → version-HS7YSFHV.js} +1 -1
  260. package/chunks/{web-fetch-JBWTMPFN.js → web-fetch-NKCSG7ZE.js} +18 -16
  261. package/chunks/{web-search-27COJHJT.js → web-search-S62WAP4S.js} +13 -27
  262. package/chunks/{workflow-5L37J7YF.js → workflow-QAGU5RU4.js} +44 -35
  263. package/chunks/workspace-providers-status-QSVZUETE.js +86 -0
  264. package/chunks/{workspace-registration-store-TYPYXIP6.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-HNWBEL5H.js +0 -77
  333. package/chunks/agent-KTMY6SF3.js +0 -72
  334. package/chunks/agent-headless-HJ56ZZOW.js +0 -66
  335. package/chunks/bridge-AMC5AD7W.js +0 -80
  336. package/chunks/chunk-CBOQ3HY7.js +0 -2019
  337. package/chunks/chunk-UHGNAWHK.js +0 -6928
  338. package/chunks/contextCommand-PW4GINQU.js +0 -71
  339. package/chunks/daemon-status-provider-3IWTBWQ3.js +0 -79
  340. package/chunks/earlyInputCapture-TYNI3B6E.js +0 -73
  341. package/chunks/errors-QAWTJTAW.js +0 -79
  342. package/chunks/handleAutoUpdate-V5A3JHOG.js +0 -72
  343. package/chunks/initializer-JJLF5JCJ.js +0 -77
  344. package/chunks/installationInfo-LAWMHQAG.js +0 -71
  345. package/chunks/list-L2ECB6UM.js +0 -80
  346. package/chunks/loadedSettingsAdapter-RLMZ4Z3E.js +0 -74
  347. package/chunks/mcp-E4O7Z6FO.js +0 -74
  348. package/chunks/nonInteractiveCli-GU2UKULE.js +0 -131
  349. package/chunks/pidfile-IWQWZNZV.js +0 -77
  350. package/chunks/read-file-ZOCXW4AD.js +0 -31
  351. package/chunks/resumeHistoryUtils-TJWRDE2L.js +0 -83
  352. package/chunks/ripGrep-OFKAW2VE.js +0 -64
  353. package/chunks/serve-UB4CF67Q.js +0 -80
  354. package/chunks/shell-RPK7EAOC.js +0 -74
  355. package/chunks/spawnChannel-IUP3ZNMT.js +0 -73
  356. package/chunks/theme-manager-ALL7F4CJ.js +0 -68
  357. package/chunks/total-session-admission-PLONPNXI.js +0 -74
  358. package/chunks/updateCheck-PVROE4GR.js +0 -87
  359. package/chunks/useAutoAcceptIndicator-6BNLNN5S.js +0 -85
  360. package/chunks/workspace-providers-status-2U3IF4TX.js +0 -77
  361. package/chunks/workspace-registry-DLQDDDIF.js +0 -78
  362. package/chunks/workspace-service-7K3LF4QX.js +0 -89
  363. package/chunks/workspace-skills-status-4DOZ3DBS.js +0 -76
  364. package/chunks/write-file-PTPXDKZ3.js +0 -64
  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,15 +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-3G3UUMRS.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";
28
+ import {
29
+ StreamJsonOutputAdapter
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";
10
68
  import {
11
69
  startPostRenderPrefetches
12
- } from "./chunk-B2HSPMD4.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";
13
78
  import {
14
79
  AboutBox,
15
80
  BaseSelectionList,
@@ -62,12 +127,9 @@ import {
62
127
  loadLowlight,
63
128
  logicalPosToOffset,
64
129
  measureElementPosition,
65
- osc8Hyperlink,
66
130
  removeLastGrapheme,
67
131
  renderSoftwareCursor,
68
- sanitizeForOsc,
69
132
  splitFencedMarkdown,
70
- supportsHyperlinks,
71
133
  truncateText,
72
134
  useArenaCommand,
73
135
  useConfig,
@@ -85,91 +147,21 @@ import {
85
147
  useTextBuffer,
86
148
  useUIActions,
87
149
  useUIState
88
- } from "./chunk-ZKBNRL6O.js";
89
- import {
90
- stopAndGetCapturedInput
91
- } from "./chunk-E4IMU4Y5.js";
92
- import {
93
- useAutoAcceptIndicator
94
- } from "./chunk-JK26TQON.js";
150
+ } from "./chunk-SQCQ4KO2.js";
95
151
  import {
96
152
  KeypressProvider,
97
153
  useFocus,
98
154
  useKeypress,
99
155
  useKeypressContext
100
- } from "./chunk-6VPLV3L3.js";
101
- import {
102
- classifyApiError
103
- } from "./chunk-V7RNNPGC.js";
104
- import {
105
- MAX_SUGGESTIONS_TO_SHOW,
106
- buildMcpResourceRef,
107
- buildMcpServerRef,
108
- getExtensionSuggestions,
109
- handleAtCommand,
110
- matchMcpServerPrefix,
111
- resolveAtCommandQuery,
112
- sanitizeDisplayText
113
- } from "./chunk-PLQODS7F.js";
156
+ } from "./chunk-LQIW3YFY.js";
114
157
  import {
115
158
  getCommandDisplayName,
116
159
  getCommandSourceBadge
117
- } from "./chunk-ZUTM4LHM.js";
118
- import {
119
- StreamJsonOutputAdapter
120
- } from "./chunk-7TLUW4ZE.js";
121
- import {
122
- BuiltinCommandLoader,
123
- BundledSkillLoader,
124
- CommandService,
125
- DISPLAY_HOOK_EVENTS,
126
- FileCommandLoader,
127
- MAX_STACKED_SKILLS,
128
- McpPromptLoader,
129
- SavedWorkflowLoader,
130
- SkillCommandLoader,
131
- addConfigToMatcherGroup,
132
- appendUserPromptExpansionAdditionalContext,
133
- copyToClipboard,
134
- createEmptyHookEventInfo,
135
- findMidInputSlashCommand,
136
- findSlashCommandTokens,
137
- formatApprovalModeDescription,
138
- formatApprovalModeName,
139
- formatUserPromptExpansionBlockedMessage,
140
- getAllConfigs,
141
- getBestSlashCommandMatch,
142
- getTranslatedSourceDisplayMap,
143
- hasBlockingBackgroundWork,
144
- hasSlashCommandPathSeparator,
145
- isAtCommand,
146
- isBtwCommand,
147
- isMidInputCompletableCommand,
148
- isSlashCommand,
149
- normalizePartList,
150
- parseSlashCommand,
151
- parseStackedSlashCommands,
152
- refreshExtensionContentRuntime,
153
- resetBackgroundStateForSessionSwitch,
154
- serializeUserPromptExpansionPrompt,
155
- supportsMatchers
156
- } from "./chunk-26CBI4DC.js";
157
- import {
158
- EXTENSION_RELOAD_FAILED_REASON,
159
- ExtensionRefreshState,
160
- appEvents,
161
- cleanupReviewWorktreeLeases,
162
- loadHierarchicalGeminiMemory
163
- } from "./chunk-ACZIBDYD.js";
160
+ } from "./chunk-RZIX2G32.js";
164
161
  import {
165
162
  computeSessionStats,
166
163
  levelLabel
167
- } from "./chunk-7MWABCXU.js";
168
- import {
169
- disableKittyProtocol,
170
- isKittyProtocolEnabled,
171
- isKittyProtocolSupported
172
- } from "./chunk-5DTTYNB7.js";
164
+ } from "./chunk-U7M2DMGW.js";
173
165
  import {
174
166
  BEL,
175
167
  OSC_PREFIX,
@@ -181,20 +173,18 @@ import {
181
173
  oscITerm2Notify,
182
174
  oscKittyNotify,
183
175
  saveClipboardImage,
184
- wrapForMultiplexer,
185
176
  writeOsc52
186
- } from "./chunk-4LVZNIDO.js";
187
- import "./chunk-WSYKDFYR.js";
177
+ } from "./chunk-J56UI34H.js";
188
178
  import "./chunk-4WGODMVR.js";
189
- import "./chunk-KW7NOTN6.js";
190
179
  import {
191
180
  MaxSizedBox,
192
181
  OverflowProvider,
193
182
  useOverflowState
194
- } from "./chunk-64EG42HV.js";
183
+ } from "./chunk-FQK6JAFG.js";
195
184
  import {
196
185
  GeminiRespondingSpinner,
197
186
  GeminiSpinner,
187
+ ICON,
198
188
  SCREEN_READER_USER_PREFIX,
199
189
  SHELL_COMMAND_NAME,
200
190
  StreamingContext,
@@ -204,10 +194,10 @@ import {
204
194
  expandCollapsedHistory,
205
195
  isCollapsibleTool,
206
196
  useStreamingContext
207
- } from "./chunk-KBB5O3JO.js";
197
+ } from "./chunk-JXJFVC6E.js";
208
198
  import {
209
199
  theme
210
- } from "./chunk-6IL7KRLE.js";
200
+ } from "./chunk-VAK25FTU.js";
211
201
  import {
212
202
  require_jsx_runtime
213
203
  } from "./chunk-SV5PQVQE.js";
@@ -224,36 +214,51 @@ import {
224
214
  use_is_screen_reader_enabled_default,
225
215
  use_stdin_default,
226
216
  use_stdout_default
227
- } from "./chunk-NEEB7UEN.js";
217
+ } from "./chunk-6GMVPFB2.js";
228
218
  import {
229
- require_react
230
- } from "./chunk-5QWWOFGG.js";
231
- import "./chunk-UHGNAWHK.js";
232
- 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";
233
227
  import {
234
228
  relaunchApp
235
- } from "./chunk-O32RMIMO.js";
229
+ } from "./chunk-Y34KJKDC.js";
236
230
  import {
237
231
  setUpdateHandler
238
- } from "./chunk-ZPWJZHJ2.js";
239
- import "./chunk-5WDRI7US.js";
240
- import "./chunk-YAF2MQZ6.js";
241
- import "./chunk-45PO6ZIS.js";
232
+ } from "./chunk-ZFDTEDCF.js";
233
+ import "./chunk-M4FMGVY4.js";
234
+ import "./chunk-K36B6G2O.js";
242
235
  import {
243
236
  AUTO_THEME_NAME,
244
237
  DEFAULT_THEME,
245
238
  themeManager
246
- } 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";
247
252
  import {
248
253
  openQwenAsrRealtimeStream,
249
254
  openVoiceStream,
250
255
  openVoiceStreamWithRetry
251
- } from "./chunk-ZHERRXZJ.js";
256
+ } from "./chunk-BJX6ZSUK.js";
252
257
  import {
253
258
  recordGoalStatusItem,
254
259
  restoreGoalFromHistory
255
- } from "./chunk-6NRFYMKG.js";
256
- import "./chunk-4K7VDKAD.js";
260
+ } from "./chunk-EBJQ6AXW.js";
261
+ import "./chunk-RHLZR4E5.js";
257
262
  import {
258
263
  cpLen,
259
264
  cpSlice,
@@ -265,71 +270,69 @@ import {
265
270
  sanitizeTerminalText,
266
271
  stripUnsafeCharacters,
267
272
  toCodePoints
268
- } from "./chunk-RS7MT2QG.js";
269
- import "./chunk-GN45XAAU.js";
273
+ } from "./chunk-IPUUTYMV.js";
274
+ import "./chunk-WCXCRJYB.js";
270
275
  import {
271
276
  stringWidth
272
- } from "./chunk-H2XVO6NE.js";
277
+ } from "./chunk-2MIN6GRR.js";
273
278
  import "./chunk-QHTIBUWB.js";
274
279
  import {
275
280
  isHistoryItemVisibleAfterRestore
276
281
  } from "./chunk-QTERJVPZ.js";
277
282
  import "./chunk-3Z43GZUQ.js";
278
- import "./chunk-RXFQM6FQ.js";
279
- import "./chunk-CXIOPXRR.js";
280
- import "./chunk-6H67XLET.js";
281
- import "./chunk-4MWNZNJ4.js";
282
- import {
283
- getErrorMessage as getErrorMessage2
284
- } from "./chunk-7SSWNGEJ.js";
285
- import {
286
- getExtendedSystemInfo
287
- } from "./chunk-CJQ3FZ2G.js";
288
- import {
289
- formatDuration,
290
- formatMemoryUsage,
291
- formatRelativeTime,
292
- formatTokenCount
293
- } from "./chunk-E5Z2AVNV.js";
294
- import {
295
- isInlineModelOverrideAllowed
296
- } from "./chunk-42W5BDEY.js";
297
283
  import {
298
284
  assertVoiceBaseUrlNetworkAllowed,
299
285
  isKeytermEcho,
300
286
  isStreamingVoiceModel,
301
287
  resolveVoiceStreamConfig,
302
288
  transcribeVoiceAudio
303
- } from "./chunk-LVA5OHQO.js";
289
+ } from "./chunk-H4SBPHSA.js";
304
290
  import {
305
291
  formatUnsupportedVoiceModelMessage,
306
292
  isSelectableVoiceModel
307
- } from "./chunk-7ZD5EKXE.js";
308
- import "./chunk-QLJUC7TG.js";
309
- import "./chunk-5XORMWA2.js";
293
+ } from "./chunk-YBL3QUDD.js";
294
+ import "./chunk-ZD6UTE4A.js";
295
+ import "./chunk-RXFQM6FQ.js";
296
+ import "./chunk-PSOO6YXD.js";
310
297
  import {
311
298
  requestConsentInteractive,
312
299
  requestConsentOrFail
313
- } from "./chunk-4SCOLXTD.js";
300
+ } from "./chunk-PC6JANNU.js";
314
301
  import "./chunk-57OAHC2Y.js";
315
- import "./chunk-GPMVHZP4.js";
316
- import "./chunk-6ZBPS62S.js";
317
- import "./chunk-V6WHFGST.js";
318
302
  import {
319
303
  createLoadedSettingsAdapter
320
- } from "./chunk-64XKYOXK.js";
321
- import "./chunk-6RLROE6G.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";
322
315
  import "./chunk-COH43MRJ.js";
323
- import "./chunk-QKTHJXCS.js";
324
- import "./chunk-TJTKSVIV.js";
325
- import "./chunk-M5GB774H.js";
326
- import "./chunk-RV4C2ZFG.js";
327
- import "./chunk-2LI23QA6.js";
328
- import "./chunk-RVLZCXEE.js";
329
- import "./chunk-UDXSXLER.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";
330
323
  import {
331
324
  loadMcpApprovals
332
- } from "./chunk-7PIL2BYF.js";
325
+ } from "./chunk-JVPM2ULZ.js";
326
+ import "./chunk-DP3IHZGG.js";
327
+ import "./chunk-ZNAUOR2I.js";
328
+ import "./chunk-2RFKHEXL.js";
329
+ import "./chunk-LK7CHLVP.js";
330
+ import "./chunk-JLU636DO.js";
331
+ import "./chunk-BK2UNYWD.js";
332
+ import "./chunk-M5GB774H.js";
333
+ import "./chunk-RWTEFFPU.js";
334
+ import "./chunk-UDXSXLER.js";
335
+ import "./chunk-BIQWWWJN.js";
333
336
  import {
334
337
  CORRUPTED_SUFFIX,
335
338
  SettingScope,
@@ -352,31 +355,27 @@ import {
352
355
  settingExistsInScope,
353
356
  validateSettingValue,
354
357
  writeOutputLanguageAndRegisterPath
355
- } from "./chunk-RHYFF54J.js";
358
+ } from "./chunk-TEHGS6UP.js";
356
359
  import "./chunk-RKUWKYED.js";
360
+ import "./chunk-GOXKNSDZ.js";
361
+ import "./chunk-IDS7MSUP.js";
357
362
  import {
358
363
  getCurrentLanguage,
359
364
  localizeToolDisplayName,
360
365
  t,
361
366
  ta
362
- } from "./chunk-V7WNRZL7.js";
363
- import "./chunk-UTGFTJ2H.js";
364
- import "./chunk-XHATNRQA.js";
365
- import "./chunk-XAGLQITN.js";
366
- import "./chunk-GOXKNSDZ.js";
367
- import "./chunk-QRUIS3DN.js";
368
- import "./chunk-2RFKHEXL.js";
369
- import "./chunk-IDS7MSUP.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-3F2JUWCH.js";
373
+ } from "./chunk-YX324OPW.js";
375
374
  import "./chunk-VJNBRRZG.js";
376
375
  import {
377
376
  isWorkspaceTrusted,
378
377
  loadTrustedFolders
379
- } from "./chunk-CGIDQG6J.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,46 +491,52 @@ import {
491
491
  validateWorkflowName,
492
492
  watchRepoBranch,
493
493
  writeRuntimeStatus
494
- } from "./chunk-IWALV67J.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-GPSKDNEE.js";
499
- import "./chunk-T2L47JJK.js";
500
- import "./chunk-X6N25LXS.js";
501
- import "./chunk-E2UVIFI2.js";
502
- import "./chunk-Q2YKNMLS.js";
503
- import "./chunk-XU457J4V.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";
504
501
  import "./chunk-VDDGDZMA.js";
505
- import "./chunk-KHOVYUHX.js";
506
- import "./chunk-SZRN75WQ.js";
502
+ import "./chunk-FNQ6T3CV.js";
503
+ import "./chunk-ZOIFNCKL.js";
504
+ import "./chunk-PWTZEM3C.js";
505
+ import "./chunk-KRXPRVGL.js";
507
506
  import "./chunk-6PVPNMXU.js";
508
507
  import {
509
508
  resolveModelId
510
- } from "./chunk-6FZYKBKV.js";
509
+ } from "./chunk-MZAXJAUM.js";
510
+ import "./chunk-SZRN75WQ.js";
511
+ import "./chunk-HTO4JFDZ.js";
511
512
  import "./chunk-CPBF7KYF.js";
512
- import {
513
- HOOKS_CONFIG_FIELDS
514
- } from "./chunk-7VUQQBR7.js";
515
- import "./chunk-LIZRAKPB.js";
516
513
  import {
517
514
  APPROVAL_MODES,
518
515
  getStartupContextLength,
519
516
  isSystemReminderContent,
520
517
  runOutsideAgentContext
521
- } from "./chunk-WHGVTP7Q.js";
518
+ } from "./chunk-L26JL52R.js";
522
519
  import "./chunk-6AM5D4ME.js";
520
+ import "./chunk-JZA3JUDJ.js";
521
+ import {
522
+ HOOKS_CONFIG_FIELDS
523
+ } from "./chunk-3QMGYBFN.js";
523
524
  import "./chunk-JCW2R7WC.js";
524
525
  import {
525
526
  isPathWithinRoot
526
- } from "./chunk-57FIIFJN.js";
527
- import "./chunk-HTO4JFDZ.js";
527
+ } from "./chunk-M5JM7OSF.js";
528
+ import "./chunk-OHNBB4XR.js";
529
+ import "./chunk-E5TUC6CA.js";
528
530
  import {
529
- qwenOAuth2Events
530
- } from "./chunk-HABKX6LY.js";
531
+ osc8Hyperlink,
532
+ qwenOAuth2Events,
533
+ sanitizeForOsc,
534
+ supportsHyperlinks,
535
+ wrapForMultiplexer
536
+ } from "./chunk-EPDRMGT4.js";
531
537
  import "./chunk-JESCGQM3.js";
532
- import "./chunk-32L4D2O2.js";
533
- import "./chunk-SRPZG4ER.js";
538
+ import "./chunk-NH6KE4JX.js";
539
+ import "./chunk-USTWD7QV.js";
534
540
  import {
535
541
  REASONING_EFFORT_TIERS
536
542
  } from "./chunk-XVNQMZ2I.js";
@@ -540,12 +546,17 @@ import {
540
546
  } from "./chunk-FODK6UMO.js";
541
547
  import "./chunk-GLNBDYUX.js";
542
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";
543
555
  import {
544
556
  ApiCancelEvent,
545
557
  AuthEvent,
546
558
  ConversationFinishedEvent,
547
559
  DiscoveredMCPTool,
548
- MAINLINE_CODER_MODEL,
549
560
  ModelSlashCommandEvent,
550
561
  PromptSuggestionEvent,
551
562
  SpeculationEvent,
@@ -581,7 +592,7 @@ import {
581
592
  runVisionBridge,
582
593
  shouldRunVisionBridge,
583
594
  splitImageParts
584
- } from "./chunk-H4A4A2SY.js";
595
+ } from "./chunk-CIKQ7KKO.js";
585
596
  import "./chunk-VGC4I5JJ.js";
586
597
  import {
587
598
  AUTO_MEMORY_INDEX_FILENAME,
@@ -589,30 +600,30 @@ import {
589
600
  getAutoMemoryRoot,
590
601
  getUserAutoMemoryRoot,
591
602
  isAnyAutoMemPath
592
- } from "./chunk-4K56OJFJ.js";
603
+ } from "./chunk-MUP3T3AD.js";
593
604
  import {
594
- DEFAULT_TOKEN_LIMIT
595
- } from "./chunk-CBOQ3HY7.js";
605
+ MAINLINE_CODER_MODEL
606
+ } from "./chunk-IKCX4CCL.js";
607
+ import "./chunk-46UV252V.js";
596
608
  import "./chunk-A4UCTEB5.js";
597
609
  import "./chunk-XWRJCPHC.js";
598
- import "./chunk-QNLNLENL.js";
599
610
  import {
600
- atomicWriteFileSync
601
- } from "./chunk-6X4GWOPW.js";
611
+ DEFAULT_TOKEN_LIMIT
612
+ } from "./chunk-UW5EOVUN.js";
613
+ import "./chunk-2JZBVYTU.js";
614
+ import "./chunk-5I2IWRSH.js";
602
615
  import {
603
- FinishReason
604
- } from "./chunk-TYQMGACW.js";
605
- import "./chunk-TYAMGABM.js";
606
- import "./chunk-FCMNKVXT.js";
607
- import "./chunk-7362QS5B.js";
616
+ atomicWriteFileSync
617
+ } from "./chunk-A5L3JMUA.js";
618
+ import "./chunk-MB4MZHMJ.js";
608
619
  import "./chunk-HTR4WV6U.js";
609
- import "./chunk-M7WBGLYP.js";
620
+ import "./chunk-BULDBTYC.js";
610
621
  import "./chunk-U7ZFW55U.js";
611
- import "./chunk-NPQDJGKU.js";
622
+ import "./chunk-UUUTRMI2.js";
612
623
  import {
613
624
  ToolNames,
614
625
  isShellProgressData
615
- } from "./chunk-YM3SZTH4.js";
626
+ } from "./chunk-PR75REBZ.js";
616
627
  import {
617
628
  Storage,
618
629
  UnauthorizedError,
@@ -624,21 +635,27 @@ import {
624
635
  isNodeError,
625
636
  shortenPath,
626
637
  tildeifyPath
627
- } from "./chunk-OQB4EXO4.js";
628
- import "./chunk-3EHJ44GG.js";
638
+ } from "./chunk-NL7LTRLR.js";
639
+ import "./chunk-QAF7NMK7.js";
640
+ import {
641
+ registerCleanup,
642
+ runExitCleanup
643
+ } from "./chunk-PWVFN2LF.js";
629
644
  import {
630
645
  finalizeStartupProfile,
631
646
  profileCheckpoint
632
647
  } from "./chunk-QSWDGAIC.js";
633
648
  import "./chunk-Q7YDKOGY.js";
634
- import {
635
- registerCleanup,
636
- runExitCleanup
637
- } from "./chunk-GSX6P2JW.js";
638
649
  import "./chunk-75DOP5OR.js";
639
650
  import "./chunk-DMTGGOSA.js";
640
651
  import "./chunk-YQ3U5MUC.js";
641
- 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";
642
659
  import {
643
660
  init_esbuild_shims
644
661
  } from "./chunk-5O2XNYP6.js";
@@ -2281,10 +2298,15 @@ function isSyntheticHistoryItem(item) {
2281
2298
  case "stop_hook_loop":
2282
2299
  case "stop_hook_system_message":
2283
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;
2284
2307
  // Meaningful: user input, model text, tool runs, slash-command
2285
2308
  // results the user explicitly asked for. Auto-restore must bail
2286
2309
  // when any of these appear after the candidate user prompt.
2287
- case "user":
2288
2310
  case "user_shell":
2289
2311
  case "gemini":
2290
2312
  case "gemini_content":
@@ -2328,11 +2350,18 @@ function itemsAfterAreOnlySynthetic(history, fromIndex) {
2328
2350
  __name(itemsAfterAreOnlySynthetic, "itemsAfterAreOnlySynthetic");
2329
2351
  function findLastUserItemIndex(history) {
2330
2352
  for (let i = history.length - 1; i >= 0; i--) {
2331
- if (history[i].type === "user") return i;
2353
+ const item = history[i];
2354
+ if (item.type === "user" && item.sentToModel !== false) return i;
2332
2355
  }
2333
2356
  return -1;
2334
2357
  }
2335
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");
2336
2365
  function buildThoughtHeadIdMap(items) {
2337
2366
  const map = /* @__PURE__ */ new Map();
2338
2367
  for (let i = 0; i < items.length; i++) {
@@ -2988,9 +3017,9 @@ function VirtualizedList(props, ref) {
2988
3017
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { width: 1, flexDirection: "column", flexShrink: 0, children: Array.from({ length: trackLen }, (_, i) => {
2989
3018
  const inThumb = i >= thumbTop && i < thumbTop + thumbLen;
2990
3019
  if (!scrollbarThumbActive) {
2991
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { children: " " }, i);
3020
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { selectable: false, children: " " }, i);
2992
3021
  }
2993
- 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);
2994
3023
  }) });
2995
3024
  }, [
2996
3025
  showScrollbar,
@@ -3288,24 +3317,79 @@ function getSelectedText(frame, selection) {
3288
3317
  return "";
3289
3318
  }
3290
3319
  const { sx, sy, ex, ey } = selection;
3291
- const lines = [];
3320
+ let text = "";
3292
3321
  for (let y = sy; y <= ey; y++) {
3293
3322
  const row = frame.cells[y];
3294
3323
  if (!row) {
3295
- lines.push("");
3324
+ if (y < ey) {
3325
+ text += "\n";
3326
+ }
3296
3327
  continue;
3297
3328
  }
3298
3329
  const startX = y === sy ? sx : 0;
3299
3330
  const endX = y === ey ? ex : row.length - 1;
3300
- let text = "";
3301
3331
  for (let x = Math.max(0, startX); x <= endX && x < row.length; x++) {
3302
- 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);
3303
3338
  }
3304
- lines.push(text.replace(/\s+$/u, ""));
3305
3339
  }
3306
- return lines.join("\n");
3340
+ return text;
3307
3341
  }
3308
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");
3309
3393
 
3310
3394
  // packages/cli/src/ui/selection/selection-span.ts
3311
3395
  init_esbuild_shims();
@@ -3646,7 +3730,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
3646
3730
  addSourceBlockCounts(runningOffsets, item.text);
3647
3731
  return { item, sourceCopyIndexOffsets: offsets };
3648
3732
  }
3649
- if (item.type === "user") {
3733
+ if (item.type === "user" && item.sentToModel !== false) {
3650
3734
  runningOffsets = createEmptySourceCopyOffsets();
3651
3735
  }
3652
3736
  return { item, sourceCopyIndexOffsets: void 0 };
@@ -3670,7 +3754,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
3670
3754
  addSourceBlockCounts(runningOffsets, item.text);
3671
3755
  return { item, sourceCopyIndexOffsets: offsets };
3672
3756
  }
3673
- if (item.type === "user") {
3757
+ if (item.type === "user" && item.sentToModel !== false) {
3674
3758
  runningOffsets = createEmptySourceCopyOffsets();
3675
3759
  }
3676
3760
  return { item, sourceCopyIndexOffsets: void 0 };
@@ -5290,7 +5374,7 @@ var SessionTab = /* @__PURE__ */ __name(() => {
5290
5374
  Object.keys(metrics.models).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
5291
5375
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { bold: true, color: theme.text.primary, children: t("Models") }),
5292
5376
  Object.entries(metrics.models).map(([name, m], i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5293
- /* @__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 + " " }),
5294
5378
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.primary, children: [
5295
5379
  name,
5296
5380
  " "
@@ -7161,7 +7245,7 @@ function SettingsDialog({
7161
7245
  Text,
7162
7246
  {
7163
7247
  color: isActive ? theme.status.success : theme.text.secondary,
7164
- children: isActive ? "\u25CF" : ""
7248
+ children: isActive ? ICON.CIRCLE_FILLED : ""
7165
7249
  }
7166
7250
  ) }),
7167
7251
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Box_default, { flexGrow: 1, flexShrink: 1, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
@@ -9067,7 +9151,7 @@ function ModelIdsStep({
9067
9151
  const isSelected = selectedRecommendationKeys.includes(item.key);
9068
9152
  const textColor = isFocused ? theme.status.success : isSelected ? theme.text.accent : theme.text.primary;
9069
9153
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Box_default, { alignItems: "flex-start", children: [
9070
- /* @__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 }) }),
9071
9155
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { color: textColor, children: item.label }) })
9072
9156
  ] }, item.key);
9073
9157
  }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Text, { color: theme.text.secondary, children: t("No recommended models match.") }) }),
@@ -9109,7 +9193,7 @@ function AdvancedConfigStep({
9109
9193
  modalityPdf,
9110
9194
  contextWindowSize
9111
9195
  } = flow.state;
9112
- const checkmark = /* @__PURE__ */ __name((v) => v ? "\u25C9" : "\u25CB", "checkmark");
9196
+ const checkmark = /* @__PURE__ */ __name((v) => v ? ICON.RADIO_FILLED : ICON.CIRCLE_EMPTY, "checkmark");
9113
9197
  const cursor = /* @__PURE__ */ __name((index) => focusedConfigIndex === index ? "\u203A" : " ", "cursor");
9114
9198
  const ctxIdx = modalityEnabled ? 6 : 2;
9115
9199
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Box_default, { marginTop: 1, flexDirection: "column", children: [
@@ -10857,6 +10941,7 @@ function ModelDialog({
10857
10941
  isFastModelMode,
10858
10942
  isVoiceModelMode,
10859
10943
  isVisionModelMode,
10944
+ isImageModelMode,
10860
10945
  persistScope,
10861
10946
  availableTerminalHeight
10862
10947
  }) {
@@ -10868,10 +10953,14 @@ function ModelDialog({
10868
10953
  const authType = config?.getAuthType();
10869
10954
  const availableModelEntries = (0, import_react34.useMemo)(() => {
10870
10955
  const allModels = config ? config.getAllConfiguredModels() : [];
10871
- const runtimeModels = allModels.filter((m) => m.isRuntimeModel);
10872
- const registryModels = allModels.filter(
10873
- (m) => !m.isRuntimeModel && (m.authType !== "qwen-oauth" /* QWEN_OAUTH */ || authType === "qwen-oauth" /* QWEN_OAUTH */) && (isFastModelMode || !m.fastOnly) && (isVoiceModelMode || !m.voiceOnly)
10874
- );
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
+ });
10875
10964
  const modelsByAuthTypeMap = /* @__PURE__ */ new Map();
10876
10965
  for (const model of registryModels) {
10877
10966
  const authType2 = model.authType;
@@ -10906,7 +10995,7 @@ function ModelDialog({
10906
10995
  }
10907
10996
  }
10908
10997
  return result;
10909
- }, [authType, config, isFastModelMode, isVoiceModelMode]);
10998
+ }, [authType, config, isFastModelMode, isImageModelMode, isVoiceModelMode]);
10910
10999
  const MODEL_OPTIONS = (0, import_react34.useMemo)(
10911
11000
  () => availableModelEntries.map(
10912
11001
  ({ authType: t2, model, isRuntime, snapshotId }) => {
@@ -10972,7 +11061,9 @@ function ModelDialog({
10972
11061
  const fastModelSetting = settings?.merged?.fastModel;
10973
11062
  const voiceModelSetting = settings?.merged?.voiceModel;
10974
11063
  const visionModelSetting = settings?.merged?.visionModel;
11064
+ const imageModelSetting = settings?.merged?.imageModel;
10975
11065
  const parsedVisionModelValue = parseVisionModelSetting(visionModelSetting);
11066
+ const parsedImageModelValue = parseVisionModelSetting(imageModelSetting);
10976
11067
  const parsedFastModelSetting = (0, import_react34.useMemo)(() => {
10977
11068
  if (!isFastModelMode) return void 0;
10978
11069
  try {
@@ -10989,8 +11080,16 @@ function ModelDialog({
10989
11080
  return void 0;
10990
11081
  }
10991
11082
  }, [parsedVisionModelValue?.selector, isVisionModelMode]);
10992
- const preferredModelId = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.modelId : isVisionModelMode && parsedVisionModelSetting ? parsedVisionModelSetting.modelId : config?.getModel() || MAINLINE_CODER_MODEL;
10993
- 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?.();
10994
11093
  const currentBaseUrl = config?.getModelsConfig().getGenerationConfig()?.baseUrl;
10995
11094
  const preferredFastModelEntry = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.authType ? availableModelEntries.find(
10996
11095
  ({ authType: t2, model }) => t2 === parsedFastModelSetting.authType && model.id === parsedFastModelSetting.modelId
@@ -11006,6 +11105,11 @@ function ModelDialog({
11006
11105
  ) : availableModelEntries.find(
11007
11106
  ({ model }) => model.id === parsedVisionModelSetting.modelId && matchesVisionModelBaseUrl(model)
11008
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;
11009
11113
  const preferredKey = activeRuntimeSnapshot ? activeRuntimeSnapshot.id : preferredVoiceModelEntry ? buildModelSelectionKey(
11010
11114
  preferredVoiceModelEntry.authType,
11011
11115
  preferredVoiceModelEntry.model.id,
@@ -11014,14 +11118,22 @@ function ModelDialog({
11014
11118
  preferredVisionModelEntry.authType,
11015
11119
  preferredVisionModelEntry.model.id,
11016
11120
  preferredVisionModelEntry.model.baseUrl
11121
+ ) : preferredImageModelEntry ? buildModelSelectionKey(
11122
+ preferredImageModelEntry.authType,
11123
+ preferredImageModelEntry.model.id,
11124
+ preferredImageModelEntry.model.baseUrl
11017
11125
  ) : preferredFastModelEntry ? buildModelSelectionKey(
11018
11126
  preferredFastModelEntry.authType,
11019
11127
  preferredFastModelEntry.model.id,
11020
11128
  preferredFastModelEntry.model.baseUrl
11021
- ) : authType ? buildModelSelectionKey(authType, preferredModelId, currentBaseUrl) : "";
11129
+ ) : authType ? buildModelSelectionKey(
11130
+ authType,
11131
+ preferredModelId,
11132
+ currentBaseUrl
11133
+ ) : "";
11022
11134
  useKeypress(
11023
11135
  (key) => {
11024
- if (key.name === "escape" || key.name === "left" && (isFastModelMode || isVoiceModelMode || isVisionModelMode)) {
11136
+ if (key.name === "escape" || key.name === "left" && (isFastModelMode || isVoiceModelMode || isVisionModelMode || isImageModelMode)) {
11025
11137
  onClose();
11026
11138
  }
11027
11139
  },
@@ -11134,6 +11246,36 @@ ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge ma
11134
11246
  onClose();
11135
11247
  return;
11136
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
+ }
11137
11279
  const isQwenOAuthSelection = selected.startsWith(`${"qwen-oauth" /* QWEN_OAUTH */}::`) || selected.startsWith("$runtime|") && selected.split("|")[1] === "qwen-oauth" /* QWEN_OAUTH */;
11138
11280
  const isRuntimeOAuthSelection = selected.startsWith(
11139
11281
  `$runtime|${"qwen-oauth" /* QWEN_OAUTH */}|`
@@ -11221,6 +11363,7 @@ ${baseErrorMessage}`);
11221
11363
  isFastModelMode,
11222
11364
  isVoiceModelMode,
11223
11365
  isVisionModelMode,
11366
+ isImageModelMode,
11224
11367
  availableModelEntries,
11225
11368
  persistScope
11226
11369
  ]
@@ -11235,7 +11378,7 @@ ${baseErrorMessage}`);
11235
11378
  padding: 1,
11236
11379
  width: "100%",
11237
11380
  children: [
11238
- /* @__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)") : "") }),
11239
11382
  !hasModels ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Box_default, { marginTop: 1, flexDirection: "column", children: [
11240
11383
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Text, { color: theme.status.warning, children: t(
11241
11384
  "No models available for the current authentication type ({{authType}}).",
@@ -11331,7 +11474,9 @@ function ArenaStartDialog({
11331
11474
  const [selectedKeys, setSelectedKeys] = (0, import_react35.useState)([]);
11332
11475
  const modelItems = (0, import_react35.useMemo)(() => {
11333
11476
  const allModels = config.getAllConfiguredModels();
11334
- const selectableModels = allModels.filter((model) => !model.isRuntimeModel);
11477
+ const selectableModels = allModels.filter(
11478
+ (model) => !model.isRuntimeModel && !model.imageOnly
11479
+ );
11335
11480
  return selectableModels.map((model) => {
11336
11481
  const token = `${model.authType}:${model.id}`;
11337
11482
  const isQwenOauth = model.authType === "qwen-oauth" /* QWEN_OAUTH */;
@@ -13925,7 +14070,7 @@ var AgentSelectionStep = /* @__PURE__ */ __name(({
13925
14070
  const renderAgentItem = /* @__PURE__ */ __name((agent, index, isSelected) => {
13926
14071
  const textColor = isSelected ? theme.text.accent : theme.text.primary;
13927
14072
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Box_default, { alignItems: "center", children: [
13928
- /* @__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 : " " }) }),
13929
14074
  /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Text, { color: textColor, wrap: "truncate", children: [
13930
14075
  agent.name,
13931
14076
  agent.isBuiltin && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Text, { color: isSelected ? theme.text.accent : theme.text.secondary, children: [
@@ -18000,7 +18145,7 @@ var InstalledTab = /* @__PURE__ */ __name(({
18000
18145
  const item = row.item;
18001
18146
  const globalIndex = indexByKey.get(item.key) ?? -1;
18002
18147
  const isSelected = globalIndex === selectedIndex;
18003
- const marker = isSelected ? "\u25CF" : " ";
18148
+ const marker = isSelected ? ICON.CIRCLE_FILLED : " ";
18004
18149
  const isChild = item.kind === "mcp" && !!item.parentExtension;
18005
18150
  const kindBadge = item.kind === "mcp" ? t("MCP") : t("Extension v{{version}}", {
18006
18151
  // Persisted marketplace metadata: `version` is stored verbatim
@@ -18039,7 +18184,10 @@ var InstalledTab = /* @__PURE__ */ __name(({
18039
18184
  isChild ? " \u2514 " : "",
18040
18185
  item.name
18041
18186
  ] }),
18042
- 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
18043
18191
  ] }),
18044
18192
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Text, { color: isSelected ? theme.text.accent : theme.text.secondary, children: [
18045
18193
  kindBadge,
@@ -18462,7 +18610,7 @@ var SourcesTab = /* @__PURE__ */ __name(({
18462
18610
  count: String(installedHere.length)
18463
18611
  }) }),
18464
18612
  installedHere.slice(0, INSTALLED_PREVIEW_LIMIT).map((p) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Box_default, { children: [
18465
- /* @__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 }) }),
18466
18614
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.text.primary, children: stripUnsafeCharacters(p.name) })
18467
18615
  ] }, p.name)),
18468
18616
  installedHere.length > INSTALLED_PREVIEW_LIMIT ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.text.secondary, children: t("... and {{count}} more", {
@@ -18513,7 +18661,7 @@ var SourcesTab = /* @__PURE__ */ __name(({
18513
18661
  const isSelected = index === selectedIndex;
18514
18662
  const labelColor = isSelected ? theme.text.accent : isAction ? theme.text.link : theme.text.primary;
18515
18663
  return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(Box_default, { children: [
18516
- /* @__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 : " " }) }),
18517
18665
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: labelColor, children: label }) }),
18518
18666
  rightText ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Text, { color: theme.text.secondary, children: rightText }) : null
18519
18667
  ] }, `row-${index}`);
@@ -18888,7 +19036,8 @@ var ServerListStep = /* @__PURE__ */ __name(({
18888
19036
  servers.some(
18889
19037
  (s) => s.status === "disconnected" && !s.isDisabled && !s.approvalState
18890
19038
  ) && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Text, { color: theme.status.warning, children: [
18891
- "\u203B ",
19039
+ ICON.REFERENCE,
19040
+ " ",
18892
19041
  t("Run qwen --debug to see error logs")
18893
19042
  ] }) })
18894
19043
  ] });
@@ -22501,7 +22650,7 @@ __name(treeRowPrefix, "treeRowPrefix");
22501
22650
  function statusGlyph(status) {
22502
22651
  switch (status) {
22503
22652
  case "running":
22504
- return "\u25CB";
22653
+ return ICON.CIRCLE_EMPTY;
22505
22654
  case "paused":
22506
22655
  return "\u23F8";
22507
22656
  case "completed":
@@ -22510,7 +22659,7 @@ function statusGlyph(status) {
22510
22659
  case "cancelled":
22511
22660
  return "\u2716";
22512
22661
  default:
22513
- return "\u25CB";
22662
+ return ICON.CIRCLE_EMPTY;
22514
22663
  }
22515
22664
  }
22516
22665
  __name(statusGlyph, "statusGlyph");
@@ -24133,6 +24282,7 @@ var DialogManager = /* @__PURE__ */ __name(({
24133
24282
  isFastModelMode: uiState.isFastModelMode,
24134
24283
  isVoiceModelMode: uiState.isVoiceModelMode,
24135
24284
  isVisionModelMode: uiState.isVisionModelMode,
24285
+ isImageModelMode: uiState.isImageModelMode,
24136
24286
  persistScope: uiState.modelDialogPersistScope,
24137
24287
  availableTerminalHeight: listDialogHeight
24138
24288
  }
@@ -24664,6 +24814,23 @@ var PrepareLabel = import_react80.default.memo(_PrepareLabel);
24664
24814
 
24665
24815
  // packages/cli/src/ui/components/SuggestionsDisplay.tsx
24666
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");
24667
24834
  var MIN_DESCRIPTION_WIDTH = 12;
24668
24835
  var ACTIVE_MARKER_WIDTH = 2;
24669
24836
  function normalizeDescription(description) {
@@ -24681,27 +24848,31 @@ function SuggestionsDisplay({
24681
24848
  expandedIndex,
24682
24849
  onHoverIndex,
24683
24850
  onSelectIndex,
24684
- mouseEnabled
24851
+ mouseEnabled,
24852
+ activeCategory = "all",
24853
+ availableCategories
24685
24854
  }) {
24686
24855
  const containerRef = (0, import_react81.useRef)(null);
24687
24856
  const itemRefs = (0, import_react81.useRef)([]);
24688
24857
  if (isLoading) {
24689
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...") }) });
24690
24859
  }
24691
- 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) {
24692
24863
  return null;
24693
24864
  }
24694
24865
  const startIndex = scrollOffset;
24695
24866
  const endIndex = Math.min(
24696
24867
  scrollOffset + MAX_SUGGESTIONS_TO_SHOW,
24697
- suggestions.length
24868
+ filteredSuggestions.length
24698
24869
  );
24699
- const visibleSuggestions = suggestions.slice(startIndex, endIndex);
24870
+ const visibleSuggestions = filteredSuggestions.slice(startIndex, endIndex);
24700
24871
  const getFullLabel = /* @__PURE__ */ __name((s) => [s.label, s.argumentHint, s.sourceBadge].filter(Boolean).join(" "), "getFullLabel");
24701
24872
  const maxLabelLength = Math.max(
24702
- ...suggestions.map((s) => getFullLabel(s).length)
24873
+ ...filteredSuggestions.map((s) => getFullLabel(s).length)
24703
24874
  );
24704
- 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);
24705
24876
  const contentWidth = Math.max(width - ACTIVE_MARKER_WIDTH, 1);
24706
24877
  const labelColumnWidth = mode === "slash" ? Math.min(maxLabelLength, Math.floor(contentWidth * 0.5)) : describedLabelLengths.length > 0 ? Math.min(
24707
24878
  Math.max(...describedLabelLengths),
@@ -24718,6 +24889,20 @@ function SuggestionsDisplay({
24718
24889
  onSelectIndex
24719
24890
  }
24720
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
+ ] }),
24721
24906
  scrollOffset > 0 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: theme.text.primary, children: "\u25B2" }),
24722
24907
  visibleSuggestions.map((suggestion, index) => {
24723
24908
  const originalIndex = startIndex + index;
@@ -24783,12 +24968,12 @@ function SuggestionsDisplay({
24783
24968
  `${suggestion.value}-${originalIndex}`
24784
24969
  );
24785
24970
  }),
24786
- endIndex < suggestions.length && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Text, { color: "gray", children: "\u25BC" }),
24787
- 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: [
24788
24973
  "(",
24789
24974
  activeIndex + 1,
24790
24975
  "/",
24791
- suggestions.length,
24976
+ filteredSuggestions.length,
24792
24977
  ")"
24793
24978
  ] })
24794
24979
  ] });
@@ -25014,8 +25199,15 @@ var import_react85 = __toESM(require_react(), 1);
25014
25199
  // packages/cli/src/ui/hooks/useCompletion.ts
25015
25200
  init_esbuild_shims();
25016
25201
  var import_react84 = __toESM(require_react(), 1);
25202
+ var CATEGORY_ORDER = [
25203
+ "file",
25204
+ "session",
25205
+ "mcp",
25206
+ "extension"
25207
+ ];
25017
25208
  function useCompletion(options = {}) {
25018
- const [suggestions, setSuggestions] = (0, import_react84.useState)([]);
25209
+ const [rawSuggestions, setSuggestions] = (0, import_react84.useState)([]);
25210
+ const [activeCategory, setActiveCategory] = (0, import_react84.useState)("all");
25019
25211
  const [activeSuggestionIndex, setActiveSuggestionIndex] = (0, import_react84.useState)(-1);
25020
25212
  const [visibleStartIndex, setVisibleStartIndex] = (0, import_react84.useState)(0);
25021
25213
  const [showSuggestions, setShowSuggestions] = (0, import_react84.useState)(false);
@@ -25023,8 +25215,48 @@ function useCompletion(options = {}) {
25023
25215
  const [isPerfectMatch, setIsPerfectMatch] = (0, import_react84.useState)(false);
25024
25216
  const [dismissed, setDismissed] = (0, import_react84.useState)(false);
25025
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
+ );
25026
25257
  const resetCompletionState = (0, import_react84.useCallback)(() => {
25027
25258
  setSuggestions([]);
25259
+ setActiveCategory("all");
25028
25260
  setActiveSuggestionIndex(-1);
25029
25261
  setVisibleStartIndex(0);
25030
25262
  setShowSuggestions(false);
@@ -25098,7 +25330,10 @@ function useCompletion(options = {}) {
25098
25330
  resetCompletionState,
25099
25331
  dismissCompletion,
25100
25332
  navigateUp,
25101
- navigateDown
25333
+ navigateDown,
25334
+ activeCategory,
25335
+ availableCategories,
25336
+ switchCategory
25102
25337
  };
25103
25338
  }
25104
25339
  __name(useCompletion, "useCompletion");
@@ -25220,6 +25455,52 @@ var import_react88 = __toESM(require_react(), 1);
25220
25455
  // packages/cli/src/ui/hooks/useAtCompletion.ts
25221
25456
  init_esbuild_shims();
25222
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
25223
25504
  function rankResourceMatch(uri, friendly, query) {
25224
25505
  if (uri.startsWith(query)) return 0;
25225
25506
  if (friendly.startsWith(query)) return 1;
@@ -25464,13 +25745,21 @@ function useAtCompletion(props) {
25464
25745
  ...mcpServerMentionSuggestions,
25465
25746
  ...serverSuggestions,
25466
25747
  ...globalResourceSuggestions
25467
- ];
25748
+ ].map((s) => ({ ...s, category: s.category ?? "mcp" }));
25749
+ const sessionPromise = getSessionSuggestions(cwd3, state.pattern);
25468
25750
  if (!fileSearch.current) {
25469
- 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) {
25470
25759
  if (slowSearchTimer.current) {
25471
25760
  clearTimeout(slowSearchTimer.current);
25472
25761
  }
25473
- dispatch({ type: "SEARCH_SUCCESS", payload: mcpSuggestions });
25762
+ dispatch({ type: "SEARCH_SUCCESS", payload: scoped });
25474
25763
  }
25475
25764
  return;
25476
25765
  }
@@ -25496,16 +25785,34 @@ function useAtCompletion(props) {
25496
25785
  const fileSuggestions = results.map((p) => ({
25497
25786
  label: p,
25498
25787
  value: escapePath(p),
25499
- isDirectory: p.endsWith("/")
25788
+ isDirectory: p.endsWith("/"),
25789
+ category: "file"
25500
25790
  }));
25791
+ const sessionSuggestions = await sessionPromise.catch(
25792
+ () => []
25793
+ );
25794
+ if (controller.signal.aborted || cancelled) {
25795
+ return;
25796
+ }
25501
25797
  dispatch({
25502
25798
  type: "SEARCH_SUCCESS",
25503
- payload: [...mcpSuggestions, ...fileSuggestions]
25799
+ payload: [
25800
+ ...mcpSuggestions,
25801
+ ...fileSuggestions,
25802
+ ...sessionSuggestions
25803
+ ]
25504
25804
  });
25505
25805
  } catch (error) {
25506
25806
  if (!(error instanceof Error && error.name === "AbortError")) {
25507
- if (mcpSuggestions.length > 0) {
25508
- 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 });
25509
25816
  } else {
25510
25817
  dispatch({ type: "ERROR" });
25511
25818
  }
@@ -26164,7 +26471,10 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26164
26471
  resetCompletionState,
26165
26472
  dismissCompletion,
26166
26473
  navigateUp,
26167
- navigateDown
26474
+ navigateDown,
26475
+ activeCategory,
26476
+ availableCategories,
26477
+ switchCategory
26168
26478
  } = useCompletion({ query });
26169
26479
  useAtCompletion({
26170
26480
  enabled: completionMode === "AT" /* AT */,
@@ -26315,7 +26625,10 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26315
26625
  navigateDown,
26316
26626
  handleAutocomplete,
26317
26627
  completionMode,
26318
- midInputGhostText
26628
+ midInputGhostText,
26629
+ activeCategory,
26630
+ availableCategories,
26631
+ switchCategory
26319
26632
  };
26320
26633
  }
26321
26634
  __name(useCommandCompletion, "useCommandCompletion");
@@ -27147,7 +27460,7 @@ var FeedbackDialog = /* @__PURE__ */ __name(() => {
27147
27460
  );
27148
27461
  return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Box_default, { flexDirection: "column", marginY: 1, children: [
27149
27462
  /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Box_default, { children: [
27150
- /* @__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 + " " }),
27151
27464
  /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Text, { bold: true, children: t("How is Qwen doing this session? (optional)") })
27152
27465
  ] }),
27153
27466
  /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Box_default, { marginTop: 1, children: [
@@ -29510,6 +29823,18 @@ ${currentText}`);
29510
29823
  return true;
29511
29824
  }
29512
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
+ }
29513
29838
  if (completion.suggestions.length > 1) {
29514
29839
  const isCompletionUpKey = keyMatchers["completionUp" /* COMPLETION_UP */](key);
29515
29840
  const isCompletionDownKey = keyMatchers["completionDown" /* COMPLETION_DOWN */](key);
@@ -30050,6 +30375,8 @@ ${currentText}`);
30050
30375
  mode: buffer.text.startsWith("/") && !reverseSearchActive && !commandSearchActive ? "slash" : "reverse",
30051
30376
  expandedIndex: expandedSuggestionIndex,
30052
30377
  mouseEnabled: mouseInteractionsEnabled,
30378
+ activeCategory: suggestionsFromExport || commandSearchActive || reverseSearchActive ? void 0 : completion.activeCategory,
30379
+ availableCategories: suggestionsFromExport || commandSearchActive || reverseSearchActive ? void 0 : completion.availableCategories,
30053
30380
  onHoverIndex: suggestionsFromExport ? void 0 : handleSuggestionHover,
30054
30381
  onSelectIndex: suggestionsFromExport ? void 0 : handleSuggestionSelect
30055
30382
  }
@@ -30847,7 +31174,8 @@ var CronPill = /* @__PURE__ */ __name(({ count }) => {
30847
31174
  if (count <= 0) return null;
30848
31175
  const noun = count === 1 ? "scheduled task" : "scheduled tasks";
30849
31176
  return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(Text, { color: theme.text.accent, children: [
30850
- "\u25CE ",
31177
+ ICON.BULLSEYE,
31178
+ " ",
30851
31179
  count,
30852
31180
  " ",
30853
31181
  noun
@@ -30856,11 +31184,24 @@ var CronPill = /* @__PURE__ */ __name(({ count }) => {
30856
31184
 
30857
31185
  // packages/cli/src/ui/components/Footer.tsx
30858
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");
30859
31199
  var Footer = /* @__PURE__ */ __name(() => {
30860
31200
  const uiState = useUIState();
30861
31201
  const config = useConfig();
30862
31202
  const settings = useSettings();
30863
31203
  const { vimEnabled, vimMode } = useVimModeState();
31204
+ const { pasteProgress } = useKeypressContext();
30864
31205
  const {
30865
31206
  lines: statusLineLines,
30866
31207
  useThemeColors,
@@ -30879,7 +31220,7 @@ var Footer = /* @__PURE__ */ __name(() => {
30879
31220
  const debugMode = config.getDebugMode();
30880
31221
  const contextWindowSize = config.getContentGeneratorConfig()?.contextWindowSize;
30881
31222
  const suppressHint = statusLineLines.length > 0;
30882
- 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: [
30883
31224
  /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(GeminiSpinner, {}),
30884
31225
  " ",
30885
31226
  configInitMessage
@@ -31374,9 +31715,9 @@ __name(getStickyTodoMaxVisibleItemsForMode, "getStickyTodoMaxVisibleItemsForMode
31374
31715
  // packages/cli/src/ui/components/StickyTodoList.tsx
31375
31716
  var import_jsx_runtime121 = __toESM(require_jsx_runtime(), 1);
31376
31717
  var STATUS_ICONS = {
31377
- pending: "\u25CB",
31378
- in_progress: "\u25D0",
31379
- completed: "\u25CF"
31718
+ pending: ICON.CIRCLE_EMPTY,
31719
+ in_progress: ICON.CIRCLE_LEFT_HALF,
31720
+ completed: ICON.CIRCLE_FILLED
31380
31721
  };
31381
31722
  function clampVisibleTodoCount(value) {
31382
31723
  if (!Number.isFinite(value)) {
@@ -33075,16 +33416,21 @@ var useModelCommand = /* @__PURE__ */ __name(() => {
33075
33416
  const [isFastModelMode, setIsFastModelMode] = (0, import_react123.useState)(false);
33076
33417
  const [isVoiceModelMode, setIsVoiceModelMode] = (0, import_react123.useState)(false);
33077
33418
  const [isVisionModelMode, setIsVisionModelMode] = (0, import_react123.useState)(false);
33419
+ const [isImageModelMode, setIsImageModelMode] = (0, import_react123.useState)(false);
33078
33420
  const [modelDialogPersistScope, setModelDialogPersistScope] = (0, import_react123.useState)(void 0);
33079
33421
  const openModelDialog = (0, import_react123.useCallback)(
33080
33422
  (options) => {
33081
33423
  const voiceModelMode = options?.voiceModelMode ?? false;
33082
33424
  const visionModelMode = options?.visionModelMode ?? false;
33425
+ const imageModelMode = options?.imageModelMode ?? false;
33083
33426
  setIsFastModelMode(
33084
- voiceModelMode || visionModelMode ? false : options?.fastModelMode ?? false
33427
+ voiceModelMode || visionModelMode || imageModelMode ? false : options?.fastModelMode ?? false
33428
+ );
33429
+ setIsVoiceModelMode(
33430
+ visionModelMode || imageModelMode ? false : voiceModelMode
33085
33431
  );
33086
- setIsVoiceModelMode(visionModelMode ? false : voiceModelMode);
33087
- setIsVisionModelMode(visionModelMode);
33432
+ setIsVisionModelMode(imageModelMode ? false : visionModelMode);
33433
+ setIsImageModelMode(imageModelMode);
33088
33434
  setModelDialogPersistScope(options?.persistScope);
33089
33435
  setIsModelDialogOpen(true);
33090
33436
  },
@@ -33095,6 +33441,7 @@ var useModelCommand = /* @__PURE__ */ __name(() => {
33095
33441
  setIsFastModelMode(false);
33096
33442
  setIsVoiceModelMode(false);
33097
33443
  setIsVisionModelMode(false);
33444
+ setIsImageModelMode(false);
33098
33445
  setModelDialogPersistScope(void 0);
33099
33446
  }, []);
33100
33447
  return {
@@ -33102,6 +33449,7 @@ var useModelCommand = /* @__PURE__ */ __name(() => {
33102
33449
  isFastModelMode,
33103
33450
  isVoiceModelMode,
33104
33451
  isVisionModelMode,
33452
+ isImageModelMode,
33105
33453
  modelDialogPersistScope,
33106
33454
  openModelDialog,
33107
33455
  closeModelDialog
@@ -33202,6 +33550,7 @@ var useEffortCommand = /* @__PURE__ */ __name((loadedSettings, config, addItem)
33202
33550
  init_esbuild_shims();
33203
33551
  var import_react126 = __toESM(require_react(), 1);
33204
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.";
33205
33554
  function deriveFirstPrompt(messages) {
33206
33555
  for (const record of messages) {
33207
33556
  if (record.type !== "user") continue;
@@ -33223,6 +33572,16 @@ function useBranchCommand(options) {
33223
33572
  const handleBranch = (0, import_react126.useCallback)(
33224
33573
  async (name) => {
33225
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
+ }
33226
33585
  const oldSessionId = config.getSessionId();
33227
33586
  const newSessionId = randomUUID();
33228
33587
  const sessionService = config.getSessionService();
@@ -33276,6 +33635,7 @@ function useBranchCommand(options) {
33276
33635
  historyManager.clearItems();
33277
33636
  historyManager.loadHistory(uiHistoryItems);
33278
33637
  uiSwapped = true;
33638
+ resetBackgroundStateForSessionSwitch(config);
33279
33639
  try {
33280
33640
  restoreGoalFromHistory(
33281
33641
  uiHistoryItems,
@@ -33394,6 +33754,7 @@ function useResumeCommand(options) {
33394
33754
  const oldSessionId = config.getSessionId();
33395
33755
  let coreSwapped = false;
33396
33756
  let uiSwapped = false;
33757
+ let recoveredBackgroundAgentsNotice = null;
33397
33758
  try {
33398
33759
  const cwd3 = config.getTargetDir();
33399
33760
  const sessionService = new SessionService(cwd3);
@@ -33434,22 +33795,30 @@ function useResumeCommand(options) {
33434
33795
  await config.getGeminiClient()?.initialize?.();
33435
33796
  const recovered = await config.loadPausedBackgroundAgents(sessionId);
33436
33797
  if (recovered.length > 0) {
33437
- const recoveredMessage = {
33438
- type: "info" /* INFO */,
33439
- text: config.getBackgroundAgentResumeService().buildRecoveredBackgroundAgentsNotice(recovered.length)
33440
- };
33441
- addItem(recoveredMessage, Date.now());
33798
+ recoveredBackgroundAgentsNotice = config.getBackgroundAgentResumeService().buildRecoveredBackgroundAgentsNotice(recovered.length);
33442
33799
  }
33443
33800
  startNewSession(sessionId);
33444
33801
  setSessionName?.(customTitle ?? null);
33445
33802
  clearItems();
33446
33803
  loadHistory(uiHistoryItems);
33804
+ if (recoveredBackgroundAgentsNotice) {
33805
+ addItem(
33806
+ {
33807
+ type: "info" /* INFO */,
33808
+ text: recoveredBackgroundAgentsNotice
33809
+ },
33810
+ Date.now()
33811
+ );
33812
+ }
33447
33813
  uiSwapped = true;
33448
33814
  remount?.();
33449
33815
  } catch (error) {
33450
33816
  if (coreSwapped && !uiSwapped) {
33451
33817
  try {
33818
+ resetBackgroundStateForSessionSwitch(config);
33452
33819
  config.startNewSession(oldSessionId, void 0);
33820
+ await config.loadPausedBackgroundAgents(oldSessionId).catch(() => {
33821
+ });
33453
33822
  } catch (rollbackErr) {
33454
33823
  config.getDebugLogger().warn(
33455
33824
  `Rollback after failed /resume init failed: ${rollbackErr}`
@@ -34509,6 +34878,12 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
34509
34878
  persistScope: result.persistScope
34510
34879
  });
34511
34880
  return { type: "handled" };
34881
+ case "image-model":
34882
+ actions.openModelDialog({
34883
+ imageModelMode: true,
34884
+ persistScope: result.persistScope
34885
+ });
34886
+ return { type: "handled" };
34512
34887
  case "trust":
34513
34888
  actions.openTrustDialog();
34514
34889
  return { type: "handled" };
@@ -35931,9 +36306,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
35931
36306
  }, [isResponding, toolCalls]);
35932
36307
  (0, import_react136.useEffect)(() => {
35933
36308
  if (config.getApprovalMode() === "yolo" /* YOLO */ && streamingState === "idle" /* Idle */) {
35934
- const lastUserMessageIndex = history.findLastIndex(
35935
- (item) => item.type === "user" /* USER */
35936
- );
36309
+ const lastUserMessageIndex = findLastUserItemIndex(history);
35937
36310
  const turnCount = lastUserMessageIndex === -1 ? 0 : history.length - lastUserMessageIndex;
35938
36311
  if (turnCount > 0) {
35939
36312
  logConversationFinishedEvent(
@@ -37235,7 +37608,12 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37235
37608
  for (const sideEffect of sideEffects) sideEffect();
37236
37609
  config.getChatRecordingService?.()?.recordMidTurnUserMessage(parts, message);
37237
37610
  addItem(
37238
- { 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
+ },
37239
37617
  Date.now()
37240
37618
  );
37241
37619
  }
@@ -37893,6 +38271,15 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37893
38271
  if (modelSwitchedFromQuotaError) {
37894
38272
  return;
37895
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
+ }
37896
38283
  const drained = turnCancelledRef.current || abortControllerRef.current?.signal.aborted ? [] : midTurnDrainRef?.current?.() ?? [];
37897
38284
  let drainedSteer;
37898
38285
  if (drained.length > 0) {
@@ -38135,7 +38522,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38135
38522
  notificationQueueRef.current.push({
38136
38523
  displayText,
38137
38524
  modelText,
38138
- sendMessageType: "notification" /* Notification */
38525
+ sendMessageType: "notification" /* Notification */,
38526
+ monitor: { id: meta.monitorId, status: meta.status }
38139
38527
  });
38140
38528
  setNotificationTrigger((n) => n + 1);
38141
38529
  });
@@ -38147,6 +38535,16 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38147
38535
  if (streamingState === "idle" /* Idle */ && !isSubmittingQueryRef.current && notificationQueueRef.current.length > 0) {
38148
38536
  runOutsideAgentContext(() => {
38149
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
+ }
38150
38548
  const targetType = queue[0].sendMessageType;
38151
38549
  if (targetType === "cron" /* Cron */) {
38152
38550
  const item = queue.shift();
@@ -38180,7 +38578,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38180
38578
  });
38181
38579
  });
38182
38580
  }
38183
- }, [streamingState, submitQuery, notificationTrigger, addItem]);
38581
+ }, [streamingState, submitQuery, notificationTrigger, addItem, config]);
38184
38582
  const teammateQueueRef = (0, import_react136.useRef)([]);
38185
38583
  const [teammateTrigger, setTeammateTrigger] = (0, import_react136.useState)(0);
38186
38584
  (0, import_react136.useEffect)(() => {
@@ -38215,17 +38613,19 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38215
38613
  }, [config]);
38216
38614
  (0, import_react136.useEffect)(() => {
38217
38615
  if (streamingState === "idle" /* Idle */ && !isSubmittingQueryRef.current && teammateQueueRef.current.length > 0) {
38218
- const batch = teammateQueueRef.current.splice(0);
38219
- for (const entry of batch) {
38220
- addItem(
38221
- { type: "notification", text: entry.display },
38222
- Date.now()
38223
- );
38224
- }
38225
- const modelText = batch.map((e) => e.modelText).join("\n\n");
38226
- const display = batch.map((e) => e.display).join("; ");
38227
- submitQuery(modelText, "teammate" /* Teammate */, void 0, {
38228
- 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
+ });
38229
38629
  });
38230
38630
  }
38231
38631
  }, [streamingState, submitQuery, teammateTrigger, addItem]);
@@ -39893,14 +40293,15 @@ function shouldFireRecap(history) {
39893
40293
  let lastRecapIndex = -1;
39894
40294
  for (let i = 0; i < history.length; i++) {
39895
40295
  const item = history[i];
39896
- if (item.type === "user") userMessageCount++;
40296
+ if (item.type === "user" && item.sentToModel !== false) userMessageCount++;
39897
40297
  if (item.type === "away_recap") lastRecapIndex = i;
39898
40298
  }
39899
40299
  if (userMessageCount < MIN_USER_MESSAGES_TO_FIRE) return false;
39900
40300
  if (lastRecapIndex === -1) return true;
39901
40301
  let userSinceLast = 0;
39902
40302
  for (let i = lastRecapIndex + 1; i < history.length; i++) {
39903
- if (history[i].type === "user") userSinceLast++;
40303
+ const item = history[i];
40304
+ if (item.type === "user" && item.sentToModel !== false) userSinceLast++;
39904
40305
  }
39905
40306
  return userSinceLast >= MIN_USER_MESSAGES_SINCE_LAST_RECAP;
39906
40307
  }
@@ -40919,16 +41320,23 @@ var AlternateScreen = /* @__PURE__ */ __name(({
40919
41320
  init_esbuild_shims();
40920
41321
  var import_react150 = __toESM(require_react(), 1);
40921
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");
40922
41330
  var ErrorBoundary = class extends import_react150.Component {
40923
41331
  static {
40924
41332
  __name(this, "ErrorBoundary");
40925
41333
  }
40926
41334
  state = { error: null };
40927
41335
  static getDerivedStateFromError(error) {
40928
- return { error };
41336
+ return { error: normalizeError(error) };
40929
41337
  }
40930
41338
  componentDidCatch(error, info) {
40931
- this.props.onError?.(error, info);
41339
+ this.props.onError?.(normalizeError(error), info);
40932
41340
  }
40933
41341
  reset = /* @__PURE__ */ __name(() => {
40934
41342
  this.setState({ error: null });
@@ -42112,9 +42520,9 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42112
42520
  (0, import_react165.useEffect)(() => {
42113
42521
  const fetchUserMessages = /* @__PURE__ */ __name(async () => {
42114
42522
  const pastMessagesRaw = await logger?.getPreviousUserMessages() || [];
42115
- const currentSessionUserMessages = historyManager.history.filter(
42116
- (item) => item.type === "user" && typeof item.text === "string" && item.text.trim() !== ""
42117
- ).map((item) => item.text).reverse();
42523
+ const currentSessionUserMessages = realUserPromptTexts(
42524
+ historyManager.history
42525
+ ).reverse();
42118
42526
  const combinedMessages = [
42119
42527
  ...currentSessionUserMessages,
42120
42528
  ...pastMessagesRaw
@@ -42243,6 +42651,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42243
42651
  isFastModelMode,
42244
42652
  isVoiceModelMode,
42245
42653
  isVisionModelMode,
42654
+ isImageModelMode,
42246
42655
  modelDialogPersistScope,
42247
42656
  openModelDialog,
42248
42657
  closeModelDialog
@@ -42881,6 +43290,20 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42881
43290
  }
42882
43291
  }
42883
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
+ }
42884
43307
  const worktreeNotice = pendingWorktreeNoticeRef.current;
42885
43308
  if (worktreeNotice && !isSlashCommand(submittedValue)) {
42886
43309
  pendingWorktreeNoticeRef.current = null;
@@ -42911,12 +43334,6 @@ ${buildWorkflowSteeringNotice()}
42911
43334
  void submitQuery(submittedValue);
42912
43335
  return;
42913
43336
  }
42914
- if (["/quit", "/exit", "exit", "quit", ":q", ":q!", ":wq", ":wq!"].includes(
42915
- submittedValue.trim()
42916
- )) {
42917
- void handleSlashCommand("/quit");
42918
- return;
42919
- }
42920
43337
  const spec = speculationRef.current;
42921
43338
  if (spec.status !== "idle" && spec.suggestion === submittedValue && spec.status === "completed") {
42922
43339
  acceptSpeculation(spec, geminiClient).then((result) => {
@@ -44147,6 +44564,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44147
44564
  isFastModelMode,
44148
44565
  isVoiceModelMode,
44149
44566
  isVisionModelMode,
44567
+ isImageModelMode,
44150
44568
  modelDialogPersistScope,
44151
44569
  isTrustDialogOpen,
44152
44570
  activeArenaDialog,
@@ -44290,6 +44708,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44290
44708
  isFastModelMode,
44291
44709
  isVoiceModelMode,
44292
44710
  isVisionModelMode,
44711
+ isImageModelMode,
44293
44712
  modelDialogPersistScope,
44294
44713
  isTrustDialogOpen,
44295
44714
  activeArenaDialog,
@@ -44923,14 +45342,33 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
44923
45342
  if (useVP) {
44924
45343
  process.stdout.setMaxListeners(0);
44925
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
+ );
44926
45361
  const instance = render_default(
44927
- 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,
44928
45363
  {
44929
45364
  exitOnCtrlC: false,
44930
45365
  isScreenReaderEnabled: config.getScreenReader(),
44931
45366
  alternateScreen: useVP
44932
45367
  }
44933
45368
  );
45369
+ if (useVP) {
45370
+ pushKittyProtocolFlags();
45371
+ }
44934
45372
  profileCheckpoint("first_paint");
44935
45373
  startPostRenderPrefetches(config, settings, {
44936
45374
  connectIde: options.postRenderConnectIde ?? false,