@qwen-code/qwen-code 0.21.10 → 0.21.11

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 (367) hide show
  1. package/bundled/coordinate/SKILL.md +52 -0
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +10 -8
  3. package/bundled/qc-helper/docs/extension/_meta.ts +1 -0
  4. package/bundled/qc-helper/docs/extension/agent-plugins.md +50 -0
  5. package/bundled/qc-helper/docs/extension/extension-releasing.md +3 -3
  6. package/bundled/qc-helper/docs/extension/introduction.md +17 -3
  7. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  8. package/bundled/qc-helper/docs/features/arena.md +4 -3
  9. package/bundled/qc-helper/docs/features/commands.md +7 -6
  10. package/bundled/qc-helper/docs/features/dual-output.md +5 -0
  11. package/bundled/qc-helper/docs/features/headless.md +8 -0
  12. package/bundled/qc-helper/docs/features/multi-agent-coordination.md +30 -0
  13. package/bundled/qc-helper/docs/qwen-serve.md +7 -7
  14. package/bundled/review/SKILL.md +17 -7
  15. package/chunks/{MaxSizedBox-FKXYULMW.js → MaxSizedBox-G7QPSZTF.js} +45 -44
  16. package/chunks/{StandaloneSessionPicker-OQS3M7AY.js → StandaloneSessionPicker-3CTEPV7S.js} +65 -64
  17. package/chunks/{acp-startup-profiler-VNTFWYAC.js → acp-startup-profiler-JMJBZDVO.js} +2 -2
  18. package/chunks/{acpAgent-AGS6HLQQ.js → acpAgent-43JURWOW.js} +1107 -285
  19. package/chunks/{agent-4NCVO27U.js → agent-MIY4LJJJ.js} +42 -41
  20. package/chunks/agent-headless-LWVA6GR5.js +87 -0
  21. package/chunks/{anthropicContentGenerator-D3Y4RFT4.js → anthropicContentGenerator-7HEP7Q5D.js} +8 -8
  22. package/chunks/{artifact-tool-N652YE4L.js → artifact-tool-M7UAJ5NT.js} +2 -2
  23. package/chunks/{askUserQuestion-ONW74PKJ.js → askUserQuestion-7G3LI3IZ.js} +2 -2
  24. package/chunks/{bridge-FHINXZMN.js → bridge-PTTJEBNP.js} +47 -46
  25. package/chunks/{ca-ZLKAB4K3.js → ca-4CQ6MYNQ.js} +2 -1
  26. package/chunks/{channel-management-service-PHELKOW2.js → channel-management-service-PQ6SU56M.js} +6 -6
  27. package/chunks/channel-settings-store-IKK34GMH.js +102 -0
  28. package/chunks/{channel-worker-group-WQP4RCDO.js → channel-worker-group-WBRE33ZV.js} +8 -7
  29. package/chunks/{channel-worker-manager-MRDFAKIM.js → channel-worker-manager-V4LYVTPH.js} +8 -7
  30. package/chunks/{channel-worker-supervisor-IVSDIMI4.js → channel-worker-supervisor-YDAGW2RP.js} +6 -5
  31. package/chunks/{chunk-2PLNY5TN.js → chunk-23GFHEM3.js} +4 -4
  32. package/chunks/{chunk-IIJEYBNH.js → chunk-25OFRBH2.js} +188 -58
  33. package/chunks/{chunk-F24A2JBM.js → chunk-2AAFGCWP.js} +690 -151
  34. package/chunks/{chunk-J6SZID63.js → chunk-2AZMF6G5.js} +2 -2
  35. package/chunks/{chunk-6LP743KE.js → chunk-2R2HYSUQ.js} +21 -102
  36. package/chunks/{chunk-DZUO626D.js → chunk-2XZWO53E.js} +3 -3
  37. package/chunks/{chunk-VKJ4KTPJ.js → chunk-3GCU5O2E.js} +1 -1
  38. package/chunks/{chunk-AQAJJMRR.js → chunk-3LHYTQ2R.js} +1 -1
  39. package/chunks/{chunk-QJMOAMXT.js → chunk-3SOTXJNO.js} +8 -8
  40. package/chunks/{chunk-URKIBIFC.js → chunk-45HPDU3F.js} +3 -3
  41. package/chunks/{chunk-OWMAZHIX.js → chunk-47FQVRCO.js} +1 -1
  42. package/chunks/{chunk-Z4JX4NSH.js → chunk-4C4QSXE3.js} +23 -23
  43. package/chunks/{chunk-IRZ2ZH72.js → chunk-4EX3DBFH.js} +4 -4
  44. package/chunks/{chunk-MFDYOYZZ.js → chunk-4MHDNGAV.js} +25 -2
  45. package/chunks/{chunk-ABVRJU3D.js → chunk-4PFKN7CQ.js} +7 -7
  46. package/chunks/{chunk-HV76SFIA.js → chunk-5HBFERG5.js} +3 -3
  47. package/chunks/{chunk-WAUGQKUU.js → chunk-6LYDH7VT.js} +9 -5
  48. package/chunks/{chunk-S6HYI3MF.js → chunk-6S52N6PG.js} +2 -2
  49. package/chunks/{chunk-FVKHVJZQ.js → chunk-732MOPEM.js} +1 -1
  50. package/chunks/{chunk-OCSFNUU4.js → chunk-7QE3QFU3.js} +8 -8
  51. package/chunks/{chunk-WCG5O7IP.js → chunk-7SUQZ7QH.js} +2 -2
  52. package/chunks/{chunk-QG3FFJYU.js → chunk-AAOONL5N.js} +1 -1
  53. package/chunks/{chunk-VSFKIRRW.js → chunk-AKLY5M2C.js} +4 -4
  54. package/chunks/{chunk-UVX4Y6IN.js → chunk-AQHNAA7E.js} +1 -1
  55. package/chunks/{chunk-IBUGFUXC.js → chunk-BIXG46YI.js} +12 -12
  56. package/chunks/{chunk-4TRQPFDP.js → chunk-BJKREW56.js} +6 -8
  57. package/chunks/{chunk-D27I6YJT.js → chunk-BNRNVMOT.js} +27 -18
  58. package/chunks/{chunk-IWTMYQ32.js → chunk-BR6TUEKJ.js} +9 -8
  59. package/chunks/{chunk-Q3JQ7OSU.js → chunk-BTYS2JAY.js} +1 -1
  60. package/chunks/{chunk-H6XPXXMH.js → chunk-CQ35AJ4Z.js} +252 -254
  61. package/chunks/{chunk-COBO5EBO.js → chunk-CTQE2NB2.js} +1 -1
  62. package/chunks/{chunk-P3BJLFSZ.js → chunk-DEKY5Y7V.js} +3 -3
  63. package/chunks/{chunk-Y3OVRWRY.js → chunk-DM4C3OX5.js} +1 -1
  64. package/chunks/{chunk-YWPSGJFI.js → chunk-DSKLWQHC.js} +2 -2
  65. package/chunks/{chunk-KKBPOU75.js → chunk-EFIMD5VA.js} +1 -1
  66. package/chunks/{chunk-CTJLZLB5.js → chunk-EN2J77G7.js} +1 -1
  67. package/chunks/{chunk-67EWJE77.js → chunk-ENEEQMGM.js} +1 -1
  68. package/chunks/{chunk-AEL7KN2O.js → chunk-EOBM4T2Z.js} +1 -1
  69. package/chunks/{chunk-NDU63YLI.js → chunk-ESVSQKPY.js} +4 -4
  70. package/chunks/{chunk-CPG6P4GG.js → chunk-EYS3GGM3.js} +1 -1
  71. package/chunks/{chunk-4PYCZH2V.js → chunk-EYW54TBD.js} +3 -3
  72. package/chunks/{chunk-EBZ6BJTF.js → chunk-F4T5J34H.js} +1 -1
  73. package/chunks/{chunk-FOGU3LJX.js → chunk-F6AOBFUN.js} +1 -1
  74. package/chunks/{chunk-ZBVS26BY.js → chunk-FPGTNKCP.js} +7 -5
  75. package/chunks/{chunk-YF5MALI4.js → chunk-G64M7R2Y.js} +5 -5
  76. package/chunks/{chunk-EI3HZX6C.js → chunk-GJJQV4PY.js} +1 -1
  77. package/chunks/{chunk-CKASRHZI.js → chunk-GLWWPFTW.js} +1 -1
  78. package/chunks/{chunk-GM463R2B.js → chunk-GZGDJ4E6.js} +1 -1
  79. package/chunks/{chunk-W5UC37EE.js → chunk-HHGQGTJQ.js} +2 -0
  80. package/chunks/chunk-HHJLM3WQ.js +41 -0
  81. package/chunks/{chunk-ZRBMO3C7.js → chunk-HMCSRTDY.js} +1 -1
  82. package/chunks/{chunk-L2AFWWJE.js → chunk-HUE2M6VI.js} +50 -5
  83. package/chunks/{chunk-LLCWZQCU.js → chunk-HZV75ET2.js} +3 -3
  84. package/chunks/{chunk-6ZRFAKXK.js → chunk-IEP44U2R.js} +1 -1
  85. package/chunks/{chunk-AOHJKPKL.js → chunk-IQFYO5BF.js} +1 -1
  86. package/chunks/{chunk-UDXSXLER.js → chunk-IW6RQPQB.js} +14 -4
  87. package/chunks/{chunk-XCWO3SMQ.js → chunk-IX7CFQGA.js} +3 -3
  88. package/chunks/{chunk-O3EU6GMH.js → chunk-J4EVBAB3.js} +27 -4
  89. package/chunks/{chunk-ZZCWJWTF.js → chunk-JHMFKJEP.js} +1 -1
  90. package/chunks/{chunk-XVHYA33G.js → chunk-JKEO6OQY.js} +4 -4
  91. package/chunks/{chunk-6Q5ABMTU.js → chunk-JLYYGKRN.js} +23 -19
  92. package/chunks/{chunk-KID7K6H2.js → chunk-JOXXPM3X.js} +6 -6
  93. package/chunks/{chunk-E2FPSSKP.js → chunk-JPA7IDTE.js} +57 -13
  94. package/chunks/{chunk-OQTXYMKW.js → chunk-JS4Q5NG5.js} +3 -3
  95. package/chunks/{chunk-PBRVUF5B.js → chunk-K7JW6V5O.js} +1 -1
  96. package/chunks/{chunk-3P2LV43B.js → chunk-KCCODSAA.js} +3 -3
  97. package/chunks/{chunk-DREZZAZM.js → chunk-KCDQGIHS.js} +13 -5
  98. package/chunks/{chunk-UEOKWYGY.js → chunk-KFCTC5IJ.js} +11 -11
  99. package/chunks/{chunk-M6HMMKVG.js → chunk-KPVVWKF3.js} +1 -1
  100. package/chunks/{chunk-MVUQRLOH.js → chunk-KT4OWAAZ.js} +3 -3
  101. package/chunks/{chunk-W4RQUHY3.js → chunk-L2GTEEEU.js} +142 -23
  102. package/chunks/{chunk-Q3AL4JQ3.js → chunk-LA3FF7RO.js} +2 -2
  103. package/chunks/{chunk-DX3RGJMS.js → chunk-LT532KF4.js} +71 -12
  104. package/chunks/{chunk-JT7XS4YW.js → chunk-M2NMFAFR.js} +1 -1
  105. package/chunks/{chunk-YTFDX4PR.js → chunk-M6NDLY2T.js} +1 -1
  106. package/chunks/{chunk-MIKXJYZB.js → chunk-MCHGE3EC.js} +305 -291
  107. package/chunks/{chunk-Y4R47ZUH.js → chunk-MDQSCFAZ.js} +7 -7
  108. package/chunks/{chunk-EKPKKXY2.js → chunk-MLZCPGDX.js} +1 -1
  109. package/chunks/{chunk-OIVKILPI.js → chunk-MPBRV3UU.js} +3 -0
  110. package/chunks/{chunk-VFMASYQA.js → chunk-MS7GNABG.js} +3 -0
  111. package/chunks/{chunk-2FRY5CRX.js → chunk-MWZYNOCG.js} +3 -3
  112. package/chunks/{chunk-ONSZH6VM.js → chunk-MZQ4I4AP.js} +2 -2
  113. package/chunks/{chunk-UMD7WQTR.js → chunk-N3ZWGKXN.js} +10 -8
  114. package/chunks/{chunk-7MH4J33A.js → chunk-N7NBMAMW.js} +2 -2
  115. package/chunks/{chunk-EUNWC2VS.js → chunk-NC4O6UE6.js} +2 -2
  116. package/chunks/{chunk-A7XMDZRI.js → chunk-NFSSQDB5.js} +5 -5
  117. package/chunks/{chunk-DCZEPFB4.js → chunk-NM3E6GGL.js} +3 -3
  118. package/chunks/{chunk-26CXSA6V.js → chunk-NQPYPDOY.js} +2 -2
  119. package/chunks/{chunk-HUWENAHO.js → chunk-NWPO6I7V.js} +1 -1
  120. package/chunks/{chunk-SR7RZ4MS.js → chunk-O4BBDP2G.js} +2 -2
  121. package/chunks/{chunk-ECWR5LQR.js → chunk-OC5SKSNX.js} +3 -3
  122. package/chunks/{chunk-VWKER4ZH.js → chunk-OGQERNHD.js} +3 -3
  123. package/chunks/{chunk-DA4HRSBW.js → chunk-OPBATTFQ.js} +1 -1
  124. package/chunks/{chunk-OONWZLFK.js → chunk-P7KCJGBR.js} +4 -4
  125. package/chunks/{chunk-OJUQF2PL.js → chunk-PBYVS6QT.js} +3 -3
  126. package/chunks/{chunk-VNNWAZSI.js → chunk-QG2IEE2E.js} +3 -3
  127. package/chunks/{chunk-KZ22NXBY.js → chunk-QGZN4RYB.js} +4 -4
  128. package/chunks/{chunk-2UUMVNYT.js → chunk-QTI7SRXI.js} +3 -3
  129. package/chunks/{chunk-B2GJNDTV.js → chunk-QUESTNOP.js} +1 -1
  130. package/chunks/{chunk-AAE6SR4Q.js → chunk-RUKNJEJO.js} +1 -1
  131. package/chunks/{chunk-NV65ZUVM.js → chunk-RUVZZKDH.js} +1 -1
  132. package/chunks/{chunk-QUI267ZP.js → chunk-SAQHDAUJ.js} +42 -8
  133. package/chunks/{chunk-4MKXUHXY.js → chunk-SUTP6CZA.js} +5 -5
  134. package/chunks/{chunk-UBX6NL47.js → chunk-T4576UW4.js} +3 -3
  135. package/chunks/{chunk-TZEZYNYD.js → chunk-T4FTABSW.js} +1 -1
  136. package/chunks/{chunk-SEZ556DZ.js → chunk-T6W4KACQ.js} +1 -1
  137. package/chunks/chunk-TKAEODJR.js +1279 -0
  138. package/chunks/{chunk-NV3F44FL.js → chunk-TNQLAI6I.js} +2 -2
  139. package/chunks/{chunk-F6WDTQ3M.js → chunk-TNS2M7VL.js} +5 -5
  140. package/chunks/{chunk-7GTMV7UE.js → chunk-TTB6GBJ6.js} +8323 -2227
  141. package/chunks/{chunk-YGT2AUJ7.js → chunk-U2JLICUY.js} +33 -16
  142. package/chunks/{chunk-NEOXOWYH.js → chunk-U7QUDFPD.js} +7 -7
  143. package/chunks/{chunk-QGNOFE5E.js → chunk-UEUE6LJX.js} +1 -1
  144. package/chunks/{chunk-EI3NWELG.js → chunk-UIZGNLBP.js} +4427 -3806
  145. package/chunks/{chunk-ZJ4W6SUY.js → chunk-UM57UTTV.js} +3 -3
  146. package/chunks/{chunk-EQL65XGA.js → chunk-V3LXMASR.js} +47 -21
  147. package/chunks/{chunk-LHEC5V6G.js → chunk-VRWOMUZM.js} +2 -2
  148. package/chunks/{chunk-5MZCSWI4.js → chunk-W2ITCESM.js} +176 -477
  149. package/chunks/{chunk-KONVMRK7.js → chunk-W2PNY24B.js} +1 -1
  150. package/chunks/{chunk-4WL6SY4F.js → chunk-X5GLCWPX.js} +1 -1
  151. package/chunks/{chunk-BSI645OU.js → chunk-XBLYC4MI.js} +3 -3
  152. package/chunks/{chunk-GNPNYXJB.js → chunk-XLQS3VI6.js} +2 -2
  153. package/chunks/{chunk-TRRF5BSP.js → chunk-XT6TGJFD.js} +1 -1
  154. package/chunks/{chunk-PYQADEFD.js → chunk-XTH2OMDS.js} +1 -1
  155. package/chunks/{chunk-47PEPJO7.js → chunk-XUMBOJC2.js} +3 -3
  156. package/chunks/{chunk-GWVUR3QZ.js → chunk-YIKMBYMT.js} +3 -3
  157. package/chunks/{chunk-WOJZWRAZ.js → chunk-YRLW2MSX.js} +1 -1
  158. package/chunks/{chunk-NRLFZWCT.js → chunk-YVVIFFU4.js} +3 -3
  159. package/chunks/chunk-Z7B6SRPM.js +32 -0
  160. package/chunks/{chunk-IA7TGCN2.js → chunk-ZV4XVYL3.js} +4 -4
  161. package/chunks/{chunk-PJRW65JO.js → chunk-ZWPWQEF5.js} +1 -1
  162. package/chunks/{computer-use-WQFK33Z3.js → computer-use-7TIKEXBX.js} +42 -41
  163. package/chunks/{config-utils-ULCSRMWD.js → config-utils-6MVJ54TY.js} +6 -6
  164. package/chunks/{contextCommand-7EOZND7C.js → contextCommand-5QKI7MRY.js} +44 -43
  165. package/chunks/{core-runtime-FGMQRM6E.js → core-runtime-USS7ZF3H.js} +42 -41
  166. package/chunks/{create-sub-session-QIDZUOPU.js → create-sub-session-Y4WYDZGC.js} +2 -2
  167. package/chunks/{create-sub-session-QM2K5HLZ.js → create-sub-session-ZD2F3BH2.js} +42 -41
  168. package/chunks/{cron-create-VONA5JYY.js → cron-create-ZOVA3CC2.js} +4 -4
  169. package/chunks/{cron-delete-5JXSP2MI.js → cron-delete-7Z3H4LJY.js} +4 -4
  170. package/chunks/{cron-list-KE4F2CIR.js → cron-list-UHGX3IQG.js} +4 -4
  171. package/chunks/{daemon-GWD7BT6E.js → daemon-Y3NOHFKQ.js} +38 -7
  172. package/chunks/daemon-status-provider-PMP4J7BC.js +103 -0
  173. package/chunks/daemon-trust-policy-2252VKXI.js +99 -0
  174. package/chunks/{daemon-trust-policy-monitor-6UKEABN5.js → daemon-trust-policy-monitor-OSGGKJXT.js} +49 -48
  175. package/chunks/{de-LIW4XVLN.js → de-UBEBKG6V.js} +2 -1
  176. package/chunks/{deferred-core-runtime-67GJXHXS.js → deferred-core-runtime-3VD4V6YZ.js} +42 -41
  177. package/chunks/{display-image-NQRSIBXM.js → display-image-ZE3GZNIK.js} +4 -4
  178. package/chunks/{dist-Z3CS4OVP.js → dist-AVUYBK7L.js} +11 -5
  179. package/chunks/{dist-6BMOAE3Z.js → dist-BNWP6IZL.js} +4 -4
  180. package/chunks/{dist-3NTTUAHT.js → dist-EFJILGIS.js} +3 -3
  181. package/chunks/{dist-EZE3V3Q7.js → dist-MAIUUIWN.js} +3 -3
  182. package/chunks/{dist-B2CGTW6T.js → dist-NPS52B2V.js} +3 -3
  183. package/chunks/{dist-J47AXBZC.js → dist-PKSRQAR2.js} +3 -3
  184. package/chunks/{dist-OTUO3AS2.js → dist-Q2WJ2IZU.js} +13 -5
  185. package/chunks/{dist-EWW3J4HQ.js → dist-ZWDH5HLS.js} +3 -3
  186. package/chunks/{earlyInputCapture-IWMYR6OB.js → earlyInputCapture-ER4HGLJN.js} +43 -42
  187. package/chunks/{edit-ZFGROCAF.js → edit-B3MT7O53.js} +42 -41
  188. package/chunks/{en-SY5GTIGX.js → en-X6YV7GME.js} +2 -1
  189. package/chunks/{enter-worktree-TZZZCDM5.js → enter-worktree-WVIYVSDJ.js} +42 -41
  190. package/chunks/{enterPlanMode-U77BI3R6.js → enterPlanMode-DDCIM6HA.js} +42 -41
  191. package/chunks/{environment-HC37DS2I.js → environment-LITGMOUP.js} +45 -44
  192. package/chunks/{errors-6AG54JPD.js → errors-E5CIOR2I.js} +44 -43
  193. package/chunks/{exit-worktree-UYYWFPNK.js → exit-worktree-NQ2A6URE.js} +42 -41
  194. package/chunks/exitPlanMode-YXSWN4D3.js +85 -0
  195. package/chunks/{fast-path-F5FSZ3O7.js → fast-path-PH3DBS6X.js} +3 -3
  196. package/chunks/{fast-path-settings-RPAVBD7P.js → fast-path-settings-LNOFM2YP.js} +2 -2
  197. package/chunks/{fr-RQFO7U4P.js → fr-VENTC2BS.js} +2 -1
  198. package/chunks/{gemini-NKQHYM36.js → gemini-4YPO4ADY.js} +88 -87
  199. package/chunks/{geminiContentGenerator-HCWZOUX3.js → geminiContentGenerator-GMSVVXOU.js} +6 -6
  200. package/chunks/{glob-3PDXKBAO.js → glob-3Y3VHLM2.js} +42 -41
  201. package/chunks/{goal-tools-SWNB6GP4.js → goal-tools-JDK2SNMV.js} +4 -4
  202. package/chunks/{grep-5HZKZYVD.js → grep-VUHUDZYG.js} +42 -41
  203. package/chunks/handleAutoUpdate-OBFFPWSJ.js +94 -0
  204. package/chunks/{i18n-Q27KKNDL.js → i18n-4PJA5KKU.js} +43 -42
  205. package/chunks/{image-gen-2Z2RJ6W7.js → image-gen-4IFV4HES.js} +10 -10
  206. package/chunks/initializer-ZTY3VSWL.js +100 -0
  207. package/chunks/{installationInfo-XXB75T7O.js → installationInfo-6USRNCD2.js} +43 -42
  208. package/chunks/{ja-KOZKHJHZ.js → ja-QHT4EQTO.js} +2 -1
  209. package/chunks/{keychain-token-storage-TVAMTNP7.js → keychain-token-storage-JTWUYFU7.js} +2 -2
  210. package/chunks/list-U2ZDKYWN.js +103 -0
  211. package/chunks/{list-agents-Z4WABFDZ.js → list-agents-4GQ2XNEU.js} +2 -2
  212. package/chunks/loadedSettingsAdapter-WW4HIVLO.js +97 -0
  213. package/chunks/{loggingContentGenerator-6NTFBM7Q.js → loggingContentGenerator-XXG6YWUE.js} +46 -27
  214. package/chunks/{loop-wakeup-UZ5RL5Y2.js → loop-wakeup-HOQI3K5D.js} +5 -5
  215. package/chunks/{ls-TVHDGIES.js → ls-O4VBQRG7.js} +4 -4
  216. package/chunks/{lsp-CVN6OQPI.js → lsp-APQJ5ZEZ.js} +2 -2
  217. package/chunks/{managed-npm-update-SPHYQUWZ.js → managed-npm-update-7GM2LPLL.js} +43 -42
  218. package/chunks/mcp-7KZW2T5P.js +97 -0
  219. package/chunks/{monitor-ZBBPAA54.js → monitor-RQROQHLD.js} +42 -41
  220. package/chunks/nonInteractiveCli-U7JNJGS6.js +163 -0
  221. package/chunks/{notebook-edit-5W3FW7Z2.js → notebook-edit-XQA6YCH2.js} +42 -41
  222. package/chunks/{openaiContentGenerator-TQANPEVZ.js → openaiContentGenerator-BZW2IB42.js} +29 -29
  223. package/chunks/{pidfile-EQOBLH4E.js → pidfile-NX5VZ3IK.js} +43 -42
  224. package/chunks/{processUtils-7XQG7EHS.js → processUtils-M635AD23.js} +2 -2
  225. package/chunks/{pt-U6AOCTMF.js → pt-VL3I5RNY.js} +2 -1
  226. package/chunks/{qwenContentGenerator-BKCPHHXU.js → qwenContentGenerator-KHJ73E2C.js} +48 -48
  227. package/chunks/{qwenOAuth2-BJ6PQKE6.js → qwenOAuth2-QMK25XO7.js} +9 -9
  228. package/chunks/read-file-6LKIKKXD.js +32 -0
  229. package/chunks/{read-mcp-resource-PZ4ZF6YL.js → read-mcp-resource-TJSJRH4F.js} +2 -2
  230. package/chunks/{record-artifact-P4HFMS7X.js → record-artifact-FXF5LHPE.js} +3 -3
  231. package/chunks/{resumeHistoryUtils-6N6XGJJW.js → resumeHistoryUtils-RR2KEVH5.js} +49 -48
  232. package/chunks/ripGrep-CF2WRBYV.js +85 -0
  233. package/chunks/{ru-CMX4UMYP.js → ru-4RCKL4PY.js} +2 -1
  234. package/chunks/{run-qwen-serve-BCKBCAMX.js → run-qwen-serve-L5TF57J4.js} +61 -50
  235. package/chunks/{runtime-E2437YKL.js → runtime-3RE3BPR4.js} +55 -54
  236. package/chunks/{scheduler-K3D5Z655.js → scheduler-LXQZAMYT.js} +44 -43
  237. package/chunks/{sdk-exporters-http-XVTZQRCE.js → sdk-exporters-http-7SYSCGEO.js} +3 -3
  238. package/chunks/{sdk-impl-7W7AKCS4.js → sdk-impl-VZI6M6EH.js} +6 -6
  239. package/chunks/{send-message-CAMSLG2L.js → send-message-RBYLV5NY.js} +6 -6
  240. package/chunks/{serve-IH4XR5IL.js → serve-5D4S7GIA.js} +49 -48
  241. package/chunks/{server-UD6INW7J.js → server-ILZB6TTC.js} +403 -178
  242. package/chunks/{session-GR4ZEVW4.js → session-SXCZITZ4.js} +114 -94
  243. package/chunks/{settings-5O24D3OJ.js → settings-4RQB3OVF.js} +48 -47
  244. package/chunks/{shell-UTLWLG5G.js → shell-FCTR3OI2.js} +42 -41
  245. package/chunks/{skill-QQAZL4VO.js → skill-IAKHPD5H.js} +19 -19
  246. package/chunks/{skill-settings-P3YHJVBZ.js → skill-settings-SOR23NOP.js} +48 -47
  247. package/chunks/spawnChannel-I6VAWYQJ.js +98 -0
  248. package/chunks/{standalone-update-QP742MGP.js → standalone-update-5NN3MTYH.js} +44 -43
  249. package/chunks/{startInteractiveUI-YCS6AEPN.js → startInteractiveUI-OYGL3NZJ.js} +590 -329
  250. package/chunks/{syntheticOutput-PEBJQYJV.js → syntheticOutput-D3Z64LJC.js} +3 -3
  251. package/chunks/{task-create-5NWCQSJF.js → task-create-URFZ5EUX.js} +10 -10
  252. package/chunks/{task-list-53265TRZ.js → task-list-6JDFMPUW.js} +5 -5
  253. package/chunks/{task-stop-FPCOIRYX.js → task-stop-HHUGCD25.js} +2 -2
  254. package/chunks/{task-update-5HN577LS.js → task-update-LCJM3EYG.js} +10 -10
  255. package/chunks/{team-create-WFH7OCDQ.js → team-create-J4JP6AXN.js} +44 -43
  256. package/chunks/{team-delete-MMQB4OSC.js → team-delete-PZGGBQLM.js} +5 -5
  257. package/chunks/{team-plan-approval-EGTT53MV.js → team-plan-approval-7BEAIR2H.js} +42 -41
  258. package/chunks/{terminal-image-renderer-BWRESAQ7.js → terminal-image-renderer-SGGTG5LN.js} +44 -43
  259. package/chunks/theme-manager-67TSB7LH.js +89 -0
  260. package/chunks/{todoWrite-JGV6VLOX.js → todoWrite-WINAZSZI.js} +4 -4
  261. package/chunks/{tool-search-TI5PTIBF.js → tool-search-XPOFDWOX.js} +19 -19
  262. package/chunks/{total-session-admission-66UDSOHO.js → total-session-admission-SZJFAM25.js} +47 -46
  263. package/chunks/{trustedFolders-4KYHA4IG.js → trustedFolders-44NTYYV4.js} +43 -42
  264. package/chunks/{update-relaunch-WB6LGIF2.js → update-relaunch-K33Q3WEH.js} +5 -5
  265. package/chunks/{updateCheck-LOS5GYFC.js → updateCheck-VBRNPLS4.js} +45 -44
  266. package/chunks/{useAutoAcceptIndicator-MHAPY52L.js → useAutoAcceptIndicator-AUNRB5S7.js} +52 -51
  267. package/chunks/{validateNonInterActiveAuth-QV22HNQU.js → validateNonInterActiveAuth-WTO36MTA.js} +83 -82
  268. package/chunks/{version-DALWZHKQ.js → version-JZA6HYPI.js} +1 -1
  269. package/chunks/{web-fetch-JMJVMYFE.js → web-fetch-LLHPV2IR.js} +19 -19
  270. package/chunks/{web-search-DNDUIPU5.js → web-search-4HCHRZ3U.js} +11 -11
  271. package/chunks/{workflow-JGNN64PM.js → workflow-YI74QTWW.js} +43 -42
  272. package/chunks/workspace-providers-status-CI3AO2BH.js +100 -0
  273. package/chunks/{workspace-registration-store-LRJG7QA4.js → workspace-registration-store-KPIKXDHA.js} +1 -1
  274. package/chunks/{workspace-registry-KVXIFM36.js → workspace-registry-XE22QDE6.js} +47 -46
  275. package/chunks/{workspace-service-PO4AAKKT.js → workspace-service-WI2FD72A.js} +54 -53
  276. package/chunks/workspace-skills-status-FFZU6FXL.js +100 -0
  277. package/chunks/{workspace-trust-reconciler-DOZPCVHG.js → workspace-trust-reconciler-GJLNXR2U.js} +54 -53
  278. package/chunks/write-file-IEAC3XC3.js +87 -0
  279. package/chunks/{zh-AGL2FVBI.js → zh-LMSTK4WD.js} +2 -1
  280. package/chunks/{zh-TW-KI66MHQY.js → zh-TW-SQ4HTSCW.js} +2 -1
  281. package/chunks/{zoom-image-CNC77ZMA.js → zoom-image-GTVVT25J.js} +15 -15
  282. package/cli.js +13 -13
  283. package/locales/ca.js +1 -0
  284. package/locales/de.js +1 -0
  285. package/locales/en.js +1 -0
  286. package/locales/fr.js +1 -0
  287. package/locales/ja.js +1 -0
  288. package/locales/pt.js +1 -0
  289. package/locales/ru.js +1 -0
  290. package/locales/zh-TW.js +1 -0
  291. package/locales/zh.js +1 -0
  292. package/package.json +3 -3
  293. package/web-shell/assets/{arc-CDk0d60K.js → arc-B13-S0Yo.js} +1 -1
  294. package/web-shell/assets/{architectureDiagram-3BPJPVTR-h-W3I2lP.js → architectureDiagram-3BPJPVTR-CHvWNlVW.js} +1 -1
  295. package/web-shell/assets/{blockDiagram-GPEHLZMM-D1pvSmZg.js → blockDiagram-GPEHLZMM-CXebOlXF.js} +1 -1
  296. package/web-shell/assets/{c4Diagram-AAUBKEIU-ByAm5ZNf.js → c4Diagram-AAUBKEIU-BQpx4y3Q.js} +1 -1
  297. package/web-shell/assets/channel-BB_Hm8Rf.js +1 -0
  298. package/web-shell/assets/{chunk-2J33WTMH-VrGPPOGV.js → chunk-2J33WTMH-Cak1exSv.js} +1 -1
  299. package/web-shell/assets/{chunk-4BX2VUAB-B7hTowgG.js → chunk-4BX2VUAB-BIc8BV5_.js} +1 -1
  300. package/web-shell/assets/{chunk-55IACEB6-j1Fq8DpE.js → chunk-55IACEB6-DoeJ5BL1.js} +1 -1
  301. package/web-shell/assets/{chunk-727SXJPM-UjABYpF2.js → chunk-727SXJPM-BDR_wYSu.js} +1 -1
  302. package/web-shell/assets/{chunk-AQP2D5EJ-D4uBItrs.js → chunk-AQP2D5EJ-BhRRGRq1.js} +1 -1
  303. package/web-shell/assets/{chunk-FMBD7UC4-DeFbKlb8.js → chunk-FMBD7UC4-BJGAwVXr.js} +1 -1
  304. package/web-shell/assets/{chunk-ND2GUHAM-rQJ8TIgT.js → chunk-ND2GUHAM-vhE73bsD.js} +1 -1
  305. package/web-shell/assets/{chunk-QZHKN3VN-DAGcRxvq.js → chunk-QZHKN3VN-BuTBZsdR.js} +1 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-B_hFK54Y.js +1 -0
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B_hFK54Y.js +1 -0
  308. package/web-shell/assets/{cose-bilkent-S5V4N54A-MaE7MJSt.js → cose-bilkent-S5V4N54A-CVHKipHP.js} +1 -1
  309. package/web-shell/assets/{dagre-BM42HDAG-DzijYGSb.js → dagre-BM42HDAG-C1DPa8SV.js} +1 -1
  310. package/web-shell/assets/{diagram-2AECGRRQ-WdbG7WnX.js → diagram-2AECGRRQ-BYP_QxkT.js} +1 -1
  311. package/web-shell/assets/{diagram-5GNKFQAL-NYutsBnw.js → diagram-5GNKFQAL-Cray7ruQ.js} +1 -1
  312. package/web-shell/assets/{diagram-KO2AKTUF-Dqg0eBY0.js → diagram-KO2AKTUF-Ds4vJANi.js} +1 -1
  313. package/web-shell/assets/{diagram-LMA3HP47-C7vRP2Lb.js → diagram-LMA3HP47-DxFrDykH.js} +1 -1
  314. package/web-shell/assets/{diagram-OG6HWLK6-B2sEPpPt.js → diagram-OG6HWLK6-BdIO-pF_.js} +1 -1
  315. package/web-shell/assets/{erDiagram-TEJ5UH35-a4zIbzm8.js → erDiagram-TEJ5UH35-5JA8KDYV.js} +1 -1
  316. package/web-shell/assets/{flowDiagram-I6XJVG4X-BK9y89ya.js → flowDiagram-I6XJVG4X-DL4drKro.js} +1 -1
  317. package/web-shell/assets/{ganttDiagram-6RSMTGT7-wUQTSNvV.js → ganttDiagram-6RSMTGT7-ijX2DD6_.js} +1 -1
  318. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Dnzt4SAi.js → gitGraphDiagram-PVQCEYII-_lPsFLFF.js} +1 -1
  319. package/web-shell/assets/index-BTwNYZkp.js +1785 -0
  320. package/web-shell/assets/{index-BA3wUcKL.js → index-C-YoqYbs.js} +1 -1
  321. package/web-shell/assets/index-dHAFxPHb.css +5 -0
  322. package/web-shell/assets/{infoDiagram-5YYISTIA-DcaoToij.js → infoDiagram-5YYISTIA-COFClLab.js} +1 -1
  323. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DzduqhP2.js → ishikawaDiagram-YF4QCWOH-Div9KOgO.js} +1 -1
  324. package/web-shell/assets/{journeyDiagram-JHISSGLW-BvviZR_O.js → journeyDiagram-JHISSGLW-VAw5u0wc.js} +1 -1
  325. package/web-shell/assets/{kanban-definition-UN3LZRKU-Efm2JxY3.js → kanban-definition-UN3LZRKU-CncCn8Nl.js} +1 -1
  326. package/web-shell/assets/{linear-DtY3IbOs.js → linear-D6ad7e_k.js} +1 -1
  327. package/web-shell/assets/{mermaid.core-PzpFqoMe.js → mermaid.core-BV1IECGb.js} +5 -5
  328. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BLlTkHS0.js → mindmap-definition-RKZ34NQL-a3jeNgPr.js} +1 -1
  329. package/web-shell/assets/{pieDiagram-4H26LBE5-D-mKF-jE.js → pieDiagram-4H26LBE5-DsVRY5BW.js} +1 -1
  330. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DYCzslGm.js → quadrantDiagram-W4KKPZXB-D6zgexJK.js} +1 -1
  331. package/web-shell/assets/{requirementDiagram-4Y6WPE33-Dfpxlk7R.js → requirementDiagram-4Y6WPE33-VEpSwJjn.js} +1 -1
  332. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-D5cRaaxh.js → sankeyDiagram-5OEKKPKP-CYEuOFne.js} +1 -1
  333. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-s04DReiS.js → sequenceDiagram-3UESZ5HK-CCg0lI-9.js} +1 -1
  334. package/web-shell/assets/{stateDiagram-AJRCARHV-01UNFgnb.js → stateDiagram-AJRCARHV-BHXPsL0B.js} +1 -1
  335. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-eTG8D0QT.js +1 -0
  336. package/web-shell/assets/{timeline-definition-PNZ67QCA-DX8_wZBC.js → timeline-definition-PNZ67QCA-gqTf9a0k.js} +1 -1
  337. package/web-shell/assets/{vennDiagram-CIIHVFJN-BK0FlBme.js → vennDiagram-CIIHVFJN-C4DXXkBh.js} +1 -1
  338. package/web-shell/assets/{wardley-L42UT6IY-DkPc9UlD.js → wardley-L42UT6IY-CMK46EiX.js} +1 -1
  339. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DNKkpDAo.js → wardleyDiagram-YWT4CUSO-DTk1Gzt9.js} +1 -1
  340. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CiPwg8QG.js → xychartDiagram-2RQKCTM6-BcJsM1dH.js} +1 -1
  341. package/web-shell/index.html +2 -2
  342. package/chunks/agent-headless-HYEHZFH6.js +0 -86
  343. package/chunks/channel-settings-store-OXYG5S5X.js +0 -101
  344. package/chunks/chunk-I5VM3SKY.js +0 -451
  345. package/chunks/chunk-PDPFQ2FO.js +0 -156
  346. package/chunks/daemon-status-provider-L3J6GKCT.js +0 -102
  347. package/chunks/daemon-trust-policy-4PHPY23S.js +0 -98
  348. package/chunks/exitPlanMode-RWJR2KGB.js +0 -84
  349. package/chunks/handleAutoUpdate-NHFSGYTF.js +0 -93
  350. package/chunks/initializer-Y5DJLT43.js +0 -99
  351. package/chunks/list-YHNQ32CS.js +0 -102
  352. package/chunks/loadedSettingsAdapter-GHUQK7H4.js +0 -96
  353. package/chunks/mcp-EA3KO6FS.js +0 -96
  354. package/chunks/nonInteractiveCli-NNOR56HU.js +0 -162
  355. package/chunks/read-file-KKTXGIZD.js +0 -32
  356. package/chunks/ripGrep-SJVAAYDV.js +0 -84
  357. package/chunks/spawnChannel-UAQMH6Y6.js +0 -94
  358. package/chunks/theme-manager-ZNDGAHJN.js +0 -88
  359. package/chunks/workspace-providers-status-K22B3Z6B.js +0 -99
  360. package/chunks/workspace-skills-status-DDYCBVSH.js +0 -99
  361. package/chunks/write-file-TT6MWIKC.js +0 -86
  362. package/web-shell/assets/channel-DPFUV4oi.js +0 -1
  363. package/web-shell/assets/classDiagram-4FO5ZUOK-CLm0hVvw.js +0 -1
  364. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CLm0hVvw.js +0 -1
  365. package/web-shell/assets/index-BjC3yjjL.css +0 -5
  366. package/web-shell/assets/index-QzFq6w7o.js +0 -1775
  367. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DXb5olqv.js +0 -1
