@qwen-code/qwen-code 0.21.1-simplify-system-prompt.0 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/bundled/qc-helper/docs/configuration/model-providers.md +2 -0
  2. package/bundled/qc-helper/docs/configuration/settings.md +38 -28
  3. package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  4. package/bundled/qc-helper/docs/features/channels/github.md +107 -0
  5. package/bundled/qc-helper/docs/features/channels/overview.md +61 -6
  6. package/bundled/qc-helper/docs/features/code-review.md +1 -1
  7. package/bundled/qc-helper/docs/features/hooks.md +52 -15
  8. package/bundled/qc-helper/docs/features/mcp.md +9 -1
  9. package/bundled/qc-helper/docs/features/scheduled-tasks.md +3 -1
  10. package/bundled/qc-helper/docs/features/sub-agents.md +20 -0
  11. package/bundled/qc-helper/docs/qwen-serve.md +4 -2
  12. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +2 -2
  13. package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
  14. package/bundled/review/DESIGN.md +19 -0
  15. package/bundled/review/SKILL.md +120 -61
  16. package/chunks/MaxSizedBox-VI3ROJJA.js +84 -0
  17. package/chunks/{StandaloneSessionPicker-O6RKBPU4.js → StandaloneSessionPicker-LYXKD2EV.js} +66 -68
  18. package/chunks/{acp-startup-profiler-RV3IV562.js → acp-startup-profiler-DFVPFQ6C.js} +2 -2
  19. package/chunks/{acpAgent-HYFVXVDR.js → acpAgent-WN5SRDQO.js} +1317 -542
  20. package/chunks/agent-K6ECSM64.js +80 -0
  21. package/chunks/agent-headless-NO4Y2HOE.js +74 -0
  22. package/chunks/{anthropicContentGenerator-LXUXMOE7.js → anthropicContentGenerator-V2QOGVYD.js} +61 -20
  23. package/chunks/{artifact-tool-Y5T7GG7F.js → artifact-tool-6K6U7XYJ.js} +4 -4
  24. package/chunks/{askUserQuestion-2H6747FR.js → askUserQuestion-GD2IJJ7I.js} +4 -4
  25. package/chunks/bridge-3KJEWDNE.js +90 -0
  26. package/chunks/{build-RV63TIRH.js → build-S6DO7LMM.js} +1 -1
  27. package/chunks/{ca-25EDXPFZ.js → ca-6W3SK7OQ.js} +6 -1
  28. package/chunks/{channel-management-service-G74LFADV.js → channel-management-service-XR7GZSWF.js} +4 -4
  29. package/chunks/channel-settings-store-HW4FXXUA.js +87 -0
  30. package/chunks/{channel-worker-group-PTJIJSKC.js → channel-worker-group-XDPTDWTX.js} +9 -5
  31. package/chunks/{channel-worker-manager-WIMGM2FD.js → channel-worker-manager-YYEHVRRE.js} +9 -5
  32. package/chunks/{channel-worker-supervisor-KUFTR6P5.js → channel-worker-supervisor-74HTWA2G.js} +5 -4
  33. package/chunks/{chunk-M5JM7OSF.js → chunk-2DN4J57Y.js} +2 -3
  34. package/chunks/{chunk-WDSWXQU3.js → chunk-2FAK6PNM.js} +2 -2
  35. package/chunks/{chunk-BPJSQIJX.js → chunk-2J3OJGTL.js} +0 -2
  36. package/chunks/{chunk-EPDRMGT4.js → chunk-2LKVPASC.js} +4 -28
  37. package/chunks/{chunk-PWTZEM3C.js → chunk-2LQTH543.js} +3 -37
  38. package/chunks/{chunk-PANH4R3B.js → chunk-2N7CODY5.js} +18 -12
  39. package/chunks/{chunk-ER5LWJR6.js → chunk-2XSLTRFZ.js} +3 -3
  40. package/chunks/{chunk-6PSLCFQ2.js → chunk-3EFXSQCM.js} +18 -9
  41. package/chunks/{chunk-HIJQF5B5.js → chunk-3L2SPEBH.js} +1 -1
  42. package/chunks/{chunk-BIQWWWJN.js → chunk-4G2BISNC.js} +1 -1
  43. package/chunks/{chunk-B4UMZKMU.js → chunk-52ZSWYEG.js} +1 -1
  44. package/chunks/{chunk-YAF5VNU7.js → chunk-5KTQXHPY.js} +4 -5
  45. package/chunks/{chunk-2YZJCM5T.js → chunk-5MKRTI4T.js} +4 -4
  46. package/chunks/{chunk-DHHOYAPR.js → chunk-5TBMQLGG.js} +7 -7
  47. package/chunks/{chunk-A4UCTEB5.js → chunk-5WV5S2GT.js} +0 -1
  48. package/chunks/{chunk-FY3M44RD.js → chunk-5YKDXHUY.js} +3 -3
  49. package/chunks/{chunk-TF2X2WCT.js → chunk-5ZF5XXTS.js} +2 -2
  50. package/chunks/{chunk-K4XWPEWB.js → chunk-64LQLPL7.js} +4 -33
  51. package/chunks/{chunk-B7QDM6Z7.js → chunk-657BH7VM.js} +2 -2
  52. package/chunks/{chunk-5THCYPLO.js → chunk-65PQENQP.js} +14 -7
  53. package/chunks/{chunk-J6D3VXCC.js → chunk-6PE7N3A4.js} +17 -6
  54. package/chunks/{chunk-JZA3JUDJ.js → chunk-6QIGFD5W.js} +1 -1
  55. package/chunks/{chunk-Z5BLYMZM.js → chunk-6RPMI2AB.js} +6 -6
  56. package/chunks/{chunk-OHNBB4XR.js → chunk-75GFAX4R.js} +1 -1
  57. package/chunks/{chunk-BO4XCS7P.js → chunk-75MIQ3LV.js} +20 -85
  58. package/chunks/{chunk-52O2CIUL.js → chunk-7AEJDLRA.js} +130 -5
  59. package/chunks/{chunk-BYFNTGKI.js → chunk-7BAU433D.js} +2287 -941
  60. package/chunks/{chunk-ZE5WPL4I.js → chunk-7DXQIJID.js} +3 -3
  61. package/chunks/{chunk-ML52PL6O.js → chunk-7I5GTCT4.js} +483 -248
  62. package/chunks/{chunk-A5L3JMUA.js → chunk-7XATOOE7.js} +18 -4
  63. package/chunks/{chunk-C3NS4F2Q.js → chunk-A2D5BAVP.js} +1 -1
  64. package/chunks/{chunk-5I2IWRSH.js → chunk-A3NDJ5SB.js} +2 -2
  65. package/chunks/{chunk-2JM6GZ5D.js → chunk-A4COXFB3.js} +8 -13
  66. package/chunks/{chunk-CC4N4M36.js → chunk-AQIDMUGU.js} +1 -1
  67. package/chunks/{chunk-PJIZUQVC.js → chunk-AZQ3DT76.js} +2 -2
  68. package/chunks/{chunk-UH3WSE5L.js → chunk-B4AJNNOL.js} +1 -6
  69. package/chunks/{chunk-BJX6ZSUK.js → chunk-BCZFQXWK.js} +2 -2
  70. package/chunks/{chunk-SRZ6DXVG.js → chunk-BGTQCTQW.js} +44 -136
  71. package/chunks/{chunk-PSWQZHEA.js → chunk-BMFALVGQ.js} +1 -1
  72. package/chunks/{chunk-XHRTVPG2.js → chunk-BNWB5CYE.js} +7 -7
  73. package/chunks/{chunk-P5V4T7NK.js → chunk-BPZKP57P.js} +11 -3
  74. package/chunks/{chunk-2OM7GEXO.js → chunk-CAPPWD3X.js} +3 -3
  75. package/chunks/{chunk-LNURQEMZ.js → chunk-CQL64ESB.js} +7 -7
  76. package/chunks/{chunk-TOFQCPDC.js → chunk-CVHIL5IG.js} +4 -5
  77. package/chunks/{chunk-XVNQMZ2I.js → chunk-DGEIYUC3.js} +0 -1
  78. package/chunks/{chunk-BPZALHVR.js → chunk-DI35ZN7T.js} +1 -1
  79. package/chunks/{chunk-SQBYH7PX.js → chunk-DZLYR4U3.js} +1 -1
  80. package/chunks/{chunk-JALU3ZDU.js → chunk-EIF3FXTB.js} +117 -24
  81. package/chunks/{chunk-TQCBGUHN.js → chunk-EJGJIBRS.js} +5 -5
  82. package/chunks/{chunk-5U4IPFBR.js → chunk-EVKE2FZL.js} +4 -4
  83. package/chunks/{chunk-OKY7HXPG.js → chunk-FNMZK765.js} +2 -2
  84. package/chunks/{chunk-KU5XMLDK.js → chunk-FTD6DP4T.js} +3 -1
  85. package/chunks/chunk-FYJ7W2PI.js +194 -0
  86. package/chunks/{chunk-L5UHQJTJ.js → chunk-GATT5TKW.js} +1 -1
  87. package/chunks/{chunk-MVS3NS2N.js → chunk-GEBV2JGB.js} +28 -5
  88. package/chunks/{chunk-VAK25FTU.js → chunk-GKX7E4CO.js} +1 -1
  89. package/chunks/{chunk-LS77BEZP.js → chunk-GLCZKT5V.js} +1 -5
  90. package/chunks/{chunk-N3FAY5CM.js → chunk-GNR2RNMP.js} +157 -4
  91. package/chunks/{chunk-YH6G52F2.js → chunk-GXIJHV66.js} +4 -4
  92. package/chunks/{chunk-HV3G62R6.js → chunk-GZ3RCT54.js} +1 -1
  93. package/chunks/{chunk-QY5MMZ6O.js → chunk-HMRM2A3U.js} +3 -3
  94. package/chunks/chunk-HV26XH34.js +319 -0
  95. package/chunks/{chunk-M4UKFCZ2.js → chunk-J7OACQDE.js} +193 -155
  96. package/chunks/{chunk-3HBZKBMQ.js → chunk-JFMA7Y5M.js} +5 -5
  97. package/chunks/{chunk-OJGCZBB7.js → chunk-JHNRZMHI.js} +41 -36
  98. package/chunks/{chunk-63P4EL5V.js → chunk-JMONIXMJ.js} +1 -1
  99. package/chunks/{chunk-L26JL52R.js → chunk-JSD33JG6.js} +47 -64
  100. package/chunks/{chunk-KIUFNBHR.js → chunk-JTV5K7NH.js} +1 -1
  101. package/chunks/{chunk-PHVR5UUY.js → chunk-JX27F6QS.js} +1 -1
  102. package/chunks/chunk-JYBU6YUE.js +378 -0
  103. package/chunks/{chunk-A6UO2C7C.js → chunk-KAMYKP7E.js} +167 -81
  104. package/chunks/{chunk-LG4GZIVV.js → chunk-KCO4FLFJ.js} +4 -4
  105. package/chunks/{chunk-2W3OOD4W.js → chunk-L55JWS76.js} +6 -3
  106. package/chunks/{chunk-RHLZR4E5.js → chunk-LGAOC3ZS.js} +1 -1
  107. package/chunks/{chunk-DM22XS4K.js → chunk-LO4ROVP4.js} +261 -15
  108. package/chunks/{chunk-NH6KE4JX.js → chunk-LW3RFMG7.js} +3 -3
  109. package/chunks/{chunk-J56UI34H.js → chunk-M7OONWYU.js} +2 -2
  110. package/chunks/{chunk-V6VRAM7B.js → chunk-MHAIJPTD.js} +12 -12
  111. package/chunks/{chunk-FODK6UMO.js → chunk-MPHPFVKK.js} +0 -2
  112. package/chunks/{chunk-LZEMEFKY.js → chunk-MR5EAQ5M.js} +1 -1
  113. package/chunks/{chunk-JESCGQM3.js → chunk-NAVJD2PQ.js} +8 -7
  114. package/chunks/{chunk-H5FFA6TH.js → chunk-NOKIVHOL.js} +16 -3
  115. package/chunks/{chunk-6OUGMXDC.js → chunk-NWNEANAT.js} +7 -7
  116. package/chunks/{chunk-B6ZJ7SI6.js → chunk-OCESJA77.js} +391 -328
  117. package/chunks/chunk-OCPBI7J5.js +18 -0
  118. package/chunks/{chunk-E5TUC6CA.js → chunk-OKF7JF3R.js} +3 -3
  119. package/chunks/{chunk-2Q3OT4OV.js → chunk-P4WOAOJW.js} +141 -64
  120. package/chunks/{chunk-4M377AZG.js → chunk-PB3MBFKG.js} +6 -6
  121. package/chunks/{chunk-QPDRAXDJ.js → chunk-PLDQBIO6.js} +1 -1
  122. package/chunks/{chunk-FNQ6T3CV.js → chunk-PONHVBRT.js} +10 -7
  123. package/chunks/{chunk-RWS5VYWC.js → chunk-PT722TDT.js} +267 -378
  124. package/chunks/chunk-Q43KPN7X.js +2196 -0
  125. package/chunks/{chunk-VDDGDZMA.js → chunk-QHWCP53L.js} +14 -7
  126. package/chunks/{chunk-SASBXAQL.js → chunk-QIZKCVM3.js} +4 -4
  127. package/chunks/{chunk-32MVHM4T.js → chunk-RCUQIPTN.js} +1 -1
  128. package/chunks/{chunk-6FGBXPWM.js → chunk-RPLGZJV2.js} +38 -44
  129. package/chunks/{chunk-3IXOIAKE.js → chunk-S4WJVPZW.js} +18 -6
  130. package/chunks/{chunk-6AM5D4ME.js → chunk-S6LOFUVP.js} +0 -12
  131. package/chunks/{chunk-INADJJGW.js → chunk-S7W2GKIO.js} +0 -2
  132. package/chunks/{chunk-MUP3T3AD.js → chunk-SGFT55XI.js} +1 -35
  133. package/chunks/{chunk-VYPFXUCB.js → chunk-SZ3KHTDR.js} +1 -1
  134. package/chunks/chunk-T26EAKDL.js +13 -0
  135. package/chunks/{chunk-3MSHSCSN.js → chunk-T2QMKU3R.js} +79 -1
  136. package/chunks/{chunk-VFSJ5VRH.js → chunk-T3O2B4XO.js} +3 -3
  137. package/chunks/{chunk-MSLKI6C2.js → chunk-T4TXDL7G.js} +32 -21
  138. package/chunks/{chunk-E5WH5O3C.js → chunk-TBBV36Y4.js} +4 -4
  139. package/chunks/{chunk-VV6XU5L7.js → chunk-TCIFAA7K.js} +16 -11
  140. package/chunks/{chunk-DN6ZX5AY.js → chunk-TDL6LB4K.js} +46 -11
  141. package/chunks/{chunk-W4CQXHT6.js → chunk-TFRMVU6R.js} +1 -1
  142. package/chunks/{chunk-GDIPH4JY.js → chunk-TV64SXKD.js} +6 -6
  143. package/chunks/{chunk-FQK6JAFG.js → chunk-U3E3UQAA.js} +4 -4
  144. package/chunks/{chunk-7FZEBPKS.js → chunk-UBEPNVDI.js} +23 -18
  145. package/chunks/{chunk-NL7LTRLR.js → chunk-UHUSJ6X7.js} +29 -68
  146. package/chunks/{chunk-ZOIFNCKL.js → chunk-UPUG4GXM.js} +3 -23
  147. package/chunks/{chunk-6GMVPFB2.js → chunk-UWMLWVCA.js} +19 -6
  148. package/chunks/{chunk-U7TXFVUN.js → chunk-VCPIZRYH.js} +118 -95
  149. package/chunks/{chunk-LNARWLZQ.js → chunk-VWOOBLTY.js} +2 -2
  150. package/chunks/{chunk-I7XZ3RY5.js → chunk-VYOXCEPJ.js} +1 -1
  151. package/chunks/{chunk-USTWD7QV.js → chunk-W4MIWP6M.js} +26 -16
  152. package/chunks/{chunk-DLWL3Z7A.js → chunk-WBSMNTSV.js} +3 -3
  153. package/chunks/{chunk-G4WFQUYQ.js → chunk-WUZ7H6DP.js} +1 -1
  154. package/chunks/{chunk-2JZBVYTU.js → chunk-WZRWHXFE.js} +1 -8
  155. package/chunks/{chunk-DM4Q4JJH.js → chunk-X5WNMMIA.js} +22506 -33611
  156. package/chunks/{chunk-MK7VQDN3.js → chunk-XBYYDKAZ.js} +7 -6
  157. package/chunks/{chunk-COH43MRJ.js → chunk-XCGIMOLN.js} +27 -1
  158. package/chunks/{chunk-BRRAJXPA.js → chunk-XFZYFU3I.js} +1 -1
  159. package/chunks/{chunk-3QMGYBFN.js → chunk-XWWKIXVD.js} +1 -80
  160. package/chunks/{chunk-3SJ43L4W.js → chunk-XZC5VLBZ.js} +2 -0
  161. package/chunks/{chunk-UUUTRMI2.js → chunk-Y4IHBGBP.js} +1 -1
  162. package/chunks/{chunk-PR75REBZ.js → chunk-Y6AXW2OG.js} +12 -82
  163. package/chunks/{chunk-IPUUTYMV.js → chunk-YDLJGZHL.js} +1 -1
  164. package/chunks/{chunk-3JAQDSXN.js → chunk-YGF33UXG.js} +70 -8
  165. package/chunks/chunk-Z4X5MTRT.js +133 -0
  166. package/chunks/{chunk-UW5EOVUN.js → chunk-ZBVS26BY.js} +4 -4
  167. package/chunks/{chunk-ZD6UTE4A.js → chunk-ZHBO7WVX.js} +1 -1
  168. package/chunks/{chunk-HTO4JFDZ.js → chunk-ZPJWUGCS.js} +0 -1
  169. package/chunks/{chunk-66RMLJHC.js → chunk-ZURDMIDR.js} +355 -143
  170. package/chunks/{computer-use-DOFAHZAB.js → computer-use-ZTIDHMMA.js} +48 -50
  171. package/chunks/{config-utils-VFQXVGNR.js → config-utils-NYSXDMEQ.js} +4 -4
  172. package/chunks/contextCommand-2PIEU37Z.js +79 -0
  173. package/chunks/core-runtime-3XEYLQFK.js +133 -0
  174. package/chunks/{create-sub-session-7543K2QA.js → create-sub-session-R76FVXCI.js} +45 -47
  175. package/chunks/{create-sub-session-IWW2IZ2T.js → create-sub-session-SBYUMSSS.js} +3 -3
  176. package/chunks/{cron-create-YIID5XAW.js → cron-create-2QK6TCEC.js} +6 -6
  177. package/chunks/{cron-delete-ZVHYCEP2.js → cron-delete-FDCDFYMG.js} +5 -5
  178. package/chunks/{cron-list-XEGS463Q.js → cron-list-XN3WVBTP.js} +6 -6
  179. package/chunks/{daemon-VOMQW7KZ.js → daemon-Q2AB5Z23.js} +167 -15
  180. package/chunks/daemon-status-provider-3XJI6CAL.js +89 -0
  181. package/chunks/daemon-trust-policy-ILUDTLHD.js +84 -0
  182. package/chunks/daemon-trust-policy-monitor-HS3PKKRO.js +171 -0
  183. package/chunks/{de-HGRCYDEJ.js → de-SY6O76BF.js} +6 -1
  184. package/chunks/deferred-core-runtime-X4QV662U.js +88 -0
  185. package/chunks/dist-BSTVRPMT.js +4227 -0
  186. package/chunks/{dist-NNVBBOGU.js → dist-DOLYHMXE.js} +2 -2
  187. package/chunks/{dist-RTJFMNEZ.js → dist-HVRQ2CFL.js} +271 -11
  188. package/chunks/{dist-ANLAT3GS.js → dist-IXQEQWRG.js} +2 -1
  189. package/chunks/{dist-BRB6EXK4.js → dist-SSU66DM4.js} +3 -3
  190. package/chunks/{dist-KTYYJ2C5.js → dist-SV7Q3AWJ.js} +1 -1
  191. package/chunks/{dist-K6Y4E7FX.js → dist-YGBBMK3Z.js} +1 -1
  192. package/chunks/earlyInputCapture-XKLZT7ZD.js +81 -0
  193. package/chunks/{edit-RIEOJWKB.js → edit-HHGIOTQ2.js} +47 -49
  194. package/chunks/{en-MTWBNGDO.js → en-NBK3JKCE.js} +9 -1
  195. package/chunks/{enter-worktree-OGK5FQ3R.js → enter-worktree-ZN7PUQ46.js} +47 -49
  196. package/chunks/{enterPlanMode-IWZYALIB.js → enterPlanMode-EIFIDSIV.js} +47 -49
  197. package/chunks/{environment-VZ7BRI4Q.js → environment-XXQ75D2Q.js} +47 -49
  198. package/chunks/errors-4GMVU7CK.js +87 -0
  199. package/chunks/esm-K5FARBNI.js +5548 -0
  200. package/chunks/{exit-worktree-4TEYVIVP.js → exit-worktree-GXMI4ATY.js} +47 -49
  201. package/chunks/exitPlanMode-34UVY7M6.js +72 -0
  202. package/chunks/{fast-path-HYE7IFEV.js → fast-path-VPIVA7L6.js} +13 -3
  203. package/chunks/{fr-45RLL55O.js → fr-4KG5V7UT.js} +6 -1
  204. package/chunks/{gemini-NGRQX3YJ.js → gemini-4BWIK4WD.js} +103 -103
  205. package/chunks/{geminiContentGenerator-FQHPFZSR.js → geminiContentGenerator-3XVV5MSS.js} +7 -7
  206. package/chunks/{getMachineId-bsd-V7W3GODC.js → getMachineId-bsd-FG7IUY6U.js} +1 -1
  207. package/chunks/{getMachineId-darwin-TDO75DQP.js → getMachineId-darwin-GLCJI2RA.js} +1 -1
  208. package/chunks/{getMachineId-linux-TF43WQT2.js → getMachineId-linux-O6OPPAKO.js} +1 -1
  209. package/chunks/{getMachineId-unsupported-ZGUO3TXT.js → getMachineId-unsupported-S6CKYVGC.js} +1 -1
  210. package/chunks/{getMachineId-win-ECFYZZFQ.js → getMachineId-win-X5SRNEH7.js} +1 -1
  211. package/chunks/{glob-FRTM3X2E.js → glob-TZ2ABCJG.js} +47 -49
  212. package/chunks/{grep-RKWVROCW.js → grep-BEF463NA.js} +49 -50
  213. package/chunks/handleAutoUpdate-L6ERF36Y.js +80 -0
  214. package/chunks/i18n-FMM5FDXR.js +96 -0
  215. package/chunks/{image-gen-WIEM7KZA.js → image-gen-HHVLF7HS.js} +12 -12
  216. package/chunks/initializer-625TIAIO.js +85 -0
  217. package/chunks/installationInfo-6AM4I2Y3.js +79 -0
  218. package/chunks/{ja-B7DF7DFG.js → ja-F3GSQXMF.js} +6 -1
  219. package/chunks/{keychain-token-storage-MDTG3WRM.js → keychain-token-storage-72IYCAZV.js} +3 -3
  220. package/chunks/lib-RUF3WZA6.js +9 -0
  221. package/chunks/list-L2GA674Y.js +88 -0
  222. package/chunks/{list-agents-5KJJHR6I.js → list-agents-R6KDXQR3.js} +3 -3
  223. package/chunks/loadedSettingsAdapter-SPUTNKAV.js +82 -0
  224. package/chunks/{loggingContentGenerator-WGM27QAW.js → loggingContentGenerator-LKOF7XI7.js} +31 -30
  225. package/chunks/{loop-wakeup-FXKNNYSY.js → loop-wakeup-3IQKCYAH.js} +7 -7
  226. package/chunks/{ls-NTK6VOQJ.js → ls-DKZ37A7N.js} +5 -5
  227. package/chunks/{lsp-2JI24STP.js → lsp-QNWN7KN3.js} +3 -3
  228. package/chunks/{managed-npm-update-JQ2CG3RH.js → managed-npm-update-ACQGGIN5.js} +46 -48
  229. package/chunks/mcp-SZLHKFJW.js +82 -0
  230. package/chunks/{monitor-7FEWXX5F.js → monitor-DF52UVHI.js} +47 -49
  231. package/chunks/nonInteractiveCli-5T7KYKLK.js +144 -0
  232. package/chunks/{notebook-edit-JGJV2K6J.js → notebook-edit-FCWS4XVN.js} +47 -49
  233. package/chunks/{openaiContentGenerator-JPVXDTAO.js → openaiContentGenerator-7LDK3DCJ.js} +25 -27
  234. package/chunks/pidfile-6ERW3DF4.js +85 -0
  235. package/chunks/process-registry-2CHQBXH5.js +157 -0
  236. package/chunks/{processUtils-V2LCK6T6.js → processUtils-COKZAMUP.js} +2 -2
  237. package/chunks/{pt-22Q3FP73.js → pt-EQ33KWEN.js} +6 -1
  238. package/chunks/{qwenContentGenerator-TICV2W2Z.js → qwenContentGenerator-TKWUMR7N.js} +51 -53
  239. package/chunks/{qwenOAuth2-XGFI5XJG.js → qwenOAuth2-7HMU47SF.js} +10 -10
  240. package/chunks/read-file-X6DRC574.js +29 -0
  241. package/chunks/{read-mcp-resource-4DKQWGHD.js → read-mcp-resource-GFTWYXMK.js} +4 -4
  242. package/chunks/{record-artifact-RQKFYO5B.js → record-artifact-XAMSFSW4.js} +3 -3
  243. package/chunks/resumeHistoryUtils-PFPM2GWM.js +90 -0
  244. package/chunks/ripGrep-OWV2IVJC.js +72 -0
  245. package/chunks/{ru-FZCNZHDC.js → ru-7OZAUKGG.js} +6 -1
  246. package/chunks/{run-qwen-serve-3VCV4I7E.js → run-qwen-serve-TSTCO4XE.js} +917 -249
  247. package/chunks/{runtime-AXJWIEDU.js → runtime-DAUPSUKI.js} +55 -57
  248. package/chunks/{scheduler-RS2I6RU5.js → scheduler-KMADMT26.js} +45 -47
  249. package/chunks/{sdk-exporters-grpc-AK3LGHNO.js → sdk-exporters-grpc-54L4LS5L.js} +4 -4
  250. package/chunks/{sdk-exporters-http-FS6ZV7MF.js → sdk-exporters-http-WO556XNU.js} +7 -7
  251. package/chunks/{sdk-impl-7FZSCSXB.js → sdk-impl-LPAVACSF.js} +10 -10
  252. package/chunks/{send-message-Q6OOR6BR.js → send-message-SAWK4DZX.js} +6 -6
  253. package/chunks/serve-NNRWS6F4.js +88 -0
  254. package/chunks/{server-HRZ23U7M.js → server-WEH7DVCH.js} +3304 -842
  255. package/chunks/{session-7XHZKTVV.js → session-WXC56V2I.js} +94 -94
  256. package/chunks/{settings-7ZGZDXAS.js → settings-DJDXFDZ3.js} +54 -56
  257. package/chunks/shell-JN5VRQXD.js +82 -0
  258. package/chunks/{skill-LIWXNLDW.js → skill-SGXPKJCS.js} +20 -22
  259. package/chunks/skill-settings-VJ5PDMZI.js +90 -0
  260. package/chunks/spawnChannel-ETMJW7YX.js +81 -0
  261. package/chunks/standalone-update-MK3Z7KBI.js +91 -0
  262. package/chunks/{startInteractiveUI-IW3CSKHA.js → startInteractiveUI-ZCGIXPGT.js} +715 -373
  263. package/chunks/{syntheticOutput-I3757IWH.js → syntheticOutput-355CB6CJ.js} +4 -4
  264. package/chunks/{task-create-N7WQSGYA.js → task-create-INGWNUG4.js} +10 -10
  265. package/chunks/{task-list-FOPULZEP.js → task-list-5XNNGTF4.js} +7 -7
  266. package/chunks/{task-stop-H6RHXFVQ.js → task-stop-4ROAOBXH.js} +3 -3
  267. package/chunks/{task-update-M57TFZJT.js → task-update-CRK5VWWZ.js} +10 -10
  268. package/chunks/{team-create-O2FROQ4R.js → team-create-QQGAJG7P.js} +49 -51
  269. package/chunks/{team-delete-QE2UXJL7.js → team-delete-S2RCXA4P.js} +7 -7
  270. package/chunks/{team-plan-approval-Q6WDBXTQ.js → team-plan-approval-RT7Q5R6O.js} +47 -49
  271. package/chunks/theme-manager-EEWIQJ7J.js +76 -0
  272. package/chunks/{todoWrite-VQ7FKOHL.js → todoWrite-7WM3VDMY.js} +7 -7
  273. package/chunks/{tool-search-APECNQ3Z.js → tool-search-Z3Z4AYKP.js} +19 -21
  274. package/chunks/total-session-admission-44JKRWQD.js +84 -0
  275. package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
  276. package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
  277. package/chunks/trustedFolders-X2JEIO57.js +94 -0
  278. package/chunks/{update-relaunch-ON5MDJQG.js → update-relaunch-VWNPYDIP.js} +5 -5
  279. package/chunks/updateCheck-KAQH67DV.js +91 -0
  280. package/chunks/useAutoAcceptIndicator-JH6BCF7S.js +92 -0
  281. package/chunks/{validateNonInterActiveAuth-JBLKBKRD.js → validateNonInterActiveAuth-GIUJ2UFS.js} +88 -88
  282. package/chunks/{version-LTNUBQJY.js → version-BGLYIJUY.js} +1 -1
  283. package/chunks/{web-fetch-L5UTI53V.js → web-fetch-OTDU4VQF.js} +19 -21
  284. package/chunks/{web-search-KM33JOS3.js → web-search-FP6SIHPR.js} +13 -13
  285. package/chunks/{workflow-K7FAWV77.js → workflow-YCIVBYSB.js} +48 -50
  286. package/chunks/workspace-providers-status-S35YAIUS.js +85 -0
  287. package/chunks/{workspace-registration-store-6TGVDJV5.js → workspace-registration-store-OTMS3H4C.js} +1 -1
  288. package/chunks/workspace-registry-O63R6IZ4.js +92 -0
  289. package/chunks/workspace-service-M6LLHKJ5.js +99 -0
  290. package/chunks/workspace-skills-status-C2V7BAIS.js +85 -0
  291. package/chunks/workspace-trust-reconciler-IBUPOUJN.js +345 -0
  292. package/chunks/write-file-3BZC3EAE.js +72 -0
  293. package/chunks/xterm-headless-NTYVIBT3.js +3475 -0
  294. package/chunks/{zh-LUIGBD55.js → zh-H3YDK5QW.js} +9 -1
  295. package/chunks/{zh-TW-F5KG2IYD.js → zh-TW-JYCP7XUA.js} +9 -1
  296. package/chunks/zoom-image-TZ6S2O57.js +351 -0
  297. package/cli.js +13 -13
  298. package/locales/ca.js +7 -2
  299. package/locales/de.js +7 -2
  300. package/locales/en.js +10 -2
  301. package/locales/fr.js +7 -2
  302. package/locales/ja.js +7 -2
  303. package/locales/pt.js +7 -2
  304. package/locales/ru.js +7 -2
  305. package/locales/zh-TW.js +10 -2
  306. package/locales/zh.js +10 -2
  307. package/package.json +5 -4
  308. package/web-shell/assets/{arc-BbHijhiN.js → arc-75-Wdeo3.js} +1 -1
  309. package/web-shell/assets/{architectureDiagram-3BPJPVTR-Cb4B_JD0.js → architectureDiagram-3BPJPVTR-FKeXQbyP.js} +1 -1
  310. package/web-shell/assets/{blockDiagram-GPEHLZMM-Dsjlh3H-.js → blockDiagram-GPEHLZMM-CY0vc-A3.js} +1 -1
  311. package/web-shell/assets/{c4Diagram-AAUBKEIU-Cp5AeR4U.js → c4Diagram-AAUBKEIU-CNP-A-8u.js} +1 -1
  312. package/web-shell/assets/channel-DPYMT76A.js +1 -0
  313. package/web-shell/assets/{chunk-2J33WTMH-CLcY7W2e.js → chunk-2J33WTMH-GybS4Gii.js} +1 -1
  314. package/web-shell/assets/{chunk-4BX2VUAB-BUhvY2LR.js → chunk-4BX2VUAB-02H91V8v.js} +1 -1
  315. package/web-shell/assets/{chunk-55IACEB6-kDIFC_71.js → chunk-55IACEB6-D3M-2VT6.js} +1 -1
  316. package/web-shell/assets/{chunk-727SXJPM-CIBO15f2.js → chunk-727SXJPM-CCu29u4H.js} +1 -1
  317. package/web-shell/assets/{chunk-AQP2D5EJ-BJ_T_slV.js → chunk-AQP2D5EJ-CaFKWgrn.js} +1 -1
  318. package/web-shell/assets/{chunk-FMBD7UC4-BEkW35J8.js → chunk-FMBD7UC4-ZZpPqIwQ.js} +1 -1
  319. package/web-shell/assets/{chunk-ND2GUHAM-GGPxofay.js → chunk-ND2GUHAM-D22DqGs8.js} +1 -1
  320. package/web-shell/assets/{chunk-QZHKN3VN-Bifllrb6.js → chunk-QZHKN3VN-Bu85S0fw.js} +1 -1
  321. package/web-shell/assets/classDiagram-4FO5ZUOK--JstsIgL.js +1 -0
  322. package/web-shell/assets/classDiagram-v2-Q7XG4LA2--JstsIgL.js +1 -0
  323. package/web-shell/assets/{cose-bilkent-S5V4N54A-C-Add_Dp.js → cose-bilkent-S5V4N54A-f1CK1Gwe.js} +1 -1
  324. package/web-shell/assets/{dagre-BM42HDAG-B7MfwNq2.js → dagre-BM42HDAG-D0Ow8F_n.js} +1 -1
  325. package/web-shell/assets/{diagram-2AECGRRQ-CY_0zuDz.js → diagram-2AECGRRQ-BPrmTWp8.js} +1 -1
  326. package/web-shell/assets/{diagram-5GNKFQAL-VyYSbCgA.js → diagram-5GNKFQAL-HccuFAzy.js} +1 -1
  327. package/web-shell/assets/{diagram-KO2AKTUF-CBiIZ2PL.js → diagram-KO2AKTUF-BrS76mbA.js} +1 -1
  328. package/web-shell/assets/{diagram-LMA3HP47-BL3CrVOx.js → diagram-LMA3HP47-V7T9lU-5.js} +1 -1
  329. package/web-shell/assets/{diagram-OG6HWLK6-CZUPx96P.js → diagram-OG6HWLK6-DKidyJMR.js} +1 -1
  330. package/web-shell/assets/{erDiagram-TEJ5UH35-B81xHr1-.js → erDiagram-TEJ5UH35-DBadZIkp.js} +1 -1
  331. package/web-shell/assets/{flowDiagram-I6XJVG4X-EZWhir-J.js → flowDiagram-I6XJVG4X-BymfqdNJ.js} +1 -1
  332. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CVFSuIAg.js → ganttDiagram-6RSMTGT7-DOw340jf.js} +1 -1
  333. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-C1H2uQDv.js → gitGraphDiagram-PVQCEYII-_8EiD8sl.js} +1 -1
  334. package/web-shell/assets/{index-BYo99NBH.js → index-CKIadvET.js} +1 -1
  335. package/web-shell/assets/index-D1eXNRHe.js +1389 -0
  336. package/web-shell/assets/index-DVLD4CQq.css +5 -0
  337. package/web-shell/assets/{infoDiagram-5YYISTIA-BwyFMlF8.js → infoDiagram-5YYISTIA-D61KYQBu.js} +1 -1
  338. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CQ7Yhn2Y.js → ishikawaDiagram-YF4QCWOH-CsiXSpNx.js} +1 -1
  339. package/web-shell/assets/{journeyDiagram-JHISSGLW-CJn2sf0l.js → journeyDiagram-JHISSGLW-Sdfionyh.js} +1 -1
  340. package/web-shell/assets/{kanban-definition-UN3LZRKU-DaNRqwVN.js → kanban-definition-UN3LZRKU-C3WI3Cnl.js} +1 -1
  341. package/web-shell/assets/{linear-DCKODZe2.js → linear-Dpigcc62.js} +1 -1
  342. package/web-shell/assets/{mermaid.core-CTGJOk27.js → mermaid.core-Ct97pqgW.js} +5 -5
  343. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BKU3_3rg.js → mindmap-definition-RKZ34NQL-BzeaN0rB.js} +1 -1
  344. package/web-shell/assets/{pieDiagram-4H26LBE5-COcwBJ82.js → pieDiagram-4H26LBE5-CvjgcbVD.js} +1 -1
  345. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CQnQ443x.js → quadrantDiagram-W4KKPZXB-BUzgTNdH.js} +1 -1
  346. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CZ2oj5cD.js → requirementDiagram-4Y6WPE33-B7zKlgUQ.js} +1 -1
  347. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BxAv5mNu.js → sankeyDiagram-5OEKKPKP-Bb9CQgrT.js} +1 -1
  348. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CztaySPs.js → sequenceDiagram-3UESZ5HK-DJ6V7itG.js} +1 -1
  349. package/web-shell/assets/{stateDiagram-AJRCARHV-CTQT1oGD.js → stateDiagram-AJRCARHV-IImflERY.js} +1 -1
  350. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CYI_YoNR.js +1 -0
  351. package/web-shell/assets/{timeline-definition-PNZ67QCA-K9Mkex5A.js → timeline-definition-PNZ67QCA-6Q_uWHKh.js} +1 -1
  352. package/web-shell/assets/{vennDiagram-CIIHVFJN-B2rVIw76.js → vennDiagram-CIIHVFJN-TmyKyjwv.js} +1 -1
  353. package/web-shell/assets/{wardley-L42UT6IY-Z1w2JR4M.js → wardley-L42UT6IY-CRh9uiPv.js} +1 -1
  354. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CIX9aKXf.js → wardleyDiagram-YWT4CUSO-59TKAW8w.js} +1 -1
  355. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CI9DLIKB.js → xychartDiagram-2RQKCTM6-GCSUIK2L.js} +1 -1
  356. package/web-shell/index.html +2 -2
  357. package/chunks/MaxSizedBox-INHRH72H.js +0 -86
  358. package/chunks/agent-VXDAN5JK.js +0 -82
  359. package/chunks/agent-headless-K4ZMMNBD.js +0 -76
  360. package/chunks/bridge-LGPZCFHO.js +0 -91
  361. package/chunks/channel-settings-store-CHCDRTPY.js +0 -89
  362. package/chunks/chunk-SZRN75WQ.js +0 -29
  363. package/chunks/chunk-UGYMA4EI.js +0 -219
  364. package/chunks/chunk-VCBZUOSI.js +0 -8575
  365. package/chunks/contextCommand-QIZYHDR5.js +0 -81
  366. package/chunks/daemon-status-provider-OS5UWBHV.js +0 -90
  367. package/chunks/earlyInputCapture-WQT24RWD.js +0 -83
  368. package/chunks/errors-PCX25DVP.js +0 -89
  369. package/chunks/exitPlanMode-GHPUHBZJ.js +0 -423
  370. package/chunks/handleAutoUpdate-2CZQRJ66.js +0 -82
  371. package/chunks/i18n-XEQVMRKN.js +0 -98
  372. package/chunks/initializer-OVGZ4FLY.js +0 -87
  373. package/chunks/installationInfo-5UUQJI6Y.js +0 -81
  374. package/chunks/list-HODU6RXD.js +0 -90
  375. package/chunks/loadedSettingsAdapter-TYNLBALY.js +0 -84
  376. package/chunks/mcp-J3DFWX4A.js +0 -84
  377. package/chunks/nonInteractiveCli-F4GYSMHT.js +0 -144
  378. package/chunks/pidfile-4VNAR3EP.js +0 -87
  379. package/chunks/read-file-LZXUR4TO.js +0 -31
  380. package/chunks/resumeHistoryUtils-65OX3SGJ.js +0 -92
  381. package/chunks/ripGrep-2U2FRGMV.js +0 -74
  382. package/chunks/serve-W2GC47CM.js +0 -90
  383. package/chunks/shell-45IPBDP5.js +0 -84
  384. package/chunks/spawnChannel-PVXQ5AGV.js +0 -83
  385. package/chunks/src-AY65BYR7.js +0 -3166
  386. package/chunks/standalone-update-ZMFNKAEY.js +0 -93
  387. package/chunks/theme-manager-YYPZFBAH.js +0 -78
  388. package/chunks/total-session-admission-JXES723M.js +0 -85
  389. package/chunks/trustedFolders-HVI7IXUH.js +0 -94
  390. package/chunks/updateCheck-WUJGHWZZ.js +0 -93
  391. package/chunks/useAutoAcceptIndicator-CHSTZLZD.js +0 -94
  392. package/chunks/workspace-providers-status-GAKSF4LL.js +0 -87
  393. package/chunks/workspace-registry-A7NQUONG.js +0 -89
  394. package/chunks/workspace-service-STGVSO4N.js +0 -99
  395. package/chunks/workspace-skills-status-66AK3DUA.js +0 -86
  396. package/chunks/write-file-HUUCEG4P.js +0 -74
  397. package/web-shell/assets/channel-Bzdx6E8P.js +0 -1
  398. package/web-shell/assets/classDiagram-4FO5ZUOK-Cd6wbiuK.js +0 -1
  399. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cd6wbiuK.js +0 -1
  400. package/web-shell/assets/index-B2bXx96W.js +0 -1249
  401. package/web-shell/assets/index-_8mKjx8q.css +0 -5
  402. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BjMdT6E_.js +0 -1
  403. package/chunks/{chunk-TARRHLLG.js → chunk-QUGAUQGJ.js} +25 -25
  404. package/chunks/{chunk-U7ZFW55U.js → chunk-VOQXFAY5.js} +977 -977
  405. /package/chunks/{chunk-LXXMOYPL.js → chunk-VXZBKKQR.js} +0 -0