@@ -6,13 +6,13 @@ import {
6
6
  import {
7
7
  TUI_CHAT_RECORDING_FAILURE_MESSAGE,
8
8
  reportChatRecordingFailureToAdapter
9
- } from "./chunk-26CXSA6V.js";
9
+ } from "./chunk-NQPYPDOY.js";
10
10
  import {
11
11
  StreamJsonOutputAdapter
12
- } from "./chunk-O3EU6GMH.js";
12
+ } from "./chunk-J4EVBAB3.js";
13
13
  import {
14
14
  startPostRenderPrefetches
15
- } from "./chunk-IBUGFUXC.js";
15
+ } from "./chunk-BIXG46YI.js";
16
16
  import {
17
17
  AboutBox,
18
18
  BaseSelectionList,
@@ -90,7 +90,7 @@ import {
90
90
  useUIActions,
91
91
  useUIState,
92
92
  useVirtualViewport
93
- } from "./chunk-Z4JX4NSH.js";
93
+ } from "./chunk-4C4QSXE3.js";
94
94
  import {
95
95
  GeminiRespondingSpinner,
96
96
  GeminiSpinner,
@@ -107,19 +107,19 @@ import {
107
107
  useStreamingContext,
108
108
  waitForGoalRuntime,
109
109
  wrapAnsi
110
- } from "./chunk-IWTMYQ32.js";
110
+ } from "./chunk-BR6TUEKJ.js";
111
111
  import {
112
112
  stopAndGetCapturedInput
113
- } from "./chunk-TZEZYNYD.js";
113
+ } from "./chunk-T4FTABSW.js";
114
114
  import {
115
115
  useAutoAcceptIndicator
116
- } from "./chunk-ECWR5LQR.js";
116
+ } from "./chunk-OC5SKSNX.js";
117
117
  import {
118
118
  KeypressProvider,
119
119
  useFocus,
120
120
  useKeypress,
121
121
  useKeypressContext
122
- } from "./chunk-VNNWAZSI.js";
122
+ } from "./chunk-QG2IEE2E.js";
123
123
  import {
124
124
  classifyApiError,
125
125
  fireSessionDeleteHook
@@ -135,7 +135,7 @@ import {
135
135
  matchMcpServerPrefix,
136
136
  resolveAtCommandQuery,
137
137
  sanitizeDisplayText
138
- } from "./chunk-NDU63YLI.js";
138
+ } from "./chunk-ESVSQKPY.js";
139
139
  import {
140
140
  BuiltinCommandLoader,
141
141
  BundledSkillLoader,
@@ -156,6 +156,7 @@ import {
156
156
  findSlashCommandTokens,
157
157
  formatApprovalModeDescription,
158
158
  formatApprovalModeName,
159
+ formatEffortChangeMessage,
159
160
  formatUserPromptExpansionBlockedMessage,
160
161
  getAllConfigs,
161
162
  getBestSlashCommandMatch,
@@ -165,6 +166,7 @@ import {
165
166
  isAtCommand,
166
167
  isBtwCommand,
167
168
  isMidInputCompletableCommand,
169
+ isPickerOnlyModelInvocation,
168
170
  isSlashCommand,
169
171
  isStackedSkillCompletableCommand,
170
172
  isValidStackedSkillPrefix,
@@ -177,22 +179,22 @@ import {
177
179
  resetBackgroundStateForSessionSwitch,
178
180
  serializeUserPromptExpansionPrompt,
179
181
  supportsMatchers
180
- } from "./chunk-MIKXJYZB.js";
182
+ } from "./chunk-MCHGE3EC.js";
181
183
  import {
182
184
  EXTENSION_RELOAD_FAILED_REASON,
183
185
  ExtensionRefreshState,
184
186
  appEvents,
185
187
  cleanupReviewWorktreeLeases,
186
188
  loadHierarchicalGeminiMemory
187
- } from "./chunk-7GTMV7UE.js";
189
+ } from "./chunk-TTB6GBJ6.js";
188
190
  import {
189
191
  getCommandDisplayName,
190
192
  getCommandSourceBadge
191
- } from "./chunk-QG3FFJYU.js";
193
+ } from "./chunk-AAOONL5N.js";
192
194
  import {
193
195
  computeSessionStats,
194
196
  levelLabel
195
- } from "./chunk-YWPSGJFI.js";
197
+ } from "./chunk-DSKLWQHC.js";
196
198
  import {
197
199
  disableKittyProtocol,
198
200
  isKittyProtocolEnabled,
@@ -211,19 +213,19 @@ import {
211
213
  oscKittyNotify,
212
214
  saveClipboardImage,
213
215
  writeOsc52
214
- } from "./chunk-NV3F44FL.js";
215
- import "./chunk-F6WDTQ3M.js";
216
+ } from "./chunk-TNQLAI6I.js";
217
+ import "./chunk-TNS2M7VL.js";
216
218
  import "./chunk-4WGODMVR.js";
217
- import "./chunk-A7XMDZRI.js";
219
+ import "./chunk-NFSSQDB5.js";
218
220
  import "./chunk-KW7NOTN6.js";
219
221
  import {
220
222
  MaxSizedBox,
221
223
  OverflowProvider,
222
224
  useOverflowState
223
- } from "./chunk-ONSZH6VM.js";
225
+ } from "./chunk-MZQ4I4AP.js";
224
226
  import {
225
227
  theme
226
- } from "./chunk-EKPKKXY2.js";
228
+ } from "./chunk-MLZCPGDX.js";
227
229
  import {
228
230
  require_jsx_runtime
229
231
  } from "./chunk-SV5PQVQE.js";
@@ -231,7 +233,7 @@ import {
231
233
  AUTO_THEME_NAME,
232
234
  DEFAULT_THEME,
233
235
  themeManager
234
- } from "./chunk-CTJLZLB5.js";
236
+ } from "./chunk-EN2J77G7.js";
235
237
  import {
236
238
  Box_default,
237
239
  Static,
@@ -249,35 +251,38 @@ import {
249
251
  import {
250
252
  require_react
251
253
  } from "./chunk-5QWWOFGG.js";
252
- import "./chunk-IRZ2ZH72.js";
253
- import "./chunk-OJUQF2PL.js";
254
- import "./chunk-S6HYI3MF.js";
254
+ import "./chunk-4EX3DBFH.js";
255
+ import "./chunk-PBYVS6QT.js";
256
+ import "./chunk-6S52N6PG.js";
255
257
  import {
256
258
  MAX_INLINE_IMAGES_PER_ITEM,
257
259
  collectInlineImages,
258
260
  getInlineImageData
259
- } from "./chunk-PJRW65JO.js";
261
+ } from "./chunk-ZWPWQEF5.js";
260
262
  import {
261
263
  relaunchApp
262
- } from "./chunk-KONVMRK7.js";
264
+ } from "./chunk-W2PNY24B.js";
263
265
  import {
264
266
  setUpdateHandler
265
- } from "./chunk-XVHYA33G.js";
266
- import "./chunk-URKIBIFC.js";
267
+ } from "./chunk-JKEO6OQY.js";
268
+ import {
269
+ isHistoryItemVisibleAfterRestore
270
+ } from "./chunk-EKTCKZV5.js";
271
+ import "./chunk-45HPDU3F.js";
267
272
  import "./chunk-YAF2MQZ6.js";
268
- import "./chunk-YF5MALI4.js";
273
+ import "./chunk-G64M7R2Y.js";
269
274
  import "./chunk-6H67XLET.js";