@@ -3,89 +3,16 @@
3
3
  import {
4
4
  buildPermissionSuggestions
5
5
  } from "./chunk-43T5WDQ7.js";
6
- import {
7
- startPostRenderPrefetches
8
- } from "./chunk-V6VRAM7B.js";
9
- import {
10
- stopAndGetCapturedInput
11
- } from "./chunk-63P4EL5V.js";
12
- import {
13
- useAutoAcceptIndicator
14
- } from "./chunk-QY5MMZ6O.js";
15
- import {
16
- classifyApiError
17
- } from "./chunk-V7RNNPGC.js";
18
6
  import {
19
7
  TUI_CHAT_RECORDING_FAILURE_MESSAGE,
20
8
  reportChatRecordingFailureToAdapter
21
- } from "./chunk-B7QDM6Z7.js";
22
- import {
23
- MAX_SUGGESTIONS_TO_SHOW,
24
- SESSION_MENTION_PREFIX,
25
- buildMcpResourceRef,
26
- buildMcpServerRef,
27
- buildSessionRef,
28
- getExtensionSuggestions,
29
- handleAtCommand,
30
- matchMcpServerPrefix,
31
- resolveAtCommandQuery,
32
- sanitizeDisplayText
33
- } from "./chunk-GDIPH4JY.js";
9
+ } from "./chunk-657BH7VM.js";
34
10
  import {
35
11
  StreamJsonOutputAdapter
36
- } from "./chunk-P5V4T7NK.js";
12
+ } from "./chunk-BPZKP57P.js";
37
13
  import {
38
- BuiltinCommandLoader,
39
- BundledSkillLoader,
40
- CommandService,
41
- DISPLAY_HOOK_EVENTS,
42
- FileCommandLoader,
43
- MAX_STACKED_SKILLS,
44
- McpPromptLoader,
45
- SavedWorkflowLoader,
46
- SkillCommandLoader,
47
- addConfigToMatcherGroup,
48
- appendUserPromptExpansionAdditionalContext,
49
- copyToClipboard,
50
- createEmptyHookEventInfo,
51
- dayKey,
52
- findMidInputSlashCommand,
53
- findSlashCommandTokens,
54
- formatApprovalModeDescription,
55
- formatApprovalModeName,
56
- formatUserPromptExpansionBlockedMessage,
57
- getAllConfigs,
58
- getBestSlashCommandMatch,
59
- getTranslatedSourceDisplayMap,
60
- hasBlockingBackgroundWork,
61
- hasSlashCommandPathSeparator,
62
- isAtCommand,
63
- isBtwCommand,
64
- isMidInputCompletableCommand,
65
- isSlashCommand,
66
- normalizePartList,
67
- parseDayKey,
68
- parseSlashCommand,
69
- parseStackedSlashCommands,
70
- refreshExtensionContentRuntime,
71
- resetBackgroundStateForSessionSwitch,
72
- serializeUserPromptExpansionPrompt,
73
- supportsMatchers
74
- } from "./chunk-M4UKFCZ2.js";
75
- import {
76
- EXTENSION_RELOAD_FAILED_REASON,
77
- ExtensionRefreshState,
78
- appEvents,
79
- cleanupReviewWorktreeLeases,
80
- loadHierarchicalGeminiMemory
81
- } from "./chunk-BYFNTGKI.js";
82
- import {
83
- disableKittyProtocol,
84
- isKittyProtocolEnabled,
85
- isKittyProtocolSupported,
86
- pushKittyProtocolFlags
87
- } from "./chunk-PQNHRFJC.js";
88
- import "./chunk-5THCYPLO.js";
14
+ startPostRenderPrefetches
15
+ } from "./chunk-MHAIJPTD.js";
89
16
  import {
90
17
  AboutBox,
91
18
  BaseSelectionList,
@@ -117,6 +44,7 @@ import {
117
44
  UIStateContext,
118
45
  USER_AGREEMENT_RATE_HIGH,
119
46
  USER_AGREEMENT_RATE_MEDIUM,
47
+ VirtualViewportContext,
120
48
  checkExhaustive,
121
49
  colorizeCode,
122
50
  countMarkdownSourceBlocks,
@@ -157,22 +85,111 @@ import {
157
85
  useTerminalSize,
158
86
  useTextBuffer,
159
87
  useUIActions,
160
- useUIState
161
- } from "./chunk-B6ZJ7SI6.js";
88
+ useUIState,
89
+ useVirtualViewport
90
+ } from "./chunk-OCESJA77.js";
91
+ import {
92
+ GeminiRespondingSpinner,
93
+ GeminiSpinner,
94
+ ICON,
95
+ SCREEN_READER_USER_PREFIX,
96
+ SHELL_COMMAND_NAME,
97
+ StreamingContext,
98
+ applyCollapsePolicyAndSummary,
99
+ buildResumedHistoryItems,
100
+ build_default,
101
+ expandCollapsedHistory,
102
+ isCollapsibleTool,
103
+ useStreamingContext
104
+ } from "./chunk-TDL6LB4K.js";
105
+ import {
106
+ stopAndGetCapturedInput
107
+ } from "./chunk-JMONIXMJ.js";
108
+ import {
109
+ useAutoAcceptIndicator
110
+ } from "./chunk-HMRM2A3U.js";
162
111
  import {
163
112
  KeypressProvider,
164
113
  useFocus,
165
114
  useKeypress,
166
115
  useKeypressContext
167
- } from "./chunk-LNURQEMZ.js";
116
+ } from "./chunk-CQL64ESB.js";
117
+ import {
118
+ classifyApiError
119
+ } from "./chunk-V7RNNPGC.js";
120
+ import {
121
+ MAX_SUGGESTIONS_TO_SHOW,
122
+ SESSION_MENTION_PREFIX,
123
+ buildMcpResourceRef,
124
+ buildMcpServerRef,
125
+ buildSessionRef,
126
+ getExtensionSuggestions,
127
+ handleAtCommand,
128
+ matchMcpServerPrefix,
129
+ resolveAtCommandQuery,
130
+ sanitizeDisplayText
131
+ } from "./chunk-TV64SXKD.js";
132
+ import {
133
+ BuiltinCommandLoader,
134
+ BundledSkillLoader,
135
+ CommandService,
136
+ DISPLAY_HOOK_EVENTS,
137
+ FileCommandLoader,
138
+ MAX_STACKED_SKILLS,
139
+ McpPromptLoader,
140
+ SavedWorkflowLoader,
141
+ SkillCommandLoader,
142
+ addConfigToMatcherGroup,
143
+ appendUserPromptExpansionAdditionalContext,
144
+ copyToClipboard,
145
+ createEmptyHookEventInfo,
146
+ dayKey,
147
+ findMidInputSlashCommand,
148
+ findSlashCommandTokens,
149
+ formatApprovalModeDescription,
150
+ formatApprovalModeName,
151
+ formatUserPromptExpansionBlockedMessage,
152
+ getAllConfigs,
153
+ getBestSlashCommandMatch,
154
+ getTranslatedSourceDisplayMap,
155
+ hasBlockingBackgroundWork,
156
+ hasSlashCommandPathSeparator,
157
+ isAtCommand,
158
+ isBtwCommand,
159
+ isMidInputCompletableCommand,
160
+ isSlashCommand,
161
+ isStackedSkillCompletableCommand,
162
+ isValidStackedSkillPrefix,
163
+ normalizePartList,
164
+ parseDayKey,
165
+ parseSlashCommand,
166
+ parseStackedSlashCommands,
167
+ refreshExtensionContentRuntime,
168
+ resetBackgroundStateForSessionSwitch,
169
+ serializeUserPromptExpansionPrompt,
170
+ supportsMatchers
171
+ } from "./chunk-J7OACQDE.js";
172
+ import {
173
+ EXTENSION_RELOAD_FAILED_REASON,
174
+ ExtensionRefreshState,
175
+ appEvents,
176
+ cleanupReviewWorktreeLeases,
177
+ loadHierarchicalGeminiMemory
178
+ } from "./chunk-7BAU433D.js";
168
179
  import {
169
180
  getCommandDisplayName,
170
181
  getCommandSourceBadge
171
- } from "./chunk-PHVR5UUY.js";
182
+ } from "./chunk-JX27F6QS.js";
172
183
  import {
173
184
  computeSessionStats,
174
185
  levelLabel
175
- } from "./chunk-52O2CIUL.js";
186
+ } from "./chunk-7AEJDLRA.js";
187
+ import {
188
+ disableKittyProtocol,
189
+ isKittyProtocolEnabled,
190
+ isKittyProtocolSupported,
191
+ pushKittyProtocolFlags
192
+ } from "./chunk-PQNHRFJC.js";
176
193
  import {
177
194
  BEL,
178
195
  OSC_PREFIX,
@@ -185,33 +202,27 @@ import {
185
202
  oscKittyNotify,
186
203
  saveClipboardImage,
187
204
  writeOsc52
188
- } from "./chunk-J56UI34H.js";
205
+ } from "./chunk-M7OONWYU.js";
206
+ import "./chunk-65PQENQP.js";
189
207
  import "./chunk-4WGODMVR.js";