270
275
  import {
271
276
  getErrorMessage as getErrorMessage2
272
- } from "./chunk-DCZEPFB4.js";
277
+ } from "./chunk-NM3E6GGL.js";
273
278
  import {
274
279
  openQwenAsrRealtimeStream,
275
280
  openVoiceStream,
276
281
  openVoiceStreamWithRetry
277
- } from "./chunk-Q3JQ7OSU.js";
278
- import "./chunk-5MZCSWI4.js";
279
- import "./chunk-OWMAZHIX.js";
280
- import "./chunk-ZRBMO3C7.js";
282
+ } from "./chunk-BTYS2JAY.js";
283
+ import "./chunk-W2ITCESM.js";
284
+ import "./chunk-47FQVRCO.js";
285
+ import "./chunk-HMCSRTDY.js";
281
286
  import {
282
287
  cpLen,
283
288
  cpSlice,
@@ -294,9 +299,6 @@ import {
294
299
  stringWidth
295
300
  } from "./chunk-2MIN6GRR.js";
296
301
  import "./chunk-QHTIBUWB.js";
297
- import {
298
- isHistoryItemVisibleAfterRestore
299
- } from "./chunk-EKTCKZV5.js";
300
302
  import "./chunk-3Z43GZUQ.js";
301
303
  import {
302
304
  isValidSessionId
@@ -308,15 +310,15 @@ import {
308
310
  isStreamingVoiceModel,
309
311
  resolveVoiceStreamConfig,
310
312
  transcribeVoiceAudio
311
- } from "./chunk-LLCWZQCU.js";
313
+ } from "./chunk-HZV75ET2.js";
312
314
  import {
313
315
  formatUnsupportedVoiceModelMessage,
314
316
  isSelectableVoiceModel
315
- } from "./chunk-EBZ6BJTF.js";
316
- import "./chunk-AOHJKPKL.js";
317
+ } from "./chunk-F4T5J34H.js";
318
+ import "./chunk-IQFYO5BF.js";
317
319
  import {
318
320
  getExtendedSystemInfo
319
- } from "./chunk-VSFKIRRW.js";
321
+ } from "./chunk-AKLY5M2C.js";
320
322
  import {
321
323
  formatDuration,
322
324
  formatRelativeTime,
@@ -324,43 +326,43 @@ import {
324
326
  } from "./chunk-3SH53ANB.js";
325
327
  import {
326
328
  isInlineModelOverrideAllowed
327
- } from "./chunk-2PLNY5TN.js";
329
+ } from "./chunk-23GFHEM3.js";
328
330
  import {
329
331
  computeWorkspaceSkillListUpdates,
330
332
  resolveSkillSettings,
331
333
  skillSettingStrings
332
334
  } from "./chunk-Z4X5MTRT.js";
333
- import "./chunk-NEOXOWYH.js";
335
+ import "./chunk-U7QUDFPD.js";
334
336
  import {
335
337
  requestConsentInteractive,
336
338
  requestConsentOrFail
337
- } from "./chunk-UMD7WQTR.js";
339
+ } from "./chunk-N3ZWGKXN.js";
338
340
  import "./chunk-57OAHC2Y.js";
339
- import "./chunk-LHEC5V6G.js";
340
- import "./chunk-67EWJE77.js";
341
- import "./chunk-E2FPSSKP.js";
341
+ import "./chunk-VRWOMUZM.js";
342
+ import "./chunk-ENEEQMGM.js";
343
+ import "./chunk-JPA7IDTE.js";
342
344
  import {
343
345
  createLoadedSettingsAdapter
344
- } from "./chunk-4WL6SY4F.js";
346
+ } from "./chunk-X5GLCWPX.js";
345
347
  import "./chunk-MZSJ43WV.js";
346
348
  import "./chunk-XCGIMOLN.js";
347
- import "./chunk-VKJ4KTPJ.js";
349
+ import "./chunk-3GCU5O2E.js";
348
350
  import "./chunk-V6WHFGST.js";
349
351
  import "./chunk-DP3IHZGG.js";
350
352
  import "./chunk-6PLDPT2C.js";
351
353
  import "./chunk-FYJ7W2PI.js";
352
354
  import "./chunk-YP5KH5Y7.js";
353
- import "./chunk-PBRVUF5B.js";
355
+ import "./chunk-K7JW6V5O.js";
354
356
  import "./chunk-ALMR3E6Q.js";
355
357
  import "./chunk-HIBNSEJE.js";
356
358
  import "./chunk-M5GB774H.js";
357
359
  import "./chunk-BKHCW2BI.js";
358
- import "./chunk-UVX4Y6IN.js";
359
- import "./chunk-DX3RGJMS.js";
360
- import "./chunk-UDXSXLER.js";
360
+ import "./chunk-AQHNAA7E.js";
361
+ import "./chunk-LT532KF4.js";
362
+ import "./chunk-IW6RQPQB.js";
361
363
  import {
362
364
  loadMcpApprovals
363
- } from "./chunk-KID7K6H2.js";
365
+ } from "./chunk-JOXXPM3X.js";
364
366
  import {
365
367
  CORRUPTED_SUFFIX,
366
368
  SettingScope,
@@ -382,10 +384,10 @@ import {
382
384
  settingExistsInScope,
383
385
  validateSettingValue,
384
386
  writeOutputLanguageAndRegisterPath
385
- } from "./chunk-ABVRJU3D.js";
387
+ } from "./chunk-4PFKN7CQ.js";
386
388
  import {
387
389
  TOGGLE_TYPES
388
- } from "./chunk-UBX6NL47.js";
390
+ } from "./chunk-T4576UW4.js";
389
391
  import "./chunk-RKUWKYED.js";
390
392
  import "./chunk-GOXKNSDZ.js";
391
393
  import "./chunk-IDS7MSUP.js";
@@ -394,19 +396,19 @@ import {
394
396
  localizeToolDisplayName,
395
397
  t,
396
398
  ta
397
- } from "./chunk-UEOKWYGY.js";
399
+ } from "./chunk-KFCTC5IJ.js";
398
400
  import "./chunk-5EJZE3FP.js";
399
- import "./chunk-ZJ4W6SUY.js";
400
- import "./chunk-VFMASYQA.js";
401
- import "./chunk-Q3AL4JQ3.js";
401
+ import "./chunk-UM57UTTV.js";
402
+ import "./chunk-MS7GNABG.js";
403
+ import "./chunk-LA3FF7RO.js";
402
404
  import {
403
405
  getCliVersion
404
- } from "./chunk-AEL7KN2O.js";
406
+ } from "./chunk-EOBM4T2Z.js";
405
407
  import "./chunk-VJNBRRZG.js";
406
408
  import {
407
409
  isWorkspaceTrusted,
408
410
  loadTrustedFolders
409
- } from "./chunk-GWVUR3QZ.js";
411
+ } from "./chunk-YIKMBYMT.js";
410
412
  import {
411
413
  require_strip_json_comments
412
414
  } from "./chunk-NPQ5ZKRP.js";
@@ -520,75 +522,76 @@ import {
520
522
  validateWorkflowName,
521
523
  watchRepoBranch,
522
524
  writeRuntimeStatus
523
- } from "./chunk-EI3NWELG.js";
525
+ } from "./chunk-UIZGNLBP.js";
524
526
  import "./chunk-GOFAQQZA.js";
525
527
  import "./chunk-5M6IDOMF.js";
526
528
  import {
527
529
  stripAnsi
528
530
  } from "./chunk-TWPJO254.js";
529
- import "./chunk-H6XPXXMH.js";
530
- import "./chunk-2UUMVNYT.js";
531
- import "./chunk-MVUQRLOH.js";
532
- import "./chunk-XCWO3SMQ.js";
533
- import "./chunk-7MH4J33A.js";
531
+ import "./chunk-CQ35AJ4Z.js";
532
+ import "./chunk-QTI7SRXI.js";
533
+ import "./chunk-KT4OWAAZ.js";
534
+ import "./chunk-IX7CFQGA.js";
535
+ import "./chunk-N7NBMAMW.js";
534
536
  import "./chunk-6PVPNMXU.js";
535
537
  import {
536
538
  resolveModelId
537
- } from "./chunk-TRRF5BSP.js";
539
+ } from "./chunk-XT6TGJFD.js";
538
540
  import "./chunk-IRH27ZC2.js";
539
541
  import "./chunk-QHWCP53L.js";
540
- import "./chunk-GNPNYXJB.js";
541
- import "./chunk-HUWENAHO.js";
542
+ import "./chunk-XLQS3VI6.js";
543
+ import "./chunk-NWPO6I7V.js";
542
544
  import {
543
545
  promptIdContext
544
546
  } from "./chunk-O6GEWCJA.js";
545
547
  import "./chunk-T26EAKDL.js";
546
548
  import "./chunk-ZPJWUGCS.js";
547
549
  import "./chunk-CPBF7KYF.js";
548
- import "./chunk-J6SZID63.js";
550
+ import "./chunk-2AZMF6G5.js";
549
551
  import "./chunk-KRXPRVGL.js";
550
552
  import {
551
553
  HOOKS_CONFIG_FIELDS
552
- } from "./chunk-GM463R2B.js";
553
- import "./chunk-SEZ556DZ.js";
554
- import "./chunk-2FRY5CRX.js";
554
+ } from "./chunk-GZGDJ4E6.js";
555
+ import "./chunk-T6W4KACQ.js";
556
+ import "./chunk-MWZYNOCG.js";
555
557
  import {
556
558
  elapsedActiveTime,
557
559
  goalRequiresExactPermit
558
- } from "./chunk-QUI267ZP.js";
560
+ } from "./chunk-SAQHDAUJ.js";
559
561
  import {
560
562
  APPROVAL_MODES
561
- } from "./chunk-WAUGQKUU.js";
562
- import "./chunk-DZUO626D.js";
563
- import "./chunk-4TRQPFDP.js";
563
+ } from "./chunk-6LYDH7VT.js";
564
+ import "./chunk-2XZWO53E.js";
565
+ import "./chunk-BJKREW56.js";
564
566
  import "./chunk-SAH4BD2J.js";
567
+ import "./chunk-25OFRBH2.js";
565
568
  import {
566
569
  runOutsideAgentContext
567
- } from "./chunk-CPG6P4GG.js";
570
+ } from "./chunk-EYS3GGM3.js";
568
571
  import "./chunk-S6LOFUVP.js";
569
572
  import "./chunk-2J3OJGTL.js";
570
573
  import {
571
574
  getStartupContextLength,
572
575
  isSystemReminderContent
573
- } from "./chunk-IA7TGCN2.js";
576
+ } from "./chunk-ZV4XVYL3.js";
574
577
  import "./chunk-K623ENWT.js";
575
578
  import "./chunk-AQ37AY7B.js";
576
579
  import {
577
580
  isPathWithinRoot
578
- } from "./chunk-EQL65XGA.js";
581
+ } from "./chunk-V3LXMASR.js";
579
582
  import {
580
583
  osc8Hyperlink,
581
584
  qwenOAuth2Events,
582
585
  sanitizeForOsc,
583
586
  supportsHyperlinks,
584
587
  wrapForMultiplexer
585
- } from "./chunk-3P2LV43B.js";
588
+ } from "./chunk-KCCODSAA.js";
586
589
  import "./chunk-NAVJD2PQ.js";
587
- import "./chunk-HV76SFIA.js";
588
- import "./chunk-4PYCZH2V.js";
590
+ import "./chunk-5HBFERG5.js";
591
+ import "./chunk-EYW54TBD.js";
589
592
  import "./chunk-P3QQPMQA.js";
590
- import "./chunk-SR7RZ4MS.js";
591
- import "./chunk-M6HMMKVG.js";
593
+ import "./chunk-O4BBDP2G.js";
594
+ import "./chunk-KPVVWKF3.js";
592
595
  import {
593
596
  REASONING_EFFORT_TIERS,
594
597
  applyReasoningEffort
@@ -600,7 +603,7 @@ import {
600
603
  import "./chunk-AXMWHKXA.js";
601
604
  import "./chunk-GLCZKT5V.js";
602
605
  import "./chunk-DJ2GSRLV.js";
603
- import "./chunk-EI3HZX6C.js";
606
+ import "./chunk-GJJQV4PY.js";
604
607
  import {
605
608
  ApiCancelEvent,
606
609
  AuthEvent,
@@ -640,8 +643,8 @@ import {
640
643
  runVisionBridge,
641
644
  shouldRunVisionBridge,
642
645
  splitImageParts
643
- } from "./chunk-YGT2AUJ7.js";
644
- import "./chunk-WOJZWRAZ.js";
646
+ } from "./chunk-U2JLICUY.js";
647
+ import "./chunk-YRLW2MSX.js";
645
648
  import "./chunk-VGC4I5JJ.js";
646
649
  import {
647
650
  AUTO_MEMORY_INDEX_FILENAME,
@@ -649,31 +652,31 @@ import {
649
652
  getAutoMemoryRoot,
650
653
  getUserAutoMemoryRoot,
651
654
  isAnyAutoMemPath
652
- } from "./chunk-FVKHVJZQ.js";
655
+ } from "./chunk-732MOPEM.js";
653
656
  import {
654
657
  runSideQuery
655
- } from "./chunk-COBO5EBO.js";
656
- import "./chunk-6ZRFAKXK.js";
658
+ } from "./chunk-CTQE2NB2.js";
659
+ import "./chunk-IEP44U2R.js";
657
660
  import {
658
661
  ToolNames,
659
662
  isShellProgressData
660
- } from "./chunk-PYQADEFD.js";
661
- import "./chunk-Y4R47ZUH.js";
663
+ } from "./chunk-XTH2OMDS.js";
664
+ import "./chunk-MDQSCFAZ.js";
662
665
  import {
663
666
  MAINLINE_CODER_MODEL
664
667
  } from "./chunk-F6WFNA7U.js";
665
668
  import "./chunk-46UV252V.js";
666
669
  import {
667
670
  DEFAULT_TOKEN_LIMIT
668
- } from "./chunk-ZBVS26BY.js";
669
- import "./chunk-KKBPOU75.js";
670
- import "./chunk-EUNWC2VS.js";
671
+ } from "./chunk-FPGTNKCP.js";
672
+ import "./chunk-EFIMD5VA.js";
673
+ import "./chunk-NC4O6UE6.js";
671
674
  import {
672
675
  atomicWriteFileSync
673
- } from "./chunk-FOGU3LJX.js";
674
- import "./chunk-L2AFWWJE.js";
675
- import "./chunk-W4RQUHY3.js";
676
- import "./chunk-PDPFQ2FO.js";
676
+ } from "./chunk-F6AOBFUN.js";
677
+ import "./chunk-HUE2M6VI.js";
678
+ import "./chunk-HHJLM3WQ.js";
679
+ import "./chunk-L2GTEEEU.js";
677
680
  import {
678
681
  Storage,
679
682
  UnauthorizedError,
@@ -685,9 +688,9 @@ import {
685
688
  isNodeError,
686
689
  shortenPath,
687
690
  tildeifyPath
688
- } from "./chunk-OIVKILPI.js";
691
+ } from "./chunk-MPBRV3UU.js";
689
692
  import "./chunk-VOQXFAY5.js";