208
+ import "./chunk-JFMA7Y5M.js";
209
+ import "./chunk-KW7NOTN6.js";
190
210
  import {
191
211
  MaxSizedBox,
192
212
  OverflowProvider,
193
213
  useOverflowState
194
- } from "./chunk-FQK6JAFG.js";
195
- import {
196
- GeminiRespondingSpinner,
197
- GeminiSpinner,
198
- ICON,
199
- SCREEN_READER_USER_PREFIX,
200
- SHELL_COMMAND_NAME,
201
- StreamingContext,
202
- applyCollapsePolicyAndSummary,
203
- buildResumedHistoryItems,
204
- build_default,
205
- expandCollapsedHistory,
206
- isCollapsibleTool,
207
- useStreamingContext
208
- } from "./chunk-DN6ZX5AY.js";
214
+ } from "./chunk-U3E3UQAA.js";
209
215
  import {
210
216
  theme
211
- } from "./chunk-VAK25FTU.js";
217
+ } from "./chunk-GKX7E4CO.js";
212
218
  import {
213
219
  require_jsx_runtime
214
220
  } from "./chunk-SV5PQVQE.js";
221
+ import {
222
+ AUTO_THEME_NAME,
223
+ DEFAULT_THEME,
224
+ themeManager
225
+ } from "./chunk-GATT5TKW.js";
215
226
  import {
216
227
  Box_default,
217
228
  Static,
@@ -225,42 +236,36 @@ import {
225
236
  use_is_screen_reader_enabled_default,
226
237
  use_stdin_default,
227
238
  use_stdout_default
228
- } from "./chunk-6GMVPFB2.js";
239
+ } from "./chunk-UWMLWVCA.js";
229
240
  import {
230
241
  require_react
231
242
  } from "./chunk-5QWWOFGG.js";
232
- import "./chunk-TQCBGUHN.js";
243
+ import "./chunk-EVKE2FZL.js";
244
+ import {
245
+ getErrorMessage as getErrorMessage2
246
+ } from "./chunk-T3O2B4XO.js";
247
+ import "./chunk-EJGJIBRS.js";
233
248
  import {
234
249
  relaunchApp
235
- } from "./chunk-C3NS4F2Q.js";
250
+ } from "./chunk-A2D5BAVP.js";
236
251
  import {
237
252
  setUpdateHandler
238
- } from "./chunk-4M377AZG.js";
239
- import "./chunk-ZE5WPL4I.js";
253
+ } from "./chunk-PB3MBFKG.js";
254
+ import "./chunk-7DXQIJID.js";
240
255
  import "./chunk-YAF2MQZ6.js";
241
- import "./chunk-3HBZKBMQ.js";
242
- import {
243
- AUTO_THEME_NAME,
244
- DEFAULT_THEME,
245
- themeManager
246
- } from "./chunk-L5UHQJTJ.js";
247
- import "./chunk-KW7NOTN6.js";
248
- import "./chunk-3IXOIAKE.js";
256
+ import "./chunk-S4WJVPZW.js";
249
257
  import "./chunk-6H67XLET.js";
250
- import "./chunk-5U4IPFBR.js";
251
- import {
252
- getErrorMessage as getErrorMessage2
253
- } from "./chunk-VFSJ5VRH.js";
254
258
  import {
255
259
  openQwenAsrRealtimeStream,
256
260
  openVoiceStream,
257
261
  openVoiceStreamWithRetry
258
- } from "./chunk-BJX6ZSUK.js";
262
+ } from "./chunk-BCZFQXWK.js";
259
263
  import {
260
264
  recordGoalStatusItem,
261
265
  restoreGoalFromHistory
262
- } from "./chunk-DM22XS4K.js";
263
- import "./chunk-RHLZR4E5.js";
266
+ } from "./chunk-LO4ROVP4.js";
267
+ import "./chunk-LGAOC3ZS.js";
268
+ import "./chunk-XFZYFU3I.js";
264
269
  import {
265
270
  cpLen,
266
271
  cpSlice,
@@ -272,8 +277,7 @@ import {
272
277
  sanitizeTerminalText,
273
278
  stripUnsafeCharacters,
274
279
  toCodePoints
275
- } from "./chunk-IPUUTYMV.js";
276
- import "./chunk-BRRAJXPA.js";
280
+ } from "./chunk-YDLJGZHL.js";
277
281
  import {
278
282
  stringWidth
279
283
  } from "./chunk-2MIN6GRR.js";
@@ -289,24 +293,18 @@ import {
289
293
  isStreamingVoiceModel,
290
294
  resolveVoiceStreamConfig,
291
295
  transcribeVoiceAudio
292
- } from "./chunk-2OM7GEXO.js";
296
+ } from "./chunk-CAPPWD3X.js";
293
297
  import {
294
298
  formatUnsupportedVoiceModelMessage,
295
299
  isSelectableVoiceModel
296
- } from "./chunk-KIUFNBHR.js";
297
- import "./chunk-ZD6UTE4A.js";
298
- import "./chunk-XHRTVPG2.js";
299
- import {
300
- requestConsentInteractive,
301
- requestConsentOrFail
302
- } from "./chunk-2YZJCM5T.js";
303
- import "./chunk-57OAHC2Y.js";
300
+ } from "./chunk-JTV5K7NH.js";
301
+ import "./chunk-ZHBO7WVX.js";
304
302
  import {
305
303
  createLoadedSettingsAdapter
306
- } from "./chunk-G4WFQUYQ.js";
304
+ } from "./chunk-WUZ7H6DP.js";
307
305
  import {
308
306
  getExtendedSystemInfo
309
- } from "./chunk-SASBXAQL.js";
307
+ } from "./chunk-QIZKCVM3.js";
310
308
  import {
311
309
  formatDuration,
312
310
  formatMemoryUsage,
@@ -314,29 +312,39 @@ import {
314
312
  formatTokenCount
315
313
  } from "./chunk-E5Z2AVNV.js";
316
314
  import "./chunk-GLWP3FDB.js";
317
- import "./chunk-COH43MRJ.js";
315
+ import "./chunk-XCGIMOLN.js";
318
316
  import {
319
317
  isInlineModelOverrideAllowed
320
- } from "./chunk-LG4GZIVV.js";
321
- import "./chunk-MVS3NS2N.js";
322
- import "./chunk-ER5LWJR6.js";
323
- import "./chunk-W4CQXHT6.js";
324
- import "./chunk-MK7VQDN3.js";
325
- import "./chunk-V6WHFGST.js";
318
+ } from "./chunk-KCO4FLFJ.js";
326
319
  import {
327
- loadMcpApprovals
328
- } from "./chunk-Z5BLYMZM.js";
329
- import "./chunk-DP3IHZGG.js";
330
- import "./chunk-LNARWLZQ.js";
320
+ computeWorkspaceSkillListUpdates,
321
+ resolveSkillSettings,
322
+ skillSettingStrings
323
+ } from "./chunk-Z4X5MTRT.js";
324
+ import "./chunk-BNWB5CYE.js";
325
+ import {
326
+ requestConsentInteractive,
327
+ requestConsentOrFail
328
+ } from "./chunk-5MKRTI4T.js";
329
+ import "./chunk-57OAHC2Y.js";
330
+ import "./chunk-2XSLTRFZ.js";
331
+ import "./chunk-TFRMVU6R.js";
332
+ import "./chunk-XBYYDKAZ.js";
333
+ import "./chunk-V6WHFGST.js";
331
334
  import "./chunk-2RFKHEXL.js";
335
+ import "./chunk-FYJ7W2PI.js";
332
336
  import "./chunk-U4VTUMMK.js";
333
- import "./chunk-HV3G62R6.js";
337
+ import "./chunk-GZ3RCT54.js";
334
338
  import "./chunk-ALMR3E6Q.js";
335
339
  import "./chunk-BK2UNYWD.js";
336
340
  import "./chunk-M5GB774H.js";
337
- import "./chunk-ML52PL6O.js";
341
+ import "./chunk-4G2BISNC.js";
342
+ import "./chunk-GEBV2JGB.js";
343
+ import "./chunk-7I5GTCT4.js";
338
344
  import "./chunk-UDXSXLER.js";
339
- import "./chunk-BIQWWWJN.js";
345
+ import {
346
+ loadMcpApprovals
347
+ } from "./chunk-6RPMI2AB.js";
340
348
  import {
341
349
  CORRUPTED_SUFFIX,
342
350
  SettingScope,
@@ -359,36 +367,39 @@ import {
359
367
  settingExistsInScope,
360
368
  validateSettingValue,
361
369
  writeOutputLanguageAndRegisterPath
362
- } from "./chunk-JALU3ZDU.js";
370
+ } from "./chunk-EIF3FXTB.js";
363
371
  import "./chunk-RKUWKYED.js";
364
- import "./chunk-GOXKNSDZ.js";
365
- import "./chunk-IDS7MSUP.js";
366
372
  import {
367
373
  getCurrentLanguage,
368
374
  localizeToolDisplayName,
369
375
  t,
370
376
  ta
371
- } from "./chunk-VV6XU5L7.js";
372
- import "./chunk-PANH4R3B.js";
377
+ } from "./chunk-TCIFAA7K.js";
378
+ import "./chunk-2N7CODY5.js";
379
+ import "./chunk-DP3IHZGG.js";
380
+ import "./chunk-VWOOBLTY.js";
381
+ import "./chunk-GOXKNSDZ.js";
382
+ import "./chunk-IDS7MSUP.js";
373
383
  import "./chunk-6PEXNQTX.js";
384
+ import "./chunk-XFSFZCM5.js";
374
385
  import "./chunk-URK542T4.js";
375
386
  import {
376
387
  getCliVersion
377
- } from "./chunk-I7XZ3RY5.js";
388
+ } from "./chunk-VYOXCEPJ.js";
378
389
  import "./chunk-VJNBRRZG.js";
379
390
  import {
380
391
  isWorkspaceTrusted,
381
392
  loadTrustedFolders
382
- } from "./chunk-VCBZUOSI.js";
393
+ } from "./chunk-Q43KPN7X.js";
383
394
  import {
384
395
  require_strip_json_comments
385
396
  } from "./chunk-ALGGS7UH.js";
386
397
  import "./chunk-MR3PXB6E.js";
387
398
  import {
388
399
  clearScreen,
389
- writeStderrLine
400
+ writeStderrLine,
401
+ writeStderrLineSafe
390
402
  } from "./chunk-OWAK7LMW.js";
391
- import "./chunk-XFSFZCM5.js";
392
403
  import {
393
404
  ALIBABA_PROVIDERS,
394
405
  AsyncFzf,
@@ -495,68 +506,68 @@ import {
495
506
  validateWorkflowName,
496
507
  watchRepoBranch,
497
508
  writeRuntimeStatus
498
- } from "./chunk-DM4Q4JJH.js";
499
- import "./chunk-5M6IDOMF.js";
509
+ } from "./chunk-X5WNMMIA.js";
500
510
  import "./chunk-TWPJO254.js";
501
511
  import "./chunk-H6XPXXMH.js";
502
- import "./chunk-K4XWPEWB.js";
503
- import "./chunk-TOFQCPDC.js";
504
- import "./chunk-IRH27ZC2.js";
505
- import "./chunk-VDDGDZMA.js";
506
- import "./chunk-FNQ6T3CV.js";
507
- import "./chunk-ZOIFNCKL.js";
508
- import "./chunk-PWTZEM3C.js";
512
+ import "./chunk-5M6IDOMF.js";
513
+ import "./chunk-UPUG4GXM.js";
514
+ import "./chunk-64LQLPL7.js";
515
+ import "./chunk-2LQTH543.js";
509
516
  import "./chunk-KRXPRVGL.js";
510
- import "./chunk-6PVPNMXU.js";
511
517
  import {
512
518
  resolveModelId
513
- } from "./chunk-PSWQZHEA.js";
514
- import "./chunk-SZRN75WQ.js";
515
- import "./chunk-HTO4JFDZ.js";
519
+ } from "./chunk-BMFALVGQ.js";
520
+ import "./chunk-CVHIL5IG.js";
521
+ import "./chunk-IRH27ZC2.js";
522
+ import "./chunk-QHWCP53L.js";
523
+ import "./chunk-PONHVBRT.js";
524
+ import "./chunk-T26EAKDL.js";
525
+ import "./chunk-6PVPNMXU.js";
516
526
  import "./chunk-CPBF7KYF.js";
527
+ import "./chunk-6QIGFD5W.js";
528
+ import {
529
+ HOOKS_CONFIG_FIELDS
530
+ } from "./chunk-XWWKIXVD.js";
531
+ import "./chunk-75GFAX4R.js";
532
+ import "./chunk-OKF7JF3R.js";
517
533
  import {
518
534
  APPROVAL_MODES,
519
535
  getStartupContextLength,
520
536
  isSystemReminderContent,
521
537
  runOutsideAgentContext
522
- } from "./chunk-L26JL52R.js";
523
- import "./chunk-6AM5D4ME.js";
524
- import "./chunk-JZA3JUDJ.js";
525
- import {
526
- HOOKS_CONFIG_FIELDS
527
- } from "./chunk-3QMGYBFN.js";
538
+ } from "./chunk-JSD33JG6.js";
539
+ import "./chunk-S6LOFUVP.js";
528
540
  import "./chunk-JCW2R7WC.js";
529
541
  import {
530
542
  isPathWithinRoot
531
- } from "./chunk-M5JM7OSF.js";
532
- import "./chunk-OHNBB4XR.js";
533
- import "./chunk-E5TUC6CA.js";
543
+ } from "./chunk-2DN4J57Y.js";
544
+ import "./chunk-ZPJWUGCS.js";
534
545
  import {
535
546
  osc8Hyperlink,
536
547
  qwenOAuth2Events,
537
548
  sanitizeForOsc,
538
549
  supportsHyperlinks,
539
550
  wrapForMultiplexer
540
- } from "./chunk-EPDRMGT4.js";
541
- import "./chunk-JESCGQM3.js";
542
- import "./chunk-NH6KE4JX.js";
543
- import "./chunk-USTWD7QV.js";
551
+ } from "./chunk-2LKVPASC.js";
552
+ import "./chunk-NAVJD2PQ.js";
553
+ import "./chunk-LW3RFMG7.js";
554
+ import "./chunk-W4MIWP6M.js";
544
555
  import {
545
556
  REASONING_EFFORT_TIERS
546
- } from "./chunk-XVNQMZ2I.js";
557
+ } from "./chunk-DGEIYUC3.js";
547
558
  import {
548
559
  getUnsupportedImageFormatWarning,
549
560
  isSupportedImageMimeType
550
- } from "./chunk-FODK6UMO.js";
561
+ } from "./chunk-MPHPFVKK.js";
551
562
  import "./chunk-GLNBDYUX.js";
552
563
  import "./chunk-DJ2GSRLV.js";
553
- import "./chunk-YAF5VNU7.js";
554
- import "./chunk-BO4XCS7P.js";
555
- import "./chunk-BPJSQIJX.js";
564
+ import "./chunk-5KTQXHPY.js";
565
+ import "./chunk-75MIQ3LV.js";
566
+ import "./chunk-2J3OJGTL.js";
556
567
  import "./chunk-P3QQPMQA.js";
557
- import "./chunk-6FGBXPWM.js";
558
- import "./chunk-LS77BEZP.js";
559
- import "./chunk-SQBYH7PX.js";
568
+ import "./chunk-RPLGZJV2.js";
569
+ import "./chunk-GLCZKT5V.js";
570
+ import "./chunk-DZLYR4U3.js";
560
571
  import {
561
572
  ApiCancelEvent,
562
573
  AuthEvent,
@@ -597,7 +608,7 @@ import {
597
608
  runVisionBridge,
598
609
  shouldRunVisionBridge,
599
610
  splitImageParts
600
- } from "./chunk-RWS5VYWC.js";
611
+ } from "./chunk-PT722TDT.js";
601
612
  import "./chunk-VGC4I5JJ.js";
602
613
  import {
603
614
  AUTO_MEMORY_INDEX_FILENAME,
@@ -605,30 +616,27 @@ import {
605
616
  getAutoMemoryRoot,
606
617
  getUserAutoMemoryRoot,
607
618
  isAnyAutoMemPath
608
- } from "./chunk-MUP3T3AD.js";
619
+ } from "./chunk-SGFT55XI.js";
620
+ import "./chunk-Y4IHBGBP.js";
621
+ import {
622
+ ToolNames,
623
+ isShellProgressData
624
+ } from "./chunk-Y6AXW2OG.js";
609
625
  import {
610
626
  MAINLINE_CODER_MODEL
611
- } from "./chunk-U7TXFVUN.js";
627
+ } from "./chunk-VCPIZRYH.js";
612
628
  import "./chunk-46UV252V.js";
613
- import "./chunk-A4UCTEB5.js";
614
- import "./chunk-XWRJCPHC.js";
615
629
  import {
616
630
  DEFAULT_TOKEN_LIMIT
617
- } from "./chunk-UW5EOVUN.js";
618
- import "./chunk-2JZBVYTU.js";
619
- import "./chunk-5I2IWRSH.js";
631
+ } from "./chunk-ZBVS26BY.js";
632
+ import "./chunk-WZRWHXFE.js";
633
+ import "./chunk-A3NDJ5SB.js";
620
634
  import {
621
635
  atomicWriteFileSync
622
- } from "./chunk-A5L3JMUA.js";
623
- import "./chunk-SRZ6DXVG.js";
636
+ } from "./chunk-7XATOOE7.js";
637
+ import "./chunk-BGTQCTQW.js";
624
638
  import "./chunk-W4RQUHY3.js";
625
- import "./chunk-INADJJGW.js";
626
- import "./chunk-U7ZFW55U.js";
627
- import "./chunk-UUUTRMI2.js";
628
- import {
629
- ToolNames,
630
- isShellProgressData
631
- } from "./chunk-PR75REBZ.js";
639
+ import "./chunk-S7W2GKIO.js";
632
640
  import {
633
641
  Storage,
634
642
  UnauthorizedError,
@@ -640,17 +648,18 @@ import {
640
648
  isNodeError,
641
649
  shortenPath,
642
650
  tildeifyPath
643
- } from "./chunk-NL7LTRLR.js";
644
- import "./chunk-32MVHM4T.js";
651
+ } from "./chunk-UHUSJ6X7.js";
652
+ import "./chunk-VOQXFAY5.js";
653
+ import "./chunk-RCUQIPTN.js";
654
+ import {
655
+ registerCleanup,
656
+ runExitCleanup
657
+ } from "./chunk-52ZSWYEG.js";
645
658
  import {
646
659
  finalizeStartupProfile,
647
660
  profileCheckpoint
648
661
  } from "./chunk-QSWDGAIC.js";
649
662
  import "./chunk-Q7YDKOGY.js";
650
- import {
651
- registerCleanup,
652
- runExitCleanup
653
- } from "./chunk-B4UMZKMU.js";
654
663
  import "./chunk-75DOP5OR.js";
655
664
  import "./chunk-DMTGGOSA.js";
656
665
  import "./chunk-YQ3U5MUC.js";
@@ -660,7 +669,7 @@ import {
660
669
  import "./chunk-TYAMGABM.js";
661
670
  import "./chunk-FCMNKVXT.js";
662
671
  import "./chunk-AMDSOFFV.js";
663
- import "./chunk-TARRHLLG.js";
672
+ import "./chunk-QUGAUQGJ.js";
664
673
  import {
665
674
  init_esbuild_shims
666
675
  } from "./chunk-5O2XNYP6.js";
@@ -5236,6 +5245,11 @@ var SessionTab = /* @__PURE__ */ __name(() => {
5236
5245
  totalCached += m.tokens.cached;
5237
5246
  }
5238
5247
  const cacheRate = totalInput > 0 ? totalCached / totalInput * 100 : 0;
5248
+ const generation = metrics.generation;
5249
+ const lastGeneration = generation?.last;
5250
+ const lastTps = lastGeneration && lastGeneration.generationDurationMs > 0 ? lastGeneration.outputTokens / (lastGeneration.generationDurationMs / 1e3) : void 0;
5251
+ const averageTtft = generation && generation.timedRequests > 0 ? generation.totalTtftMs / generation.timedRequests : void 0;
5252
+ const sessionTps = generation && generation.totalGenerationDurationMs > 0 ? generation.totalThroughputOutputTokens / (generation.totalGenerationDurationMs / 1e3) : void 0;
5239
5253
  const successColor = getStatusColor(computed.successRate, {
5240
5254
  green: TOOL_SUCCESS_RATE_HIGH,
5241
5255
  yellow: TOOL_SUCCESS_RATE_MEDIUM
@@ -5347,6 +5361,67 @@ var SessionTab = /* @__PURE__ */ __name(() => {
5347
5361
  ] })
5348
5362
  ] })