690
- import "./chunk-AQAJJMRR.js";
693
+ import "./chunk-3LHYTQ2R.js";
691
694
  import {
692
695
  finalizeStartupProfile,
693
696
  profileCheckpoint
@@ -696,7 +699,7 @@ import "./chunk-Q7YDKOGY.js";
696
699
  import {
697
700
  registerCleanup,
698
701
  runExitCleanup
699
- } from "./chunk-AAE6SR4Q.js";
702
+ } from "./chunk-RUKNJEJO.js";
700
703
  import {
701
704
  clearScreen,
702
705
  writeStderrLine,
@@ -750,7 +753,7 @@ var SUPPORTED_EVENTS = [
750
753
  "control_request",
751
754
  "control_response"
752
755
  ];
753
- var DUAL_OUTPUT_PROTOCOL_VERSION = 1;
756
+ var DUAL_OUTPUT_PROTOCOL_VERSION = 2;
754
757
  var MAX_BUFFERED_BYTES = 1024 * 1024;
755
758
  var DualOutputBridge = class {
756
759
  static {
@@ -3366,13 +3369,6 @@ var SelectionState = class {
3366
3369
  this.focus = point;
3367
3370
  }
3368
3371
  }
3369
- /** Select a resolved word/line span from a multi-click (not a drag). */
3370
- selectSpan(span, mode) {
3371
- this.anchor = { x: span.sx, y: span.sy };
3372
- this.focus = { x: span.ex, y: span.ey };
3373
- this.dragging = false;
3374
- this.mode = mode;
3375
- }
3376
3372
  finish() {
3377
3373
  this.dragging = false;
3378
3374
  }
@@ -3389,6 +3385,13 @@ var SelectionState = class {
3389
3385
  get isCollapsed() {
3390
3386
  return !this.isEmpty && this.anchor.x === this.focus.x && this.anchor.y === this.focus.y;
3391
3387
  }
3388
+ /**
3389
+ * A collapsed range is a real single-cell span in word/line mode, but only a
3390
+ * bare click in char mode.
3391
+ */
3392
+ get isBareClick() {
3393
+ return this.isCollapsed && this.mode === "char";
3394
+ }
3392
3395
  /** Anchor/focus ordered into reading order, or null when empty. */
3393
3396
  normalized() {
3394
3397
  if (!this.anchor || !this.focus) {
@@ -3420,11 +3423,21 @@ function getSelectedText(frame, selection) {
3420
3423
  }
3421
3424
  const startX = y === sy ? sx : 0;
3422
3425
  const endX = y === ey ? ex : row.length - 1;
3426
+ let rowText = "";
3427
+ let skippedLayoutGap = false;
3423
3428
  for (let x = Math.max(0, startX); x <= endX && x < row.length; x++) {
3424
- if (row[x].selectable) {
3425
- text += row[x].value;
3429
+ const cell = row[x];
3430
+ if (cell.selectable) {
3431
+ if (skippedLayoutGap && rowText.length > 0 && cell.value !== "" && !/\s$/u.test(rowText) && !/^\s/u.test(cell.value)) {
3432
+ rowText += " ";
3433
+ }
3434
+ rowText += cell.value;
3435
+ skippedLayoutGap = false;
3436
+ } else if (rowText.length > 0) {
3437
+ skippedLayoutGap = true;
3426
3438
  }
3427
3439
  }
3440
+ text += rowText;
3428
3441
  if (y < ey) {
3429
3442
  text += boundaryJoiner(frame, selection, y);
3430
3443
  }
@@ -3489,8 +3502,8 @@ function isWordCell(value) {
3489
3502
  return value !== "" && value !== " " && !/^\s$/u.test(value);
3490
3503
  }
3491
3504
  __name(isWordCell, "isWordCell");
3492
- function lastContentColumn(row) {
3493
- for (let x = row.length - 1; x >= 0; x--) {
3505
+ function lastContentColumn(row, start, end) {
3506
+ for (let x = end; x >= start; x--) {
3494
3507
  if (row[x].value !== "" && row[x].value !== " ") {
3495
3508
  return x;
3496
3509
  }
@@ -3518,18 +3531,46 @@ function wordSpanAt(frame, x, y) {
3518
3531
  return { sx, sy: y, ex, ey: y };
3519
3532
  }
3520
3533
  __name(wordSpanAt, "wordSpanAt");
3521
- function lineSpanAt(frame, y) {
3534
+ function selectableLineSpan(row, x, y) {
3535
+ let start = x;
3536
+ while (start > 0 && row[start - 1].selectable) {
3537
+ start--;
3538
+ }
3539
+ let runEnd = x;
3540
+ while (runEnd < row.length - 1 && row[runEnd + 1].selectable) {
3541
+ runEnd++;
3542
+ }
3543
+ const contentEnd = lastContentColumn(row, start, runEnd);
3544
+ return { sx: start, sy: y, ex: contentEnd, ey: y };
3545
+ }
3546
+ __name(selectableLineSpan, "selectableLineSpan");
3547
+ function isSelectableContent(cell) {
3548
+ return cell.selectable && cell.value !== "" && cell.value !== " ";
3549
+ }
3550
+ __name(isSelectableContent, "isSelectableContent");
3551
+ function lineSpanAt(frame, x, y) {
3522
3552
  const row = frame?.cells[y];
3523
- if (!row) {
3553
+ if (!row || row.length === 0) {
3524
3554
  return null;
3525
3555
  }
3526
- const end = lastContentColumn(row);
3527
- if (end < 0) {
3528
- return null;
3556
+ const origin = Math.max(0, Math.min(x, row.length - 1));
3557
+ for (let distance = 0; distance < row.length; distance++) {
3558
+ const left = origin - distance;
3559
+ if (left >= 0 && isSelectableContent(row[left])) {
3560
+ return selectableLineSpan(row, left, y);
3561
+ }
3562
+ const right = origin + distance;
3563
+ if (distance > 0 && right < row.length && isSelectableContent(row[right])) {
3564
+ return selectableLineSpan(row, right, y);
3565
+ }
3529
3566
  }
3530
- return { sx: 0, sy: y, ex: end, ey: y };
3567
+ return null;
3531
3568
  }
3532
3569
  __name(lineSpanAt, "lineSpanAt");
3570
+ function spanAtForMode(frame, mode, point) {
3571
+ return mode === "word" ? wordSpanAt(frame, point.x, point.y) : lineSpanAt(frame, point.x, point.y);
3572
+ }
3573
+ __name(spanAtForMode, "spanAtForMode");
3533
3574
 
3534
3575
  // packages/cli/src/ui/selection/selection-coords.ts
3535
3576
  init_esbuild_shims();
@@ -3576,8 +3617,12 @@ function TextSelectionController(props) {
3576
3617
  const baselineScrollTopRef = (0, import_react13.useRef)(0);
3577
3618
  const baselineScrollHeightRef = (0, import_react13.useRef)(0);
3578
3619
  const baselineFrameRef = (0, import_react13.useRef)(null);
3579
- const baselineViewportRectRef = (0, import_react13.useRef)(null);
3620
+ const baselineRectRef = (0, import_react13.useRef)(null);
3621
+ const activeRectIndexRef = (0, import_react13.useRef)(null);
3622
+ const selectionGenerationRef = (0, import_react13.useRef)(0);
3623
+ const pendingInvalidationGenRef = (0, import_react13.useRef)(null);
3580
3624
  const lastClickRef = (0, import_react13.useRef)(null);
3625
+ const anchorSpanRef = (0, import_react13.useRef)(null);
3581
3626
  const bufferRef = (0, import_react13.useRef)(void 0);
3582
3627
  const propsRef = (0, import_react13.useRef)(props);
3583
3628
  propsRef.current = props;
@@ -3588,7 +3633,10 @@ function TextSelectionController(props) {
3588
3633
  return bufferRef.current;
3589
3634
  }, [stdout]);
3590
3635
  const clearSelection = (0, import_react13.useCallback)(() => {
3636
+ selectionGenerationRef.current += 1;
3637
+ activeRectIndexRef.current = null;
3591
3638
  const selection = selectionRef.current;
3639
+ anchorSpanRef.current = null;
3592
3640
  if (selection.isEmpty) {
3593
3641
  return;
3594
3642
  }
@@ -3598,16 +3646,32 @@ function TextSelectionController(props) {
3598
3646
  const applyHighlight = (0, import_react13.useCallback)(() => {
3599
3647
  const selection = selectionRef.current;
3600
3648
  const normalized = selection.normalized();
3601
- const shouldHighlight = normalized && (!selection.isCollapsed || selection.mode !== "char");
3602
- getBuffer()?.setSelection(shouldHighlight ? normalized : null);
3603
- }, [getBuffer]);
3604
- const recordBaseline = (0, import_react13.useCallback)(() => {
3605
- const scrollState = propsRef.current.getScrollState();
3606
- baselineScrollTopRef.current = scrollState.scrollTop;
3607
- baselineScrollHeightRef.current = scrollState.scrollHeight;
3608
- baselineFrameRef.current = getBuffer()?.frame ?? null;
3609
- baselineViewportRectRef.current = propsRef.current.getViewportRect();
3649
+ getBuffer()?.setSelection(
3650
+ normalized && !selection.isBareClick ? normalized : null
3651
+ );
3610
3652
  }, [getBuffer]);
3653
+ const getSelectableRects = (0, import_react13.useCallback)(() => {
3654
+ const viewportRect = propsRef.current.getViewportRect();
3655
+ if (!viewportRect) {
3656
+ return [];
3657
+ }
3658
+ const additionalRects = propsRef.current.getAdditionalSelectableRects?.() ?? [];
3659
+ return [viewportRect, ...additionalRects];
3660
+ }, []);
3661
+ const getActiveRect = (0, import_react13.useCallback)(() => {
3662
+ const index = activeRectIndexRef.current;
3663
+ return index === null ? null : getSelectableRects()[index] ?? null;
3664
+ }, [getSelectableRects]);
3665
+ const recordBaseline = (0, import_react13.useCallback)(
3666
+ (rect) => {
3667
+ const scrollState = propsRef.current.getScrollState();
3668
+ baselineScrollTopRef.current = scrollState.scrollTop;
3669
+ baselineScrollHeightRef.current = scrollState.scrollHeight;
3670
+ baselineFrameRef.current = getBuffer()?.frame ?? null;
3671
+ baselineRectRef.current = rect;
3672
+ },
3673
+ [getBuffer]
3674
+ );
3611
3675
  const copySelection = (0, import_react13.useCallback)(() => {
3612
3676
  const normalized = selectionRef.current.normalized();
3613
3677
  const text = normalized ? getSelectedText(getBuffer()?.frame ?? null, normalized) : "";
@@ -3620,8 +3684,7 @@ function TextSelectionController(props) {
3620
3684
  const mapEvent = (0, import_react13.useCallback)(
3621
3685
  (event) => {
3622
3686
  const buffer = getBuffer();
3623
- const rect = propsRef.current.getViewportRect();
3624
- if (!buffer || !rect) {
3687
+ if (!buffer) {
3625
3688
  return null;
3626
3689
  }
3627
3690
  const frameHeight = buffer.dimensions.height;
@@ -3634,28 +3697,63 @@ function TextSelectionController(props) {
3634
3697
  );
3635
3698
  const row = buffer.frame?.cells[point.y];
3636
3699
  const snappedPoint = point.x > 0 && row?.[point.x]?.value === "" && row[point.x - 1]?.fullWidth ? { ...point, x: point.x - 1 } : point;
3637
- return { point: snappedPoint, rect };
3700
+ return snappedPoint;
3638
3701
  },
3639
3702
  [getBuffer, stdout]
3640
3703
  );
3704
+ const extendSpanDrag = (0, import_react13.useCallback)(
3705
+ (point) => {
3706
+ const anchor = anchorSpanRef.current;
3707
+ if (!anchor) return;
3708
+ const { span, mode } = anchor;
3709
+ const selection = selectionRef.current;
3710
+ const frame = getBuffer()?.frame ?? null;
3711
+ const current = spanAtForMode(frame, mode, point) ?? {
3712
+ sx: point.x,
3713
+ sy: point.y,
3714
+ ex: point.x,
3715
+ ey: point.y
3716
+ };
3717
+ const cursorAfter = point.y > span.ey || point.y === span.ey && point.x >= span.ex;
3718
+ selection.anchor = cursorAfter ? { x: span.sx, y: span.sy } : { x: span.ex, y: span.ey };
3719
+ selection.focus = cursorAfter ? { x: current.ex, y: current.ey } : { x: current.sx, y: current.sy };
3720
+ },
3721
+ [getBuffer]
3722
+ );
3723
+ const extendActiveDrag = (0, import_react13.useCallback)(
3724
+ (point) => {
3725
+ if (anchorSpanRef.current) {
3726
+ extendSpanDrag(point);
3727
+ } else {
3728
+ selectionRef.current.extend(point);
3729
+ }
3730
+ },
3731
+ [extendSpanDrag]
3732
+ );
3641
3733
  const handleMouse = (0, import_react13.useCallback)(
3642
3734
  (event) => {
3643
3735
  const selection = selectionRef.current;
3644
3736
  if (event.name.startsWith("scroll-")) {
3645
- clearSelection();
3737
+ if (activeRectIndexRef.current === 0) {
3738
+ clearSelection();
3739
+ }
3646
3740
  return;
3647
3741
  }
3648
3742
  if (event.name === "left-press") {
3743
+ selectionGenerationRef.current += 1;
3649
3744
  if (propsRef.current.hitTestScrollbar({ col: event.col, row: event.row })) {
3650
3745
  clearSelection();
3651
3746
  return;
3652
3747
  }
3653
- const mapped = mapEvent(event);
3654
- if (!mapped || !pointInViewport(mapped.point, mapped.rect)) {
3748
+ const point = mapEvent(event);
3749
+ const rects = getSelectableRects();
3750
+ const rectIndex = point ? rects.findIndex((rect2) => pointInViewport(point, rect2)) : -1;
3751
+ if (!point || rectIndex < 0) {
3655
3752
  clearSelection();
3656
3753
  return;
3657
3754
  }
3658
- const { point } = mapped;
3755
+ const rect = rects[rectIndex];
3756
+ activeRectIndexRef.current = rectIndex;
3659
3757
  const now = Date.now();
3660
3758
  const prev = lastClickRef.current;
3661
3759
  const near = prev != null && prev.y === point.y && Math.abs(prev.x - point.x) <= 1 && now - prev.time < MULTI_CLICK_MS;
@@ -3663,18 +3761,23 @@ function TextSelectionController(props) {
3663
3761
  lastClickRef.current = { x: point.x, y: point.y, time: now, count };
3664
3762
  if (count >= 2) {
3665
3763
  const frame = getBuffer()?.frame ?? null;
3666
- const span = count === 2 ? wordSpanAt(frame, point.x, point.y) : lineSpanAt(frame, point.y);
3764
+ const mode = count === 2 ? "word" : "line";
3765
+ const span = spanAtForMode(frame, mode, point);
3667
3766
  if (span) {
3668
- selection.selectSpan(span, count === 2 ? "word" : "line");
3669
- recordBaseline();
3767
+ selection.start({ x: span.sx, y: span.sy }, mode);
3768
+ selection.extend({ x: span.ex, y: span.ey });
3769
+ anchorSpanRef.current = { span, mode };
3770
+ dragScrollTopRef.current = propsRef.current.getScrollState().scrollTop;
3771
+ recordBaseline(rect);
3670
3772
  applyHighlight();
3671
3773
  copySelection();
3672
3774
  return;
3673
3775
  }
3674
3776
  }
3777
+ anchorSpanRef.current = null;
3675
3778
  selection.start(point);
3676
3779
  dragScrollTopRef.current = propsRef.current.getScrollState().scrollTop;
3677
- recordBaseline();
3780
+ recordBaseline(rect);
3678
3781
  applyHighlight();
3679
3782
  return;
3680
3783
  }
@@ -3682,16 +3785,20 @@ function TextSelectionController(props) {
3682
3785
  if (!selection.dragging) {
3683
3786
  return;
3684
3787
  }
3685
- lastClickRef.current = null;
3686
- if (propsRef.current.getScrollState().scrollTop !== dragScrollTopRef.current) {
3788
+ if (!anchorSpanRef.current) {
3789
+ lastClickRef.current = null;
3790
+ }
3791
+ if (activeRectIndexRef.current === 0 && propsRef.current.getScrollState().scrollTop !== dragScrollTopRef.current) {
3687
3792
  clearSelection();
3688
3793
  return;
3689
3794
  }
3690
- const mapped = mapEvent(event);
3691
- if (!mapped) {
3795
+ const point = mapEvent(event);
3796
+ const rect = getActiveRect();
3797
+ if (!point || !rect) {
3798
+ clearSelection();
3692
3799
  return;
3693
3800
  }
3694
- selection.extend(clampToViewport(mapped.point, mapped.rect));
3801
+ extendActiveDrag(clampToViewport(point, rect));
3695
3802
  applyHighlight();
3696
3803
  return;
3697
3804
  }
@@ -3699,12 +3806,18 @@ function TextSelectionController(props) {
3699
3806
  if (!selection.dragging) {
3700
3807
  return;
3701
3808
  }
3702
- const mapped = mapEvent(event);
3703
- if (mapped) {
3704
- selection.extend(clampToViewport(mapped.point, mapped.rect));
3809
+ if (pendingInvalidationGenRef.current === selectionGenerationRef.current) {
3810
+ clearSelection();
3811
+ return;
3812
+ }
3813
+ const point = mapEvent(event);
3814
+ const rect = getActiveRect();
3815
+ if (point && rect) {
3816
+ extendActiveDrag(clampToViewport(point, rect));
3705
3817
  }
3818
+ anchorSpanRef.current = null;
3706
3819
  selection.finish();
3707
- if (selection.isCollapsed || selection.isEmpty) {
3820
+ if (selection.isEmpty || selection.isBareClick) {
3708
3821
  clearSelection();
3709
3822
  return;
3710
3823
  }
@@ -3719,7 +3832,10 @@ function TextSelectionController(props) {
3719
3832
  copySelection,
3720
3833
  recordBaseline,
3721
3834
  mapEvent,
3722
- getBuffer
3835
+ getBuffer,
3836
+ getSelectableRects,
3837
+ getActiveRect,
3838
+ extendActiveDrag
3723
3839
  ]
3724
3840
  );
3725
3841
  useMouseEvents(handleMouse, {
@@ -3736,12 +3852,20 @@ function TextSelectionController(props) {
3736
3852
  return;
3737
3853
  }
3738
3854
  const { scrollTop, scrollHeight } = propsRef.current.getScrollState();
3739
- const viewportRect = propsRef.current.getViewportRect();
3740
- if (scrollTop !== baselineScrollTopRef.current || scrollHeight !== baselineScrollHeightRef.current || !sameViewportRect(baselineViewportRectRef.current, viewportRect) || !sameViewportContent(baselineFrameRef.current, frame, viewportRect)) {
3741
- clearSelection();
3855
+ const activeRect = getActiveRect();
3856
+ const isViewportSelection = activeRectIndexRef.current === 0;
3857
+ if (isViewportSelection && (scrollTop !== baselineScrollTopRef.current || scrollHeight !== baselineScrollHeightRef.current) || !sameViewportRect(baselineRectRef.current, activeRect) || !sameViewportContent(baselineFrameRef.current, frame, activeRect)) {
3858
+ const invalidatedGeneration = selectionGenerationRef.current;
3859
+ pendingInvalidationGenRef.current = invalidatedGeneration;
3860
+ queueMicrotask(() => {
3861
+ pendingInvalidationGenRef.current = null;
3862
+ if (selectionGenerationRef.current === invalidatedGeneration) {
3863
+ clearSelection();
3864
+ }
3865
+ });
3742
3866
  }
3743
3867
  });
3744
- }, [getBuffer, clearSelection]);
3868
+ }, [getBuffer, getActiveRect, clearSelection]);
3745
3869
  (0, import_react13.useEffect)(() => {
3746
3870
  if (!props.isActive) {
3747
3871
  clearSelection();
@@ -3789,7 +3913,7 @@ var VP_BANNER_ITEM = { type: "vp-banner", id: VP_BANNER_ID };
3789
3913
  var virtualEstimatedItemHeight = /* @__PURE__ */ __name((index) => index === 0 ? 10 : 3, "virtualEstimatedItemHeight");
3790
3914
  var virtualKeyExtractor = /* @__PURE__ */ __name((item) => item.type === "vp-banner" ? "vp-banner" : item.id >= 0 ? `h-${item.id}` : `p-${-item.id - 1}`, "virtualKeyExtractor");
3791
3915
  var virtualIsStaticItem = /* @__PURE__ */ __name((item) => item.type === "vp-banner" || item.id > 0, "virtualIsStaticItem");
3792
- var MainContent = /* @__PURE__ */ __name(() => {
3916
+ var MainContent = /* @__PURE__ */ __name(({ footerRef }) => {
3793
3917
  const { version } = useAppContext();
3794
3918
  const uiState = useUIState();
3795
3919
  const { allExpanded: fullDetail } = useThoughtExpanded();
@@ -4019,6 +4143,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
4019
4143
  {
4020
4144
  isActive: !uiState.dialogsVisible,
4021
4145
  getViewportRect: () => scrollRef.current?.getViewportRect() ?? null,
4146
+ getAdditionalSelectableRects: () => footerRef?.current ? [measureElementPosition(footerRef.current)] : [],
4022
4147
  getScrollState: () => scrollRef.current?.getScrollState() ?? {
4023
4148
  scrollTop: 0,
4024
4149
  scrollHeight: 0,
@@ -8060,15 +8185,18 @@ function StatusLineDialog({
8060
8185
  };
8061
8186
  settings.setValue(effectiveScope, "ui.statusLine", savedConfig);
8062
8187
  onSaved?.(savedConfig);
8063
- addItem(
8064
- {
8065
- type: "info" /* INFO */,
8066
- text: `Status line preset saved to ${effectiveScope.toLowerCase()} settings.`
8067
- },
8068
- Date.now()
8069
- );
8188
+ const feedbackItem = {
8189
+ type: "info" /* INFO */,
8190
+ text: `Status line preset saved to ${effectiveScope.toLowerCase()} settings.`
8191
+ };
8192
+ addItem(feedbackItem, Date.now());
8193
+ config.getChatRecordingService?.()?.recordSlashCommand({
8194
+ phase: "result",
8195
+ rawCommand: "/statusline",
8196
+ outputHistoryItems: [feedbackItem]
8197
+ });
8070
8198
  onClose();
8071
- }, [addItem, onClose, onSaved, presetConfig, settings]);
8199
+ }, [addItem, config, onClose, onSaved, presetConfig, settings]);
8072
8200
  useKeypress(
8073
8201
  (key) => {
8074
8202
  if (key.name === "escape") {
@@ -8472,6 +8600,7 @@ var useAuthCommand = /* @__PURE__ */ __name((settings, config, addItem, onAuthCh
8472
8600
  pendingAuthType,
8473
8601
  isAuthenticating
8474
8602
  );
8603
+ const openedViaCommandRef = (0, import_react27.useRef)(false);
8475
8604
  const onAuthError = (0, import_react27.useCallback)(
8476
8605
  (error) => {
8477
8606
  setAuthError(error);
@@ -8523,16 +8652,22 @@ var useAuthCommand = /* @__PURE__ */ __name((settings, config, addItem, onAuthCh
8523
8652
  refreshAuth: /* @__PURE__ */ __name((authType) => config.refreshAuth(authType), "refreshAuth")
8524
8653
  });
8525
8654
  completeAuthentication();
8526
- addItem(
8527
- {
8528
- type: "info" /* INFO */,
8529
- text: t(
8530
- "Successfully configured {{provider}}. Use /model to switch models.",
8531
- { provider: providerConfig.label }
8532
- )
8533
- },
8534
- Date.now()
8535
- );
8655
+ const feedbackItem = {
8656
+ type: "info" /* INFO */,
8657
+ text: t(
8658
+ "Successfully configured {{provider}}. Use /model to switch models.",
8659
+ { provider: providerConfig.label }
8660
+ )
8661
+ };
8662
+ addItem(feedbackItem, Date.now());
8663
+ if (openedViaCommandRef.current) {
8664
+ openedViaCommandRef.current = false;
8665
+ config.getChatRecordingService?.()?.recordSlashCommand({
8666
+ phase: "result",
8667
+ rawCommand: "/auth",
8668
+ outputHistoryItems: [feedbackItem]
8669
+ });
8670
+ }
8536
8671
  logAuth(config, new AuthEvent(protocol, "manual", "success"));
8537
8672
  } catch (error) {
8538
8673
  handleAuthFailure(error, protocol);
@@ -8541,9 +8676,11 @@ var useAuthCommand = /* @__PURE__ */ __name((settings, config, addItem, onAuthCh
8541
8676
  [settings, config, completeAuthentication, addItem, handleAuthFailure]
8542
8677
  );
8543
8678
  const openAuthDialog = (0, import_react27.useCallback)(() => {
8679
+ openedViaCommandRef.current = true;
8544
8680
  setIsAuthDialogOpen(true);
8545
8681
  }, []);
8546
8682
  const closeAuthDialog = (0, import_react27.useCallback)(() => {
8683
+ openedViaCommandRef.current = false;
8547
8684
  setIsAuthDialogOpen(false);
8548
8685
  setAuthError(null);
8549
8686
  }, []);
@@ -11087,6 +11224,7 @@ function hydrateApiKeyEnvFromSettings(settings, envKey) {
11087
11224
  }
11088
11225
  __name(hydrateApiKeyEnvFromSettings, "hydrateApiKeyEnvFromSettings");
11089
11226
  function handleModelSwitchSuccess({
11227
+ config,
11090
11228
  settings,
11091
11229
  uiState,
11092
11230
  after,
@@ -11108,16 +11246,19 @@ function handleModelSwitchSuccess({
11108
11246
  const baseUrl = after?.baseUrl ?? t("(default)");
11109
11247
  const maskedKey = maskApiKey2(after?.apiKey);
11110
11248
  const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11111
- uiState?.historyManager.addItem(
11112
- {
11113
- type: "info",
11114
- text: `authType: ${effectiveAuthType ?? `(${t("none")})`}
11249
+ const feedbackItem = {
11250
+ type: "info",
11251
+ text: `authType: ${effectiveAuthType ?? `(${t("none")})`}
11115
11252
  Using ${isRuntime ? "runtime " : ""}model: ${effectiveModelId}${scopeSuffix}
11116
11253
  Base URL: ${baseUrl}
11117
11254
  API key: ${maskedKey}`
11118
- },
11119
- Date.now()
11120
- );
11255
+ };
11256
+ uiState?.historyManager.addItem(feedbackItem, Date.now());
11257
+ config.getChatRecordingService?.()?.recordSlashCommand({
11258
+ phase: "result",
11259
+ rawCommand: "/model",
11260
+ outputHistoryItems: [feedbackItem]
11261
+ });
11121
11262
  }
11122
11263
  __name(handleModelSwitchSuccess, "handleModelSwitchSuccess");
11123
11264
  function formatContextWindow(size) {
@@ -11299,7 +11440,8 @@ function ModelDialog({
11299
11440
  }
11300
11441
  }, [parsedImageModelValue?.selector, isImageModelMode]);
11301
11442
  const preferredModelId = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.modelId : isVisionModelMode && parsedVisionModelSetting ? parsedVisionModelSetting.modelId : isImageModelMode && parsedImageModelSetting ? parsedImageModelSetting.modelId : config?.getModel() || MAINLINE_CODER_MODEL;
11302
- const activeRuntimeSnapshot = isFastModelMode || isVoiceModelMode || isVisionModelMode || isCompactionModelMode || isImageModelMode ? void 0 : config?.getActiveRuntimeModelSnapshot?.();
11443
+ const isAuxiliaryModelMode = isFastModelMode || isVoiceModelMode || isVisionModelMode || isCompactionModelMode || isImageModelMode;
11444
+ const activeRuntimeSnapshot = isAuxiliaryModelMode ? void 0 : config?.getActiveRuntimeModelSnapshot?.();
11303
11445
  const currentBaseUrl = config?.getModelsConfig().getGenerationConfig()?.baseUrl;
11304
11446
  const preferredFastModelEntry = isFastModelMode && parsedFastModelSetting ? parsedFastModelSetting.authType ? availableModelEntries.find(
11305
11447
  ({ authType: t2, model }) => t2 === parsedFastModelSetting.authType && model.id === parsedFastModelSetting.modelId
@@ -11360,10 +11502,50 @@ function ModelDialog({
11360
11502
  preferredModelId,
11361
11503
  currentBaseUrl
11362
11504
  ) : "";
11505
+ const closeLatchRef = (0, import_react34.useRef)(false);
11506
+ const selectionInFlightRef = (0, import_react34.useRef)(false);
11507
+ const selectionCommittedRef = (0, import_react34.useRef)(false);
11508
+ const reportAuxiliaryModelSelection = (0, import_react34.useCallback)(
11509
+ (feedbackItem) => {
11510
+ uiState?.historyManager.addItem(feedbackItem, Date.now());
11511
+ config?.getChatRecordingService?.()?.recordSlashCommand({
11512
+ phase: "result",
11513
+ rawCommand: "/model",
11514
+ outputHistoryItems: [feedbackItem]
11515
+ });
11516
+ },
11517
+ [config, uiState]
11518
+ );
11519
+ const closeWithoutSelection = (0, import_react34.useCallback)(() => {
11520
+ if (closeLatchRef.current || selectionInFlightRef.current) return;
11521
+ closeLatchRef.current = true;
11522
+ if (!isAuxiliaryModelMode && !selectionCommittedRef.current) {
11523
+ const feedbackItem = {
11524
+ type: "info",
11525
+ text: t("Kept model as {{model}}", {
11526
+ model: activeRuntimeSnapshot?.modelId ?? preferredModelId
11527
+ })
11528
+ };
11529
+ uiState?.historyManager.addItem(feedbackItem, Date.now());
11530
+ config?.getChatRecordingService?.()?.recordSlashCommand({
11531
+ phase: "result",
11532
+ rawCommand: "/model",
11533
+ outputHistoryItems: [feedbackItem]
11534
+ });
11535
+ }
11536
+ onClose();
11537
+ }, [
11538
+ activeRuntimeSnapshot,
11539
+ config,
11540
+ isAuxiliaryModelMode,
11541
+ onClose,
11542
+ preferredModelId,
11543
+ uiState
11544
+ ]);
11363
11545
  useKeypress(
11364
11546
  (key) => {
11365
- if (key.name === "escape" || key.name === "left" && (isFastModelMode || isVoiceModelMode || isVisionModelMode || isCompactionModelMode || isImageModelMode)) {
11366
- onClose();
11547
+ if (key.name === "escape" || key.name === "left" && isAuxiliaryModelMode) {
11548
+ closeWithoutSelection();
11367
11549
  }
11368
11550
  },
11369
11551
  { isActive: true }
@@ -11388,6 +11570,7 @@ function ModelDialog({
11388
11570
  }, [highlightedValue, preferredKey, availableModelEntries]);
11389
11571
  const handleSelect = (0, import_react34.useCallback)(
11390
11572
  async (selected) => {
11573
+ if (selectionInFlightRef.current || selectionCommittedRef.current) return;
11391
11574
  setErrorMessage(null);
11392
11575
  const selectedEntry = availableModelEntries.find(
11393
11576
  ({ authType: t2, model, isRuntime: isRuntime2, snapshotId }) => {
@@ -11420,13 +11603,10 @@ function ModelDialog({
11420
11603
  const scope = resolvePersistScope(settings, persistScope);
11421
11604
  settings.setValue(scope, "voiceModel", voiceModel);
11422
11605
  const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11423
- uiState?.historyManager.addItem(
11424
- {
11425
- type: "success",
11426
- text: `${t("Voice Model")}: ${voiceModel}${scopeSuffix}`
11427
- },
11428
- Date.now()
11429
- );
11606
+ reportAuxiliaryModelSelection({
11607
+ type: "success",
11608
+ text: `${t("Voice Model")}: ${voiceModel}${scopeSuffix}`
11609
+ });
11430
11610
  onClose();
11431
11611
  return;
11432
11612
  }
@@ -11437,13 +11617,10 @@ function ModelDialog({
11437
11617
  settings.setValue(scope, "fastModel", fastModel);
11438
11618
  config?.setFastModel(fastModel);
11439
11619
  const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11440
- uiState?.historyManager.addItem(
11441
- {
11442
- type: "success",
11443
- text: `${t("Fast Model")}: ${fastModel}${scopeSuffix}`
11444
- },
11445
- Date.now()
11446
- );
11620
+ reportAuxiliaryModelSelection({
11621
+ type: "success",
11622
+ text: `${t("Fast Model")}: ${fastModel}${scopeSuffix}`
11623
+ });
11447
11624
  onClose();
11448
11625
  return;
11449
11626
  }
@@ -11465,13 +11642,10 @@ function ModelDialog({
11465
11642
  const visionWarning = selectedEntry && !isImageCapable(selectedEntry.model) ? `
11466
11643
  ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge may fail on images.", { model: visionModelDisplay })}` : "";
11467
11644
  const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11468
- uiState?.historyManager.addItem(
11469
- {
11470
- type: "success",
11471
- text: `${t("Vision Model")}: ${visionModelDisplay}${scopeSuffix}${visionWarning}`
11472
- },
11473
- Date.now()
11474
- );
11645
+ reportAuxiliaryModelSelection({
11646
+ type: "success",
11647
+ text: `${t("Vision Model")}: ${visionModelDisplay}${scopeSuffix}${visionWarning}`
11648
+ });
11475
11649
  onClose();
11476
11650
  return;
11477
11651
  }
@@ -11485,13 +11659,10 @@ ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge ma
11485
11659
  settings.setValue(scope, "compactionModel", compactionModelId);
11486
11660
  config.setCompactionModel(compactionModelId);
11487
11661
  const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11488
- uiState?.historyManager.addItem(
11489
- {
11490
- type: "success",
11491
- text: `${t("Compaction Model")}: ${compactionModelId}${scopeSuffix}`
11492
- },
11493
- Date.now()
11494
- );
11662
+ reportAuxiliaryModelSelection({
11663
+ type: "success",
11664
+ text: `${t("Compaction Model")}: ${compactionModelId}${scopeSuffix}`
11665
+ });
11495
11666
  onClose();
11496
11667
  return;
11497
11668
  }
@@ -11513,15 +11684,17 @@ ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge ma
11513
11684
  }
11514
11685
  const scope = resolvePersistScope(settings, persistScope);
11515
11686
  settings.setValue(scope, "imageModel", imageModel);
11516
- await config.setImageModel(imageModel);
11687
+ selectionInFlightRef.current = true;
11688
+ try {
11689
+ await config.setImageModel(imageModel);
11690
+ } finally {
11691
+ selectionInFlightRef.current = false;
11692
+ }
11517
11693
  const scopeSuffix = persistScope === "workspace" ? t(" (this project)") : persistScope === "user" ? t(" (global)") : "";
11518
- uiState?.historyManager.addItem(
11519
- {
11520
- type: "success",
11521
- text: `${t("Image Model")}: ${imageModelDisplay}${scopeSuffix}`
11522
- },
11523
- Date.now()
11524
- );
11694
+ reportAuxiliaryModelSelection({
11695
+ type: "success",
11696
+ text: `${t("Image Model")}: ${imageModelDisplay}${scopeSuffix}`
11697
+ });
11525
11698
  onClose();
11526
11699
  return;
11527
11700
  }
@@ -11564,10 +11737,16 @@ ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge ma
11564
11737
  modelId = parsed.modelId;
11565
11738
  selectedBaseUrl = parsed.baseUrl;
11566
11739
  }
11567
- await config.switchModel(selectedAuthType, modelId, {
11568
- ...selectedAuthType !== authType && selectedAuthType === "qwen-oauth" /* QWEN_OAUTH */ ? { requireCachedCredentials: true } : {},
11569
- baseUrl: selectedBaseUrl
11570
- });
11740
+ selectionInFlightRef.current = true;
11741
+ try {
11742
+ await config.switchModel(selectedAuthType, modelId, {
11743
+ ...selectedAuthType !== authType && selectedAuthType === "qwen-oauth" /* QWEN_OAUTH */ ? { requireCachedCredentials: true } : {},
11744
+ baseUrl: selectedBaseUrl
11745
+ });
11746
+ selectionCommittedRef.current = true;
11747
+ } finally {
11748
+ selectionInFlightRef.current = false;
11749
+ }
11571
11750
  if (!isRuntime) {
11572
11751
  const event = new ModelSlashCommandEvent(modelId);
11573
11752
  logModelSlashCommand(config, event);
@@ -11584,22 +11763,34 @@ ${t("\u26A0 '{{model}}' is not a known image-capable model; the vision bridge ma
11584
11763
  ${baseErrorMessage}`);
11585
11764
  return;
11586
11765
  }
11587
- handleModelSwitchSuccess({
11588
- settings,
11589
- uiState,
11590
- after,
11591
- effectiveAuthType,
11592
- effectiveModelId,
11593
- // Persist the selected provider's baseUrl so the right provider is
11594
- // restored next launch when several share the same id. Pair it with the
11595
- // same resolved config that effectiveModelId comes from (`after`) so the
11596
- // persisted (model.name, model.baseUrl) stays consistent even if
11597
- // switchModel transforms the id; fall back to the picker entry's
11598
- // baseUrl. Runtime models are keyed by snapshot id, so no disambiguator.
11599
- effectiveBaseUrl: isRuntime ? void 0 : after?.baseUrl ?? selectedEntry?.model.baseUrl,
11600
- isRuntime,
11601
- persistScope
11602
- });
11766
+ try {
11767
+ handleModelSwitchSuccess({
11768
+ config,
11769
+ settings,
11770
+ uiState,
11771
+ after,
11772
+ effectiveAuthType,
11773
+ effectiveModelId,
11774
+ // Persist the selected provider's baseUrl so the right provider is
11775
+ // restored next launch when several share the same id. Pair it with the
11776
+ // same resolved config that effectiveModelId comes from (`after`) so the
11777
+ // persisted (model.name, model.baseUrl) stays consistent even if
11778
+ // switchModel transforms the id; fall back to the picker entry's
11779
+ // baseUrl. Runtime models are keyed by snapshot id, so no disambiguator.
11780
+ effectiveBaseUrl: isRuntime ? void 0 : after?.baseUrl ?? selectedEntry?.model.baseUrl,
11781
+ isRuntime,
11782
+ persistScope
11783
+ });
11784
+ } catch (e) {
11785
+ const errorMessage2 = e instanceof Error ? e.message : String(e);
11786
+ setErrorMessage(
11787
+ `${t("Model switched, but the selection could not be saved.")}
11788
+
11789
+ ${errorMessage2}`
11790
+ );
11791
+ return;
11792
+ }
11793
+ closeLatchRef.current = true;
11603
11794
  onClose();
11604
11795
  },
11605
11796
  [
@@ -11615,7 +11806,8 @@ ${baseErrorMessage}`);
11615
11806
  isCompactionModelMode,
11616
11807
  isImageModelMode,
11617
11808
  availableModelEntries,
11618
- persistScope
11809
+ persistScope,
11810
+ reportAuxiliaryModelSelection
11619
11811
  ]
11620
11812
  );
11621
11813
  const hasModels = MODEL_OPTIONS.length > 0;
@@ -17537,6 +17729,7 @@ var PluginDetailView = /* @__PURE__ */ __name(({
17537
17729
  isFavorite ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Text, { color: theme.status.warning, children: " \u2605" }) : null
17538
17730
  ] }),
17539
17731
  ext.installMetadata && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(InfoRow, { label: t("Source:"), children: redactUrlCredentials(ext.installMetadata.source) }),
17732
+ ext.installMetadata?.originSource && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(InfoRow, { label: t("Origin:"), children: ext.installMetadata.originSource }),
17540
17733
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(InfoRow, { label: t("Components:"), children: componentSummary(ext) })
17541
17734
  ] }),
17542
17735
  /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Box_default, { flexDirection: "column", children: [
@@ -31701,7 +31894,7 @@ var PasteProgressBar = /* @__PURE__ */ __name(({
31701
31894
  label
31702
31895
  ] });
31703
31896
  }, "PasteProgressBar");
31704
- var Footer = /* @__PURE__ */ __name(() => {
31897
+ var Footer = /* @__PURE__ */ __name(({ containerRef }) => {
31705
31898
  const uiState = useUIState();
31706
31899
  const config = useConfig();
31707
31900
  const settings = useSettings();
@@ -31793,6 +31986,7 @@ var Footer = /* @__PURE__ */ __name(() => {
31793
31986
  return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
31794
31987
  Box_default,
31795
31988
  {
31989
+ ref: containerRef,
31796
31990
  flexDirection: isNarrow ? "column" : "row",
31797
31991
  justifyContent: isNarrow ? "flex-start" : "space-between",
31798
31992
  width: "100%",
@@ -31976,7 +32170,7 @@ var KeyboardShortcuts = /* @__PURE__ */ __name(() => {
31976
32170
 
31977
32171
  // packages/cli/src/ui/components/Composer.tsx
31978
32172
  var import_jsx_runtime119 = __toESM(require_jsx_runtime(), 1);
31979
- var Composer = /* @__PURE__ */ __name(() => {
32173
+ var Composer = /* @__PURE__ */ __name(({ footerRef }) => {
31980
32174
  const config = useConfig();
31981
32175
  const isScreenReaderEnabled = use_is_screen_reader_enabled_default();
31982
32176
  const uiState = useUIState();
@@ -32056,7 +32250,7 @@ var Composer = /* @__PURE__ */ __name(() => {
32056
32250
  clipboardUnavailableShownRef
32057
32251
  }
32058
32252
  ),
32059
- uiState.isInputActive && !showSuggestions && (showShortcuts ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(KeyboardShortcuts, {}) : !isScreenReaderEnabled && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(Footer, {}))
32253
+ uiState.isInputActive && !showSuggestions && (showShortcuts ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(KeyboardShortcuts, {}) : !isScreenReaderEnabled && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(Footer, { containerRef: footerRef }))
32060
32254
  ] });
32061
32255
  }, "Composer");
32062
32256
 
@@ -33400,6 +33594,7 @@ var AgentRow = /* @__PURE__ */ __name(({ entry, now, selected = false, tree }) =
33400
33594
  var import_jsx_runtime130 = __toESM(require_jsx_runtime(), 1);
33401
33595
  var DefaultAppLayout = /* @__PURE__ */ __name(() => {
33402
33596
  const uiState = useUIState();
33597
+ const footerRef = (0, import_react115.useRef)(null);
33403
33598
  const { refreshStatic } = useUIActions();
33404
33599
  const { activeView, agents } = useAgentViewState();
33405
33600
  const { columns: terminalWidth } = useTerminalSize();
@@ -33432,7 +33627,7 @@ var DefaultAppLayout = /* @__PURE__ */ __name(() => {
33432
33627
  /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(ExitWarning, {})
33433
33628
  ] })
33434
33629
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
33435
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(MainContent, {}),
33630
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(MainContent, { footerRef }),
33436
33631
  /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(Box_default, { flexDirection: "column", ref: uiState.mainControlsRef, children: [
33437
33632
  !uiState.dialogsVisible && uiState.updateInfo && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(UpdateNotification, { message: uiState.updateInfo.message }),
33438
33633
  uiState.dialogsVisible ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
@@ -33467,7 +33662,7 @@ var DefaultAppLayout = /* @__PURE__ */ __name(() => {
33467
33662
  containerWidth: uiState.mainAreaWidth
33468
33663
  }
33469
33664
  ) }),
33470
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Composer, {})
33665
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Composer, { footerRef })
33471
33666
  ] }),
33472
33667
  /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(ExitWarning, {}),
33473
33668
  !uiState.dialogsVisible && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
@@ -33844,7 +34039,7 @@ function installTerminalResizeReflow(stdout, options = {}) {
33844
34039
  __name(installTerminalResizeReflow, "installTerminalResizeReflow");
33845
34040
 
33846
34041
  // packages/cli/src/ui/AppContainer.tsx
33847
- import process17 from "node:process";
34042
+ import process18 from "node:process";
33848
34043
 
33849
34044
  // packages/cli/src/ui/hooks/useMemoryMonitor.ts
33850
34045
  init_esbuild_shims();
@@ -33955,25 +34150,28 @@ __name(useWakeRepaint, "useWakeRepaint");
33955
34150
  init_esbuild_shims();
33956
34151
  var import_react119 = __toESM(require_react(), 1);
33957
34152
  import process13 from "node:process";
33958
- var useThemeCommand = /* @__PURE__ */ __name((loadedSettings, setThemeError, addItem, initialThemeError) => {
34153
+ var useThemeCommand = /* @__PURE__ */ __name((loadedSettings, setThemeError, addItem, initialThemeError, config) => {
33959
34154
  const [isThemeDialogOpen, setIsThemeDialogOpen] = (0, import_react119.useState)(!!initialThemeError);
33960
34155
  const [themeBeforeDialogOpen, setThemeBeforeDialogOpen] = (0, import_react119.useState)(themeManager.getActiveTheme().name);
33961
34156
  const openThemeDialog = (0, import_react119.useCallback)(() => {
33962
34157
  if (process13.env["NO_COLOR"]) {
33963
- addItem(
33964
- {
33965
- type: "info" /* INFO */,
33966
- text: t(
33967
- "Theme configuration unavailable due to NO_COLOR env variable."
33968
- )
33969
- },
33970
- Date.now()
33971
- );
34158
+ const feedbackItem = {
34159
+ type: "info" /* INFO */,
34160
+ text: t(
34161
+ "Theme configuration unavailable due to NO_COLOR env variable."
34162
+ )
34163
+ };
34164
+ addItem(feedbackItem, Date.now());
34165
+ config?.getChatRecordingService?.()?.recordSlashCommand({
34166
+ phase: "result",
34167
+ rawCommand: "/theme",
34168
+ outputHistoryItems: [feedbackItem]
34169
+ });
33972
34170
  return;
33973
34171
  }
33974
34172
  setThemeBeforeDialogOpen(themeManager.getActiveTheme().name);
33975
34173
  setIsThemeDialogOpen(true);
33976
- }, [addItem]);
34174
+ }, [addItem, config]);
33977
34175
  const applyTheme = (0, import_react119.useCallback)(
33978
34176
  (themeName) => {
33979
34177
  if (!themeManager.setActiveTheme(themeName)) {
@@ -34160,7 +34358,7 @@ var useFeedbackDialog = /* @__PURE__ */ __name(({
34160
34358
  // packages/cli/src/ui/hooks/useEditorSettings.ts
34161
34359
  init_esbuild_shims();
34162
34360
  var import_react121 = __toESM(require_react(), 1);
34163
- var useEditorSettings = /* @__PURE__ */ __name((loadedSettings, setEditorError, addItem) => {
34361
+ var useEditorSettings = /* @__PURE__ */ __name((loadedSettings, setEditorError, addItem, config) => {
34164
34362
  const [isEditorDialogOpen, setIsEditorDialogOpen] = (0, import_react121.useState)(false);
34165
34363
  const openEditorDialog = (0, import_react121.useCallback)(() => {
34166
34364
  setIsEditorDialogOpen(true);
@@ -34172,20 +34370,23 @@ var useEditorSettings = /* @__PURE__ */ __name((loadedSettings, setEditorError,
34172
34370
  }
34173
34371
  try {
34174
34372
  loadedSettings.setValue(scope, "general.preferredEditor", editorType);
34175
- addItem(
34176
- {
34177
- type: "info" /* INFO */,
34178
- text: `Editor preference ${editorType ? `set to "${editorType}"` : "cleared"} in ${scope} settings.`
34179
- },
34180
- Date.now()
34181
- );
34373
+ const feedbackItem = {
34374
+ type: "info" /* INFO */,
34375
+ text: `Editor preference ${editorType ? `set to "${editorType}"` : "cleared"} in ${scope} settings.`
34376
+ };
34377
+ addItem(feedbackItem, Date.now());
34378
+ config?.getChatRecordingService?.()?.recordSlashCommand({
34379
+ phase: "result",
34380
+ rawCommand: "/editor",
34381
+ outputHistoryItems: [feedbackItem]
34382
+ });
34182
34383
  setEditorError(null);
34183
34384
  setIsEditorDialogOpen(false);
34184
34385
  } catch (error) {
34185
34386
  setEditorError(`Failed to set editor preference: ${error}`);
34186
34387
  }
34187
34388
  },
34188
- [loadedSettings, setEditorError, addItem]
34389
+ [loadedSettings, setEditorError, addItem, config]
34189
34390
  );
34190
34391
  const exitEditorDialog = (0, import_react121.useCallback)(() => {
34191
34392
  setIsEditorDialogOpen(false);
@@ -34345,36 +34546,23 @@ var useEffortCommand = /* @__PURE__ */ __name((loadedSettings, config, addItem)
34345
34546
  if (!effort) {
34346
34547
  return;
34347
34548
  }
34348
- const applied = applyReasoningEffort(config, effort);
34549
+ applyReasoningEffort(config, effort);
34349
34550
  loadedSettings.setValue(
34350
34551
  getPersistScopeForModelSelection(loadedSettings),
34351
34552
  "model.reasoningEffort",
34352
34553
  effort
34353
34554
  );
34354
34555
  if (addItem) {
34355
- if (!applied) {
34356
- addItem(
34357
- {
34358
- type: "info" /* INFO */,
34359
- text: t(
34360
- "Reasoning effort set to {{tier}}, but thinking is currently disabled \u2014 it will take effect when thinking is re-enabled.",
34361
- { tier: effort }
34362
- )
34363
- },
34364
- Date.now()
34365
- );
34366
- } else {
34367
- addItem(
34368
- {
34369
- type: "info" /* INFO */,
34370
- text: t(
34371
- "Reasoning effort: {{tier}} (requested; the effective tier depends on the active provider/model).",
34372
- { tier: effort }
34373
- )
34374
- },
34375
- Date.now()
34376
- );
34377
- }
34556
+ const feedbackItem = {
34557
+ type: "info" /* INFO */,
34558
+ text: formatEffortChangeMessage(config, effort)
34559
+ };
34560
+ addItem(feedbackItem, Date.now());
34561
+ config.getChatRecordingService?.()?.recordSlashCommand({
34562
+ phase: "result",
34563
+ rawCommand: "/effort",
34564
+ outputHistoryItems: [feedbackItem]
34565
+ });
34378
34566
  }
34379
34567
  } finally {
34380
34568
  setIsEffortDialogOpen(false);
@@ -34919,6 +35107,7 @@ __name(useDeleteCommand, "useDeleteCommand");
34919
35107
  // packages/cli/src/ui/hooks/slashCommandProcessor.ts
34920
35108
  init_esbuild_shims();
34921
35109
  var import_react129 = __toESM(require_react(), 1);
35110
+ import process15 from "node:process";
34922
35111
  var debugLogger34 = createDebugLogger("SLASH_COMMAND_PROCESSOR");
34923
35112
  function hasUserPromptExpansionHooks(config) {
34924
35113
  return !!config && !config.getDisableAllHooks?.() && (config.hasHooksForEvent?.("UserPromptExpansion") ?? false);
@@ -34944,7 +35133,42 @@ var SLASH_COMMANDS_SKIP_RECORDING = /* @__PURE__ */ new Set([
34944
35133
  "btw",
34945
35134
  "history"
34946
35135
  ]);
35136
+ var SLASH_COMMAND_ROOTS_HIDE_INVOCATION = /* @__PURE__ */ new Set([
35137
+ "auth",
35138
+ "diff",
35139
+ "editor",
35140
+ "help",
35141
+ "settings",
35142
+ "status",
35143
+ "stats",
35144
+ "theme"
35145
+ ]);
35146
+ var BARE_SLASH_COMMANDS_HIDE_INVOCATION = /* @__PURE__ */ new Set([
35147
+ "effort",
35148
+ "model",
35149
+ "statusline"
35150
+ ]);
34947
35151
  var MAX_EXTENSION_CONTENT_REFRESH_PASSES = 5;
35152
+ function shouldHideSlashCommandInvocation(command, canonicalPath, args) {
35153
+ if (command?.kind !== "built-in" /* BUILT_IN */) {
35154
+ return false;
35155
+ }
35156
+ if (canonicalPath.length === 1 && SLASH_COMMAND_ROOTS_HIDE_INVOCATION.has(canonicalPath[0] ?? "")) {
35157
+ if (canonicalPath[0] === "theme" && process15.env["NO_COLOR"]) {
35158
+ return false;
35159
+ }
35160
+ return true;
35161
+ }
35162
+ const path15 = canonicalPath.join(" ");
35163
+ if (BARE_SLASH_COMMANDS_HIDE_INVOCATION.has(path15)) {
35164
+ if (path15 === "model") {
35165
+ return isPickerOnlyModelInvocation(args);
35166
+ }
35167
+ return args.trim() === "";
35168
+ }
35169
+ return false;
35170
+ }
35171
+ __name(shouldHideSlashCommandInvocation, "shouldHideSlashCommandInvocation");
34948
35172
  function getSkillCommandName(command) {
34949
35173
  return command.skillDetail?.name ?? command.name;
34950
35174
  }
@@ -35497,6 +35721,11 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35497
35721
  if (trimmed.startsWith("/") && hasSlashCommandPathSeparator(trimmed)) {
35498
35722
  return false;
35499
35723
  }
35724
+ const {
35725
+ commandToExecute,
35726
+ args,
35727
+ canonicalPath: resolvedCommandPath
35728
+ } = parseSlashCommand(trimmed, commands);
35500
35729
  const recordedItems = [];
35501
35730
  const recordItem = /* @__PURE__ */ __name((item) => {
35502
35731
  recordedItems.push(item);
@@ -35511,19 +35740,29 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35511
35740
  const userMessageTimestamp = Date.now();
35512
35741
  let invocationItemId = existingInvocationItemId;
35513
35742
  let invocationSentToModel = false;
35514
- if (!isBtwCommand(trimmed) && invocationItemId === void 0) {
35743
+ let hideInvocation = isBtwCommand(trimmed) || shouldHideSlashCommandInvocation(
35744
+ commandToExecute,
35745
+ resolvedCommandPath,
35746
+ args
35747
+ );
35748
+ if (!hideInvocation && invocationItemId === void 0) {
35515
35749
  invocationItemId = addItemWithRecording(
35516
35750
  { type: "user" /* USER */, text: trimmed, sentToModel: false },
35517
35751
  userMessageTimestamp
35518
35752
  );
35519
35753
  }
35754
+ const revealHiddenInvocation = /* @__PURE__ */ __name(() => {
35755
+ if (resolvedCommandPath.join(" ") !== "model" || !hideInvocation || invocationItemId !== void 0) {
35756
+ return;
35757
+ }
35758
+ hideInvocation = false;
35759
+ invocationItemId = addItemWithRecording(
35760
+ { type: "user" /* USER */, text: trimmed, sentToModel: false },
35761
+ userMessageTimestamp
35762
+ );
35763
+ }, "revealHiddenInvocation");
35520
35764
  let hasError = false;
35521
35765
  let delegatedToRecursiveInvocation = false;
35522
- const {
35523
- commandToExecute,
35524
- args,
35525
- canonicalPath: resolvedCommandPath
35526
- } = parseSlashCommand(trimmed, commands);
35527
35766
  const subcommand = resolvedCommandPath.length > 1 ? resolvedCommandPath.slice(1).join(" ") : void 0;
35528
35767
  const isSkillCommand = commandToExecute?.kind === "skill" /* SKILL */;
35529
35768
  let skillInvocationRecorded = false;
@@ -35669,24 +35908,22 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35669
35908
  toolArgs: result.toolArgs
35670
35909
  };
35671
35910
  case "message":
35911
+ revealHiddenInvocation();
35672
35912
  if (result.messageType === "info") {
35673
- addMessage({
35674
- type: "info" /* INFO */,
35675
- content: result.content,
35676
- timestamp: /* @__PURE__ */ new Date()
35677
- });
35913
+ addItemWithRecording(
35914
+ { type: "info" /* INFO */, text: result.content },
35915
+ Date.now()
35916
+ );
35678
35917
  } else if (result.messageType === "warning") {
35679
- addMessage({
35680
- type: "warning" /* WARNING */,
35681
- content: result.content,
35682
- timestamp: /* @__PURE__ */ new Date()
35683
- });
35918
+ addItemWithRecording(
35919
+ { type: "warning" /* WARNING */, text: result.content },
35920
+ Date.now()
35921
+ );
35684
35922
  } else {
35685
- addMessage({
35686
- type: "error" /* ERROR */,
35687
- content: result.content,
35688
- timestamp: /* @__PURE__ */ new Date()
35689
- });
35923
+ addItemWithRecording(
35924
+ { type: "error" /* ERROR */, text: result.content },
35925
+ Date.now()
35926
+ );
35690
35927
  }
35691
35928
  return { type: "handled" };
35692
35929
  case "goal_control": {
@@ -35884,8 +36121,8 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35884
36121
  output.getAdditionalContext()
35885
36122
  );
35886
36123
  }
36124
+ invocationSentToModel = true;
35887
36125
  if (invocationItemId !== void 0) {
35888
- invocationSentToModel = true;
35889
36126
  debugLogger34.debug(
35890
36127
  `Marked slash command invocation as model-sent: /${resolvedCommandPath.join(
35891
36128
  " "
@@ -36024,7 +36261,8 @@ ${commandToExecute.subCommands.map((sc) => ` - ${sc.name}: ${sc.description ||
36024
36261
  chatRecorder?.recordSlashCommand({
36025
36262
  phase: "invocation",
36026
36263
  rawCommand: trimmed,
36027
- sentToModel: invocationSentToModel
36264
+ sentToModel: invocationSentToModel,
36265
+ hiddenInvocation: hideInvocation
36028
36266
  });
36029
36267
  const outputItems = recordedItems.filter((item) => item.type !== "user").map(serializeHistoryItemForRecording);
36030
36268
  chatRecorder?.recordSlashCommand({
@@ -36157,10 +36395,22 @@ function writeTerminalTitle(write, title) {
36157
36395
  }
36158
36396
  }
36159
36397
  __name(writeTerminalTitle, "writeTerminalTitle");
36160
- function formatSessionWindowTitle(sessionName, folderName) {
36161
- return sessionName ? sanitizeWindowTitle(sessionName) : computeWindowTitle(folderName);
36398
+ function formatSessionWindowTitle(sessionName, folderName, statusPrefix = "") {
36399
+ const base = sessionName ? sanitizeWindowTitle(sessionName) : computeWindowTitle(folderName);
36400
+ return sanitizeWindowTitle(statusPrefix + base);
36162
36401
  }
36163
36402
  __name(formatSessionWindowTitle, "formatSessionWindowTitle");
36403
+ function titleStatusPrefix(streamingState) {
36404
+ switch (streamingState) {
36405
+ case "responding" /* Responding */:
36406
+ return `${ICON.CIRCLE_LEFT_HALF} `;
36407
+ case "waiting_for_confirmation" /* WaitingForConfirmation */:
36408
+ return `${ICON.SPARKLE} `;
36409
+ default:
36410
+ return "";
36411
+ }
36412
+ }
36413
+ __name(titleStatusPrefix, "titleStatusPrefix");
36164
36414
 
36165
36415
  // packages/cli/src/ui/hooks/useLogger.ts
36166
36416
  init_esbuild_shims();
@@ -36802,7 +37052,7 @@ __name(mapToDisplay, "mapToDisplay");
36802
37052
  // packages/cli/src/ui/hooks/useGeminiStream.ts
36803
37053
  import { promises as fs17 } from "node:fs";
36804
37054
  import path12 from "node:path";
36805
- import process15 from "node:process";
37055
+ import process16 from "node:process";
36806
37056
 
36807
37057
  // packages/cli/src/ui/hooks/useMessageQueue.ts
36808
37058
  init_esbuild_shims();
@@ -40265,7 +40515,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40265
40515
  const summary = scheduler.getExitSummary();
40266
40516
  scheduler.stop();
40267
40517
  if (summary) {
40268
- process15.stderr.write(summary + "\n");
40518
+ process16.stderr.write(summary + "\n");
40269
40519
  }
40270
40520
  };
40271
40521
  }, [config, getAutonomousLoopTickResolver, isConfigInitialized]);
@@ -42476,7 +42726,7 @@ __name(useTerminalProgress, "useTerminalProgress");
42476
42726
  // packages/cli/src/ui/hooks/useFolderTrust.ts
42477
42727
  init_esbuild_shims();
42478
42728
  var import_react143 = __toESM(require_react(), 1);
42479
- import * as process16 from "node:process";
42729
+ import * as process17 from "node:process";
42480
42730
  var useFolderTrust = /* @__PURE__ */ __name((settings, onTrustChange) => {
42481
42731
  const [isTrusted, setIsTrusted] = (0, import_react143.useState)(void 0);
42482
42732
  const [isFolderTrustDialogOpen, setIsFolderTrustDialogOpen] = (0, import_react143.useState)(false);
@@ -42491,7 +42741,7 @@ var useFolderTrust = /* @__PURE__ */ __name((settings, onTrustChange) => {
42491
42741
  const handleFolderTrustSelect = (0, import_react143.useCallback)(
42492
42742
  (choice) => {
42493
42743
  const trustedFolders = loadTrustedFolders();
42494
- const cwd3 = process16.cwd();
42744
+ const cwd3 = process17.cwd();
42495
42745
  let trustLevel;
42496
42746
  const wasTrusted = isTrusted ?? true;
42497
42747
  switch (choice) {
@@ -44105,7 +44355,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44105
44355
  const { stdin, setRawMode } = use_stdin_default();
44106
44356
  const { stdout } = use_stdout_default();
44107
44357
  const writeRaw = (0, import_react162.useCallback)((data) => {
44108
- process17.stdout.write(data);
44358
+ process18.stdout.write(data);
44109
44359
  }, []);
44110
44360
  const terminal = (0, import_react162.useMemo)(
44111
44361
  () => buildTerminalNotification(writeRaw),
@@ -44456,7 +44706,8 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44456
44706
  settings,
44457
44707
  setThemeError,
44458
44708
  historyManager.addItem,
44459
- initializationResult.themeError
44709
+ initializationResult.themeError,
44710
+ config
44460
44711
  );
44461
44712
  const {
44462
44713
  isApprovalModeDialogOpen,
@@ -44494,7 +44745,12 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44494
44745
  openEditorDialog,
44495
44746
  handleEditorSelect,
44496
44747
  exitEditorDialog
44497
- } = useEditorSettings(settings, setEditorError, historyManager.addItem);
44748
+ } = useEditorSettings(
44749
+ settings,
44750
+ setEditorError,
44751
+ historyManager.addItem,
44752
+ config
44753
+ );
44498
44754
  const { isSettingsDialogOpen, openSettingsDialog, closeSettingsDialog } = useSettingsCommand();
44499
44755
  const [isStatusLineDialogOpen, setStatusLineDialogOpen] = (0, import_react162.useState)(false);
44500
44756
  const openStatusLineDialog = (0, import_react162.useCallback)(
@@ -44729,7 +44985,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44729
44985
  config.getGeminiClient()?.requestShutdown();
44730
44986
  setTimeout(async () => {
44731
44987
  await runExitCleanup();
44732
- process17.exit(0);
44988
+ process18.exit(0);
44733
44989
  }, 100);
44734
44990
  }, "quit"),
44735
44991
  setDebugMessage,
@@ -44913,7 +45169,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44913
45169
  );
44914
45170
  try {
44915
45171
  const { memoryContent, fileCount, conditionalRules, projectRoot } = await loadHierarchicalGeminiMemory(
44916
- process17.cwd(),
45172
+ process18.cwd(),
44917
45173
  settings.merged.context?.loadFromIncludeDirectories ? config.getWorkspaceContext().getDirectories() : [],
44918
45174
  config.getFileService(),
44919
45175
  config.getExtensionContextFilePaths(),
@@ -46469,20 +46725,25 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
46469
46725
  lastTitleRef.current = null;
46470
46726
  const folderName2 = basename3(config.getTargetDir());
46471
46727
  writeTerminalTitle(
46472
- (value) => process17.stdout.write(value),
46728
+ (value) => process18.stdout.write(value),
46473
46729
  formatSessionWindowTitle(null, folderName2)
46474
46730
  );
46475
46731
  }
46476
46732
  return;
46477
46733
  }
46478
46734
  const folderName = basename3(config.getTargetDir());
46479
- const title = formatSessionWindowTitle(sessionName, folderName);
46735
+ const title = formatSessionWindowTitle(
46736
+ sessionName,
46737
+ folderName,
46738
+ titleStatusPrefix(streamingState)
46739
+ );
46480
46740
  if (lastTitleRef.current !== title) {
46481
46741
  lastTitleRef.current = title;
46482
- writeTerminalTitle((value) => process17.stdout.write(value), title);
46742
+ writeTerminalTitle((value) => process18.stdout.write(value), title);
46483
46743
  }
46484
46744
  }, [
46485
46745
  sessionName,
46746
+ streamingState,
46486
46747
  settings.merged.ui?.hideWindowTitle,
46487
46748
  settings.merged.ui?.showStatusInTitle,
46488
46749
  config