5349
5363
  ] }),
5364
+ lastGeneration && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
5365
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { bold: true, color: theme.text.primary, children: [
5366
+ t("Generation Metrics"),
5367
+ " (",
5368
+ t("Latest Request"),
5369
+ ")"
5370
+ ] }),
5371
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5372
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: labelWidth, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.secondary, children: [
5373
+ t("Model"),
5374
+ ":"
5375
+ ] }) }),
5376
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: lastGeneration.model })
5377
+ ] }),
5378
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5379
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: labelWidth, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.secondary, children: "TTFT:" }) }),
5380
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: formatDuration(lastGeneration.ttftMs) })
5381
+ ] }),
5382
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5383
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: labelWidth, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.secondary, children: [
5384
+ t("Generation Time"),
5385
+ ":"
5386
+ ] }) }),
5387
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: formatDuration(lastGeneration.generationDurationMs) })
5388
+ ] }),
5389
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5390
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: labelWidth, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.secondary, children: [
5391
+ t("Output Tokens"),
5392
+ ":"
5393
+ ] }) }),
5394
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: lastGeneration.outputTokens.toLocaleString() })
5395
+ ] }),
5396
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
5397
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: labelWidth, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.secondary, children: "TPS:" }) }),
5398
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: lastTps === void 0 ? "\u2014" : `${lastTps.toFixed(1)} tok/s` })
5399
+ ] }),
5400
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { paddingLeft: 2, children: [
5401
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: 26, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.secondary, children: [
5402
+ "\xBB ",
5403
+ t("Requests"),
5404
+ ":"
5405
+ ] }) }),
5406
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: generation.timedRequests })
5407
+ ] }),
5408
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { paddingLeft: 2, children: [
5409
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: 26, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.secondary, children: [
5410
+ "\xBB ",
5411
+ t("Average TTFT"),
5412
+ ":"
5413
+ ] }) }),
5414
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: averageTtft === void 0 ? "\u2014" : formatDuration(averageTtft) })
5415
+ ] }),
5416
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { paddingLeft: 2, children: [
5417
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Box_default, { width: 26, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Text, { color: theme.text.secondary, children: [
5418
+ "\xBB ",
5419
+ t("Session TPS"),
5420
+ ":"
5421
+ ] }) }),
5422
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: theme.text.primary, children: sessionTps === void 0 ? "\u2014" : `${sessionTps.toFixed(1)} tok/s` })
5423
+ ] })
5424
+ ] }),
5350
5425
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
5351
5426
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { bold: true, color: theme.text.primary, children: t("Tokens") }),
5352
5427
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Box_default, { children: [
@@ -9924,19 +9999,43 @@ var useTrustModify = /* @__PURE__ */ __name((onExit, addItem) => {
9924
9999
  setPendingTrustLevel(trustLevel);
9925
10000
  setNeedsRestart(true);
9926
10001
  } else {
10002
+ setPendingTrustLevel(void 0);
10003
+ setNeedsRestart(false);
9927
10004
  const folders = loadTrustedFolders();
9928
- folders.setValue(cwd3, trustLevel);
10005
+ try {
10006
+ folders.setValue(cwd3, trustLevel);
10007
+ } catch (error) {
10008
+ addItem(
10009
+ {
10010
+ type: "error" /* ERROR */,
10011
+ text: `Could not update workspace trust: ${error instanceof Error ? error.message : String(error)}`
10012
+ },
10013
+ Date.now()
10014
+ );
10015
+ return;
10016
+ }
9929
10017
  onExit();
9930
10018
  }
9931
10019
  },
9932
10020
  [cwd3, settings.merged, onExit, addItem]
9933
10021
  );
9934
10022
  const commitTrustLevelChange = (0, import_react32.useCallback)(() => {
9935
- if (pendingTrustLevel) {
9936
- const folders = loadTrustedFolders();
10023
+ if (!pendingTrustLevel) return false;
10024
+ const folders = loadTrustedFolders();
10025
+ try {
9937
10026
  folders.setValue(cwd3, pendingTrustLevel);
10027
+ return true;
10028
+ } catch (error) {
10029
+ addItem(
10030
+ {
10031
+ type: "error" /* ERROR */,
10032
+ text: `Could not update workspace trust: ${error instanceof Error ? error.message : String(error)}`
10033
+ },
10034
+ Date.now()
10035
+ );
10036
+ return false;
9938
10037
  }
9939
- }, [cwd3, pendingTrustLevel]);
10038
+ }, [addItem, cwd3, pendingTrustLevel]);
9940
10039
  return {
9941
10040
  cwd: cwd3,
9942
10041
  currentTrustLevel,
@@ -9987,9 +10086,10 @@ function TrustDialog({
9987
10086
  onExit();
9988
10087
  }
9989
10088
  if (needsRestart && key.name === "r") {
9990
- commitTrustLevelChange();
9991
- relaunchApp();
9992
- onExit();
10089
+ if (commitTrustLevelChange()) {
10090
+ relaunchApp();
10091
+ onExit();
10092
+ }
9993
10093
  }
9994
10094
  },
9995
10095
  { isActive: true }
@@ -14663,8 +14763,8 @@ function SkillsManagerDialog({
14663
14763
  const [loadError, setLoadError] = (0, import_react52.useState)(null);
14664
14764
  const [query, setQuery] = (0, import_react52.useState)("");
14665
14765
  const [activeValue, setActiveValue] = (0, import_react52.useState)(null);
14666
- const initialWorkspaceDisabled = (0, import_react52.useMemo)(
14667
- () => new Set(normalizeNames(namesFromScope(settings, "Workspace" /* Workspace */))),
14766
+ const initialResolved = (0, import_react52.useMemo)(
14767
+ () => resolveSkillSettings(settings),
14668
14768
  [settings]
14669
14769
  );
14670
14770
  const higher = (0, import_react52.useMemo)(() => buildHigherDisabled(settings), [settings]);
@@ -14701,12 +14801,19 @@ function SkillsManagerDialog({
14701
14801
  () => allSkills.filter((s) => !higher.set.has(lower(s.name))),
14702
14802
  [allSkills, higher.set]
14703
14803
  );
14804
+ const initialSelectedKeys = (0, import_react52.useMemo)(
14805
+ () => new Set(
14806
+ unlockedSkills.filter(
14807
+ (skill) => !initialResolved.disabledNames.has(lower(skill.name))
14808
+ ).map((skill) => skill.name)
14809
+ ),
14810
+ [initialResolved, unlockedSkills]
14811
+ );
14704
14812
  const [selectedKeys, setSelectedKeys] = (0, import_react52.useState)(null);
14705
14813
  (0, import_react52.useEffect)(() => {
14706
14814
  if (selectedKeys !== null || unlockedSkills.length === 0) return;
14707
- const initial = unlockedSkills.filter((s) => !initialWorkspaceDisabled.has(lower(s.name))).map((s) => s.name);
14708
- setSelectedKeys(initial);
14709
- }, [unlockedSkills, initialWorkspaceDisabled, selectedKeys]);
14815
+ setSelectedKeys([...initialSelectedKeys]);
14816
+ }, [unlockedSkills, initialSelectedKeys, selectedKeys]);
14710
14817
  const filteredUnlocked = (0, import_react52.useMemo)(() => {
14711
14818
  const normalizedQuery = query.trim().toLowerCase();
14712
14819
  if (!normalizedQuery) return unlockedSkills;
@@ -14761,33 +14868,40 @@ function SkillsManagerDialog({
14761
14868
  return "untrusted";
14762
14869
  }
14763
14870
  const selected = new Set(selectedKeys ?? []);
14764
- const previousWorkspace = namesFromScope(settings, "Workspace" /* Workspace */);
14765
- const previousStrings = previousWorkspace.filter(
14766
- (n) => typeof n === "string"
14871
+ const workspaceDisabled = namesFromScope(
14872
+ settings,
14873
+ "Workspace" /* Workspace */
14874
+ ).filter((name) => typeof name === "string");
14875
+ const lockedNames = new Set(lockedSkills.map((skill) => lower(skill.name)));
14876
+ const { disabled, enabled, disabledChanged, enabledChanged } = computeWorkspaceSkillListUpdates(
14877
+ workspaceDisabled,
14878
+ lockedNames,
14879
+ skillSettingStrings(settings, "Workspace" /* Workspace */, "enabled"),
14880
+ unlockedSkills.map((skill) => ({
14881
+ name: skill.name,
14882
+ wasEnabled: initialSelectedKeys.has(skill.name),
14883
+ isEnabled: selected.has(skill.name),
14884
+ defaultDisabled: initialResolved.defaultDisabledNames.has(lower(skill.name)) && !initialResolved.enabledNames.has(lower(skill.name))
14885
+ }))
14767
14886
  );
14768
- const previousMap = new Map(previousStrings.map((n) => [lower(n), n]));
14769
- const nextDisabled = [];
14770
- const allKnownLower = new Set(allSkills.map((s) => lower(s.name)));
14771
- for (const prev of previousStrings) {
14772
- if (!allKnownLower.has(lower(prev))) {
14773
- nextDisabled.push(prev);
14774
- }
14775
- }
14776
- for (const s of unlockedSkills) {
14777
- if (selected.has(s.name)) continue;
14778
- const existing = previousMap.get(lower(s.name));
14779
- nextDisabled.push(existing ?? s.name);
14780
- }
14781
- const prevNormalized = normalizeNames(previousWorkspace).sort();
14782
- const nextNormalized = normalizeNames(nextDisabled).sort();
14783
- const unchanged = prevNormalized.length === nextNormalized.length && prevNormalized.every((n, i) => n === nextNormalized[i]);
14784
- if (unchanged) return "ok";
14887
+ if (!disabledChanged && !enabledChanged) return "ok";
14785
14888
  try {
14786
- settings.setValue(
14787
- "Workspace" /* Workspace */,
14788
- "skills.disabled",
14789
- nextDisabled.length > 0 ? nextDisabled : void 0
14790
- );
14889
+ settings.setValues([
14890
+ ...disabledChanged ? [
14891
+ {
14892
+ scope: "Workspace" /* Workspace */,
14893
+ key: "skills.disabled",
14894
+ value: disabled.length > 0 ? disabled : void 0
14895
+ }
14896
+ ] : [],
14897
+ ...enabledChanged ? [
14898
+ {
14899
+ scope: "Workspace" /* Workspace */,
14900
+ key: "skills.enabled",
14901
+ value: enabled.length > 0 ? enabled : void 0
14902
+ }
14903
+ ] : []
14904
+ ]);
14791
14905
  } catch (e) {
14792
14906
  addItem(
14793
14907
  {
@@ -14822,7 +14936,9 @@ function SkillsManagerDialog({
14822
14936
  return "ok";
14823
14937
  }, [
14824
14938
  addItem,
14825
- allSkills,
14939
+ initialResolved,
14940
+ initialSelectedKeys,
14941
+ lockedSkills,
14826
14942
  reloadCommands,
14827
14943
  selectedKeys,
14828
14944
  settings,
@@ -26373,7 +26489,7 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26373
26489
  query,
26374
26490
  completionStart,
26375
26491
  completionEnd,
26376
- isMidInputSlashCompletion
26492
+ slashCompletionContext
26377
26493
  } = (0, import_react88.useMemo)(() => {
26378
26494
  const currentLine = buffer.lines[cursorRow] || "";
26379
26495
  const codePoints = toCodePoints(currentLine);
@@ -26408,49 +26524,61 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26408
26524
  query: partialPath,
26409
26525
  completionStart: pathStart,
26410
26526
  completionEnd: end,
26411
- isMidInputSlashCompletion: false
26527
+ slashCompletionContext: null
26412
26528
  };
26413
26529
  }
26414
26530
  }
26415
- if (cursorRow === 0 && isSlashCommand(currentLine.trim())) {
26416
- return {
26417
- completionMode: "SLASH" /* SLASH */,
26418
- query: currentLine,
26419
- completionStart: 0,
26420
- completionEnd: currentLine.length,
26421
- isMidInputSlashCompletion: false
26422
- };
26423
- }
26424
26531
  const cursorOffset = logicalPosToOffset(buffer.lines, cursorRow, cursorCol);
26425
26532
  const midCmd = findMidInputSlashCommand(buffer.text, cursorOffset);
26426
- if (midCmd && !isExactMidInputModelInvocableCommand(
26427
- midCmd.partialCommand,
26428
- slashCommands
26429
- )) {
26533
+ if (midCmd) {
26430
26534
  const lineStartOffset = logicalPosToOffset(buffer.lines, cursorRow, 0);
26431
26535
  const startOnLine = midCmd.startPos - lineStartOffset;
26432
- if (startOnLine >= 0) {
26536
+ const isInitialCommandOnFirstLine = cursorRow === 0 && isSlashCommand(currentLine.trim()) && startOnLine >= 0 && codePoints.slice(0, startOnLine).join("").trim().length === 0;
26537
+ const inputCodePoints = toCodePoints(buffer.text);
26538
+ const prefix = inputCodePoints.slice(0, midCmd.startPos).join("");
26539
+ const isStackedSkill = !isInitialCommandOnFirstLine && isValidStackedSkillPrefix(prefix, slashCommands);
26540
+ const isSlashLedInput = isSlashCommand(prefix.trimStart());
26541
+ const isRegularMidInput = !isInitialCommandOnFirstLine && !isSlashLedInput;
26542
+ if (startOnLine >= 0 && (isStackedSkill || isRegularMidInput && !isExactMidInputModelInvocableCommand(
26543
+ midCmd.partialCommand,
26544
+ slashCommands
26545
+ ))) {
26433
26546
  return {
26434
26547
  completionMode: "SLASH" /* SLASH */,
26435
26548
  query: midCmd.token,
26436
26549
  completionStart: startOnLine,
26437
26550
  completionEnd: startOnLine + midCmd.token.length,
26438
- isMidInputSlashCompletion: true
26551
+ slashCompletionContext: isStackedSkill ? "stacked-skill" /* STACKED_SKILL */ : "mid-input" /* MID_INPUT */
26439
26552
  };
26440
26553
  }
26441
26554
  }
26555
+ if (cursorRow === 0 && isSlashCommand(currentLine.trim())) {
26556
+ return {
26557
+ completionMode: "SLASH" /* SLASH */,
26558
+ query: currentLine,
26559
+ completionStart: 0,
26560
+ completionEnd: currentLine.length,
26561
+ slashCompletionContext: "line-start" /* LINE_START */
26562
+ };
26563
+ }
26442
26564
  return {
26443
26565
  completionMode: "IDLE" /* IDLE */,
26444
26566
  query: null,
26445
26567
  completionStart: -1,
26446
26568
  completionEnd: -1,
26447
- isMidInputSlashCompletion: false
26569
+ slashCompletionContext: null
26448
26570
  };
26449
26571
  }, [cursorRow, cursorCol, buffer.lines, buffer.text, slashCommands]);
26450
- const slashCommandsForCompletion = (0, import_react88.useMemo)(
26451
- () => isMidInputSlashCompletion ? slashCommands.filter(isMidInputCompletableCommand) : slashCommands,
26452
- [isMidInputSlashCompletion, slashCommands]
26453
- );
26572
+ const isMidInputSlashCompletion = slashCompletionContext === "mid-input" /* MID_INPUT */ || slashCompletionContext === "stacked-skill" /* STACKED_SKILL */;
26573
+ const slashCommandsForCompletion = (0, import_react88.useMemo)(() => {
26574
+ if (slashCompletionContext === "stacked-skill" /* STACKED_SKILL */) {
26575
+ return slashCommands.filter(isStackedSkillCompletableCommand);
26576
+ }
26577
+ if (slashCompletionContext === "mid-input" /* MID_INPUT */) {
26578
+ return slashCommands.filter(isMidInputCompletableCommand);
26579
+ }
26580
+ return slashCommands;
26581
+ }, [slashCompletionContext, slashCommands]);
26454
26582
  const {
26455
26583
  suggestions,
26456
26584
  activeSuggestionIndex,
@@ -26564,6 +26692,8 @@ function useCommandCompletion(buffer, cwd3, slashCommands, commandContext, rever
26564
26692
  const midCmd = findMidInputSlashCommand(buffer.text, cursorOffset);
26565
26693
  if (midCmd) {
26566
26694
  if (isMidInputSlashCompletion) return null;
26695
+ const prefix = toCodePoints(buffer.text).slice(0, midCmd.startPos).join("");
26696
+ if (isSlashCommand(prefix.trimStart())) return null;
26567
26697
  const match = getBestSlashCommandMatch(
26568
26698
  midCmd.partialCommand,
26569
26699
  slashCommands,
@@ -27737,10 +27867,7 @@ var BaseTextInput = /* @__PURE__ */ __name(({
27737
27867
  linesToRender,
27738
27868
  prefixWidth
27739
27869
  });
27740
- (0, import_react96.useInsertionEffect)(() => {
27741
- setCursorPosition(cursorPosition);
27742
- return () => setCursorPosition(void 0);
27743
- }, [setCursorPosition, cursorPosition]);
27870
+ setCursorPosition(cursorPosition);
27744
27871
  const resolvedBorderColor = borderColor ?? theme.border.focused;
27745
27872
  const resolvedPrefix = prefix ?? /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Text, { color: theme.text.accent, children: "> " });
27746
27873
  const columns = process.stdout.columns || 80;
@@ -29026,7 +29153,9 @@ var InputPrompt = /* @__PURE__ */ __name(({
29026
29153
  const uiState = useUIState();
29027
29154
  const uiActions = useUIActions();
29028
29155
  const settings = useSettings();
29029
- const mouseInteractionsEnabled = !!settings.merged.ui?.useTerminalBuffer;
29156
+ const mouseInteractionsEnabled = useVirtualViewport(
29157
+ settings.merged.ui?.useTerminalBuffer
29158
+ );
29030
29159
  const { pasteWorkaround } = useKeypressContext();
29031
29160
  const { agents, agentTabBarFocused } = useAgentViewState();
29032
29161
  const { setAgentTabBarFocused } = useAgentViewActions();
@@ -29045,7 +29174,7 @@ var InputPrompt = /* @__PURE__ */ __name(({
29045
29174
  setPillFocused: setBgPillFocused
29046
29175
  } = useBackgroundTaskViewActions();
29047
29176
  const hasAgents = agents.size > 0;
29048
- const liveAgentPanelMaxRows = settings.merged.ui?.useTerminalBuffer ? getLiveAgentPanelVpMaxRows(uiState.terminalHeight) : LIVE_AGENT_PANEL_MAX_ROWS;
29177
+ const liveAgentPanelMaxRows = uiState.useTerminalBuffer ? getLiveAgentPanelVpMaxRows(uiState.terminalHeight) : LIVE_AGENT_PANEL_MAX_ROWS;
29049
29178
  const getVisibleBgAgents = (0, import_react98.useCallback)(
29050
29179
  () => panelDisplayOrder(
29051
29180
  bgEntries.filter((e) => isLiveAgentPanelVisibleEntry(e, Date.now()))
@@ -29283,6 +29412,7 @@ var InputPrompt = /* @__PURE__ */ __name(({
29283
29412
  const handleSubmitAndClear = (0, import_react98.useCallback)(
29284
29413
  (submittedValue, deferUntilIdle = false) => {
29285
29414
  exportCompletion.reset();
29415
+ const submittedPrompt = submittedValue;
29286
29416
  let finalValue = submittedValue;
29287
29417
  if (pendingPastes.size > 0) {
29288
29418
  finalValue = expandPendingPastePlaceholders(finalValue, pendingPastes);
@@ -29300,11 +29430,7 @@ ${finalValue.trim()}`;
29300
29430
  }
29301
29431
  buffer.setText("");
29302
29432
  clearPromptStash(targetDir);
29303
- if (deferUntilIdle) {
29304
- onSubmit(finalValue, { deferUntilIdle: true });
29305
- } else {
29306
- onSubmit(finalValue);
29307
- }
29433
+ onSubmit(finalValue, { deferUntilIdle, submittedPrompt });
29308
29434
  resetHistoryNavRef.current();
29309
29435
  followup.dismiss();
29310
29436
  onPromptSuggestionDismiss?.();
@@ -29333,10 +29459,11 @@ ${finalValue.trim()}`;
29333
29459
  voiceSubmitRef.current = (text) => handleSubmitAndClear(text);
29334
29460
  const customSetTextAndResetCompletionSignal = (0, import_react98.useCallback)(
29335
29461
  (newText) => {
29462
+ uiActions.invalidateSubmittedPromptProvenance();
29336
29463
  buffer.setText(newText);
29337
29464
  setHistoryRestoredText(newText);
29338
29465
  },
29339
- [buffer]
29466
+ [buffer, uiActions]
29340
29467
  );
29341
29468
  const inputHistory = useInputHistory({
29342
29469
  userMessages,
@@ -29767,6 +29894,7 @@ ${currentText}`);
29767
29894
  }
29768
29895
  }
29769
29896
  if (keyMatchers["acceptSuggestionReverseSearch" /* ACCEPT_SUGGESTION_REVERSE_SEARCH */](key)) {
29897
+ uiActions.invalidateSubmittedPromptProvenance();
29770
29898
  sc.handleAutocomplete(activeSuggestionIndex);
29771
29899
  resetState();
29772
29900
  setActive(false);
@@ -29775,6 +29903,9 @@ ${currentText}`);
29775
29903
  }
29776
29904
  if (keyMatchers["submitReverseSearch" /* SUBMIT_REVERSE_SEARCH */](key)) {
29777
29905
  const textToSubmit = showSuggestions && activeSuggestionIndex > -1 ? suggestions[activeSuggestionIndex].value : buffer.text;
29906
+ if (showSuggestions && activeSuggestionIndex > -1) {
29907
+ uiActions.invalidateSubmittedPromptProvenance();
29908
+ }
29778
29909
  handleSubmitAndClear(textToSubmit);
29779
29910
  resetState();
29780
29911
  setActive(false);
@@ -29970,12 +30101,18 @@ ${currentText}`);
29970
30101
  } else {
29971
30102
  if (keyMatchers["navigationUp" /* NAVIGATION_UP */](key)) {
29972
30103
  const prevCommand = shellHistory.getPreviousCommand();
29973
- if (prevCommand !== null) buffer.setText(prevCommand);
30104
+ if (prevCommand !== null) {
30105
+ uiActions.invalidateSubmittedPromptProvenance();
30106
+ buffer.setText(prevCommand);
30107
+ }
29974
30108
  return true;
29975
30109
  }
29976
30110
  if (keyMatchers["navigationDown" /* NAVIGATION_DOWN */](key)) {
29977
30111
  const nextCommand = shellHistory.getNextCommand();
29978
- if (nextCommand !== null) buffer.setText(nextCommand);
30112
+ if (nextCommand !== null) {
30113
+ uiActions.invalidateSubmittedPromptProvenance();
30114
+ buffer.setText(nextCommand);
30115
+ }
29979
30116
  return true;
29980
30117
  }
29981
30118
  }
@@ -30242,6 +30379,7 @@ ${currentText}`);
30242
30379
  if (commandSearchActive || reverseSearchActive) {
30243
30380
  const isCommandSearch = commandSearchActive;
30244
30381
  const sc = isCommandSearch ? commandSearchCompletion : reverseSearchCompletion;
30382
+ uiActions.invalidateSubmittedPromptProvenance();
30245
30383
  sc.handleAutocomplete(index);
30246
30384
  sc.resetCompletionState();
30247
30385
  (isCommandSearch ? setCommandSearchActive : setReverseSearchActive)(
@@ -30271,7 +30409,8 @@ ${currentText}`);
30271
30409
  handleSubmitAndClear,
30272
30410
  setExpandedSuggestionIndex,
30273
30411
  setCommandSearchActive,
30274
- setReverseSearchActive
30412
+ setReverseSearchActive,
30413
+ uiActions
30275
30414
  ]
30276
30415
  );
30277
30416
  const hasTabConsumer = shouldShowSuggestions || buffer.text.length === 0 && Boolean(availableSuggestion) || Boolean(completion.midInputGhostText?.acceptText);
@@ -31630,6 +31769,15 @@ function isRecentHistoryTodoSnapshot(snapshotItemIndex, historyLength) {
31630
31769
  return historyItemsAfterSnapshot < MIN_HISTORY_ITEMS_AFTER_TODO_BEFORE_STICKY;
31631
31770
  }
31632
31771
  __name(isRecentHistoryTodoSnapshot, "isRecentHistoryTodoSnapshot");
31772
+ function hasUserMessageAfter(items, afterIndex) {
31773
+ for (let i = afterIndex + 1; i < items.length; i++) {
31774
+ if (items[i].type === "user") {
31775
+ return true;
31776
+ }
31777
+ }
31778
+ return false;
31779
+ }
31780
+ __name(hasUserMessageAfter, "hasUserMessageAfter");
31633
31781
  function getStickyTodos(history, pendingHistoryItems) {
31634
31782
  const pendingSnapshot = findLatestTodoSnapshot(pendingHistoryItems);
31635
31783
  if (pendingSnapshot !== void 0) {
@@ -31642,6 +31790,9 @@ function getStickyTodos(history, pendingHistoryItems) {
31642
31790
  if (isRecentHistoryTodoSnapshot(historySnapshot.itemIndex, history.length)) {
31643
31791
  return null;
31644
31792
  }
31793
+ if (hasUserMessageAfter(history, historySnapshot.itemIndex)) {
31794
+ return null;
31795
+ }
31645
31796
  if (areAllTodosCompleted(historySnapshot.todos)) {
31646
31797
  return null;
31647
31798
  }
@@ -33013,7 +33164,7 @@ var App = /* @__PURE__ */ __name(() => {
33013
33164
  }, "App");
33014
33165
 
33015
33166
  // packages/cli/src/ui/AppContainer.tsx
33016
- import process16 from "node:process";
33167
+ import process17 from "node:process";
33017
33168
 
33018
33169
  // packages/cli/src/ui/hooks/useMemoryMonitor.ts
33019
33170
  init_esbuild_shims();
@@ -33405,6 +33556,33 @@ function useSettingsCommand() {
33405
33556
  }
33406
33557
  __name(useSettingsCommand, "useSettingsCommand");
33407
33558
 
33559
+ // packages/cli/src/ui/utils/terminal-buffer.ts
33560
+ init_esbuild_shims();
33561
+ import process14 from "node:process";
33562
+ function isCiEnvKey(key) {
33563
+ return key === "CI" || key === "CONTINUOUS_INTEGRATION" || key.startsWith("CI_");
33564
+ }
33565
+ __name(isCiEnvKey, "isCiEnvKey");
33566
+ function isActiveCiValue(value) {
33567
+ const normalizedValue = value?.toLowerCase();
33568
+ return value !== void 0 && value !== "" && normalizedValue !== "0" && normalizedValue !== "false";
33569
+ }
33570
+ __name(isActiveCiValue, "isActiveCiValue");
33571
+ function isCiEnvironment(env) {
33572
+ return Object.keys(env).some(
33573
+ (key) => isCiEnvKey(key) && isActiveCiValue(env[key])
33574
+ );
33575
+ }
33576
+ __name(isCiEnvironment, "isCiEnvironment");
33577
+ function isInteractiveTerminal(stdoutIsTTY = process14.stdout.isTTY, env = process14.env) {
33578
+ return Boolean(stdoutIsTTY) && !isCiEnvironment(env) && env["TERM"]?.toLowerCase() !== "dumb";
33579
+ }
33580
+ __name(isInteractiveTerminal, "isInteractiveTerminal");
33581
+ function shouldUseVirtualViewport(useTerminalBuffer, screenReader, terminalInteractive) {
33582
+ return terminalInteractive && (useTerminalBuffer ?? true) && !screenReader;
33583
+ }
33584
+ __name(shouldUseVirtualViewport, "shouldUseVirtualViewport");
33585
+
33408
33586
  // packages/cli/src/ui/hooks/useModelCommand.ts
33409
33587
  init_esbuild_shims();
33410
33588
  var import_react123 = __toESM(require_react(), 1);
@@ -35605,7 +35783,7 @@ init_esbuild_shims();
35605
35783
  var import_react134 = __toESM(require_react(), 1);
35606
35784
  import * as path11 from "node:path";
35607
35785
  var debugLogger35 = createDebugLogger("REACT_TOOL_SCHEDULER");
35608
- function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorClose) {
35786
+ function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorClose, onToolResultFullTurnModel) {
35609
35787
  const [toolCallsForDisplay, setToolCallsForDisplay] = (0, import_react134.useState)([]);
35610
35788
  const outputUpdateHandler = (0, import_react134.useCallback)(
35611
35789
  (toolCallId, outputChunk) => {
@@ -35665,7 +35843,8 @@ function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorC
35665
35843
  onAllToolCallsComplete: allToolCallsCompleteHandler,
35666
35844
  onToolCallsUpdate: toolCallsUpdateHandler,
35667
35845
  getPreferredEditor,
35668
- onEditorClose
35846
+ onEditorClose,
35847
+ onToolResultFullTurnModel
35669
35848
  }),
35670
35849
  [
35671
35850
  config,
@@ -35673,7 +35852,8 @@ function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorC
35673
35852
  allToolCallsCompleteHandler,
35674
35853
  toolCallsUpdateHandler,
35675
35854
  getPreferredEditor,
35676
- onEditorClose
35855
+ onEditorClose,
35856
+ onToolResultFullTurnModel
35677
35857
  ]
35678
35858
  );
35679
35859
  const schedule = (0, import_react134.useCallback)(
@@ -35808,6 +35988,9 @@ function mapToDisplay(toolOrTools, projectRoot) {
35808
35988
  resultDisplay: compactToolResultDisplayForHistory(
35809
35989
  trackedCall.response.resultDisplay
35810
35990
  ),
35991
+ ...trackedCall.response.visionBridgeNotice !== void 0 ? {
35992
+ visionBridgeNotice: trackedCall.response.visionBridgeNotice
35993
+ } : {},
35811
35994
  // Full detail for the Ctrl+O transcript (§4.9): derived from the
35812
35995
  // already-persisted functionResponse parts; NOT char-capped (the
35813
35996
  // bound is whatever core already applied). Consumed ONLY by the
@@ -35827,6 +36010,9 @@ function mapToDisplay(toolOrTools, projectRoot) {
35827
36010
  resultDisplay: compactToolResultDisplayForHistory(
35828
36011
  trackedCall.response.resultDisplay
35829
36012
  ),
36013
+ ...trackedCall.response.visionBridgeNotice !== void 0 ? {
36014
+ visionBridgeNotice: trackedCall.response.visionBridgeNotice
36015
+ } : {},
35830
36016
  confirmationDetails: void 0
35831
36017
  };
35832
36018
  case "cancelled":
@@ -35836,6 +36022,9 @@ function mapToDisplay(toolOrTools, projectRoot) {
35836
36022
  resultDisplay: compactToolResultDisplayForHistory(
35837
36023
  trackedCall.response.resultDisplay
35838
36024
  ),
36025
+ ...trackedCall.response.visionBridgeNotice !== void 0 ? {
36026
+ visionBridgeNotice: trackedCall.response.visionBridgeNotice
36027
+ } : {},
35839
36028
  confirmationDetails: void 0
35840
36029
  };
35841
36030
  case "awaiting_approval":
@@ -35890,42 +36079,53 @@ __name(mapToDisplay, "mapToDisplay");
35890
36079
  // packages/cli/src/ui/hooks/useGeminiStream.ts
35891
36080
  import { promises as fs17 } from "node:fs";
35892
36081
  import path12 from "node:path";
35893
- import process14 from "node:process";
36082
+ import process15 from "node:process";
35894
36083
 
35895
36084
  // packages/cli/src/ui/hooks/useMessageQueue.ts
35896
36085
  init_esbuild_shims();
35897
36086
  var import_react135 = __toESM(require_react(), 1);
35898
36087
  var GOAL_COMMAND_RE = /^\/goal(?:\s|$)/;
36088
+ function aggregateMessages(messages) {
36089
+ const modelText = messages.map((message) => message.modelText).join("\n\n");
36090
+ const submittedPrompts = messages.map((message) => message.submittedPrompt);
36091
+ return submittedPrompts.every(
36092
+ (submittedPrompt) => submittedPrompt !== void 0
36093
+ ) ? { modelText, submittedPrompt: submittedPrompts.join("\n\n") } : { modelText };
36094
+ }
36095
+ __name(aggregateMessages, "aggregateMessages");
35899
36096
  function useMessageQueue() {
35900
36097
  const [queuedMessages, setQueuedMessages] = (0, import_react135.useState)([]);
35901
36098
  const queueRef = (0, import_react135.useRef)([]);
35902
- const addMessage = (0, import_react135.useCallback)((message, deferUntilIdle = false) => {
35903
- const trimmedMessage = message.trim();
35904
- if (trimmedMessage.length > 0) {
35905
- queueRef.current = [
35906
- ...queueRef.current,
35907
- { text: trimmedMessage, deferUntilIdle }
35908
- ];
35909
- setQueuedMessages(queueRef.current);
35910
- }
35911
- }, []);
36099
+ const addMessage = (0, import_react135.useCallback)(
36100
+ (message, deferUntilIdle = false, submittedPrompt) => {
36101
+ const modelText = message.trim();
36102
+ if (modelText.length > 0) {
36103
+ queueRef.current = [
36104
+ ...queueRef.current,
36105
+ { modelText, deferUntilIdle, submittedPrompt }
36106
+ ];
36107
+ setQueuedMessages(queueRef.current);
36108
+ }
36109
+ },
36110
+ []
36111
+ );
35912
36112
  const clearQueue = (0, import_react135.useCallback)(() => {
35913
36113
  queueRef.current = [];
35914
36114
  setQueuedMessages([]);
35915
36115
  }, []);
35916
36116
  const getQueuedMessagesText = (0, import_react135.useCallback)(() => {
35917
36117
  if (queuedMessages.length === 0) return "";
35918
- return queuedMessages.map(({ text }) => text).join("\n\n");
36118
+ return queuedMessages.map(({ modelText }) => modelText).join("\n\n");
35919
36119
  }, [queuedMessages]);
35920
36120
  const popAllMessages = (0, import_react135.useCallback)(() => {
35921
36121
  const current = queueRef.current;
35922
36122
  if (current.length === 0) return null;
35923
36123
  queueRef.current = [];
35924
36124
  setQueuedMessages([]);
35925
- return current.map(({ text }) => text).join("\n\n");
36125
+ return aggregateMessages(current);
35926
36126
  }, []);
35927
36127
  const restoreMessages = (0, import_react135.useCallback)((messages) => {
35928
- const restored = messages.map((text) => text.trim()).filter(Boolean).map((text) => ({ text, deferUntilIdle: false }));
36128
+ const restored = messages.map((text) => text.trim()).filter(Boolean).map((modelText) => ({ modelText, deferUntilIdle: false }));
35929
36129
  if (restored.length === 0) return;
35930
36130
  queueRef.current = [...restored, ...queueRef.current];
35931
36131
  setQueuedMessages(queueRef.current);
@@ -35933,31 +36133,36 @@ function useMessageQueue() {
35933
36133
  const drainQueue = (0, import_react135.useCallback)((includeDeferred = false) => {
35934
36134
  const current = queueRef.current;
35935
36135
  if (current.length === 0) return [];
35936
- const shouldDrain = /* @__PURE__ */ __name((message) => (!isSlashCommand(message.text) || !includeDeferred && GOAL_COMMAND_RE.test(message.text)) && (includeDeferred || !message.deferUntilIdle), "shouldDrain");
36136
+ const shouldDrain = /* @__PURE__ */ __name((message) => (!isSlashCommand(message.modelText) || !includeDeferred && GOAL_COMMAND_RE.test(message.modelText)) && (includeDeferred || !message.deferUntilIdle), "shouldDrain");
35937
36137
  const drained = current.filter(shouldDrain);
35938
36138
  if (drained.length === 0) return [];
35939
36139
  const rest = current.filter((message) => !shouldDrain(message));
35940
36140
  queueRef.current = rest;
35941
36141
  setQueuedMessages(rest);
35942
- return drained.map(({ text }) => text);
36142
+ return drained.map(({ modelText }) => modelText);
35943
36143
  }, []);
35944
- const popNextSegment = (0, import_react135.useCallback)(() => {
36144
+ const popNextTurn = (0, import_react135.useCallback)(() => {
35945
36145
  const current = queueRef.current;
35946
36146
  if (current.length === 0) return null;
35947
- const [head, ...rest] = current;
36147
+ const plainMessages = current.filter(
36148
+ (message) => !isSlashCommand(message.modelText)
36149
+ );
36150
+ const messages = plainMessages.length > 0 ? plainMessages : [current[0]];
36151
+ const selected = new Set(messages);
36152
+ const rest = current.filter((message) => !selected.has(message));
35948
36153
  queueRef.current = rest;
35949
36154
  setQueuedMessages(rest);
35950
- return head.text;
36155
+ return aggregateMessages(messages);
35951
36156
  }, []);
35952
36157
  return {
35953
- messageQueue: queuedMessages.map(({ text }) => text),
36158
+ messageQueue: queuedMessages.map(({ modelText }) => modelText),
35954
36159
  addMessage,
35955
36160
  clearQueue,
35956
36161
  getQueuedMessagesText,
35957
36162
  popAllMessages,
35958
36163
  restoreMessages,
35959
36164
  drainQueue,
35960
- popNextSegment
36165
+ popNextTurn
35961
36166
  };
35962
36167
  }
35963
36168
  __name(useMessageQueue, "useMessageQueue");
@@ -36112,6 +36317,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36112
36317
  const isSubmittingQueryRef = (0, import_react136.useRef)(false);
36113
36318
  const lastPromptRef = (0, import_react136.useRef)(null);
36114
36319
  const lastTurnUserItemRef = (0, import_react136.useRef)(null);
36320
+ const canUndoLastLoggedUserMessageRef = (0, import_react136.useRef)(false);
36115
36321
  const turnSawContentEventRef = (0, import_react136.useRef)(false);
36116
36322
  const lastPromptErroredRef = (0, import_react136.useRef)(false);
36117
36323
  const commitItem = (0, import_react136.useCallback)(
@@ -36152,6 +36358,10 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36152
36358
  const submitPromptOnCompleteRef = (0, import_react136.useRef)(null);
36153
36359
  const modelOverrideRef = (0, import_react136.useRef)(void 0);
36154
36360
  const inlineModelOverrideActiveRef = (0, import_react136.useRef)(false);
36361
+ const canUseToolResultFullTurnModel = (0, import_react136.useCallback)((model) => {
36362
+ const current = modelOverrideRef.current;
36363
+ return !inlineModelOverrideActiveRef.current && (!current?.endsWith("\0") || current === model);
36364
+ }, []);
36155
36365
  const handledProviderToolCallIdsRef = (0, import_react136.useRef)(/* @__PURE__ */ new Set());
36156
36366
  const duplicateProviderToolCallResponseIdsRef = (0, import_react136.useRef)(
36157
36367
  /* @__PURE__ */ new Set()
@@ -36182,7 +36392,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36182
36392
  },
36183
36393
  config,
36184
36394
  getPreferredEditor,
36185
- onEditorClose
36395
+ onEditorClose,
36396
+ canUseToolResultFullTurnModel
36186
36397
  );
36187
36398
  const pendingToolCallGroupDisplay = (0, import_react136.useMemo)(
36188
36399
  () => toolCalls.length ? mapToDisplay(toolCalls, config.getProjectRoot()) : void 0,
@@ -36366,6 +36577,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36366
36577
  onCancelSubmit({
36367
36578
  pendingItem: pendingItemAtCancel,
36368
36579
  lastTurnUserItem: lastTurnUserItemRef.current,
36580
+ canUndoLastLoggedUserMessage: canUndoLastLoggedUserMessageRef.current,
36369
36581
  turnProducedMeaningfulContent: turnSawContentEventRef.current
36370
36582
  });
36371
36583
  } finally {
@@ -36450,14 +36662,16 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36450
36662
  [addItem, config]
36451
36663
  );
36452
36664
  const prepareQueryForGemini = (0, import_react136.useCallback)(
36453
- async (query, userMessageTimestamp, abortSignal, prompt_id, submitType) => {
36665
+ async (query, userMessageTimestamp, abortSignal, prompt_id, submitType, submittedPrompt, preserveTurnOwnership) => {
36454
36666
  if (turnCancelledRef.current) {
36455
36667
  return { queryToSend: null, shouldProceed: false };
36456
36668
  }
36457
36669
  if (typeof query === "string" && query.trim().length === 0) {
36458
36670
  return { queryToSend: null, shouldProceed: false };
36459
36671
  }
36460
- lastTurnUserItemRef.current = null;
36672
+ if (!preserveTurnOwnership) {
36673
+ lastTurnUserItemRef.current = null;
36674
+ }
36461
36675
  let localQueryToSendToGemini = null;
36462
36676
  if (typeof query === "string") {
36463
36677
  const trimmedQuery = query.trim();
@@ -36475,6 +36689,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36475
36689
  }
36476
36690
  onDebugMessage(`Received user query (${trimmedQuery.length} chars)`);
36477
36691
  await logger?.logMessage("user" /* USER */, trimmedQuery);
36692
+ canUndoLastLoggedUserMessageRef.current = !preserveTurnOwnership && logger != null;
36478
36693
  const slashCommandResult = isSlashCommand(trimmedQuery) ? await handleSlashCommand(trimmedQuery) : false;
36479
36694
  if (slashCommandResult) {
36480
36695
  switch (slashCommandResult.type) {
@@ -36548,10 +36763,13 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
36548
36763
  },
36549
36764
  userMessageTimestamp
36550
36765
  );
36551
- lastTurnUserItemRef.current = {
36552
- id: insertedId,
36553
- text: trimmedQuery
36554
- };
36766
+ if (!preserveTurnOwnership) {
36767
+ lastTurnUserItemRef.current = {
36768
+ id: insertedId,
36769
+ text: trimmedQuery,
36770
+ ...submittedPrompt === void 0 ? {} : { submittedPrompt }
36771
+ };
36772
+ }
36555
36773
  await new Promise((r) => setImmediate(r));
36556
36774
  }
36557
36775
  if (isAtCommand(trimmedQuery)) {
@@ -37674,6 +37892,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37674
37892
  async (query, submitType = "userQuery" /* UserQuery */, prompt_id, metadata) => {
37675
37893
  const allowConcurrentBtwDuringResponse = submitType === "userQuery" /* UserQuery */ && streamingState === "responding" /* Responding */ && typeof query === "string" && isBtwCommand(query);
37676
37894
  const isTurnContinuation = submitType === "toolResult" /* ToolResult */ || submitType === "steer" /* Steer */;
37895
+ const submittedPrompt = submitType === "userQuery" /* UserQuery */ ? metadata?.submittedPrompt : void 0;
37677
37896
  if (isSubmittingQueryRef.current && !isTurnContinuation && !allowConcurrentBtwDuringResponse) {
37678
37897
  metadata?.onDeliveryFailed?.();
37679
37898
  return;
@@ -37686,6 +37905,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37686
37905
  loopDetectedRef.current = false;
37687
37906
  if (!isTurnContinuation && !allowConcurrentBtwDuringResponse) {
37688
37907
  lastTurnUserItemRef.current = null;
37908
+ canUndoLastLoggedUserMessageRef.current = false;
37689
37909
  turnSawContentEventRef.current = false;
37690
37910
  handledProviderToolCallIdsRef.current.clear();
37691
37911
  duplicateProviderToolCallResponseIdsRef.current.clear();
@@ -37732,7 +37952,9 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37732
37952
  userMessageTimestamp,
37733
37953
  abortSignal,
37734
37954
  prompt_id,
37735
- submitType
37955
+ submitType,
37956
+ submittedPrompt,
37957
+ allowConcurrentBtwDuringResponse
37736
37958
  );
37737
37959
  if (!shouldProceed || queryToSend === null) {
37738
37960
  isSubmittingQueryRef.current = false;
@@ -37790,17 +38012,19 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37790
38012
  );
37791
38013
  dualOutput.emitUserMessage(userParts);
37792
38014
  }
38015
+ const sendOptions = {
38016
+ type: submitType,
38017
+ notificationDisplayText: metadata?.notificationDisplayText,
38018
+ modelOverride: modelOverrideRef.current,
38019
+ steerInput: metadata?.steerInput,
38020
+ ...submittedPrompt !== void 0 ? { submittedPrompt } : {},
38021
+ ...!allowConcurrentBtwDuringResponse && midTurnDrainRef ? { getSteerInput: drainSteerAtBoundary } : {}
38022
+ };
37793
38023
  const stream = geminiClient.sendMessageStream(
37794
38024
  finalQueryToSend,
37795
38025
  abortSignal,
37796
38026
  prompt_id,
37797
- {
37798
- type: submitType,
37799
- notificationDisplayText: metadata?.notificationDisplayText,
37800
- modelOverride: modelOverrideRef.current,
37801
- steerInput: metadata?.steerInput,
37802
- ...!allowConcurrentBtwDuringResponse && midTurnDrainRef ? { getSteerInput: drainSteerAtBoundary } : {}
37803
- }
38027
+ sendOptions
37804
38028
  );
37805
38029
  const processingStatus = await processGeminiStreamEvents(
37806
38030
  stream,
@@ -38479,7 +38703,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38479
38703
  const summary = scheduler.getExitSummary();
38480
38704
  scheduler.stop();
38481
38705
  if (summary) {
38482
- process14.stderr.write(summary + "\n");
38706
+ process15.stderr.write(summary + "\n");
38483
38707
  }
38484
38708
  };
38485
38709
  }, [config, getAutonomousLoopTickResolver, isConfigInitialized]);
@@ -40610,7 +40834,7 @@ __name(useTerminalProgress, "useTerminalProgress");
40610
40834
  // packages/cli/src/ui/hooks/useFolderTrust.ts
40611
40835
  init_esbuild_shims();
40612
40836
  var import_react143 = __toESM(require_react(), 1);
40613
- import * as process15 from "node:process";
40837
+ import * as process16 from "node:process";
40614
40838
  var useFolderTrust = /* @__PURE__ */ __name((settings, onTrustChange) => {
40615
40839
  const [isTrusted, setIsTrusted] = (0, import_react143.useState)(void 0);
40616
40840
  const [isFolderTrustDialogOpen, setIsFolderTrustDialogOpen] = (0, import_react143.useState)(false);
@@ -40625,7 +40849,7 @@ var useFolderTrust = /* @__PURE__ */ __name((settings, onTrustChange) => {
40625
40849
  const handleFolderTrustSelect = (0, import_react143.useCallback)(
40626
40850
  (choice) => {
40627
40851
  const trustedFolders = loadTrustedFolders();
40628
- const cwd3 = process15.cwd();
40852
+ const cwd3 = process16.cwd();
40629
40853
  let trustLevel;
40630
40854
  const wasTrusted = isTrusted ?? true;
40631
40855
  switch (choice) {
@@ -40641,7 +40865,15 @@ var useFolderTrust = /* @__PURE__ */ __name((settings, onTrustChange) => {
40641
40865
  default:
40642
40866
  return;
40643
40867
  }
40644
- trustedFolders.setValue(cwd3, trustLevel);
40868
+ try {
40869
+ trustedFolders.setValue(cwd3, trustLevel);
40870
+ } catch (error) {
40871
+ writeStderrLineSafe("Error saving trusted folders file.");
40872
+ writeStderrLineSafe(
40873
+ error instanceof Error ? error.message : String(error)
40874
+ );
40875
+ return;
40876
+ }
40645
40877
  const currentIsTrusted = trustLevel === "TRUST_FOLDER" /* TRUST_FOLDER */ || trustLevel === "TRUST_PARENT" /* TRUST_PARENT */;
40646
40878
  setIsTrusted(currentIsTrusted);
40647
40879
  onTrustChange(currentIsTrusted);
@@ -40932,14 +41164,22 @@ __name(sendNotification, "sendNotification");
40932
41164
  // packages/cli/src/ui/hooks/useGitBranchName.ts
40933
41165
  init_esbuild_shims();
40934
41166
  var import_react146 = __toESM(require_react(), 1);
41167
+ var BRANCH_POLL_INTERVAL_MS = 5e3;
40935
41168
  function useGitBranchName(cwd3) {
40936
41169
  const [branchName, setBranchName] = (0, import_react146.useState)(void 0);
41170
+ const branchNameRef = (0, import_react146.useRef)(branchName);
41171
+ branchNameRef.current = branchName;
40937
41172
  (0, import_react146.useEffect)(() => {
40938
41173
  let cancelled = false;
40939
41174
  let dispose;
41175
+ let pollTimer;
41176
+ let refreshGeneration = 0;
40940
41177
  const refresh = /* @__PURE__ */ __name(async () => {
41178
+ const generation = ++refreshGeneration;
40941
41179
  const name = await resolveBranchName(cwd3);
40942
- if (!cancelled) setBranchName(name);
41180
+ if (!cancelled && generation === refreshGeneration && name !== branchNameRef.current) {
41181
+ setBranchName(name);
41182
+ }
40943
41183
  }, "refresh");
40944
41184
  const init = /* @__PURE__ */ __name(async () => {
40945
41185
  await refresh();
@@ -40953,12 +41193,20 @@ function useGitBranchName(cwd3) {
40953
41193
  } else {
40954
41194
  dispose = disposer;
40955
41195
  }
41196
+ if (!cancelled) {
41197
+ pollTimer = setInterval(() => {
41198
+ void refresh().catch(() => {
41199
+ });
41200
+ }, BRANCH_POLL_INTERVAL_MS);
41201
+ pollTimer.unref?.();
41202
+ }
40956
41203
  }, "init");
40957
41204
  void init().catch(() => {
40958
41205
  });
40959
41206
  return () => {
40960
41207
  cancelled = true;
40961
41208
  dispose?.();
41209
+ if (pollTimer) clearInterval(pollTimer);
40962
41210
  };
40963
41211
  }, [cwd3]);
40964
41212
  return branchName;
@@ -42149,7 +42397,7 @@ __name(shouldAutoOpenSkillReview, "shouldAutoOpenSkillReview");
42149
42397
  var SHELL_WIDTH_FRACTION = 0.89;
42150
42398
  var SHELL_HEIGHT_PADDING = 10;
42151
42399
  var AppContainer = /* @__PURE__ */ __name((props) => {
42152
- const { settings, config, initializationResult } = props;
42400
+ const { settings, config, initializationResult, initialUseVirtualViewport } = props;
42153
42401
  const extensionRefreshState = (0, import_react165.useMemo)(
42154
42402
  () => props.extensionRefreshState ?? new ExtensionRefreshState(),
42155
42403
  [props.extensionRefreshState]
@@ -42270,7 +42518,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42270
42518
  const { stdin, setRawMode } = use_stdin_default();
42271
42519
  const { stdout } = use_stdout_default();
42272
42520
  const writeRaw = (0, import_react165.useCallback)((data) => {
42273
- process16.stdout.write(data);
42521
+ process17.stdout.write(data);
42274
42522
  }, []);
42275
42523
  const terminal = (0, import_react165.useMemo)(
42276
42524
  () => buildTerminalNotification(writeRaw),
@@ -42494,6 +42742,27 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42494
42742
  }
42495
42743
  }, []);
42496
42744
  const preferredEditor = usePreferredEditor();
42745
+ const restoredSubmissionRef = (0, import_react165.useRef)(null);
42746
+ const submittedPromptProvenanceUnavailableRef = (0, import_react165.useRef)(false);
42747
+ const setBufferTextRef = (0, import_react165.useRef)(null);
42748
+ const invalidateSubmittedPromptProvenance = (0, import_react165.useCallback)(() => {
42749
+ restoredSubmissionRef.current = null;
42750
+ submittedPromptProvenanceUnavailableRef.current = true;
42751
+ }, []);
42752
+ const handleBufferChange = (0, import_react165.useCallback)((text) => {
42753
+ if (text.length === 0) {
42754
+ if (restoredSubmissionRef.current !== null || submittedPromptProvenanceUnavailableRef.current) {
42755
+ setBufferTextRef.current?.("", { clearUndoHistory: true });
42756
+ }
42757
+ restoredSubmissionRef.current = null;
42758
+ submittedPromptProvenanceUnavailableRef.current = false;
42759
+ return;
42760
+ }
42761
+ if (restoredSubmissionRef.current !== null && restoredSubmissionRef.current.modelText !== text) {
42762
+ restoredSubmissionRef.current = null;
42763
+ submittedPromptProvenanceUnavailableRef.current = true;
42764
+ }
42765
+ }, []);
42497
42766
  const buffer = useTextBuffer({
42498
42767
  initialText: "",
42499
42768
  viewport: { height: 10, width: inputWidth },
@@ -42501,8 +42770,11 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42501
42770
  setRawMode,
42502
42771
  isValidPath,
42503
42772
  shellModeActive,
42504
- preferredEditor
42773
+ preferredEditor,
42774
+ onChange: handleBufferChange
42505
42775
  });
42776
+ const setBufferText = buffer.setText;
42777
+ setBufferTextRef.current = setBufferText;
42506
42778
  const restoredPromptStashTargetsRef = (0, import_react165.useRef)(/* @__PURE__ */ new Set());
42507
42779
  const promptStashTargetDir = config.getTargetDir();
42508
42780
  (0, import_react165.useEffect)(() => {
@@ -42510,11 +42782,11 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42510
42782
  return;
42511
42783
  }
42512
42784
  restoredPromptStashTargetsRef.current.add(promptStashTargetDir);
42513
- restorePromptStash(
42514
- promptStashTargetDir,
42515
- buffer.text,
42516
- (text) => buffer.setText(text)
42517
- );
42785
+ restorePromptStash(promptStashTargetDir, buffer.text, (text) => {
42786
+ restoredSubmissionRef.current = null;
42787
+ submittedPromptProvenanceUnavailableRef.current = true;
42788
+ buffer.setText(text);
42789
+ });
42518
42790
  }, [buffer, promptStashTargetDir]);
42519
42791
  (0, import_react165.useEffect)(() => {
42520
42792
  const fetchUserMessages = /* @__PURE__ */ __name(async () => {
@@ -42533,7 +42805,13 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42533
42805
  const remountStaticHistory = (0, import_react165.useCallback)(() => {
42534
42806
  setHistoryRemountKey((prev) => prev + 1);
42535
42807
  }, []);
42536
- const useTerminalBuffer = settings.merged.ui?.useTerminalBuffer ?? false;
42808
+ const [useTerminalBuffer] = (0, import_react165.useState)(
42809
+ () => initialUseVirtualViewport ?? shouldUseVirtualViewport(
42810
+ settings.merged.ui?.useTerminalBuffer,
42811
+ config.getScreenReader(),
42812
+ isInteractiveTerminal()
42813
+ )
42814
+ );
42537
42815
  const showScrollbar = settings.merged.ui?.showScrollbar ?? true;
42538
42816
  const refreshStatic = (0, import_react165.useCallback)(() => {
42539
42817
  if (isTranscriptOpenRef.current) {
@@ -42724,6 +43002,11 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42724
43002
  const closeHelpDialog = (0, import_react165.useCallback)(() => setHelpDialogOpen(false), []);
42725
43003
  const { vimEnabled, vimMode } = useVimModeState();
42726
43004
  const { toggleVimEnabled } = useVimModeActions();
43005
+ (0, import_react165.useLayoutEffect)(() => {
43006
+ if (vimEnabled && buffer.text.length > 0) {
43007
+ invalidateSubmittedPromptProvenance();
43008
+ }
43009
+ }, [buffer.text, invalidateSubmittedPromptProvenance, vimEnabled]);
42727
43010
  const {
42728
43011
  isSubagentCreateDialogOpen,
42729
43012
  openSubagentCreateDialog,
@@ -42845,7 +43128,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
42845
43128
  config.getGeminiClient()?.requestShutdown();
42846
43129
  setTimeout(async () => {
42847
43130
  await runExitCleanup();
42848
- process16.exit(0);
43131
+ process17.exit(0);
42849
43132
  }, 100);
42850
43133
  }, "quit"),
42851
43134
  setDebugMessage,
@@ -43028,7 +43311,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
43028
43311
  );
43029
43312
  try {
43030
43313
  const { memoryContent, fileCount, conditionalRules, projectRoot } = await loadHierarchicalGeminiMemory(
43031
- process16.cwd(),
43314
+ process17.cwd(),
43032
43315
  settings.merged.context?.loadFromIncludeDirectories ? config.getWorkspaceContext().getDirectories() : [],
43033
43316
  config.getFileService(),
43034
43317
  config.getExtensionContextFilePaths(),
@@ -43187,8 +43470,24 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
43187
43470
  popAllMessages,
43188
43471
  restoreMessages,
43189
43472
  drainQueue,
43190
- popNextSegment
43473
+ popNextTurn
43191
43474
  } = useMessageQueue();
43475
+ const submitUserQuery = (0, import_react165.useCallback)(
43476
+ (submission) => submitQuery(
43477
+ submission.modelText,
43478
+ "userQuery" /* UserQuery */,
43479
+ void 0,
43480
+ submission.submittedPrompt === void 0 ? void 0 : { submittedPrompt: submission.submittedPrompt }
43481
+ ),
43482
+ [submitQuery]
43483
+ );
43484
+ const popAllQueuedMessages = (0, import_react165.useCallback)(() => {
43485
+ const submission = popAllMessages();
43486
+ if (submission === null) return null;
43487
+ restoredSubmissionRef.current = submission;
43488
+ submittedPromptProvenanceUnavailableRef.current = false;
43489
+ return submission.modelText;
43490
+ }, [popAllMessages]);
43192
43491
  midTurnDrainRef.current = drainQueue;
43193
43492
  midTurnRestoreRef.current = restoreMessages;
43194
43493
  const remoteInput = useRemoteInput();
@@ -43281,6 +43580,20 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
43281
43580
  }, [remoteInput]);
43282
43581
  const handleFinalSubmit = (0, import_react165.useCallback)(
43283
43582
  (submittedValue, options) => {
43583
+ const consumesComposerState = options !== void 0;
43584
+ const restoredSubmission = consumesComposerState ? restoredSubmissionRef.current : null;
43585
+ const submittedPromptProvenanceUnavailable = consumesComposerState && submittedPromptProvenanceUnavailableRef.current;
43586
+ if (consumesComposerState) {
43587
+ restoredSubmissionRef.current = null;
43588
+ submittedPromptProvenanceUnavailableRef.current = false;
43589
+ }
43590
+ const submittedPromptCandidate = options?.submittedPrompt;
43591
+ const provenanceEnabled = !vimEnabled && submittedPromptCandidate !== void 0;
43592
+ const trimmedSubmittedPrompt = submittedPromptCandidate?.trim();
43593
+ const submittedPrompt = submittedPromptProvenanceUnavailable || !provenanceEnabled ? void 0 : restoredSubmission === null ? trimmedSubmittedPrompt || void 0 : restoredSubmission.modelText === submittedValue ? restoredSubmission.submittedPrompt : void 0;
43594
+ if (restoredSubmission !== null || submittedPromptProvenanceUnavailable) {
43595
+ setBufferText("", { clearUndoHistory: true });
43596
+ }
43284
43597
  if (agentViewState.activeView !== "main") {
43285
43598
  const agent = agentViewState.agents.get(agentViewState.activeView);
43286
43599
  if (agent) {
@@ -43326,11 +43639,14 @@ ${buildWorkflowSteeringNotice()}
43326
43639
  ` + submittedValue;
43327
43640
  }
43328
43641
  if (options?.deferUntilIdle) {
43329
- addMessage(submittedValue, true);
43642
+ addMessage(submittedValue, true, submittedPrompt);
43330
43643
  return;
43331
43644
  }
43332
43645
  if (streamingState === "responding" /* Responding */ && isBtwCommand(submittedValue)) {
43333
- void submitQuery(submittedValue);
43646
+ void submitUserQuery({
43647
+ modelText: submittedValue,
43648
+ submittedPrompt
43649
+ });
43334
43650
  return;
43335
43651
  }
43336
43652
  const spec = speculationRef.current;
@@ -43404,7 +43720,7 @@ ${buildWorkflowSteeringNotice()}
43404
43720
  setPromptSuggestion(result.nextSuggestion);
43405
43721
  }
43406
43722
  }).catch(() => {
43407
- addMessage(submittedValue);
43723
+ addMessage(submittedValue, false, submittedPrompt);
43408
43724
  });
43409
43725
  speculationRef.current = IDLE_SPECULATION;
43410
43726
  return;
@@ -43415,22 +43731,27 @@ ${buildWorkflowSteeringNotice()}
43415
43731
  speculationRef.current = IDLE_SPECULATION;
43416
43732
  }
43417
43733
  if (streamingState === "idle" /* Idle */ && !isProcessing && isSlashCommand(submittedValue)) {
43418
- void submitQuery(submittedValue);
43734
+ void submitUserQuery({
43735
+ modelText: submittedValue,
43736
+ submittedPrompt
43737
+ });
43419
43738
  return;
43420
43739
  }
43421
- addMessage(submittedValue);
43740
+ addMessage(submittedValue, false, submittedPrompt);
43422
43741
  },
43423
43742
  [
43424
43743
  addMessage,
43425
43744
  agentViewState,
43426
43745
  streamingState,
43427
43746
  isProcessing,
43428
- submitQuery,
43747
+ submitUserQuery,
43429
43748
  handleSlashCommand,
43430
43749
  config,
43431
43750
  geminiClient,
43432
43751
  historyManager,
43433
- settings.merged.ui?.disableWorkflowKeywordTrigger
43752
+ settings.merged.ui?.disableWorkflowKeywordTrigger,
43753
+ setBufferText,
43754
+ vimEnabled
43434
43755
  ]
43435
43756
  );
43436
43757
  const handleArenaModelsSelected = (0, import_react165.useCallback)(
@@ -43500,9 +43821,13 @@ ${buildWorkflowSteeringNotice()}
43500
43821
  const draftWasEmpty = buffer.text.length === 0;
43501
43822
  const popped = popAllMessages();
43502
43823
  if (popped) {
43824
+ restoredSubmissionRef.current = popped;
43825
+ submittedPromptProvenanceUnavailableRef.current = false;
43503
43826
  const currentText = buffer.text;
43504
- buffer.setText(currentText ? `${popped}
43505
- ${currentText}` : popped);
43827
+ buffer.setText(
43828
+ currentText ? `${popped.modelText}
43829
+ ${currentText}` : popped.modelText
43830
+ );
43506
43831
  }
43507
43832
  if (!draftWasEmpty) {
43508
43833
  debugLogger40.debug("auto-restore bail: buffer was non-empty");
@@ -43521,6 +43846,14 @@ ${currentText}` : popped);
43521
43846
  );
43522
43847
  return;
43523
43848
  }
43849
+ const restoreCancelledPrompt = /* @__PURE__ */ __name(() => {
43850
+ restoredSubmissionRef.current = {
43851
+ modelText: cancelledTurnUserItem.text,
43852
+ ...cancelledTurnUserItem.submittedPrompt === void 0 ? {} : { submittedPrompt: cancelledTurnUserItem.submittedPrompt }
43853
+ };
43854
+ submittedPromptProvenanceUnavailableRef.current = false;
43855
+ buffer.setText(cancelledTurnUserItem.text);
43856
+ }, "restoreCancelledPrompt");
43524
43857
  if (pendingHistoryItems2.some((item) => item.type === "tool_group")) {
43525
43858
  debugLogger40.debug(
43526
43859
  "auto-restore bail: tool execution is pending or committed"
@@ -43531,7 +43864,7 @@ ${currentText}` : popped);
43531
43864
  debugLogger40.debug(
43532
43865
  "auto-restore: preserving streamed output and restoring prompt text"
43533
43866
  );
43534
- buffer.setText(cancelledTurnUserItem.text);
43867
+ restoreCancelledPrompt();
43535
43868
  return;
43536
43869
  }
43537
43870
  if (pendingHistoryItems2.some((item) => !isSyntheticHistoryItem(item))) {
@@ -43550,7 +43883,7 @@ ${currentText}` : popped);
43550
43883
  debugLogger40.debug(
43551
43884
  "auto-restore: preserving committed output and restoring prompt text"
43552
43885
  );
43553
- buffer.setText(cancelledTurnUserItem.text);
43886
+ restoreCancelledPrompt();
43554
43887
  return;
43555
43888
  }
43556
43889
  const lastUserItem = history[lastUserIdx];
@@ -43571,11 +43904,13 @@ ${currentText}` : popped);
43571
43904
  );
43572
43905
  historyManager.truncateToItem(lastUserItem.id);
43573
43906
  refreshStatic();
43574
- buffer.setText(lastUserItem.text);
43907
+ restoreCancelledPrompt();
43575
43908
  geminiClient?.stripOrphanedUserEntriesFromHistory?.();
43576
- void logger?.removeLastUserMessage().catch((err) => {
43577
- debugLogger40.debug("Failed to undo cancelled prompt from log:", err);
43578
- });
43909
+ if (info?.canUndoLastLoggedUserMessage) {
43910
+ void logger?.removeLastUserMessage().catch((err) => {
43911
+ debugLogger40.debug("Failed to undo cancelled prompt from log:", err);
43912
+ });
43913
+ }
43579
43914
  },
43580
43915
  [
43581
43916
  buffer,
@@ -44016,6 +44351,8 @@ ${currentText}` : popped);
44016
44351
  historyManager.loadHistory(truncatedUi);
44017
44352
  refreshStatic();
44018
44353
  if (userItem.type === "user" && userItem.text) {
44354
+ restoredSubmissionRef.current = null;
44355
+ submittedPromptProvenanceUnavailableRef.current = true;
44019
44356
  buffer.setText(userItem.text);
44020
44357
  }
44021
44358
  historyManager.addItem(
@@ -44486,7 +44823,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44486
44823
  lastTitleRef.current = null;
44487
44824
  const folderName2 = basename3(config.getTargetDir());
44488
44825
  writeTerminalTitle(
44489
- (value) => process16.stdout.write(value),
44826
+ (value) => process17.stdout.write(value),
44490
44827
  formatSessionWindowTitle(null, folderName2)
44491
44828
  );
44492
44829
  }
@@ -44496,7 +44833,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44496
44833
  const title = formatSessionWindowTitle(sessionName, folderName);
44497
44834
  if (lastTitleRef.current !== title) {
44498
44835
  lastTitleRef.current = title;
44499
- writeTerminalTitle((value) => process16.stdout.write(value), title);
44836
+ writeTerminalTitle((value) => process17.stdout.write(value), title);
44500
44837
  }
44501
44838
  }, [
44502
44839
  sessionName,
@@ -44518,11 +44855,10 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44518
44855
  return;
44519
44856
  }
44520
44857
  if (isTranscriptOpenRef.current) return;
44521
- const plainPrompts = drainQueue(true);
44522
- const submission = plainPrompts.length > 0 ? plainPrompts.join("\n\n") : popNextSegment();
44858
+ const submission = popNextTurn();
44523
44859
  if (submission === null) return;
44524
44860
  queueDrainingRef.current = true;
44525
- Promise.resolve(submitQuery(submission)).finally(() => {
44861
+ Promise.resolve(submitUserQuery(submission)).finally(() => {
44526
44862
  queueDrainingRef.current = false;
44527
44863
  setQueueDrainNonce((n) => n + 1);
44528
44864
  });
@@ -44534,9 +44870,8 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44534
44870
  // Re-run the drain when the transcript closes so queued messages resume.
44535
44871
  isTranscriptOpen,
44536
44872
  messageQueue,
44537
- drainQueue,
44538
- popNextSegment,
44539
- submitQuery,
44873
+ popNextTurn,
44874
+ submitUserQuery,
44540
44875
  queueDrainNonce
44541
44876
  ]);
44542
44877
  const nightly = props.version.includes("nightly");
@@ -44874,7 +45209,8 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44874
45209
  handleFinalSubmit,
44875
45210
  handleRetryLastPrompt: retryLastPrompt,
44876
45211
  handleClearScreen,
44877
- popAllQueuedMessages: popAllMessages,
45212
+ popAllQueuedMessages,
45213
+ invalidateSubmittedPromptProvenance,
44878
45214
  // Welcome back dialog
44879
45215
  handleWelcomeBackSelection,
44880
45216
  handleWelcomeBackClose,
@@ -44964,7 +45300,8 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
44964
45300
  handleFinalSubmit,
44965
45301
  retryLastPrompt,
44966
45302
  handleClearScreen,
44967
- popAllMessages,
45303
+ popAllQueuedMessages,
45304
+ invalidateSubmittedPromptProvenance,
44968
45305
  handleWelcomeBackSelection,
44969
45306
  handleWelcomeBackClose,
44970
45307
  handleWorktreeExit,
@@ -45026,7 +45363,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
45026
45363
  }),
45027
45364
  [thoughtExpanded, expandedThoughtHeadIds, toggleThoughtExpanded]
45028
45365
  );
45029
- return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(UIStateContext.Provider, { value: uiState, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(UIActionsContext.Provider, { value: uiActions, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(ConfigContext.Provider, { value: config, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
45366
+ return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(VirtualViewportContext.Provider, { value: useTerminalBuffer, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(UIStateContext.Provider, { value: uiState, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(UIActionsContext.Provider, { value: uiActions, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(ConfigContext.Provider, { value: config, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
45030
45367
  AppContext.Provider,
45031
45368
  {
45032
45369
  value: {
@@ -45050,7 +45387,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
45050
45387
  ) })
45051
45388
  ) : /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(App, {}) }) }) }) })
45052
45389
  }
45053
- ) }) }) });
45390
+ ) }) }) }) });
45054
45391
  }, "AppContainer");
45055
45392
 
45056
45393
  // packages/cli/src/ui/hooks/useKittyKeyboardProtocol.ts
@@ -45311,6 +45648,11 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
45311
45648
  }
45312
45649
  }
45313
45650
  const initialCapturedInput = stopAndGetCapturedInput();
45651
+ const useVP = shouldUseVirtualViewport(
45652
+ settings.merged.ui?.useTerminalBuffer,
45653
+ config.getScreenReader(),
45654
+ isInteractiveTerminal()
45655
+ );
45314
45656
  const AppWrapper = /* @__PURE__ */ __name(() => {
45315
45657
  const kittyProtocolStatus = useKittyKeyboardProtocol();
45316
45658
  const nodeMajorVersion = parseInt(process.versions.node.split(".")[0], 10);
@@ -45330,13 +45672,13 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
45330
45672
  startupWarnings,
45331
45673
  version,
45332
45674
  initializationResult,
45675
+ initialUseVirtualViewport: useVP,
45333
45676
  extensionRefreshState: options.extensionRefreshState
45334
45677
  }
45335
45678
  ) }) }) }) })
45336
45679
  }
45337
45680
  ) }) }) });
45338
45681
  }, "AppWrapper");
45339
- const useVP = settings.merged.ui?.useTerminalBuffer ?? false;
45340
45682
  const stdoutMaxListeners = process.stdout.getMaxListeners();
45341
45683
  if (useVP) {
45342
45684
  process.stdout.setMaxListeners(0);