@qwen-code/qwen-code 0.21.12 → 0.21.14-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +13 -5
  2. package/bundled/qc-helper/docs/features/code-review.md +18 -13
  3. package/bundled/qc-helper/docs/features/commands.md +120 -8
  4. package/bundled/qc-helper/docs/features/sub-agents.md +2 -2
  5. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
  6. package/bundled/qc-helper/docs/qwen-serve.md +20 -3
  7. package/bundled/review/SKILL.md +130 -82
  8. package/chunks/{MaxSizedBox-ZSJJ2D5S.js → MaxSizedBox-3PZITE2Y.js} +46 -45
  9. package/chunks/{StandaloneSessionPicker-WHUHQXSA.js → StandaloneSessionPicker-2C34PNGO.js} +68 -67
  10. package/chunks/{acp-startup-profiler-SVPUHLXV.js → acp-startup-profiler-HUYGO57H.js} +2 -2
  11. package/chunks/{acpAgent-7JOAESF5.js → acpAgent-3J4NHAYT.js} +1098 -366
  12. package/chunks/{agent-E6V3VXQR.js → agent-VFX4RPP5.js} +42 -41
  13. package/chunks/agent-headless-6WCF4J6N.js +88 -0
  14. package/chunks/{anthropicContentGenerator-YDT4EOKO.js → anthropicContentGenerator-M7XRJMSK.js} +8 -8
  15. package/chunks/{artifact-tool-4GCQQDZI.js → artifact-tool-GEXTOPVO.js} +2 -2
  16. package/chunks/{askUserQuestion-HZJJLR3Z.js → askUserQuestion-B33XRSB7.js} +2 -2
  17. package/chunks/{bridge-NPBV53UA.js → bridge-XR5ZSR7U.js} +46 -45
  18. package/chunks/{ca-4CQ6MYNQ.js → ca-SLZJD6QH.js} +8 -0
  19. package/chunks/{channel-management-service-OADNGQM3.js → channel-management-service-X6LCQUAD.js} +1 -1
  20. package/chunks/{channel-settings-store-4ODLJ4X2.js → channel-settings-store-Z7BUEUJE.js} +50 -49
  21. package/chunks/{channel-worker-group-IHBIHQ45.js → channel-worker-group-TJ35JDPE.js} +4 -4
  22. package/chunks/{channel-worker-manager-GEHYJ5AE.js → channel-worker-manager-G5LKWGOG.js} +4 -4
  23. package/chunks/{channel-worker-supervisor-ZJIIWM4I.js → channel-worker-supervisor-OEVWBHGT.js} +2 -2
  24. package/chunks/{chunk-47BGDLJG.js → chunk-25GHLMQQ.js} +42 -20
  25. package/chunks/{chunk-2ZWH53I4.js → chunk-2B2BF7P7.js} +3 -3
  26. package/chunks/chunk-2C6HJMG3.js +757 -0
  27. package/chunks/{chunk-WM3LUQLO.js → chunk-2JXDFSVE.js} +6 -6
  28. package/chunks/{chunk-OYWVIXHT.js → chunk-2M55OBEB.js} +1 -1
  29. package/chunks/{chunk-B4VN3VDH.js → chunk-2OA3JMRD.js} +5 -5
  30. package/chunks/{chunk-GZDWTBT3.js → chunk-3EZLLVDF.js} +2 -2
  31. package/chunks/chunk-3PWCMXIR.js +9169 -0
  32. package/chunks/{chunk-XAFIL4BD.js → chunk-4KQ2TI2K.js} +5 -5
  33. package/chunks/{chunk-OPVF453Q.js → chunk-4V4DFJBS.js} +3 -3
  34. package/chunks/{chunk-DPTMKFIH.js → chunk-4ZMS3JCR.js} +43 -12
  35. package/chunks/{chunk-6JEIRPLN.js → chunk-55PIFSP2.js} +2 -2
  36. package/chunks/{chunk-V6OBVAST.js → chunk-57KOJ2KZ.js} +1 -1
  37. package/chunks/{chunk-QLTATTPS.js → chunk-5CVO7YES.js} +1 -1
  38. package/chunks/{chunk-OK47XBYH.js → chunk-5IYS4WWR.js} +1 -1
  39. package/chunks/chunk-5MK45KZ3.js +492 -0
  40. package/chunks/{chunk-OWXFBIB6.js → chunk-6DFPR7CS.js} +1 -1
  41. package/chunks/{chunk-YIGGWOJE.js → chunk-6HY6IF3Z.js} +1 -1
  42. package/chunks/{chunk-XDRXOSAD.js → chunk-6LAPGPVA.js} +7 -5
  43. package/chunks/{chunk-Q4ZPYNIZ.js → chunk-6PDOHRN6.js} +4 -4
  44. package/chunks/{chunk-OWGRUU7F.js → chunk-6QFDQMQX.js} +1 -1
  45. package/chunks/{chunk-MUNA4QDC.js → chunk-6VDPDHIP.js} +29 -8
  46. package/chunks/{chunk-MDNUCDKZ.js → chunk-73G3Z7QS.js} +3 -3
  47. package/chunks/{chunk-VIFA5VJD.js → chunk-7OCSX7FC.js} +1 -1
  48. package/chunks/{chunk-D2RNVVH6.js → chunk-AKBOLMUF.js} +96 -18
  49. package/chunks/{chunk-S6TCTH4Z.js → chunk-AQBHJ2IG.js} +12 -12
  50. package/chunks/{chunk-WCEI6J56.js → chunk-BOJNAPUE.js} +2 -2
  51. package/chunks/{chunk-DAV4QFD5.js → chunk-BQWNIPTE.js} +44 -3
  52. package/chunks/{chunk-HOSVOUDK.js → chunk-BUQDLC2G.js} +3 -0
  53. package/chunks/{chunk-LUISTZXI.js → chunk-CH5OFRV7.js} +2 -2
  54. package/chunks/{chunk-G6MUFRNI.js → chunk-CHHABXPE.js} +1 -1
  55. package/chunks/{chunk-4AOVQPJU.js → chunk-CPHEPGAO.js} +1 -1
  56. package/chunks/{chunk-MS7GNABG.js → chunk-CXJHQVEK.js} +8 -0
  57. package/chunks/{chunk-K5IDV3PC.js → chunk-D34RDOLP.js} +12 -2
  58. package/chunks/{chunk-3GM5DLBI.js → chunk-DGJ7O55J.js} +3 -3
  59. package/chunks/{chunk-7KJPO7YH.js → chunk-DRKYT2TR.js} +2 -2
  60. package/chunks/{chunk-PZW46OTB.js → chunk-DVR7XKO5.js} +2 -2
  61. package/chunks/{chunk-CQ6IPDQW.js → chunk-DZCV3ZYU.js} +3 -3
  62. package/chunks/{chunk-ULNWG62W.js → chunk-E3DYKPYZ.js} +3 -3
  63. package/chunks/{chunk-YCHNAKC5.js → chunk-E5RS7LF4.js} +44 -13
  64. package/chunks/{chunk-4NFY2S7N.js → chunk-E7REAOTN.js} +15 -0
  65. package/chunks/chunk-EOCQCNV4.js +3887 -0
  66. package/chunks/{chunk-D7QGE3RT.js → chunk-FAAUPSY2.js} +1 -1
  67. package/chunks/{chunk-2IVYL3IF.js → chunk-FCTLOVYW.js} +1 -1
  68. package/chunks/{chunk-QPBFRWCP.js → chunk-FS5NGKWC.js} +3 -3
  69. package/chunks/{chunk-RQJA2YYO.js → chunk-G6FFFICU.js} +4 -4
  70. package/chunks/{chunk-36XKGB7E.js → chunk-GV3OIADZ.js} +3 -3
  71. package/chunks/{chunk-3AEKDXKT.js → chunk-H4A72DE5.js} +1 -1
  72. package/chunks/{chunk-IH4Z54RJ.js → chunk-HGPMOXLZ.js} +5 -5
  73. package/chunks/{chunk-DG4IQ6JG.js → chunk-I3N2Z25H.js} +3 -3
  74. package/chunks/{chunk-WI6GIM2M.js → chunk-I7NTHW4C.js} +2 -2
  75. package/chunks/{chunk-ZBB5EZZV.js → chunk-IA2K2HJE.js} +2 -2
  76. package/chunks/{chunk-IRSLAS4M.js → chunk-IOTPI425.js} +19 -11
  77. package/chunks/{chunk-ROIJYS5K.js → chunk-ISRHAMNL.js} +3 -3
  78. package/chunks/{chunk-CGM3E75C.js → chunk-J63PKMYA.js} +3 -3
  79. package/chunks/{chunk-PTSEETCO.js → chunk-J6YS7Z25.js} +107 -13
  80. package/chunks/{chunk-ZQUY3ZJU.js → chunk-K3CECR5C.js} +4 -4
  81. package/chunks/{chunk-QBJYSIQ4.js → chunk-K3LPAED5.js} +53 -12
  82. package/chunks/{chunk-FRHQQC2Z.js → chunk-KBXKR5R2.js} +1 -1
  83. package/chunks/{chunk-4KM2SYK5.js → chunk-KC4WMLZO.js} +1491 -10579
  84. package/chunks/{chunk-IX4PWUDU.js → chunk-KSGWAYNE.js} +14350 -8679
  85. package/chunks/{chunk-CPFFU46D.js → chunk-KV27IEHM.js} +1 -1
  86. package/chunks/{chunk-OR64CU46.js → chunk-L6CCLB3G.js} +1 -1
  87. package/chunks/{chunk-M6NDLY2T.js → chunk-LD5VIJ7S.js} +1 -1
  88. package/chunks/{chunk-GXTMEATA.js → chunk-LLR424CQ.js} +18 -15
  89. package/chunks/{chunk-RDVNSJQU.js → chunk-LRDB2OLB.js} +3 -3
  90. package/chunks/{chunk-LSRI3ND3.js → chunk-MA2HEDVP.js} +1 -1
  91. package/chunks/{chunk-DFVXU5YM.js → chunk-MCG53LWC.js} +1 -1
  92. package/chunks/{chunk-YBVVOSOH.js → chunk-MIPFDQAF.js} +1 -1
  93. package/chunks/{chunk-KRXPRVGL.js → chunk-MLXTMF7H.js} +0 -1
  94. package/chunks/{chunk-BSR5AXZR.js → chunk-NRPXRNN4.js} +1 -1
  95. package/chunks/{chunk-X5SLJOMF.js → chunk-NV6LW6FT.js} +4 -4
  96. package/chunks/{chunk-YILJKX2T.js → chunk-NVRMCWTP.js} +10 -6
  97. package/chunks/chunk-NYWWQ437.js +24 -0
  98. package/chunks/{chunk-AKBFSOC5.js → chunk-OBJYN4MX.js} +2 -2
  99. package/chunks/{chunk-NX4A23LY.js → chunk-OJOP26ET.js} +3 -3
  100. package/chunks/{chunk-3GDBZJD6.js → chunk-OLZSWUZR.js} +7 -7
  101. package/chunks/{chunk-K34GJQOZ.js → chunk-OO4FKHLO.js} +4 -4
  102. package/chunks/{chunk-BSSLSQEW.js → chunk-OSAFWBNR.js} +3 -3
  103. package/chunks/{chunk-TMFWI4RC.js → chunk-OVY67CYC.js} +1 -1
  104. package/chunks/{chunk-6ZKSO6K7.js → chunk-P425IVUK.js} +7 -7
  105. package/chunks/{chunk-4XA4QIUA.js → chunk-PMS7O6SA.js} +1 -1
  106. package/chunks/{chunk-LCX5B364.js → chunk-PPTM4O4R.js} +3 -3
  107. package/chunks/{chunk-VPV7WBVT.js → chunk-PT4I7NBA.js} +1 -1
  108. package/chunks/{chunk-3LDGOQXZ.js → chunk-QECSDJET.js} +6 -6
  109. package/chunks/{chunk-FMIH5KMQ.js → chunk-QEJZUXSK.js} +1 -1
  110. package/chunks/{chunk-NLFLYSS4.js → chunk-QFJ5JHQR.js} +1 -1
  111. package/chunks/{chunk-KWX56CHZ.js → chunk-QIHHJKXT.js} +7 -7
  112. package/chunks/{chunk-TDESMS7M.js → chunk-RAQBBGS6.js} +50 -70
  113. package/chunks/{chunk-KEC5FHLM.js → chunk-ROIYNTHJ.js} +3 -3
  114. package/chunks/{chunk-63FNZTWG.js → chunk-RWDNJBWN.js} +2 -2
  115. package/chunks/{chunk-56HVDG3M.js → chunk-RXHBTKMG.js} +6 -6
  116. package/chunks/{chunk-MAKIANMX.js → chunk-S6CXQKDD.js} +3 -3
  117. package/chunks/{chunk-CIDQISGM.js → chunk-SA7GBPEA.js} +5 -5
  118. package/chunks/{chunk-YX2RDGAL.js → chunk-SBRIBTYN.js} +1 -1
  119. package/chunks/{chunk-TTRH3RTQ.js → chunk-SG7ZP5PG.js} +4 -4
  120. package/chunks/{chunk-XH3KAV2G.js → chunk-SGLPDKRT.js} +3 -3
  121. package/chunks/{chunk-JRIVMPD2.js → chunk-SLILKYV2.js} +4 -4
  122. package/chunks/{chunk-NW2GIPG3.js → chunk-SNQZZ765.js} +2 -2
  123. package/chunks/{chunk-I7BT2MME.js → chunk-SR2LYSMT.js} +1 -1
  124. package/chunks/{chunk-TXP5NGG3.js → chunk-SXCOEJO4.js} +1 -1
  125. package/chunks/{chunk-MELQSJOU.js → chunk-TNPWODIZ.js} +1 -1
  126. package/chunks/{chunk-VLHR7F4E.js → chunk-U6RZRKNM.js} +247 -198
  127. package/chunks/{chunk-HTYND72J.js → chunk-UC67T4SF.js} +3 -1
  128. package/chunks/{chunk-HG3UBTJ4.js → chunk-UYDGFWIJ.js} +609 -23
  129. package/chunks/{chunk-6P5EXEBL.js → chunk-VGAAAMRD.js} +1126 -232
  130. package/chunks/{chunk-WDVDVWJ3.js → chunk-VHPMDDPT.js} +6 -6
  131. package/chunks/{chunk-H7TMVHKE.js → chunk-WGHHA7ZH.js} +1 -1
  132. package/chunks/{chunk-FQDCO3CJ.js → chunk-WP4WIUOJ.js} +7 -0
  133. package/chunks/{chunk-5RUCD4ED.js → chunk-WPVUOVYX.js} +3 -3
  134. package/chunks/{chunk-EJOGLSNJ.js → chunk-WSSH2BNO.js} +2 -2
  135. package/chunks/{chunk-5AFGJNY6.js → chunk-WVIABDXV.js} +4 -4
  136. package/chunks/chunk-WZAD4ZNJ.js +59 -0
  137. package/chunks/{chunk-62X3CM7Q.js → chunk-X3YA3YGG.js} +8 -5
  138. package/chunks/{chunk-EBPLKY6U.js → chunk-XC377TLN.js} +5483 -3168
  139. package/chunks/{chunk-KLOMACIR.js → chunk-XLLKYULU.js} +2 -2
  140. package/chunks/{chunk-QSD4UH74.js → chunk-XO24LIZC.js} +254 -56
  141. package/chunks/{chunk-N4SVADAV.js → chunk-XT4RKHVE.js} +5 -4
  142. package/chunks/{chunk-PVXEJB66.js → chunk-XUJNK7Y6.js} +1 -1
  143. package/chunks/{chunk-YBHUXEC6.js → chunk-YECDICIO.js} +3 -3
  144. package/chunks/{chunk-FA5K6YI2.js → chunk-YFPZ3NNC.js} +36 -4
  145. package/chunks/{chunk-46UV252V.js → chunk-YHC2EYYG.js} +35 -38
  146. package/chunks/{chunk-6SPD4Z7F.js → chunk-YIWH3MKK.js} +8 -3
  147. package/chunks/{chunk-ZMY2P4L3.js → chunk-YXC7JYUI.js} +4 -4
  148. package/chunks/{chunk-TB4YFWXG.js → chunk-YZHRN3CF.js} +2 -2
  149. package/chunks/{chunk-TQDFSQQF.js → chunk-YZOSNW4R.js} +1 -1
  150. package/chunks/{chunk-DD6O3ZRD.js → chunk-ZIGC3MUS.js} +3 -5
  151. package/chunks/{chunk-CZ4OWGQQ.js → chunk-ZXEAEZFN.js} +63 -19
  152. package/chunks/{computer-use-F4URV4TU.js → computer-use-ABECHPS5.js} +42 -41
  153. package/chunks/{config-utils-Z3OW3IQG.js → config-utils-NJQA5YLJ.js} +2 -2
  154. package/chunks/{contextCommand-IGSS2U5J.js → contextCommand-4CD5HZQQ.js} +44 -43
  155. package/chunks/{core-runtime-H5CZDN3A.js → core-runtime-2MOVQ4VX.js} +42 -41
  156. package/chunks/{create-sub-session-XT6DLYOE.js → create-sub-session-KRQULJE6.js} +2 -2
  157. package/chunks/{create-sub-session-PA7MFTHK.js → create-sub-session-L6NNHG5N.js} +46 -44
  158. package/chunks/{cron-create-2JZ2TWTF.js → cron-create-NFRZEOQX.js} +4 -4
  159. package/chunks/{cron-delete-CTPD2P26.js → cron-delete-GFVSVO7C.js} +4 -4
  160. package/chunks/{cron-list-V44KHAF6.js → cron-list-NRW34CLU.js} +4 -4
  161. package/chunks/{daemon-GED37WOX.js → daemon-XH76IXOC.js} +436 -29
  162. package/chunks/{daemon-git-worktree-guard-LZDCNJGV.js → daemon-git-worktree-guard-BLXFEG4Q.js} +44 -43
  163. package/chunks/daemon-status-provider-XGD3TPTO.js +103 -0
  164. package/chunks/daemon-trust-policy-THEGCWPO.js +100 -0
  165. package/chunks/{daemon-trust-policy-monitor-2K2YETMT.js → daemon-trust-policy-monitor-L7L4ACWQ.js} +49 -48
  166. package/chunks/{de-UBEBKG6V.js → de-AH4LGCF5.js} +8 -0
  167. package/chunks/{deferred-core-runtime-FKJ3OYE7.js → deferred-core-runtime-YQLHDUGE.js} +42 -41
  168. package/chunks/discovery-X2NV535U.js +27 -0
  169. package/chunks/{display-image-M2ELAVN4.js → display-image-ON3EYFRD.js} +4 -4
  170. package/chunks/{dist-WJ4BHIEW.js → dist-ESS34DHC.js} +72 -0
  171. package/chunks/{earlyInputCapture-WJBSJQUF.js → earlyInputCapture-PCTXNW7N.js} +43 -42
  172. package/chunks/{edit-X73LA4YO.js → edit-QX2EGWYW.js} +45 -43
  173. package/chunks/{en-X6YV7GME.js → en-MD3GP5YL.js} +8 -0
  174. package/chunks/{enter-worktree-CLRQTIVN.js → enter-worktree-EM3ZZ2SB.js} +42 -41
  175. package/chunks/{enterPlanMode-6BDYUQ5T.js → enterPlanMode-ESCMVAKB.js} +42 -41
  176. package/chunks/{environment-WOAJXJDJ.js → environment-TOJI56YV.js} +45 -44
  177. package/chunks/{errors-7OY5MXYY.js → errors-DZ5FWWEM.js} +44 -43
  178. package/chunks/{exit-worktree-TFFJXCRT.js → exit-worktree-KUIJ36XA.js} +42 -41
  179. package/chunks/exitPlanMode-NFVY54FV.js +86 -0
  180. package/chunks/{fast-path-QQLGC37M.js → fast-path-JLQXJSH6.js} +3 -3
  181. package/chunks/{fast-path-settings-LNOFM2YP.js → fast-path-settings-WHX3J3ZI.js} +2 -2
  182. package/chunks/{fr-VENTC2BS.js → fr-ZEML2JWS.js} +8 -0
  183. package/chunks/{gemini-VHE62IJL.js → gemini-I7OT4FWL.js} +92 -91
  184. package/chunks/{geminiContentGenerator-VSHIEGAQ.js → geminiContentGenerator-GRIS77NJ.js} +6 -6
  185. package/chunks/{glob-VMEEDDLO.js → glob-7TBUUV6R.js} +42 -41
  186. package/chunks/{goal-tools-M4UDAZXP.js → goal-tools-K5OHOJ6B.js} +56 -12
  187. package/chunks/{grep-F4UAR7KX.js → grep-743SYWCZ.js} +42 -41
  188. package/chunks/handleAutoUpdate-GAOYUYOD.js +95 -0
  189. package/chunks/{i18n-ETW24DHW.js → i18n-2ITURYX6.js} +43 -42
  190. package/chunks/{image-gen-YPK2AZT4.js → image-gen-4OIWDZD6.js} +10 -10
  191. package/chunks/initializer-OC7LWA6X.js +101 -0
  192. package/chunks/{installationInfo-P7OTIR4P.js → installationInfo-CO47QX3Q.js} +43 -42
  193. package/chunks/{ja-QHT4EQTO.js → ja-UM5B2HMD.js} +8 -0
  194. package/chunks/{keychain-token-storage-NKKCUHI2.js → keychain-token-storage-3XFJ5ZB2.js} +2 -2
  195. package/chunks/list-ATR2SFWT.js +104 -0
  196. package/chunks/{list-agents-O6WSY4CT.js → list-agents-OSVDFI6S.js} +2 -2
  197. package/chunks/loadedSettingsAdapter-NK4B7AGK.js +98 -0
  198. package/chunks/{loggingContentGenerator-J2J2AANS.js → loggingContentGenerator-3WXBU5TQ.js} +67 -41
  199. package/chunks/{loop-wakeup-GVQRMUKS.js → loop-wakeup-HWVUU5CF.js} +5 -5
  200. package/chunks/{ls-6W2D7TKU.js → ls-D3HUFHDP.js} +4 -4
  201. package/chunks/{lsp-NJ4KFBI2.js → lsp-3QDDJTCS.js} +2 -2
  202. package/chunks/{managed-npm-update-WMV5ITKU.js → managed-npm-update-4SSBWI2D.js} +43 -42
  203. package/chunks/mcp-C62AE2QI.js +98 -0
  204. package/chunks/{monitor-2MM23VDV.js → monitor-FEYEGASA.js} +42 -41
  205. package/chunks/nonInteractiveCli-AJEV5ZWO.js +165 -0
  206. package/chunks/{notebook-edit-QD4TRKLY.js → notebook-edit-SLLTEY4O.js} +46 -44
  207. package/chunks/{openaiContentGenerator-KLHSPVN2.js → openaiContentGenerator-WLUGIAPX.js} +27 -26
  208. package/chunks/{pidfile-RQGZBNXT.js → pidfile-TV2VWUMB.js} +43 -42
  209. package/chunks/{processUtils-HZZDA2VV.js → processUtils-3IN2ZR55.js} +2 -2
  210. package/chunks/proper-lockfile-3LHWIM44.js +8 -0
  211. package/chunks/{pt-VL3I5RNY.js → pt-5BMJ3XYH.js} +8 -0
  212. package/chunks/{qwenContentGenerator-T75M2Z3B.js → qwenContentGenerator-GSGRFPJE.js} +47 -46
  213. package/chunks/{qwenOAuth2-5QZU444W.js → qwenOAuth2-JLSTIS4Z.js} +9 -9
  214. package/chunks/{read-file-LOVUSBJC.js → read-file-6PZZRGZZ.js} +15 -13
  215. package/chunks/{read-mcp-resource-GWCP23WG.js → read-mcp-resource-XD54ZQMC.js} +2 -2
  216. package/chunks/{record-artifact-IYQDEYMV.js → record-artifact-GLU3UWBV.js} +5 -3
  217. package/chunks/{resumeHistoryUtils-LVKSSQII.js → resumeHistoryUtils-5GEWKOOO.js} +49 -48
  218. package/chunks/ripGrep-FX7GBGFN.js +86 -0
  219. package/chunks/{ru-4RCKL4PY.js → ru-6GL66ORV.js} +8 -0
  220. package/chunks/{run-qwen-serve-GZW7B4WK.js → run-qwen-serve-7RHU3NSV.js} +423 -212
  221. package/chunks/{runtime-MYRXEO2E.js → runtime-EPOXAMLP.js} +52 -51
  222. package/chunks/{scheduler-DPTPI6FW.js → scheduler-F4Y7ENVV.js} +44 -43
  223. package/chunks/{sdk-exporters-http-NHBYB5FZ.js → sdk-exporters-http-NC746HLT.js} +3 -3
  224. package/chunks/{sdk-impl-SK4P5WON.js → sdk-impl-YVL7BP6Y.js} +3 -3
  225. package/chunks/{send-message-O7FO63UK.js → send-message-TNBG5EVA.js} +7 -7
  226. package/chunks/{serve-XCG4XCDA.js → serve-LQV4TN5A.js} +49 -50
  227. package/chunks/{server-AWQHKXLG.js → server-IZCKLIYQ.js} +5042 -1725
  228. package/chunks/{session-P5FKNCNR.js → session-52ZGTDVB.js} +87 -85
  229. package/chunks/{settings-CSYVIP2R.js → settings-WCVB34HW.js} +48 -47
  230. package/chunks/{shell-EGTSUO2P.js → shell-33BIUBLH.js} +42 -41
  231. package/chunks/{skill-IFUD72GF.js → skill-IYVQ2QNK.js} +20 -18
  232. package/chunks/{skill-settings-YOE7LBHE.js → skill-settings-YG4ZS4OZ.js} +48 -47
  233. package/chunks/{spawnChannel-PQSZIOLY.js → spawnChannel-BLA4YT4W.js} +44 -43
  234. package/chunks/{standalone-update-RB2EGUSF.js → standalone-update-ALRIPWSM.js} +44 -43
  235. package/chunks/{startInteractiveUI-KMYUJ2MU.js → startInteractiveUI-PISBXWKA.js} +614 -294
  236. package/chunks/{syntheticOutput-DVHJMUGV.js → syntheticOutput-7GWFIDXT.js} +3 -3
  237. package/chunks/{task-create-4NC7PDI4.js → task-create-EILHJJB7.js} +11 -11
  238. package/chunks/{task-list-LBSRMOC7.js → task-list-WGJR6YL5.js} +21 -7
  239. package/chunks/{task-stop-YFNATTIM.js → task-stop-X37KYTKB.js} +2 -2
  240. package/chunks/{task-update-BPLM52GD.js → task-update-XZAHVXJ5.js} +86 -15
  241. package/chunks/{team-create-B6A6MJBT.js → team-create-CIQDCC6A.js} +43 -43
  242. package/chunks/{team-delete-MKYMYBFM.js → team-delete-UEP4QOOT.js} +6 -6
  243. package/chunks/{team-plan-approval-5WO3CXXU.js → team-plan-approval-664XCRB4.js} +42 -41
  244. package/chunks/{terminal-image-renderer-BTRE2GEU.js → terminal-image-renderer-TEBO6ONY.js} +44 -43
  245. package/chunks/theme-manager-3CIFH2JV.js +90 -0
  246. package/chunks/{todoWrite-K5K7NRE5.js → todoWrite-ATS62CAP.js} +4 -4
  247. package/chunks/{tool-search-QNBLXUGR.js → tool-search-IJX5JHJB.js} +19 -17
  248. package/chunks/{total-session-admission-N4E5SFBO.js → total-session-admission-XBK2NVRV.js} +46 -45
  249. package/chunks/{trustedFolders-MQS46LIU.js → trustedFolders-OOFNLRWK.js} +43 -42
  250. package/chunks/{update-relaunch-536KRL33.js → update-relaunch-EIG7EYAQ.js} +5 -5
  251. package/chunks/{updateCheck-QJI2SYWF.js → updateCheck-KYDCBLSF.js} +46 -45
  252. package/chunks/{useAutoAcceptIndicator-7QASHD46.js → useAutoAcceptIndicator-RFX3KNBN.js} +52 -51
  253. package/chunks/{validateNonInterActiveAuth-ZNRGWBLV.js → validateNonInterActiveAuth-MZXSAITU.js} +83 -81
  254. package/chunks/{version-DBEQAFRW.js → version-PJC6ZNXV.js} +1 -1
  255. package/chunks/{web-fetch-MBIVXKPE.js → web-fetch-XXICVGKQ.js} +21 -18
  256. package/chunks/{web-search-4LBIN6VF.js → web-search-LHPM6QWC.js} +9 -9
  257. package/chunks/{workflow-LNMA55HY.js → workflow-4CUO2BV7.js} +159 -57
  258. package/chunks/workspace-providers-status-G4MUGH3X.js +101 -0
  259. package/chunks/{workspace-registration-store-BGRKKIYR.js → workspace-registration-store-QMDMFWBE.js} +2 -2
  260. package/chunks/{workspace-registry-L4NCJ34K.js → workspace-registry-FKBB4MZK.js} +48 -46
  261. package/chunks/{workspace-service-LOXYKYTR.js → workspace-service-TIDTTA65.js} +55 -54
  262. package/chunks/workspace-skills-status-LBC2TZKM.js +101 -0
  263. package/chunks/{workspace-trust-reconciler-H36TCR2S.js → workspace-trust-reconciler-4KJ567XP.js} +58 -56
  264. package/chunks/{write-file-JJAY7JSP.js → write-file-R6LAEER5.js} +42 -41
  265. package/chunks/{zh-TW-SQ4HTSCW.js → zh-TW-LVLBK4KF.js} +8 -0
  266. package/chunks/{zh-LMSTK4WD.js → zh-UBMWS2BJ.js} +8 -0
  267. package/chunks/{zoom-image-4MVVVM7E.js → zoom-image-XLCK6DDK.js} +20 -17
  268. package/cli.js +13 -13
  269. package/locales/ca.js +13 -0
  270. package/locales/de.js +12 -0
  271. package/locales/en.js +11 -0
  272. package/locales/fr.js +13 -0
  273. package/locales/ja.js +13 -0
  274. package/locales/pt.js +12 -0
  275. package/locales/ru.js +12 -0
  276. package/locales/zh-TW.js +11 -0
  277. package/locales/zh.js +11 -0
  278. package/package.json +3 -3
  279. package/web-shell/assets/{arc-B-89zHN4.js → arc-DItbX0DI.js} +1 -1
  280. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BkcOncHk.js → architectureDiagram-3BPJPVTR-CmnIlH8y.js} +1 -1
  281. package/web-shell/assets/{blockDiagram-GPEHLZMM-DQ4yboaF.js → blockDiagram-GPEHLZMM-pObnB9kw.js} +1 -1
  282. package/web-shell/assets/{c4Diagram-AAUBKEIU-C_8ZjPDI.js → c4Diagram-AAUBKEIU-BNBmMS0Y.js} +1 -1
  283. package/web-shell/assets/channel-hZnMfWA9.js +1 -0
  284. package/web-shell/assets/{chunk-2J33WTMH-naKVe1Bm.js → chunk-2J33WTMH-Dz4JBOO6.js} +1 -1
  285. package/web-shell/assets/{chunk-4BX2VUAB-DdoViKT2.js → chunk-4BX2VUAB-Cz2GnvAR.js} +1 -1
  286. package/web-shell/assets/{chunk-55IACEB6-DUDQZEwU.js → chunk-55IACEB6-CC6kOQYx.js} +1 -1
  287. package/web-shell/assets/{chunk-727SXJPM-BqpDTR5s.js → chunk-727SXJPM-Z4lY4gbh.js} +1 -1
  288. package/web-shell/assets/{chunk-AQP2D5EJ-CdmEknkT.js → chunk-AQP2D5EJ-Yz0hZr3D.js} +1 -1
  289. package/web-shell/assets/{chunk-FMBD7UC4-CH7fFTLB.js → chunk-FMBD7UC4-nKmTWTv9.js} +1 -1
  290. package/web-shell/assets/{chunk-ND2GUHAM-ObgSuFKF.js → chunk-ND2GUHAM-CjZz0f6Y.js} +1 -1
  291. package/web-shell/assets/{chunk-QZHKN3VN-D9fKdv_s.js → chunk-QZHKN3VN-Bab3FpuS.js} +1 -1
  292. package/web-shell/assets/classDiagram-4FO5ZUOK-BRnxm8DX.js +1 -0
  293. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BRnxm8DX.js +1 -0
  294. package/web-shell/assets/{cose-bilkent-S5V4N54A-CvzATMx9.js → cose-bilkent-S5V4N54A-BuSAGFox.js} +1 -1
  295. package/web-shell/assets/{dagre-BM42HDAG-M_xU21QW.js → dagre-BM42HDAG-CRZXTg3g.js} +1 -1
  296. package/web-shell/assets/{diagram-2AECGRRQ-CNrl9sW1.js → diagram-2AECGRRQ-BFx1Ayrz.js} +1 -1
  297. package/web-shell/assets/{diagram-5GNKFQAL-CUweVT6T.js → diagram-5GNKFQAL-B2hMZ3gS.js} +1 -1
  298. package/web-shell/assets/{diagram-KO2AKTUF-D3n6Lxjo.js → diagram-KO2AKTUF-DKxAQLmc.js} +1 -1
  299. package/web-shell/assets/{diagram-LMA3HP47-0SeFPK4t.js → diagram-LMA3HP47-Bo1xGqVY.js} +1 -1
  300. package/web-shell/assets/{diagram-OG6HWLK6-DAgyEwge.js → diagram-OG6HWLK6-B9NG78d-.js} +1 -1
  301. package/web-shell/assets/{erDiagram-TEJ5UH35-CzxBBDIK.js → erDiagram-TEJ5UH35-DltQKiqQ.js} +1 -1
  302. package/web-shell/assets/{flowDiagram-I6XJVG4X-B0uj0jyo.js → flowDiagram-I6XJVG4X-5xXGmS4I.js} +1 -1
  303. package/web-shell/assets/{ganttDiagram-6RSMTGT7-DFzcj5km.js → ganttDiagram-6RSMTGT7-bhGL5n0l.js} +1 -1
  304. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DylJ_Fc9.js → gitGraphDiagram-PVQCEYII-ZYnz9hgh.js} +1 -1
  305. package/web-shell/assets/{index-BKSAnXU9.js → index-CBBeUArD.js} +1 -1
  306. package/web-shell/assets/index-CbgU-jUo.css +5 -0
  307. package/web-shell/assets/index-_nhzXqab.js +1750 -0
  308. package/web-shell/assets/{infoDiagram-5YYISTIA-BYMcJVMI.js → infoDiagram-5YYISTIA-Cg-jamQf.js} +1 -1
  309. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-t1quI1S3.js → ishikawaDiagram-YF4QCWOH-CcmvKlyq.js} +1 -1
  310. package/web-shell/assets/{journeyDiagram-JHISSGLW-YM_QVUJm.js → journeyDiagram-JHISSGLW-BRsOQZp1.js} +1 -1
  311. package/web-shell/assets/{kanban-definition-UN3LZRKU-jw8OddK1.js → kanban-definition-UN3LZRKU-xW-dmEHK.js} +1 -1
  312. package/web-shell/assets/{linear-Dlr3RVuP.js → linear-ClBfEZH2.js} +1 -1
  313. package/web-shell/assets/{mermaid.core-CqGKzNzd.js → mermaid.core-D65NDkzc.js} +5 -5
  314. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BqureoOS.js → mindmap-definition-RKZ34NQL-CyvFslYa.js} +1 -1
  315. package/web-shell/assets/{pieDiagram-4H26LBE5-Da20HkK1.js → pieDiagram-4H26LBE5-BwSefMyG.js} +1 -1
  316. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-BsNlMvJy.js → quadrantDiagram-W4KKPZXB-GqBJspFS.js} +1 -1
  317. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DzVCQCse.js → requirementDiagram-4Y6WPE33-B137PlTJ.js} +1 -1
  318. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BMo16voT.js → sankeyDiagram-5OEKKPKP-maHkkt8i.js} +1 -1
  319. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Bgi-pdHk.js → sequenceDiagram-3UESZ5HK-DJ1mRaG3.js} +1 -1
  320. package/web-shell/assets/{stateDiagram-AJRCARHV-xaPQXwGk.js → stateDiagram-AJRCARHV-aRmP7Q4i.js} +1 -1
  321. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Db39gvZ_.js +1 -0
  322. package/web-shell/assets/{timeline-definition-PNZ67QCA-C_9RuvKG.js → timeline-definition-PNZ67QCA-CIQ3BRPA.js} +1 -1
  323. package/web-shell/assets/{vennDiagram-CIIHVFJN-Bgu6vdla.js → vennDiagram-CIIHVFJN-DR9VPd5h.js} +1 -1
  324. package/web-shell/assets/{wardley-L42UT6IY-CFTZ8IrX.js → wardley-L42UT6IY-ZcfIbT4D.js} +1 -1
  325. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BASW9Vmt.js → wardleyDiagram-YWT4CUSO-D0jgPi4T.js} +1 -1
  326. package/web-shell/assets/{xychartDiagram-2RQKCTM6--Nh-CD3F.js → xychartDiagram-2RQKCTM6-BGWU4s5o.js} +1 -1
  327. package/web-shell/index.html +2 -2
  328. package/chunks/agent-headless-OEQNFOMH.js +0 -87
  329. package/chunks/chunk-DEDESZDL.js +0 -358
  330. package/chunks/chunk-MPHPFVKK.js +0 -48
  331. package/chunks/chunk-UI5UGEF4.js +0 -3576
  332. package/chunks/daemon-status-provider-QYM57Z44.js +0 -102
  333. package/chunks/daemon-trust-policy-TSRVEYZR.js +0 -99
  334. package/chunks/discovery-XLHITE74.js +0 -220
  335. package/chunks/exitPlanMode-WDURQMIU.js +0 -85
  336. package/chunks/handleAutoUpdate-GN7Z6QAC.js +0 -94
  337. package/chunks/initializer-UA6KQ7MS.js +0 -100
  338. package/chunks/list-GRAMIQOT.js +0 -103
  339. package/chunks/loadedSettingsAdapter-5O2TDS3I.js +0 -97
  340. package/chunks/mcp-XLP33CAI.js +0 -97
  341. package/chunks/nonInteractiveCli-KTA5K6FS.js +0 -163
  342. package/chunks/ripGrep-ZJSHKB6H.js +0 -85
  343. package/chunks/theme-manager-XL2N5SBY.js +0 -89
  344. package/chunks/workspace-providers-status-PDDMI6ST.js +0 -100
  345. package/chunks/workspace-skills-status-IJ5FOQI6.js +0 -100
  346. package/web-shell/assets/channel-Du2WFns8.js +0 -1
  347. package/web-shell/assets/classDiagram-4FO5ZUOK-Zw0HafH6.js +0 -1
  348. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Zw0HafH6.js +0 -1
  349. package/web-shell/assets/index-BIGQygTL.css +0 -5
  350. package/web-shell/assets/index-J7OMTqAN.js +0 -1789
  351. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-D5RqimXD.js +0 -1
  352. package/chunks/{chunk-SYHXR6WM.js → chunk-4W5U2TUT.js} +3 -3
  353. /package/chunks/{chunk-NTTBXH7U.js → chunk-UGK4K2N2.js} +0 -0
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  TUI_CHAT_RECORDING_FAILURE_MESSAGE,
12
12
  reportChatRecordingFailureToAdapter
13
- } from "./chunk-WI6GIM2M.js";
13
+ } from "./chunk-I7NTHW4C.js";
14
14
  import {
15
15
  MAX_SUGGESTIONS_TO_SHOW,
16
16
  SESSION_MENTION_PREFIX,
@@ -22,10 +22,10 @@ import {
22
22
  matchMcpServerPrefix,
23
23
  resolveAtCommandQuery,
24
24
  sanitizeDisplayText
25
- } from "./chunk-X5SLJOMF.js";
25
+ } from "./chunk-NV6LW6FT.js";
26
26
  import {
27
27
  StreamJsonOutputAdapter
28
- } from "./chunk-MUNA4QDC.js";
28
+ } from "./chunk-6VDPDHIP.js";
29
29
  import {
30
30
  BuiltinCommandLoader,
31
31
  BundledSkillLoader,
@@ -34,6 +34,7 @@ import {
34
34
  FileCommandLoader,
35
35
  MAX_STACKED_SKILLS,
36
36
  McpPromptLoader,
37
+ SLASH_COMMANDS_SKIP_RECORDING,
37
38
  SavedWorkflowLoader,
38
39
  SkillCommandLoader,
39
40
  addConfigToMatcherGroup,
@@ -69,17 +70,18 @@ import {
69
70
  resetBackgroundStateForSessionSwitch,
70
71
  serializeUserPromptExpansionPrompt,
71
72
  supportsMatchers
72
- } from "./chunk-QSD4UH74.js";
73
+ } from "./chunk-XO24LIZC.js";
74
+ import "./chunk-X3YA3YGG.js";
73
75
  import {
74
76
  startPostRenderPrefetches
75
- } from "./chunk-S6TCTH4Z.js";
77
+ } from "./chunk-AQBHJ2IG.js";
76
78
  import {
77
79
  EXTENSION_RELOAD_FAILED_REASON,
78
80
  ExtensionRefreshState,
79
81
  appEvents,
80
82
  cleanupReviewWorktreeLeases,
81
83
  loadHierarchicalGeminiMemory
82
- } from "./chunk-IX4PWUDU.js";
84
+ } from "./chunk-KSGWAYNE.js";
83
85
  import {
84
86
  AboutBox,
85
87
  BaseSelectionList,
@@ -157,20 +159,21 @@ import {
157
159
  useUIActions,
158
160
  useUIState,
159
161
  useVirtualViewport
160
- } from "./chunk-VLHR7F4E.js";
162
+ } from "./chunk-U6RZRKNM.js";
161
163
  import {
162
164
  getCommandDisplayName,
163
165
  getCommandSourceBadge
164
- } from "./chunk-4XA4QIUA.js";
166
+ } from "./chunk-PMS7O6SA.js";
165
167
  import {
166
168
  computeSessionStats,
167
169
  levelLabel
168
- } from "./chunk-MDNUCDKZ.js";
170
+ } from "./chunk-73G3Z7QS.js";
171
+ import "./chunk-4WGODMVR.js";
169
172
  import {
170
173
  MaxSizedBox,
171
174
  OverflowProvider,
172
175
  useOverflowState
173
- } from "./chunk-CGM3E75C.js";
176
+ } from "./chunk-J63PKMYA.js";
174
177
  import {
175
178
  GeminiRespondingSpinner,
176
179
  GeminiSpinner,
@@ -187,7 +190,7 @@ import {
187
190
  useStreamingContext,
188
191
  waitForGoalRuntime,
189
192
  wrapAnsi
190
- } from "./chunk-GXTMEATA.js";
193
+ } from "./chunk-LLR424CQ.js";
191
194
  import {
192
195
  formatDuration,
193
196
  formatRelativeTime,
@@ -195,10 +198,10 @@ import {
195
198
  } from "./chunk-3SH53ANB.js";
196
199
  import {
197
200
  theme
198
- } from "./chunk-OWGRUU7F.js";
201
+ } from "./chunk-6QFDQMQX.js";
199
202
  import {
200
203
  stopAndGetCapturedInput
201
- } from "./chunk-TQDFSQQF.js";
204
+ } from "./chunk-YZOSNW4R.js";
202
205
  import {
203
206
  disableKittyProtocol,
204
207
  isKittyProtocolEnabled,
@@ -207,13 +210,13 @@ import {
207
210
  } from "./chunk-NYX53SV4.js";
208
211
  import {
209
212
  useAutoAcceptIndicator
210
- } from "./chunk-CQ6IPDQW.js";
213
+ } from "./chunk-DZCV3ZYU.js";
211
214
  import {
212
215
  KeypressProvider,
213
216
  useFocus,
214
217
  useKeypress,
215
218
  useKeypressContext
216
- } from "./chunk-56HVDG3M.js";
219
+ } from "./chunk-RXHBTKMG.js";
217
220
  import {
218
221
  BEL,
219
222
  OSC_PREFIX,
@@ -226,25 +229,10 @@ import {
226
229
  oscKittyNotify,
227
230
  saveClipboardImage,
228
231
  writeOsc52
229
- } from "./chunk-NW2GIPG3.js";
232
+ } from "./chunk-SNQZZ765.js";
230
233
  import {
231
234
  require_jsx_runtime
232
235
  } from "./chunk-SV5PQVQE.js";
233
- import "./chunk-62X3CM7Q.js";
234
- import "./chunk-4WGODMVR.js";
235
- import {
236
- setUpdateHandler
237
- } from "./chunk-WDVDVWJ3.js";
238
- import {
239
- isHistoryItemVisibleAfterRestore
240
- } from "./chunk-EKTCKZV5.js";
241
- import "./chunk-B4VN3VDH.js";
242
- import {
243
- AUTO_THEME_NAME,
244
- DEFAULT_THEME,
245
- themeManager
246
- } from "./chunk-OYWVIXHT.js";
247
- import "./chunk-KW7NOTN6.js";
248
236
  import {
249
237
  Box_default,
250
238
  Static,
@@ -259,34 +247,47 @@ import {
259
247
  use_stdin_default,
260
248
  use_stdout_default
261
249
  } from "./chunk-2IIJTXYF.js";
250
+ import {
251
+ relaunchApp
252
+ } from "./chunk-MCG53LWC.js";
253
+ import {
254
+ setUpdateHandler
255
+ } from "./chunk-VHPMDDPT.js";
256
+ import {
257
+ isHistoryItemVisibleAfterRestore
258
+ } from "./chunk-EKTCKZV5.js";
259
+ import "./chunk-2OA3JMRD.js";
260
+ import {
261
+ AUTO_THEME_NAME,
262
+ DEFAULT_THEME,
263
+ themeManager
264
+ } from "./chunk-2M55OBEB.js";
265
+ import "./chunk-KW7NOTN6.js";
262
266
  import {
263
267
  require_react
264
268
  } from "./chunk-5QWWOFGG.js";
265
- import "./chunk-ZQUY3ZJU.js";
269
+ import "./chunk-K3CECR5C.js";
266
270
  import {
267
271
  getErrorMessage as getErrorMessage2
268
- } from "./chunk-RDVNSJQU.js";
269
- import "./chunk-XAFIL4BD.js";
270
- import "./chunk-OPVF453Q.js";
272
+ } from "./chunk-LRDB2OLB.js";
273
+ import "./chunk-4KQ2TI2K.js";
274
+ import "./chunk-4V4DFJBS.js";
271
275
  import "./chunk-YAF2MQZ6.js";
272
- import "./chunk-ZBB5EZZV.js";
276
+ import "./chunk-IA2K2HJE.js";
273
277
  import {
274
278
  MAX_INLINE_IMAGES_PER_ITEM,
275
279
  collectInlineImages,
276
280
  getInlineImageData
277
- } from "./chunk-TXP5NGG3.js";
278
- import {
279
- relaunchApp
280
- } from "./chunk-DFVXU5YM.js";
281
- import "./chunk-TDESMS7M.js";
281
+ } from "./chunk-SXCOEJO4.js";
282
+ import "./chunk-RAQBBGS6.js";
282
283
  import "./chunk-6H67XLET.js";
283
284
  import {
284
285
  openQwenAsrRealtimeStream,
285
286
  openVoiceStream,
286
287
  openVoiceStreamWithRetry
287
- } from "./chunk-EJOGLSNJ.js";
288
- import "./chunk-UI5UGEF4.js";
289
- import "./chunk-TMFWI4RC.js";
288
+ } from "./chunk-WSSH2BNO.js";
289
+ import "./chunk-EOCQCNV4.js";
290
+ import "./chunk-OVY67CYC.js";
290
291
  import {
291
292
  cpLen,
292
293
  cpSlice,
@@ -298,8 +299,8 @@ import {
298
299
  sanitizeTerminalText,
299
300
  stripUnsafeCharacters,
300
301
  toCodePoints
301
- } from "./chunk-4NFY2S7N.js";
302
- import "./chunk-V6OBVAST.js";
302
+ } from "./chunk-E7REAOTN.js";
303
+ import "./chunk-57KOJ2KZ.js";
303
304
  import {
304
305
  stringWidth
305
306
  } from "./chunk-2MIN6GRR.js";
@@ -315,40 +316,42 @@ import {
315
316
  isStreamingVoiceModel,
316
317
  resolveVoiceStreamConfig,
317
318
  transcribeVoiceAudio
318
- } from "./chunk-LCX5B364.js";
319
+ } from "./chunk-PPTM4O4R.js";
319
320
  import {
320
321
  formatUnsupportedVoiceModelMessage,
321
322
  isSelectableVoiceModel
322
- } from "./chunk-VIFA5VJD.js";
323
- import "./chunk-H7TMVHKE.js";
323
+ } from "./chunk-7OCSX7FC.js";
324
+ import "./chunk-WGHHA7ZH.js";
324
325
  import {
325
326
  getExtendedSystemInfo
326
- } from "./chunk-RQJA2YYO.js";
327
+ } from "./chunk-G6FFFICU.js";
328
+ import "./chunk-7U5G6JXI.js";
329
+ import "./chunk-WCCLLK7X.js";
327
330
  import {
328
331
  isInlineModelOverrideAllowed
329
- } from "./chunk-ROIJYS5K.js";
332
+ } from "./chunk-ISRHAMNL.js";
330
333
  import {
331
334
  computeWorkspaceSkillListUpdates,
332
335
  resolveSkillSettings,
333
336
  skillSettingStrings
334
337
  } from "./chunk-Z4X5MTRT.js";
335
- import "./chunk-WM3LUQLO.js";
338
+ import "./chunk-2JXDFSVE.js";
336
339
  import {
337
340
  requestConsentInteractive,
338
341
  requestConsentOrFail
339
- } from "./chunk-IH4Z54RJ.js";
342
+ } from "./chunk-HGPMOXLZ.js";
340
343
  import "./chunk-57OAHC2Y.js";
341
- import "./chunk-BSR5AXZR.js";
344
+ import "./chunk-NRPXRNN4.js";
342
345
  import "./chunk-45NQKMYB.js";
343
- import "./chunk-OK47XBYH.js";
346
+ import "./chunk-5IYS4WWR.js";
347
+ import "./chunk-V6WHFGST.js";
344
348
  import {
345
349
  createLoadedSettingsAdapter
346
- } from "./chunk-2IVYL3IF.js";
347
- import "./chunk-7U5G6JXI.js";
348
- import "./chunk-WCCLLK7X.js";
350
+ } from "./chunk-FCTLOVYW.js";
349
351
  import "./chunk-ZLCT4C5A.js";
350
- import "./chunk-V6WHFGST.js";
351
352
  import "./chunk-2AUM35J5.js";
353
+ import "./chunk-DRKYT2TR.js";
354
+ import "./chunk-WP4WIUOJ.js";
352
355
  import "./chunk-6PLDPT2C.js";
353
356
  import "./chunk-FYJ7W2PI.js";
354
357
  import "./chunk-YP5KH5Y7.js";
@@ -357,12 +360,12 @@ import "./chunk-ALMR3E6Q.js";
357
360
  import "./chunk-HIBNSEJE.js";
358
361
  import "./chunk-M5GB774H.js";
359
362
  import "./chunk-3VUENPWF.js";
360
- import "./chunk-3AEKDXKT.js";
361
363
  import "./chunk-AW27A43Y.js";
362
364
  import "./chunk-IW6RQPQB.js";
365
+ import "./chunk-H4A72DE5.js";
363
366
  import {
364
367
  loadMcpApprovals
365
- } from "./chunk-3LDGOQXZ.js";
368
+ } from "./chunk-QECSDJET.js";
366
369
  import {
367
370
  CORRUPTED_SUFFIX,
368
371
  SettingScope,
@@ -384,11 +387,11 @@ import {
384
387
  settingExistsInScope,
385
388
  validateSettingValue,
386
389
  writeOutputLanguageAndRegisterPath
387
- } from "./chunk-3GDBZJD6.js";
390
+ } from "./chunk-OLZSWUZR.js";
388
391
  import "./chunk-RKUWKYED.js";
389
392
  import {
390
393
  TOGGLE_TYPES
391
- } from "./chunk-FA5K6YI2.js";
394
+ } from "./chunk-YFPZ3NNC.js";
392
395
  import "./chunk-GOXKNSDZ.js";
393
396
  import "./chunk-IDS7MSUP.js";
394
397
  import {
@@ -396,25 +399,24 @@ import {
396
399
  localizeToolDisplayName,
397
400
  t,
398
401
  ta
399
- } from "./chunk-IRSLAS4M.js";
402
+ } from "./chunk-IOTPI425.js";
400
403
  import "./chunk-5EJZE3FP.js";
401
- import "./chunk-XH3KAV2G.js";
402
- import "./chunk-MS7GNABG.js";
403
- import "./chunk-7KJPO7YH.js";
404
+ import "./chunk-SGLPDKRT.js";
405
+ import "./chunk-CXJHQVEK.js";
406
+ import "./chunk-NF5J2WFA.js";
404
407
  import {
405
408
  getCliVersion
406
- } from "./chunk-OWXFBIB6.js";
409
+ } from "./chunk-6DFPR7CS.js";
407
410
  import "./chunk-WZMH7II3.js";
408
411
  import {
409
412
  isWorkspaceTrusted,
410
413
  loadTrustedFolders
411
- } from "./chunk-ZMY2P4L3.js";
414
+ } from "./chunk-YXC7JYUI.js";
412
415
  import {
413
416
  require_strip_json_comments
414
417
  } from "./chunk-NPQ5ZKRP.js";
415
418
  import "./chunk-MR3PXB6E.js";
416
419
  import "./chunk-XFSFZCM5.js";
417
- import "./chunk-NF5J2WFA.js";
418
420
  import {
419
421
  ALIBABA_PROVIDERS,
420
422
  AsyncFzf,
@@ -507,6 +509,7 @@ import {
507
509
  readWorktreeSessionMarker,
508
510
  refreshMemoryAfterManagedWrite,
509
511
  refreshMemoryInstruction,
512
+ registerSession,
510
513
  resolveBaseUrl,
511
514
  resolveBranchName,
512
515
  resolveMetadataKey,
@@ -520,88 +523,84 @@ import {
520
523
  validateWorkflowName,
521
524
  watchRepoBranch,
522
525
  writeRuntimeStatus
523
- } from "./chunk-EBPLKY6U.js";
526
+ } from "./chunk-XC377TLN.js";
524
527
  import "./chunk-GOFAQQZA.js";
525
528
  import "./chunk-5M6IDOMF.js";
526
529
  import {
527
530
  stripAnsi
528
531
  } from "./chunk-TWPJO254.js";
529
532
  import "./chunk-CQ35AJ4Z.js";
530
- import "./chunk-QPBFRWCP.js";
531
- import "./chunk-JRIVMPD2.js";
532
- import "./chunk-YILJKX2T.js";
533
- import "./chunk-D2RNVVH6.js";
533
+ import "./chunk-FS5NGKWC.js";
534
+ import "./chunk-SLILKYV2.js";
535
+ import "./chunk-NVRMCWTP.js";
536
+ import "./chunk-AKBOLMUF.js";
534
537
  import "./chunk-6PVPNMXU.js";
535
538
  import {
536
539
  resolveModelId
537
- } from "./chunk-I7BT2MME.js";
540
+ } from "./chunk-SR2LYSMT.js";
538
541
  import "./chunk-IRH27ZC2.js";
539
542
  import "./chunk-QHWCP53L.js";
540
- import "./chunk-AKBFSOC5.js";
541
- import "./chunk-DEDESZDL.js";
543
+ import "./chunk-OBJYN4MX.js";
544
+ import "./chunk-2C6HJMG3.js";
542
545
  import {
543
546
  promptIdContext
544
547
  } from "./chunk-O6GEWCJA.js";
545
548
  import "./chunk-T26EAKDL.js";
546
549
  import "./chunk-ZPJWUGCS.js";
547
550
  import "./chunk-CPBF7KYF.js";
548
- import "./chunk-5RUCD4ED.js";
549
- import "./chunk-KRXPRVGL.js";
551
+ import {
552
+ APPROVAL_MODES
553
+ } from "./chunk-RWDNJBWN.js";
554
+ import "./chunk-WPVUOVYX.js";
550
555
  import {
551
556
  HOOKS_CONFIG_FIELDS
552
- } from "./chunk-YBVVOSOH.js";
553
- import "./chunk-CPFFU46D.js";
554
- import "./chunk-ULNWG62W.js";
557
+ } from "./chunk-MIPFDQAF.js";
558
+ import "./chunk-MLXTMF7H.js";
559
+ import "./chunk-KV27IEHM.js";
560
+ import "./chunk-E3DYKPYZ.js";
555
561
  import {
556
562
  elapsedActiveTime,
557
563
  goalRequiresExactPermit
558
- } from "./chunk-DPTMKFIH.js";
559
- import {
560
- APPROVAL_MODES
561
- } from "./chunk-63FNZTWG.js";
562
- import "./chunk-3GM5DLBI.js";
563
- import "./chunk-K34GJQOZ.js";
564
+ } from "./chunk-4ZMS3JCR.js";
565
+ import "./chunk-DGJ7O55J.js";
566
+ import "./chunk-OO4FKHLO.js";
564
567
  import "./chunk-SAH4BD2J.js";
565
- import "./chunk-KLOMACIR.js";
568
+ import "./chunk-XLLKYULU.js";
566
569
  import {
567
570
  runOutsideAgentContext
568
- } from "./chunk-VPV7WBVT.js";
571
+ } from "./chunk-PT4I7NBA.js";
569
572
  import "./chunk-S6LOFUVP.js";
570
573
  import "./chunk-2J3OJGTL.js";
571
574
  import {
572
575
  getStartupContextLength,
573
576
  isSystemReminderContent
574
- } from "./chunk-TTRH3RTQ.js";
577
+ } from "./chunk-SG7ZP5PG.js";
575
578
  import "./chunk-K623ENWT.js";
576
579
  import "./chunk-AQ37AY7B.js";
577
580
  import {
578
581
  isPathWithinRoot
579
- } from "./chunk-FRHQQC2Z.js";
582
+ } from "./chunk-KBXKR5R2.js";
580
583
  import {
581
584
  osc8Hyperlink,
582
585
  qwenOAuth2Events,
583
586
  sanitizeForOsc,
584
587
  supportsHyperlinks,
585
588
  wrapForMultiplexer
586
- } from "./chunk-DG4IQ6JG.js";
589
+ } from "./chunk-I3N2Z25H.js";
587
590
  import "./chunk-NAVJD2PQ.js";
588
- import "./chunk-KEC5FHLM.js";
589
- import "./chunk-2ZWH53I4.js";
591
+ import "./chunk-ROIYNTHJ.js";
592
+ import "./chunk-2B2BF7P7.js";
590
593
  import "./chunk-P3QQPMQA.js";
591
- import "./chunk-TB4YFWXG.js";
592
- import "./chunk-D7QGE3RT.js";
594
+ import "./chunk-YZHRN3CF.js";
595
+ import "./chunk-FAAUPSY2.js";
593
596
  import {
594
597
  REASONING_EFFORT_TIERS,
595
598
  applyReasoningEffort
596
599
  } from "./chunk-KM73TBQ4.js";
597
- import {
598
- getUnsupportedImageFormatWarning,
599
- isSupportedImageMimeType
600
- } from "./chunk-MPHPFVKK.js";
601
600
  import "./chunk-AXMWHKXA.js";
602
601
  import "./chunk-GLCZKT5V.js";
603
602
  import "./chunk-DJ2GSRLV.js";
604
- import "./chunk-NLFLYSS4.js";
603
+ import "./chunk-QFJ5JHQR.js";
605
604
  import {
606
605
  ApiCancelEvent,
607
606
  AuthEvent,
@@ -617,7 +616,6 @@ import {
617
616
  addMCPStatusChangeListener,
618
617
  formatFullTurnVisionNotice,
619
618
  formatVisionBridgeNotice,
620
- getAllGeminiMdFilenames,
621
619
  getAllMCPServerStatuses,
622
620
  getFullTurnVisionModelSelector,
623
621
  getMCPServerStatus,
@@ -641,45 +639,52 @@ import {
641
639
  runVisionBridge,
642
640
  shouldRunVisionBridge,
643
641
  splitImageParts
644
- } from "./chunk-4KM2SYK5.js";
642
+ } from "./chunk-KC4WMLZO.js";
645
643
  import "./chunk-YRLW2MSX.js";
646
644
  import "./chunk-VGC4I5JJ.js";
645
+ import {
646
+ getAllGeminiMdFilenames
647
+ } from "./chunk-3PWCMXIR.js";
647
648
  import {
648
649
  AUTO_MEMORY_INDEX_FILENAME,
649
650
  getAutoMemoryProjectStateDir,
650
651
  getAutoMemoryRoot,
651
652
  getUserAutoMemoryRoot,
652
653
  isAnyAutoMemPath
653
- } from "./chunk-G6MUFRNI.js";
654
+ } from "./chunk-CHHABXPE.js";
654
655
  import {
655
656
  runSideQuery
656
- } from "./chunk-LSRI3ND3.js";
657
- import "./chunk-PVXEJB66.js";
657
+ } from "./chunk-MA2HEDVP.js";
658
+ import "./chunk-XUJNK7Y6.js";
658
659
  import {
659
660
  ToolNames,
660
661
  isShellProgressData
661
- } from "./chunk-YIGGWOJE.js";
662
- import "./chunk-KWX56CHZ.js";
662
+ } from "./chunk-6HY6IF3Z.js";
663
+ import "./chunk-QIHHJKXT.js";
663
664
  import {
664
665
  MAINLINE_CODER_MODEL
665
666
  } from "./chunk-F6WFNA7U.js";
666
- import "./chunk-46UV252V.js";
667
+ import "./chunk-WZAD4ZNJ.js";
667
668
  import {
668
669
  DEFAULT_TOKEN_LIMIT
669
670
  } from "./chunk-FPGTNKCP.js";
670
- import "./chunk-4AOVQPJU.js";
671
- import "./chunk-PZW46OTB.js";
671
+ import {
672
+ getUnsupportedImageFormatWarning,
673
+ isSupportedImageMimeType
674
+ } from "./chunk-YHC2EYYG.js";
675
+ import "./chunk-CPHEPGAO.js";
676
+ import "./chunk-DVR7XKO5.js";
672
677
  import {
673
678
  atomicWriteFileSync
674
- } from "./chunk-YBHUXEC6.js";
679
+ } from "./chunk-YECDICIO.js";
675
680
  import {
676
681
  endInteractionSpan,
677
682
  getActiveInteractionSpan,
678
683
  isBinary,
679
684
  redactUrlCredentials
680
- } from "./chunk-N4SVADAV.js";
685
+ } from "./chunk-XT4RKHVE.js";
681
686
  import "./chunk-HHJLM3WQ.js";
682
- import "./chunk-K5IDV3PC.js";
687
+ import "./chunk-D34RDOLP.js";
683
688
  import {
684
689
  Storage,
685
690
  UnauthorizedError,
@@ -691,13 +696,13 @@ import {
691
696
  isNodeError,
692
697
  shortenPath,
693
698
  tildeifyPath
694
- } from "./chunk-HOSVOUDK.js";
699
+ } from "./chunk-BUQDLC2G.js";
695
700
  import "./chunk-VOQXFAY5.js";
696
- import "./chunk-MELQSJOU.js";
701
+ import "./chunk-TNPWODIZ.js";
697
702
  import {
698
703
  registerCleanup,
699
704
  runExitCleanup
700
- } from "./chunk-OR64CU46.js";
705
+ } from "./chunk-L6CCLB3G.js";
701
706
  import {
702
707
  finalizeStartupProfile,
703
708
  profileCheckpoint
@@ -2376,6 +2381,7 @@ function isSyntheticHistoryItem(item) {
2376
2381
  case "gemini_content":
2377
2382
  case "tool_group":
2378
2383
  case "btw":
2384
+ case "advisor":
2379
2385
  case "memory_saved":
2380
2386
  case "about":
2381
2387
  case "help":
@@ -27867,6 +27873,7 @@ function AgentViewProvider({
27867
27873
  const switchToAgent = (0, import_react94.useCallback)(
27868
27874
  (agentId) => {
27869
27875
  if (agents.has(agentId)) {
27876
+ setAgentShellFocused(false);
27870
27877
  setActiveView(agentId);
27871
27878
  }
27872
27879
  },
@@ -27876,14 +27883,24 @@ function AgentViewProvider({
27876
27883
  const ids = ["main", ...agents.keys()];
27877
27884
  const currentIndex = ids.indexOf(activeView);
27878
27885
  const nextIndex = (currentIndex + 1) % ids.length;
27886
+ setAgentShellFocused(false);
27879
27887
  setActiveView(ids[nextIndex]);
27880
27888
  }, [agents, activeView]);
27881
27889
  const switchToPrevious = (0, import_react94.useCallback)(() => {
27882
27890
  const ids = ["main", ...agents.keys()];
27883
27891
  const currentIndex = ids.indexOf(activeView);
27884
27892
  const prevIndex = (currentIndex - 1 + ids.length) % ids.length;
27893
+ setAgentShellFocused(false);
27885
27894
  setActiveView(ids[prevIndex]);
27886
27895
  }, [agents, activeView]);
27896
+ const initialViewRef = (0, import_react94.useRef)(true);
27897
+ (0, import_react94.useEffect)(() => {
27898
+ if (initialViewRef.current) {
27899
+ initialViewRef.current = false;
27900
+ return;
27901
+ }
27902
+ setAgentShellFocused(false);
27903
+ }, [activeView]);
27887
27904
  const registerAgent = (0, import_react94.useCallback)(
27888
27905
  (agentId, interactiveAgent, modelId, color, modelName) => {
27889
27906
  setAgents((prev) => {
@@ -33015,22 +33032,54 @@ var AgentChatMissing = /* @__PURE__ */ __name(({ label }) => /* @__PURE__ */ (0,
33015
33032
 
33016
33033
  // packages/cli/src/ui/components/agent-view/AgentChatView.tsx
33017
33034
  var import_jsx_runtime126 = __toESM(require_jsx_runtime(), 1);
33035
+ var debugLogger31 = createDebugLogger("AGENT_TAB_RENDER");
33018
33036
  var AgentChatView = /* @__PURE__ */ __name(({ agentId }) => {
33019
33037
  const { agents } = useAgentViewState();
33038
+ const { setAgentShellFocused } = useAgentViewActions();
33020
33039
  const agent = agents.get(agentId);
33021
33040
  const interactiveAgent = agent?.interactiveAgent;
33022
33041
  const core = interactiveAgent?.getCore();
33023
33042
  if (!agent || !interactiveAgent || !core) {
33024
33043
  return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(AgentChatMissing, { label: `Agent "${agentId}" not found.` });
33025
33044
  }
33026
- return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
33027
- AgentChatContent,
33028
- {
33029
- core,
33030
- interactiveAgent,
33031
- instanceKey: agentId,
33032
- modelName: agent.modelName
33033
- }
33045
+ return (
33046
+ // Non-fatal per-tab containment (#9290): the app-level boundary is
33047
+ // FATAL — a render error that reaches it logs [FATAL_RENDER_ERROR]
33048
+ // and exits the whole session. An errored or incomplete teammate
33049
+ // whose transcript throws during render must degrade THIS tab only,
33050
+ // keeping the session and the other tabs alive. Keyed by agentId so
33051
+ // switching tabs starts from fresh boundary state: one crashed tab
33052
+ // must not strand every later tab in its fallback.
33053
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
33054
+ ErrorBoundary,
33055
+ {
33056
+ fallback: (error) => /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)(Box_default, { flexDirection: "column", paddingX: 1, children: [
33057
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Text, { color: theme.status.error, bold: true, children: "Something went wrong while rendering this agent tab." }),
33058
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Text, { color: theme.text.secondary, children: sanitizeTerminalText(error.message) }),
33059
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Text, { color: theme.text.secondary, dimColor: true, children: "The session is still running; other tabs are unaffected." }),
33060
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Text, { color: theme.text.secondary, dimColor: true, children: "Switch to another tab and back to retry rendering this tab." }),
33061
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Text, { color: theme.text.secondary, dimColor: true, children: "Set QWEN_DEBUG_LOG_FILE=1 and reproduce for a full log." })
33062
+ ] }),
33063
+ onError: (error, info) => {
33064
+ setAgentShellFocused(false);
33065
+ debugLogger31.error(
33066
+ `[AGENT_TAB_RENDER_ERROR] agentId=${agentId} ${error.message}
33067
+ ${info.componentStack ?? ""}
33068
+ ${error.stack ?? ""}`
33069
+ );
33070
+ },
33071
+ children: /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
33072
+ AgentChatContent,
33073
+ {
33074
+ core,
33075
+ interactiveAgent,
33076
+ instanceKey: agentId,
33077
+ modelName: agent.modelName
33078
+ }
33079
+ )
33080
+ },
33081
+ agentId
33082
+ )
33034
33083
  );
33035
33084
  }, "AgentChatView");
33036
33085
 
@@ -33857,7 +33906,7 @@ function installTerminalRedrawOptimizer(stdout) {
33857
33906
  __name(installTerminalRedrawOptimizer, "installTerminalRedrawOptimizer");
33858
33907
 
33859
33908
  // packages/cli/src/ui/utils/terminal-resize-reflow.ts
33860
- var debugLogger31 = createDebugLogger("RESIZE_REFLOW");
33909
+ var debugLogger32 = createDebugLogger("RESIZE_REFLOW");
33861
33910
  var CLEAR_VIEWPORT = base_exports.clearViewport;
33862
33911
  var ESC2 = "\x1B[";
33863
33912
  var CLEAR_TERMINAL = base_exports.clearTerminal;
@@ -33935,7 +33984,7 @@ function installTerminalResizeReflow(stdout, options = {}) {
33935
33984
  let barePrintableCount = 0;
33936
33985
  let handoffUntil = 0;
33937
33986
  let clearUntil = 0;
33938
- debugLogger31.debug("installed", { width: lastWidth, isVP });
33987
+ debugLogger32.debug("installed", { width: lastWidth, isVP });
33939
33988
  const modelFrame = /* @__PURE__ */ __name((content, bypassMin = false) => {
33940
33989
  if (!bypassMin && content.split("\n").length < MIN_FRAME_LINES) return;
33941
33990
  model.content = content;
@@ -33944,7 +33993,7 @@ function installTerminalResizeReflow(stdout, options = {}) {
33944
33993
  }, "modelFrame");
33945
33994
  const onResize = /* @__PURE__ */ __name(() => {
33946
33995
  const width = stdout.columns ?? lastWidth;
33947
- debugLogger31.debug("resize-event", {
33996
+ debugLogger32.debug("resize-event", {
33948
33997
  width,
33949
33998
  lastWidth,
33950
33999
  modeled: model.content.length > 0
@@ -33955,7 +34004,7 @@ function installTerminalResizeReflow(stdout, options = {}) {
33955
34004
  } else {
33956
34005
  pendingAmplify = reflowModel(model, width);
33957
34006
  }
33958
- debugLogger31.debug("shrink", {
34007
+ debugLogger32.debug("shrink", {
33959
34008
  from: lastWidth,
33960
34009
  to: width,
33961
34010
  pendingAmplify,
@@ -33983,9 +34032,9 @@ function installTerminalResizeReflow(stdout, options = {}) {
33983
34032
  barePrintableCount = 0;
33984
34033
  handoffUntil = Date.now() + HANDOFF_WINDOW_MS;
33985
34034
  }
33986
- debugLogger31.debug("match", { printable });
34035
+ debugLogger32.debug("match", { printable });
33987
34036
  if (isVP && Date.now() < clearUntil) {
33988
- debugLogger31.debug("clear-viewport");
34037
+ debugLogger32.debug("clear-viewport");
33989
34038
  chunk = chunk.slice(0, match.index) + CLEAR_VIEWPORT + chunk.slice(match.index + match[0].length);
33990
34039
  } else if (pendingAmplify > 0) {
33991
34040
  const count = countOccurrences(match[0], ERASE_LINE);
@@ -33997,7 +34046,7 @@ function installTerminalResizeReflow(stdout, options = {}) {
33997
34046
  CURSOR_DOWN_PATTERN,
33998
34047
  (_m, n) => `${ESC2}${Number(n) + delta}B`
33999
34048
  );
34000
- debugLogger31.debug("amplify", { original: count, target });
34049
+ debugLogger32.debug("amplify", { original: count, target });
34001
34050
  chunk = prefix + base_exports.eraseLines(target) + chunk.slice(match.index + match[0].length);
34002
34051
  }
34003
34052
  }
@@ -34050,7 +34099,7 @@ var import_react117 = __toESM(require_react(), 1);
34050
34099
  import process12 from "node:process";
34051
34100
  import os4 from "node:os";
34052
34101
  import v8 from "v8";
34053
- var debugLogger32 = createDebugLogger("MEMORY_MONITOR");
34102
+ var debugLogger33 = createDebugLogger("MEMORY_MONITOR");
34054
34103
  var MEMORY_WARNING_THRESHOLD = Math.min(
34055
34104
  7 * 1024 * 1024 * 1024,
34056
34105
  Math.floor(os4.totalmem() * 0.85)
@@ -34072,23 +34121,23 @@ var useMemoryMonitor = /* @__PURE__ */ __name(({
34072
34121
  const rss = memUsage.rss / 1024 / 1024;
34073
34122
  const external = memUsage.external / 1024 / 1024;
34074
34123
  const arrayBuffers = memUsage.arrayBuffers / 1024 / 1024;
34075
- if (debugLogger32.isEnabled()) {
34076
- debugLogger32.debug(
34124
+ if (debugLogger33.isEnabled()) {
34125
+ debugLogger33.debug(
34077
34126
  `[MEMORY_USAGE] heapUsed=${heapUsed.toFixed(1)}MB, heapTotal=${heapTotal.toFixed(1)}MB, rss=${rss.toFixed(1)}MB, external=${external.toFixed(1)}MB, arrayBuffers=${arrayBuffers.toFixed(1)}MB, heapUtilization=${(heapUsed / heapTotal * 100).toFixed(1)}%`
34078
34127
  );
34079
34128
  }
34080
34129
  const now = Date.now();
34081
34130
  if (compactOldItems && memUsage.heapUsed > MEMORY_UI_COMPACT_THRESHOLD() && now - lastCompactRef.current > UI_COMPACT_COOLDOWN_MS) {
34082
34131
  lastCompactRef.current = now;
34083
- if (debugLogger32.isEnabled()) {
34084
- debugLogger32.debug(
34132
+ if (debugLogger33.isEnabled()) {
34133
+ debugLogger33.debug(
34085
34134
  `[UI_COMPACT] heapUsed=${heapUsed.toFixed(1)}MB exceeds ${(MEMORY_UI_COMPACT_THRESHOLD() / 1024 / 1024).toFixed(0)}MB threshold, compacting UI history`
34086
34135
  );
34087
34136
  }
34088
34137
  try {
34089
34138
  compactOldItems();
34090
34139
  } catch (err) {
34091
- debugLogger32.error(
34140
+ debugLogger33.error(
34092
34141
  `[UI_COMPACT] compactOldItems failed: ${err instanceof Error ? err.message : String(err)}`
34093
34142
  );
34094
34143
  }
@@ -34097,7 +34146,7 @@ var useMemoryMonitor = /* @__PURE__ */ __name(({
34097
34146
  const warningIntervalId = setInterval(() => {
34098
34147
  const usage = process12.memoryUsage();
34099
34148
  if (usage.rss > MEMORY_WARNING_THRESHOLD) {
34100
- debugLogger32.warn(
34149
+ debugLogger33.warn(
34101
34150
  `[MEMORY_WARNING] High memory usage detected: ${(usage.rss / (1024 * 1024 * 1024)).toFixed(2)} GB`
34102
34151
  );
34103
34152
  addItem(
@@ -34250,7 +34299,7 @@ var FEEDBACK_SHOW_PROBABILITY = 0.25;
34250
34299
  var MIN_TOOL_CALLS = 10;
34251
34300
  var MIN_USER_MESSAGES = 5;
34252
34301
  var FEEDBACK_COOLDOWN_HOURS = 24;
34253
- var debugLogger33 = createDebugLogger("FEEDBACK_DIALOG");
34302
+ var debugLogger34 = createDebugLogger("FEEDBACK_DIALOG");
34254
34303
  var lastMessageIsAIResponse = /* @__PURE__ */ __name((history) => history.length > 0 && history[history.length - 1].type === "gemini" /* GEMINI */, "lastMessageIsAIResponse");
34255
34304
  var getFeedbackLastShownTimestampFromFile = /* @__PURE__ */ __name(() => {
34256
34305
  try {
@@ -34262,7 +34311,7 @@ var getFeedbackLastShownTimestampFromFile = /* @__PURE__ */ __name(() => {
34262
34311
  }
34263
34312
  } catch (error) {
34264
34313
  if (isNodeError(error) && error.code !== "ENOENT") {
34265
- debugLogger33.warn(
34314
+ debugLogger34.warn(
34266
34315
  "Failed to read feedbackLastShownTimestamp from settings file:",
34267
34316
  error
34268
34317
  );
@@ -35111,7 +35160,7 @@ __name(useDeleteCommand, "useDeleteCommand");
35111
35160
  init_esbuild_shims();
35112
35161
  var import_react129 = __toESM(require_react(), 1);
35113
35162
  import process15 from "node:process";
35114
- var debugLogger34 = createDebugLogger("SLASH_COMMAND_PROCESSOR");
35163
+ var debugLogger35 = createDebugLogger("SLASH_COMMAND_PROCESSOR");
35115
35164
  function hasUserPromptExpansionHooks(config) {
35116
35165
  return !!config && !config.getDisableAllHooks?.() && (config.hasHooksForEvent?.("UserPromptExpansion") ?? false);
35117
35166
  }
@@ -35124,18 +35173,6 @@ function serializeHistoryItemForRecording(item) {
35124
35173
  return clone;
35125
35174
  }
35126
35175
  __name(serializeHistoryItemForRecording, "serializeHistoryItemForRecording");
35127
- var SLASH_COMMANDS_SKIP_RECORDING = /* @__PURE__ */ new Set([
35128
- "quit",
35129
- "exit",
35130
- "clear",
35131
- "reset",
35132
- "new",
35133
- "resume",
35134
- "delete",
35135
- "branch",
35136
- "btw",
35137
- "history"
35138
- ]);
35139
35176
  var SLASH_COMMAND_ROOTS_HIDE_INVOCATION = /* @__PURE__ */ new Set([
35140
35177
  "auth",
35141
35178
  "diff",
@@ -35694,7 +35731,7 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
35694
35731
  }
35695
35732
  setCommands(commandService.getCommandsForMode("interactive"));
35696
35733
  } catch (error) {
35697
- debugLogger34.error("Failed to load slash commands:", error);
35734
+ debugLogger35.error("Failed to load slash commands:", error);
35698
35735
  } finally {
35699
35736
  if (!controller.signal.aborted) {
35700
35737
  resolveCommandReloads(reloadTrigger);
@@ -36126,7 +36163,7 @@ var useSlashCommandProcessor = /* @__PURE__ */ __name((config, settings, history
36126
36163
  }
36127
36164
  invocationSentToModel = true;
36128
36165
  if (invocationItemId !== void 0) {
36129
- debugLogger34.debug(
36166
+ debugLogger35.debug(
36130
36167
  `Marked slash command invocation as model-sent: /${resolvedCommandPath.join(
36131
36168
  " "
36132
36169
  )}`
@@ -36258,7 +36295,8 @@ ${commandToExecute.subCommands.map((sc) => ` - ${sc.name}: ${sc.description ||
36258
36295
  if (config?.getChatRecordingService) {
36259
36296
  const chatRecorder = config.getChatRecordingService();
36260
36297
  const primaryCommand = resolvedCommandPath[0] || trimmed.replace(/^[/?]/, "").split(/\s+/u)[0] || trimmed;
36261
- const shouldRecord = !delegatedToRecursiveInvocation && !SLASH_COMMANDS_SKIP_RECORDING.has(primaryCommand);
36298
+ const isBuiltInAdvisor = primaryCommand === "advisor" && commandToExecute?.kind === "built-in" /* BUILT_IN */;
36299
+ const shouldRecord = !delegatedToRecursiveInvocation && !isBuiltInAdvisor && !SLASH_COMMANDS_SKIP_RECORDING.has(primaryCommand);
36262
36300
  try {
36263
36301
  if (shouldRecord) {
36264
36302
  chatRecorder?.recordSlashCommand({
@@ -36275,7 +36313,7 @@ ${commandToExecute.subCommands.map((sc) => ` - ${sc.name}: ${sc.description ||
36275
36313
  });
36276
36314
  }
36277
36315
  } catch (recordError) {
36278
- debugLogger34.error(
36316
+ debugLogger35.error(
36279
36317
  "[slashCommand] Failed to record slash command:",
36280
36318
  recordError
36281
36319
  );
@@ -36452,7 +36490,7 @@ import os5 from "node:os";
36452
36490
  import fs16 from "node:fs";
36453
36491
  var OUTPUT_UPDATE_INTERVAL_MS = 1e3;
36454
36492
  var MAX_OUTPUT_LENGTH = 1e4;
36455
- var debugLogger35 = createDebugLogger("SHELL_COMMAND_PROCESSOR");
36493
+ var debugLogger36 = createDebugLogger("SHELL_COMMAND_PROCESSOR");
36456
36494
  function copyString(value) {
36457
36495
  return value.split("").join("");
36458
36496
  }
@@ -36603,7 +36641,7 @@ var useShellCommandProcessor = /* @__PURE__ */ __name((addItemToHistory, setPend
36603
36641
  config.getShouldUseNodePtyShell(),
36604
36642
  shellExecutionConfig
36605
36643
  );
36606
- debugLogger35.debug(terminalHeight, terminalWidth);
36644
+ debugLogger36.debug(terminalHeight, terminalWidth);
36607
36645
  executionPid = pid;
36608
36646
  if (pid) {
36609
36647
  setActiveShellPtyId(pid);
@@ -36757,7 +36795,7 @@ var useStateAndRef = /* @__PURE__ */ __name((initialValue) => {
36757
36795
  init_esbuild_shims();
36758
36796
  var import_react134 = __toESM(require_react(), 1);
36759
36797
  import * as path11 from "node:path";
36760
- var debugLogger36 = createDebugLogger("REACT_TOOL_SCHEDULER");
36798
+ var debugLogger37 = createDebugLogger("REACT_TOOL_SCHEDULER");
36761
36799
  function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorClose, onToolResultFullTurnModel) {
36762
36800
  const [toolCallsForDisplay, setToolCallsForDisplay] = (0, import_react134.useState)([]);
36763
36801
  const outputUpdateHandler = (0, import_react134.useCallback)(
@@ -36834,7 +36872,12 @@ function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorC
36834
36872
  const schedule = (0, import_react134.useCallback)(
36835
36873
  (request, signal, modelOverride) => {
36836
36874
  if (!modelOverride?.endsWith("\0")) {
36837
- void scheduler.schedule(request, signal);
36875
+ void scheduler.schedule(request, signal).catch((error) => {
36876
+ if (signal.aborted) return;
36877
+ debugLogger37.error(
36878
+ `Tool scheduling failed: ${error instanceof Error ? error.message : String(error)}`
36879
+ );
36880
+ });
36838
36881
  return;
36839
36882
  }
36840
36883
  void (async () => {
@@ -36844,7 +36887,7 @@ function useReactToolScheduler(onComplete, config, getPreferredEditor, onEditorC
36844
36887
  });
36845
36888
  await scheduler.schedule(request, signal, runtimeView);
36846
36889
  } catch (error) {
36847
- debugLogger36.error(
36890
+ debugLogger37.error(
36848
36891
  `Full-turn tool scheduling failed: ${error instanceof Error ? error.message : String(error)}`
36849
36892
  );
36850
36893
  const message = "Full-turn tool scheduling failed. The tool was not executed.";
@@ -36912,7 +36955,7 @@ function mapCoreStatusToDisplayStatus(coreStatus) {
36912
36955
  return "Pending" /* Pending */;
36913
36956
  default: {
36914
36957
  const exhaustiveCheck = coreStatus;
36915
- debugLogger36.warn(`Unknown core status encountered: ${exhaustiveCheck}`);
36958
+ debugLogger37.warn(`Unknown core status encountered: ${exhaustiveCheck}`);
36916
36959
  return "Error" /* Error */;
36917
36960
  }
36918
36961
  }
@@ -37260,11 +37303,11 @@ function useMessageQueue() {
37260
37303
  __name(useMessageQueue, "useMessageQueue");
37261
37304
 
37262
37305
  // packages/cli/src/ui/hooks/useGeminiStream.ts
37263
- var debugLogger37 = createDebugLogger("GEMINI_STREAM");
37306
+ var debugLogger38 = createDebugLogger("GEMINI_STREAM");
37264
37307
  function applyModelOverride(modelOverrideRef, inlineActiveRef, value, isInline) {
37265
37308
  modelOverrideRef.current = value;
37266
37309
  inlineActiveRef.current = isInline;
37267
- debugLogger37.debug(
37310
+ debugLogger38.debug(
37268
37311
  `model override ${value === void 0 ? "cleared" : `set to ${value}`} (inline=${isInline})`
37269
37312
  );
37270
37313
  }
@@ -37473,20 +37516,20 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37473
37516
  expectedRevision: binding.permit.revision
37474
37517
  });
37475
37518
  } catch (error) {
37476
- debugLogger37.warn("Failed to pause invalid Goal tool batch", error);
37519
+ debugLogger38.warn("Failed to pause invalid Goal tool batch", error);
37477
37520
  }
37478
37521
  }
37479
37522
  try {
37480
37523
  await config.getChatRecordingService()?.flush();
37481
37524
  } catch (error) {
37482
- debugLogger37.warn("Failed to flush invalid Goal tool batch", error);
37525
+ debugLogger38.warn("Failed to flush invalid Goal tool batch", error);
37483
37526
  }
37484
37527
  const currentPermit = runtime.permitForTurn(binding.turnKey);
37485
37528
  if (currentPermit && sameGoalPermit(currentPermit, binding.permit)) {
37486
37529
  await runtime.finishTurn(binding.permit);
37487
37530
  }
37488
37531
  } catch (error) {
37489
- debugLogger37.warn("Failed to close invalid Goal tool batch", error);
37532
+ debugLogger38.warn("Failed to close invalid Goal tool batch", error);
37490
37533
  } finally {
37491
37534
  releaseGoalTurn(binding);
37492
37535
  }
@@ -37500,7 +37543,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37500
37543
  const runtime = await config.getGoalRuntimeReady();
37501
37544
  await runtime.releaseTurn(turnKey);
37502
37545
  } catch (error) {
37503
- debugLogger37.warn(
37546
+ debugLogger38.warn(
37504
37547
  `Failed to release undelivered Goal turn ${turnKey}`,
37505
37548
  error
37506
37549
  );
@@ -37542,6 +37585,38 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37542
37585
  const dualOutput = useDualOutput();
37543
37586
  const [isResponding, setIsResponding] = (0, import_react136.useState)(false);
37544
37587
  const activeModelStreamsRef = (0, import_react136.useRef)(0);
37588
+ const submissionActivitiesByGenerationRef = (0, import_react136.useRef)(/* @__PURE__ */ new Map());
37589
+ const settleSubmissionStateIfIdle = (0, import_react136.useCallback)(() => {
37590
+ const currentGeneration = submissionLeaseGenerationRef.current;
37591
+ if ((submissionActivitiesByGenerationRef.current.get(currentGeneration) ?? 0) === 0 && activeModelStreamsRef.current === 0) {
37592
+ setIsResponding(false);
37593
+ setSubmissionInFlight(false);
37594
+ }
37595
+ }, [setSubmissionInFlight]);
37596
+ const retainSubmissionActivity = (0, import_react136.useCallback)(
37597
+ (generation) => {
37598
+ submissionActivitiesByGenerationRef.current.set(
37599
+ generation,
37600
+ (submissionActivitiesByGenerationRef.current.get(generation) ?? 0) + 1
37601
+ );
37602
+ return () => {
37603
+ const remainingActivities = Math.max(
37604
+ 0,
37605
+ (submissionActivitiesByGenerationRef.current.get(generation) ?? 1) - 1
37606
+ );
37607
+ if (remainingActivities === 0) {
37608
+ submissionActivitiesByGenerationRef.current.delete(generation);
37609
+ } else {
37610
+ submissionActivitiesByGenerationRef.current.set(
37611
+ generation,
37612
+ remainingActivities
37613
+ );
37614
+ }
37615
+ settleSubmissionStateIfIdle();
37616
+ };
37617
+ },
37618
+ [settleSubmissionStateIfIdle]
37619
+ );
37545
37620
  const [thought, setThought] = (0, import_react136.useState)(null);
37546
37621
  const historyRef = (0, import_react136.useRef)(history);
37547
37622
  (0, import_react136.useLayoutEffect)(() => {
@@ -37624,6 +37699,15 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37624
37699
  const interactionOwnersByToolCallIdRef = (0, import_react136.useRef)(
37625
37700
  /* @__PURE__ */ new Map()
37626
37701
  );
37702
+ const continuationOwnersByToolCallIdRef = (0, import_react136.useRef)(
37703
+ /* @__PURE__ */ new Map()
37704
+ );
37705
+ const detachedToolContinuationAbortControllersRef = (0, import_react136.useRef)(
37706
+ /* @__PURE__ */ new Set()
37707
+ );
37708
+ const pendingCompletedToolBatchesRef = (0, import_react136.useRef)([]);
37709
+ const handleCompletedToolsRef = (0, import_react136.useRef)(async () => {
37710
+ });
37627
37711
  const immediateDuplicateToolResponsesRef = (0, import_react136.useRef)(null);
37628
37712
  const streamingResponseLengthRef = (0, import_react136.useRef)(0);
37629
37713
  const [isReceivingContent, setIsReceivingContent] = (0, import_react136.useState)(false);
@@ -37636,15 +37720,20 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37636
37720
  const [toolCalls, scheduleToolCalls, markToolsAsSubmitted] = useReactToolScheduler(
37637
37721
  async (completedToolCallsFromScheduler) => {
37638
37722
  if (completedToolCallsFromScheduler.length > 0) {
37639
- const projectRoot = config.getProjectRoot();
37640
- const toolGroupDisplay = mapToDisplay(
37641
- completedToolCallsFromScheduler,
37642
- projectRoot
37643
- );
37644
- addItem(toolGroupDisplay, Date.now());
37645
- await handleCompletedTools(
37646
- completedToolCallsFromScheduler
37647
- );
37723
+ const releaseToolCompletionActivity = isSubmittingQueryRef.current ? retainSubmissionActivity(submissionLeaseGenerationRef.current) : void 0;
37724
+ try {
37725
+ const projectRoot = config.getProjectRoot();
37726
+ const toolGroupDisplay = mapToDisplay(
37727
+ completedToolCallsFromScheduler,
37728
+ projectRoot
37729
+ );
37730
+ addItem(toolGroupDisplay, Date.now());
37731
+ await handleCompletedTools(
37732
+ completedToolCallsFromScheduler
37733
+ );
37734
+ } finally {
37735
+ releaseToolCompletionActivity?.();
37736
+ }
37648
37737
  }
37649
37738
  },
37650
37739
  config,
@@ -37782,10 +37871,14 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37782
37871
  }
37783
37872
  }, [streamingState, config, history]);
37784
37873
  const cancelOngoingRequest = (0, import_react136.useCallback)(() => {
37785
- if (streamingState !== "responding" /* Responding */) {
37874
+ if (turnCancelledRef.current) {
37875
+ for (const controller of detachedToolContinuationAbortControllersRef.current) {
37876
+ controller.abort();
37877
+ }
37878
+ detachedToolContinuationAbortControllersRef.current.clear();
37786
37879
  return;
37787
37880
  }
37788
- if (turnCancelledRef.current) {
37881
+ if (streamingState !== "responding" /* Responding */) {
37789
37882
  return;
37790
37883
  }
37791
37884
  for (const flushBufferedStreamEvents of flushBufferedStreamEventsRef.current) {
@@ -37795,7 +37888,15 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37795
37888
  turnCancelledRef.current = true;
37796
37889
  submissionLeaseGenerationRef.current += 1;
37797
37890
  setSubmissionInFlight(false);
37798
- abortControllerRef.current?.abort();
37891
+ const foregroundAbortController = abortControllerRef.current;
37892
+ if (foregroundAbortController && !foregroundAbortController.signal.aborted) {
37893
+ foregroundAbortController.abort();
37894
+ } else {
37895
+ for (const controller of detachedToolContinuationAbortControllersRef.current) {
37896
+ controller.abort();
37897
+ }
37898
+ detachedToolContinuationAbortControllersRef.current.clear();
37899
+ }
37799
37900
  const activeInteractionPromptId = activeInteractionPromptIdRef.current;
37800
37901
  const activeInteractionOwner = activeInteractionOwnerRef.current;
37801
37902
  if (activeInteractionPromptId && activeInteractionOwner && getActiveInteractionSpan(activeInteractionPromptId) === activeInteractionOwner) {
@@ -37881,7 +37982,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37881
37982
  if (signal.aborted) {
37882
37983
  return { parts: null, shouldProceed: false };
37883
37984
  }
37884
- debugLogger37.debug("vision bridge: gate matched, running conversion");
37985
+ debugLogger38.debug("vision bridge: gate matched, running conversion");
37885
37986
  const fullTurnModel = config.getDefaultVisionBridgeModel();
37886
37987
  if (fullTurnModel?.agentCapable) {
37887
37988
  const fullTurnParts = (Array.isArray(parts) ? parts : [parts]).map(
@@ -37906,7 +38007,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37906
38007
  return { parts: fullTurnParts, shouldProceed: true };
37907
38008
  }
37908
38009
  const bridgeResult = await runVisionBridge({ config, parts, signal });
37909
- debugLogger37.debug(
38010
+ debugLogger38.debug(
37910
38011
  `vision bridge: status=${bridgeResult.status} applied=${bridgeResult.applied} model=${bridgeResult.modelId ?? "(none)"}`
37911
38012
  );
37912
38013
  if (bridgeResult.status !== "skipped" || bridgeResult.egressOccurred) {
@@ -37931,7 +38032,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37931
38032
  );
37932
38033
  const prepareQueryForGemini = (0, import_react136.useCallback)(
37933
38034
  async (query, userMessageTimestamp, abortSignal, prompt_id, submitType, submittedPrompt, preserveTurnOwnership) => {
37934
- if (turnCancelledRef.current) {
38035
+ if (turnCancelledRef.current && !preserveTurnOwnership) {
37935
38036
  return { queryToSend: null, shouldProceed: false };
37936
38037
  }
37937
38038
  if (typeof query === "string" && query.trim().length === 0) {
@@ -37971,7 +38072,11 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37971
38072
  prompt_id
37972
38073
  };
37973
38074
  scheduleToolCalls([toolCallRequest], abortSignal);
37974
- return { queryToSend: null, shouldProceed: false };
38075
+ return {
38076
+ queryToSend: null,
38077
+ shouldProceed: false,
38078
+ scheduledToolCallId: toolCallRequest.callId
38079
+ };
37975
38080
  }
37976
38081
  case "submit_prompt": {
37977
38082
  localQueryToSendToGemini = slashCommandResult.content;
@@ -37991,7 +38096,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
37991
38096
  true
37992
38097
  );
37993
38098
  } else {
37994
- debugLogger37.warn(
38099
+ debugLogger38.warn(
37995
38100
  `ignoring model override '${slashCommandResult.modelOverride}': not a model on the active provider`
37996
38101
  );
37997
38102
  }
@@ -38228,8 +38333,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38228
38333
  setThought((prev) => {
38229
38334
  const incomingDescription = incoming.description ? clampLoadingThoughtDescription(incoming.description) : incoming.description;
38230
38335
  if (!prev) {
38231
- if (debugLogger37.isEnabled()) {
38232
- debugLogger37.debug(
38336
+ if (debugLogger38.isEnabled()) {
38337
+ debugLogger38.debug(
38233
38338
  `[THOUGHT_MERGE] New thought: subjectLength=${incoming.subject?.length ?? 0}, description length=${incomingDescription?.length ?? 0}`
38234
38339
  );
38235
38340
  }
@@ -38242,8 +38347,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38242
38347
  const description = clampLoadingThoughtDescription(
38243
38348
  `${prev.description ?? ""}${incomingDescription ?? ""}`
38244
38349
  );
38245
- if (debugLogger37.isEnabled()) {
38246
- debugLogger37.debug(
38350
+ if (debugLogger38.isEnabled()) {
38351
+ debugLogger38.debug(
38247
38352
  `[THOUGHT_MERGE] Accumulating thought: prev length=${prev.description?.length ?? 0}, incoming length=${incomingDescription?.length ?? 0}, total length=${description.length}`
38248
38353
  );
38249
38354
  }
@@ -38404,7 +38509,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38404
38509
  eventValue.error.message,
38405
38510
  formattedErrorText
38406
38511
  ).catch((err) => {
38407
- debugLogger37.warn(`StopFailure hook failed: ${err}`);
38512
+ debugLogger38.warn(`StopFailure hook failed: ${err}`);
38408
38513
  });
38409
38514
  },
38410
38515
  [
@@ -38596,7 +38701,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38596
38701
  [addItem, commitItemInOrder, pendingHistoryItemRef, setPendingHistoryItem]
38597
38702
  );
38598
38703
  const processGeminiStreamEvents = (0, import_react136.useCallback)(
38599
- async (stream, userMessageTimestamp, signal, submitType, turnAdmission, promptId, trackInteractionOwner = true) => {
38704
+ async (stream, userMessageTimestamp, signal, submitType, turnAdmission, promptId, trackInteractionOwner = true, toolContinuationOwner) => {
38600
38705
  let geminiMessageBuffer = "";
38601
38706
  let thoughtBuffer = "";
38602
38707
  let scheduledToolContinuation = false;
@@ -38609,6 +38714,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38609
38714
  0
38610
38715
  );
38611
38716
  const toolCallRequests = [];
38717
+ let streamInteractionOwner = trackInteractionOwner ? activeInteractionOwnerRef.current : void 0;
38612
38718
  const bufferedEvents = [];
38613
38719
  let flushTimer = null;
38614
38720
  const discardBufferedStreamEvents = /* @__PURE__ */ __name(() => {
@@ -38732,8 +38838,11 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
38732
38838
  dualOutput?.startAssistantMessage();
38733
38839
  try {
38734
38840
  for await (const event of stream) {
38735
- if (trackInteractionOwner && promptId) {
38736
- activeInteractionOwnerRef.current ??= getActiveInteractionSpan(promptId);
38841
+ if (!streamInteractionOwner && promptId) {
38842
+ streamInteractionOwner = getActiveInteractionSpan(promptId);
38843
+ if (trackInteractionOwner && streamInteractionOwner) {
38844
+ activeInteractionOwnerRef.current ??= streamInteractionOwner;
38845
+ }
38737
38846
  }
38738
38847
  dualOutput?.processEvent(event);
38739
38848
  switch (event.type) {
@@ -39006,7 +39115,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39006
39115
  duplicateProviderToolCallResponseIdsRef.current
39007
39116
  );
39008
39117
  if (repeatedDuplicateRequest?.providerCallId) {
39009
- debugLogger37.debug(
39118
+ debugLogger38.debug(
39010
39119
  `[processGeminiStreamEvents] Dropping batch after repeated duplicate provider tool-call id: ${repeatedDuplicateRequest.providerCallId} (tool: ${repeatedDuplicateRequest.name})`
39011
39120
  );
39012
39121
  loopDetectedRef.current = true;
@@ -39027,7 +39136,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39027
39136
  duplicateProviderToolCallResponseIdsRef.current
39028
39137
  );
39029
39138
  const response = createDuplicateProviderToolCallResponse(request);
39030
- debugLogger37.debug(
39139
+ debugLogger38.debug(
39031
39140
  `[processGeminiStreamEvents] Suppressing duplicate provider tool-call id: ${providerCallId} (tool: ${request.name})`
39032
39141
  );
39033
39142
  dualOutput?.emitToolResult(request, response);
@@ -39056,12 +39165,19 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39056
39165
  }
39057
39166
  }
39058
39167
  if (executableToolCallRequests.length > 0) {
39059
- const interactionOwner = activeInteractionOwnerRef.current;
39060
- if (trackInteractionOwner && interactionOwner) {
39168
+ if (toolContinuationOwner) {
39169
+ for (const request of executableToolCallRequests) {
39170
+ continuationOwnersByToolCallIdRef.current.set(
39171
+ request.callId,
39172
+ toolContinuationOwner
39173
+ );
39174
+ }
39175
+ }
39176
+ if (streamInteractionOwner) {
39061
39177
  for (const request of executableToolCallRequests) {
39062
39178
  interactionOwnersByToolCallIdRef.current.set(
39063
39179
  request.callId,
39064
- interactionOwner
39180
+ streamInteractionOwner
39065
39181
  );
39066
39182
  }
39067
39183
  }
@@ -39319,7 +39435,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39319
39435
  );
39320
39436
  const submitQuery = (0, import_react136.useCallback)(
39321
39437
  async (query, submitType = "userQuery" /* UserQuery */, prompt_id, metadata) => {
39322
- const allowConcurrentBtwDuringResponse = submitType === "userQuery" /* UserQuery */ && streamingState === "responding" /* Responding */ && typeof query === "string" && isBtwCommand(query) && !activeGoalAdmissionRef.current;
39438
+ const allowConcurrentBtwDuringResponse = submitType === "userQuery" /* UserQuery */ && streamingState === "responding" /* Responding */ && activeModelStreamsRef.current > 0 && typeof query === "string" && isBtwCommand(query) && !activeGoalAdmissionRef.current;
39323
39439
  let ownsSubmissionLease = false;
39324
39440
  let submissionLeaseGeneration;
39325
39441
  const acquireSubmissionLease = /* @__PURE__ */ __name(() => {
@@ -39352,6 +39468,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39352
39468
  return;
39353
39469
  }
39354
39470
  acquireSubmissionLease();
39471
+ const submissionGeneration = submissionLeaseGenerationRef.current;
39355
39472
  loopDetectedRef.current = false;
39356
39473
  if (!isTurnContinuation && !allowConcurrentBtwDuringResponse) {
39357
39474
  lastTurnUserItemRef.current = null;
@@ -39407,7 +39524,17 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39407
39524
  }
39408
39525
  const abortController = new AbortController();
39409
39526
  const abortSignal = abortController.signal;
39410
- if (!allowConcurrentBtwDuringResponse) {
39527
+ const inheritedToolContinuationOwner = metadata?.toolContinuationOwner;
39528
+ const isDetachedToolContinuation = inheritedToolContinuationOwner?.survivesGenerationChange === true;
39529
+ const detachedAbortController = inheritedToolContinuationOwner?.detachedAbortController ?? (allowConcurrentBtwDuringResponse ? abortController : void 0);
39530
+ const foregroundAbortController = allowConcurrentBtwDuringResponse || isDetachedToolContinuation ? void 0 : abortController;
39531
+ let keepToolContinuationAbortController = false;
39532
+ if (detachedAbortController) {
39533
+ detachedToolContinuationAbortControllersRef.current.add(
39534
+ detachedAbortController
39535
+ );
39536
+ }
39537
+ if (!allowConcurrentBtwDuringResponse && !isDetachedToolContinuation) {
39411
39538
  abortControllerRef.current = abortController;
39412
39539
  turnCancelledRef.current = false;
39413
39540
  }
@@ -39420,7 +39547,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39420
39547
  activeInteractionOwnerRef.current = void 0;
39421
39548
  }
39422
39549
  }
39423
- return promptIdContext.run(prompt_id, async () => {
39550
+ const releaseSubmissionActivity = retainSubmissionActivity(submissionGeneration);
39551
+ const submission = promptIdContext.run(prompt_id, async () => {
39424
39552
  let queuedGoal = metadata?.goal;
39425
39553
  let preparedQuery;
39426
39554
  try {
@@ -39442,7 +39570,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39442
39570
  prompt_id,
39443
39571
  submitType,
39444
39572
  submittedPrompt,
39445
- allowConcurrentBtwDuringResponse
39573
+ allowConcurrentBtwDuringResponse || isDetachedToolContinuation
39446
39574
  );
39447
39575
  } catch (error) {
39448
39576
  await releaseUndeliveredGoalTurn(metadata?.userAdmission?.turnKey);
@@ -39450,7 +39578,16 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39450
39578
  metadata?.onAdmissionFailed?.();
39451
39579
  throw error;
39452
39580
  }
39453
- const { queryToSend, shouldProceed } = preparedQuery;
39581
+ const { queryToSend, shouldProceed, scheduledToolCallId } = preparedQuery;
39582
+ if (scheduledToolCallId && foregroundAbortController) {
39583
+ keepToolContinuationAbortController = true;
39584
+ continuationOwnersByToolCallIdRef.current.set(scheduledToolCallId, {
39585
+ promptId: prompt_id,
39586
+ signal: abortSignal,
39587
+ survivesGenerationChange: false,
39588
+ foregroundAbortController
39589
+ });
39590
+ }
39454
39591
  if (!shouldProceed || queryToSend === null) {
39455
39592
  await releaseUndeliveredGoalTurn(metadata?.userAdmission?.turnKey);
39456
39593
  releaseSubmissionLease();
@@ -39488,7 +39625,21 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39488
39625
  ) : void 0);
39489
39626
  const turnKey = goalBinding?.turnKey ?? userAdmission?.turnKey;
39490
39627
  const turnController = goalBinding?.controller ?? (turnKey ? new AbortController() : void 0);
39491
- const processingSignal = turnController ? AbortSignal.any([abortSignal, turnController.signal]) : abortSignal;
39628
+ const processingSignals = [abortSignal];
39629
+ if (turnController) {
39630
+ processingSignals.push(turnController.signal);
39631
+ }
39632
+ if (inheritedToolContinuationOwner) {
39633
+ processingSignals.push(inheritedToolContinuationOwner.signal);
39634
+ }
39635
+ const processingSignal = processingSignals.length > 1 ? AbortSignal.any(processingSignals) : abortSignal;
39636
+ const toolContinuationOwner = {
39637
+ promptId: prompt_id,
39638
+ signal: processingSignal,
39639
+ survivesGenerationChange: allowConcurrentBtwDuringResponse || inheritedToolContinuationOwner?.survivesGenerationChange === true,
39640
+ detachedAbortController,
39641
+ foregroundAbortController
39642
+ };
39492
39643
  const turnAdmission = turnKey && turnController ? {
39493
39644
  turnKey,
39494
39645
  controller: turnController,
@@ -39564,11 +39715,12 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39564
39715
  modelOverride: modelOverrideRef.current,
39565
39716
  steerInput: metadata?.steerInput,
39566
39717
  ...submittedPrompt !== void 0 ? { submittedPrompt } : {},
39567
- ...!allowConcurrentBtwDuringResponse && midTurnDrainRef ? { getSteerInput: drainSteerAtBoundary } : {}
39718
+ ...!allowConcurrentBtwDuringResponse && !isDetachedToolContinuation && midTurnDrainRef ? { getSteerInput: drainSteerAtBoundary } : {}
39568
39719
  };
39720
+ const providerSignal = inheritedToolContinuationOwner ? processingSignal : abortSignal;
39569
39721
  const stream = geminiClient.sendMessageStream(
39570
39722
  finalQueryToSend,
39571
- abortSignal,
39723
+ providerSignal,
39572
39724
  prompt_id,
39573
39725
  {
39574
39726
  ...sendOptions,
@@ -39593,12 +39745,14 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39593
39745
  submitType,
39594
39746
  turnAdmission,
39595
39747
  prompt_id,
39596
- !allowConcurrentBtwDuringResponse
39748
+ !allowConcurrentBtwDuringResponse,
39749
+ toolContinuationOwner
39597
39750
  );
39598
39751
  if (!goalBinding && turnAdmission && activeGoalTurnRef.current?.controller === turnAdmission.controller && activeGoalTurnRef.current.turnKey === turnAdmission.turnKey) {
39599
39752
  goalBinding = activeGoalTurnRef.current;
39600
39753
  }
39601
39754
  keepGoalBinding = processingResult.scheduledToolContinuation;
39755
+ keepToolContinuationAbortController = processingResult.scheduledToolContinuation;
39602
39756
  if (processingResult.status === 1 /* UserCancelled */) {
39603
39757
  cleanupReviewLease = true;
39604
39758
  submitPromptOnCompleteRef.current = null;
@@ -39622,8 +39776,17 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39622
39776
  callId: request.callId,
39623
39777
  toolName: request.name,
39624
39778
  responseParts: response.responseParts,
39625
- persistedOutputFiles: response.persistedOutputFiles
39779
+ persistedOutputFiles: response.persistedOutputFiles,
39780
+ artifacts: response.artifacts
39626
39781
  })
39782
+ ),
39783
+ new Map(
39784
+ immediateDuplicateToolResponses.responses.flatMap(
39785
+ ({ request }) => {
39786
+ const promptId = request.prompt_id ?? immediateDuplicateToolResponses.promptId;
39787
+ return promptId ? [[request.callId, promptId]] : [];
39788
+ }
39789
+ )
39627
39790
  )
39628
39791
  );
39629
39792
  const responseParts = finalized.flatMap(
@@ -39638,6 +39801,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39638
39801
  callId: request.callId,
39639
39802
  status: response.error ? "error" : "success",
39640
39803
  resultDisplay: response.resultDisplay,
39804
+ persistedOutputFiles: finalized[index].persistedOutputFiles,
39805
+ artifacts: finalized[index].artifacts,
39641
39806
  error: response.error,
39642
39807
  errorType: response.errorType,
39643
39808
  executionStatus: response.executionStatus
@@ -39679,7 +39844,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39679
39844
  if (onComplete) {
39680
39845
  submitPromptOnCompleteRef.current = null;
39681
39846
  void onComplete().catch((err) => {
39682
- debugLogger37.error("onComplete callback failed:", err);
39847
+ debugLogger38.error("onComplete callback failed:", err);
39683
39848
  });
39684
39849
  }
39685
39850
  if (geminiClient) {
@@ -39731,9 +39896,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39731
39896
  0,
39732
39897
  activeModelStreamsRef.current - 1
39733
39898
  );
39734
- if (activeModelStreamsRef.current === 0) {
39735
- setIsResponding(false);
39736
- }
39899
+ const shouldDrainCompletedToolBatches = activeModelStreamsRef.current === 0;
39737
39900
  if (goalBinding) {
39738
39901
  let retainGoalBinding = keepGoalBinding && !goalBinding.controller.signal.aborted;
39739
39902
  if (retainGoalBinding) {
@@ -39753,7 +39916,31 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39753
39916
  if (turnAdmission && !goalBinding && activeGoalAdmissionRef.current?.controller === turnAdmission.controller && activeGoalAdmissionRef.current.turnKey === turnAdmission.turnKey) {
39754
39917
  activeGoalAdmissionRef.current = null;
39755
39918
  }
39756
- releaseSubmissionLease();
39919
+ if (shouldDrainCompletedToolBatches) {
39920
+ const pendingCompletedToolBatches = pendingCompletedToolBatchesRef.current.splice(0);
39921
+ const pendingCompletedTools = /* @__PURE__ */ new Map();
39922
+ for (const pendingBatch of pendingCompletedToolBatches) {
39923
+ for (const toolCall of pendingBatch) {
39924
+ pendingCompletedTools.set(toolCall.request.callId, toolCall);
39925
+ }
39926
+ }
39927
+ if (pendingCompletedTools.size > 0) {
39928
+ await handleCompletedToolsRef.current([
39929
+ ...pendingCompletedTools.values()
39930
+ ]);
39931
+ }
39932
+ }
39933
+ }
39934
+ });
39935
+ return submission.finally(() => {
39936
+ releaseSubmissionActivity();
39937
+ if (detachedAbortController && !keepToolContinuationAbortController) {
39938
+ detachedToolContinuationAbortControllersRef.current.delete(
39939
+ detachedAbortController
39940
+ );
39941
+ }
39942
+ if (foregroundAbortController && !keepToolContinuationAbortController && abortControllerRef.current === foregroundAbortController) {
39943
+ abortControllerRef.current = null;
39757
39944
  }
39758
39945
  });
39759
39946
  },
@@ -39787,6 +39974,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39787
39974
  bindGoalTurn,
39788
39975
  failClosedGoalTurn,
39789
39976
  releaseUndeliveredGoalTurn,
39977
+ retainSubmissionActivity,
39790
39978
  setSubmissionInFlight
39791
39979
  ]
39792
39980
  );
@@ -39843,7 +40031,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39843
40031
  "proceed_once" /* ProceedOnce */
39844
40032
  );
39845
40033
  } catch (error) {
39846
- debugLogger37.error(
40034
+ debugLogger38.error(
39847
40035
  `Failed to auto-approve tool call ${call.request.callId}:`,
39848
40036
  error
39849
40037
  );
@@ -39872,7 +40060,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39872
40060
  );
39873
40061
  const dedupedCallIds = dedupedTools.map((tc) => tc.request.callId);
39874
40062
  if (dedupedCallIds.length > 0) {
39875
- debugLogger37.warn(
40063
+ debugLogger38.warn(
39876
40064
  `[REPAIR] Dropping ${dedupedCallIds.length} late tool result(s) whose callId already has a functionResponse in history: ${dedupedCallIds.join(", ")}`
39877
40065
  );
39878
40066
  for (const tc of dedupedTools) {
@@ -39884,10 +40072,59 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39884
40072
  );
39885
40073
  }
39886
40074
  markToolsAsSubmitted(dedupedCallIds);
40075
+ const detachedAbortControllers = /* @__PURE__ */ new Set();
40076
+ const foregroundAbortControllers = /* @__PURE__ */ new Set();
40077
+ for (const callId of dedupedCallIds) {
40078
+ const continuationOwner2 = continuationOwnersByToolCallIdRef.current.get(callId);
40079
+ if (continuationOwner2?.detachedAbortController) {
40080
+ detachedAbortControllers.add(
40081
+ continuationOwner2.detachedAbortController
40082
+ );
40083
+ }
40084
+ if (continuationOwner2?.foregroundAbortController) {
40085
+ foregroundAbortControllers.add(
40086
+ continuationOwner2.foregroundAbortController
40087
+ );
40088
+ }
40089
+ interactionOwnersByToolCallIdRef.current.delete(callId);
40090
+ continuationOwnersByToolCallIdRef.current.delete(callId);
40091
+ }
40092
+ for (const controller of detachedAbortControllers) {
40093
+ const isStillOwned = [
40094
+ ...continuationOwnersByToolCallIdRef.current.values()
40095
+ ].some((owner) => owner.detachedAbortController === controller);
40096
+ if (!isStillOwned) {
40097
+ detachedToolContinuationAbortControllersRef.current.delete(
40098
+ controller
40099
+ );
40100
+ }
40101
+ }
40102
+ for (const controller of foregroundAbortControllers) {
40103
+ const isStillOwned = [
40104
+ ...continuationOwnersByToolCallIdRef.current.values()
40105
+ ].some((owner) => owner.foregroundAbortController === controller);
40106
+ if (!isStillOwned && abortControllerRef.current === controller) {
40107
+ abortControllerRef.current = null;
40108
+ }
40109
+ }
39887
40110
  }
39888
40111
  if (activeModelStreamsRef.current > 0) {
40112
+ const deferredTools = completedAndReadyToSubmitTools.filter(
40113
+ (toolCall) => !historyCallIdsWithResponse.has(toolCall.request.callId)
40114
+ );
40115
+ if (deferredTools.length > 0) {
40116
+ pendingCompletedToolBatchesRef.current.push(deferredTools);
40117
+ }
39889
40118
  return;
39890
40119
  }
40120
+ const continuationOwner = completedAndReadyToSubmitTools.filter(
40121
+ (toolCall) => !historyCallIdsWithResponse.has(toolCall.request.callId)
40122
+ ).map(
40123
+ (toolCall) => continuationOwnersByToolCallIdRef.current.get(
40124
+ toolCall.request.callId
40125
+ )
40126
+ ).find((owner) => owner !== void 0);
40127
+ const continuationWasCancelled = /* @__PURE__ */ __name(() => continuationOwner ? continuationOwner.signal.aborted : turnCancelledRef.current || abortControllerRef.current?.signal.aborted === true, "continuationWasCancelled");
39891
40128
  const clientTools = completedAndReadyToSubmitTools.filter(
39892
40129
  (t2) => t2.request.isClientInitiated && !historyCallIdsWithResponse.has(t2.request.callId)
39893
40130
  );
@@ -39897,25 +40134,77 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
39897
40134
  const newSuccessfulMemorySaves = completedAndReadyToSubmitTools.filter(
39898
40135
  (t2) => t2.request.name === "save_memory" && t2.status === "success" && !processedMemoryToolsRef.current.has(t2.request.callId)
39899
40136
  );
39900
- const geminiTools = completedAndReadyToSubmitTools.filter(
40137
+ let geminiTools = completedAndReadyToSubmitTools.filter(
39901
40138
  (t2) => !t2.request.isClientInitiated && !historyCallIdsWithResponse.has(t2.request.callId)
39902
40139
  );
39903
40140
  const terminalPromptId = completedAndReadyToSubmitTools.find(
39904
40141
  (toolCall) => !toolCall.request.isClientInitiated
39905
40142
  )?.request.prompt_id;
39906
- const ownerToolCall = geminiTools[0] ?? completedAndReadyToSubmitTools.find(
40143
+ const ownerForToolCall = /* @__PURE__ */ __name((toolCall) => interactionOwnersByToolCallIdRef.current.get(toolCall.request.callId) ?? (activeInteractionPromptIdRef.current === toolCall.request.prompt_id ? activeInteractionOwnerRef.current : void 0), "ownerForToolCall");
40144
+ const liveOwnerForToolCall = /* @__PURE__ */ __name((toolCall) => {
40145
+ const owner = ownerForToolCall(toolCall);
40146
+ const ownerPromptId = toolCall.request.prompt_id;
40147
+ return owner && ownerPromptId && getActiveInteractionSpan(ownerPromptId) === owner ? owner : void 0;
40148
+ }, "liveOwnerForToolCall");
40149
+ const liveActiveInteractionOwner = activeInteractionPromptIdRef.current && activeInteractionOwnerRef.current && getActiveInteractionSpan(activeInteractionPromptIdRef.current) === activeInteractionOwnerRef.current ? activeInteractionOwnerRef.current : void 0;
40150
+ const ownerToolCall = (liveActiveInteractionOwner ? geminiTools.find(
40151
+ (toolCall) => liveOwnerForToolCall(toolCall) === liveActiveInteractionOwner
40152
+ ) : void 0) ?? geminiTools.find((toolCall) => liveOwnerForToolCall(toolCall)) ?? geminiTools[0] ?? completedAndReadyToSubmitTools.find(
39907
40153
  (toolCall) => !toolCall.request.isClientInitiated
39908
40154
  );
39909
- const interactionOwner = ownerToolCall ? interactionOwnersByToolCallIdRef.current.get(
39910
- ownerToolCall.request.callId
39911
- ) ?? (activeInteractionPromptIdRef.current === ownerToolCall.request.prompt_id ? activeInteractionOwnerRef.current : void 0) : void 0;
40155
+ const interactionOwner = ownerToolCall ? liveOwnerForToolCall(ownerToolCall) : void 0;
40156
+ const secondaryInteractionOwners = /* @__PURE__ */ new Map();
40157
+ const secondaryTools = interactionOwner ? geminiTools.filter(
40158
+ (toolCall) => ownerForToolCall(toolCall) !== interactionOwner
40159
+ ) : [];
40160
+ for (const toolCall of secondaryTools) {
40161
+ const secondaryOwner = ownerForToolCall(toolCall);
40162
+ if (secondaryOwner && toolCall.request.prompt_id) {
40163
+ secondaryInteractionOwners.set(
40164
+ secondaryOwner,
40165
+ toolCall.request.prompt_id
40166
+ );
40167
+ }
40168
+ if (toolCall.status !== "cancelled") {
40169
+ geminiClient?.recordCompletedToolCall(
40170
+ toolCall.request.name,
40171
+ toolCall.request.args
40172
+ );
40173
+ }
40174
+ dualOutput?.emitToolResult(toolCall.request, toolCall.response);
40175
+ }
40176
+ if (secondaryTools.length > 0) {
40177
+ const secondaryCallIds2 = new Set(
40178
+ secondaryTools.map((toolCall) => toolCall.request.callId)
40179
+ );
40180
+ markToolsAsSubmitted([...secondaryCallIds2]);
40181
+ geminiTools = geminiTools.filter(
40182
+ (toolCall) => !secondaryCallIds2.has(toolCall.request.callId)
40183
+ );
40184
+ }
39912
40185
  for (const toolCall of completedAndReadyToSubmitTools) {
39913
40186
  interactionOwnersByToolCallIdRef.current.delete(
39914
40187
  toolCall.request.callId
39915
40188
  );
40189
+ continuationOwnersByToolCallIdRef.current.delete(
40190
+ toolCall.request.callId
40191
+ );
39916
40192
  }
39917
- let promptId = geminiTools[0]?.request.prompt_id;
40193
+ for (const [owner, ownerPromptId] of secondaryInteractionOwners) {
40194
+ if (getActiveInteractionSpan(ownerPromptId) === owner) {
40195
+ endInteractionSpan("cancelled", { promptId: ownerPromptId });
40196
+ }
40197
+ }
40198
+ let promptId = ownerToolCall?.request.prompt_id ?? continuationOwner?.promptId;
39918
40199
  const endToolInteraction = /* @__PURE__ */ __name((status, errorMessage, errorType) => {
40200
+ if (continuationOwner?.detachedAbortController) {
40201
+ detachedToolContinuationAbortControllersRef.current.delete(
40202
+ continuationOwner.detachedAbortController
40203
+ );
40204
+ }
40205
+ if (continuationOwner?.foregroundAbortController && abortControllerRef.current === continuationOwner.foregroundAbortController) {
40206
+ abortControllerRef.current = null;
40207
+ }
39919
40208
  if (!promptId || !interactionOwner || getActiveInteractionSpan(promptId) !== interactionOwner) {
39920
40209
  return;
39921
40210
  }
@@ -40049,11 +40338,11 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40049
40338
  memoryWriteCandidates,
40050
40339
  config.getProjectRoot()
40051
40340
  );
40052
- debugLogger37.debug(
40341
+ debugLogger38.debug(
40053
40342
  `Checked marked context-file memory tool batch; matched=${matchedContextFileWrite}`
40054
40343
  );
40055
40344
  if (matchedContextFileWrite) {
40056
- debugLogger37.debug(
40345
+ debugLogger38.debug(
40057
40346
  "Refreshing memory after context-file memory write"
40058
40347
  );
40059
40348
  await refreshMemoryInstruction(config, {
@@ -40064,7 +40353,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40064
40353
  if (newSuccessfulMemorySaves.length > 0) {
40065
40354
  if (!didRefreshManagedMemory) {
40066
40355
  void performMemoryRefresh().catch((err) => {
40067
- debugLogger37.warn(`save_memory refresh failed: ${err}`);
40356
+ debugLogger38.warn(`save_memory refresh failed: ${err}`);
40068
40357
  });
40069
40358
  }
40070
40359
  newSuccessfulMemorySaves.forEach(
@@ -40072,9 +40361,10 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40072
40361
  );
40073
40362
  }
40074
40363
  const completedCallIds = new Set(
40075
- completedAndReadyToSubmitTools.map(
40076
- (toolCall) => toolCall.request.callId
40077
- )
40364
+ geminiTools.map((toolCall) => toolCall.request.callId)
40365
+ );
40366
+ const secondaryCallIds = new Set(
40367
+ secondaryTools.map((toolCall) => toolCall.request.callId)
40078
40368
  );
40079
40369
  const readyDuplicateBatches = [];
40080
40370
  pendingDuplicateToolResponsesRef.current = pendingDuplicateToolResponsesRef.current.filter((batch) => {
@@ -40084,10 +40374,13 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40084
40374
  if (isReady) {
40085
40375
  readyDuplicateBatches.push(batch);
40086
40376
  }
40087
- return !isReady;
40377
+ const belongsToSecondaryOwner = [...batch.executableCallIds].some(
40378
+ (callId) => secondaryCallIds.has(callId)
40379
+ );
40380
+ return !isReady && !belongsToSecondaryOwner;
40088
40381
  });
40089
- const pendingDuplicateResponses = readyDuplicateBatches.flatMap(
40090
- (batch) => batch.duplicateResponses
40382
+ const pendingDuplicateResponses = readyDuplicateBatches.flatMap((batch) => batch.duplicateResponses).filter(
40383
+ ({ request }) => !interactionOwner || !request.prompt_id || request.prompt_id === promptId
40091
40384
  );
40092
40385
  const pendingDuplicatePromptId = readyDuplicateBatches[0]?.promptId;
40093
40386
  if (!promptId && pendingDuplicatePromptId) {
@@ -40169,8 +40462,14 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40169
40462
  callId: request.callId,
40170
40463
  toolName: request.name,
40171
40464
  responseParts: response.responseParts,
40172
- persistedOutputFiles: response.persistedOutputFiles
40173
- }))
40465
+ persistedOutputFiles: response.persistedOutputFiles,
40466
+ artifacts: response.artifacts
40467
+ })),
40468
+ new Map(
40469
+ orderedResponses.flatMap(
40470
+ ({ request }) => request.prompt_id ? [[request.callId, request.prompt_id]] : []
40471
+ )
40472
+ )
40174
40473
  );
40175
40474
  const responsesToSend = finalizedResponses.flatMap(
40176
40475
  (entry) => entry.responseParts
@@ -40183,6 +40482,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40183
40482
  callId: request.callId,
40184
40483
  status,
40185
40484
  resultDisplay: response.resultDisplay,
40485
+ persistedOutputFiles: finalizedResponses[index].persistedOutputFiles,
40486
+ artifacts: finalizedResponses[index].artifacts,
40186
40487
  error: response.error,
40187
40488
  errorType: response.errorType,
40188
40489
  executionStatus: response.executionStatus
@@ -40193,7 +40494,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40193
40494
  } : { goalContext: { ...goalContext } } : void 0
40194
40495
  );
40195
40496
  });
40196
- if (turnCancelledRef.current || abortControllerRef.current?.signal.aborted) {
40497
+ if (continuationWasCancelled()) {
40197
40498
  markToolsAsSubmitted(
40198
40499
  geminiTools.map((toolCall) => toolCall.request.callId)
40199
40500
  );
@@ -40236,7 +40537,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40236
40537
  for (const toolCall of geminiTools) {
40237
40538
  if ("modelOverride" in toolCall.response) {
40238
40539
  if (inlineModelOverrideActiveRef.current || modelOverrideRef.current?.endsWith("\0")) {
40239
- debugLogger37.debug(
40540
+ debugLogger38.debug(
40240
40541
  `skill-tool model override (${String(
40241
40542
  toolCall.response.modelOverride
40242
40543
  )}) blocked: ${inlineModelOverrideActiveRef.current ? "inline override active" : "full-turn override active"}`
@@ -40283,10 +40584,11 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40283
40584
  }
40284
40585
  }
40285
40586
  } catch (error) {
40587
+ const errorMessage = getErrorMessage(error);
40286
40588
  goalFinishFailed = true;
40287
40589
  await failClosedGoalTurn(
40288
40590
  toolGoalBinding,
40289
- `Goal turn could not finish: ${getErrorMessage(error)}`
40591
+ `Goal turn could not finish: ${errorMessage}`
40290
40592
  );
40291
40593
  } finally {
40292
40594
  releaseGoalTurn(toolGoalBinding);
@@ -40380,7 +40682,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40380
40682
  );
40381
40683
  return;
40382
40684
  }
40383
- const drained = turnCancelledRef.current || abortControllerRef.current?.signal.aborted ? [] : midTurnDrainRef?.current?.(
40685
+ const drained = continuationOwner?.survivesGenerationChange || continuationWasCancelled() ? [] : midTurnDrainRef?.current?.(
40384
40686
  false,
40385
40687
  Boolean(activeGoalAdmissionRef.current)
40386
40688
  ) ?? [];
@@ -40406,7 +40708,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40406
40708
  }
40407
40709
  }
40408
40710
  }
40409
- if (turnCancelledRef.current || abortControllerRef.current?.signal.aborted) {
40711
+ if (continuationWasCancelled()) {
40410
40712
  drainedSteer?.restore();
40411
40713
  if (toolGoalBinding) {
40412
40714
  await failClosedGoalTurn(
@@ -40426,7 +40728,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40426
40728
  endToolInteraction("cancelled");
40427
40729
  return;
40428
40730
  }
40429
- void submitQuery(responsesToSend, "toolResult" /* ToolResult */, promptId, {
40731
+ await submitQuery(responsesToSend, "toolResult" /* ToolResult */, promptId, {
40430
40732
  steerInput: drainedSteer,
40431
40733
  onDelivered: drainedSteer?.accept,
40432
40734
  onAdmissionFailed: /* @__PURE__ */ __name(() => {
@@ -40444,7 +40746,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40444
40746
  "continuation_delivery_failed"
40445
40747
  );
40446
40748
  }, "onDeliveryFailed"),
40447
- goalBinding: toolGoalBinding
40749
+ goalBinding: toolGoalBinding,
40750
+ toolContinuationOwner: continuationOwner
40448
40751
  });
40449
40752
  },
40450
40753
  [
@@ -40463,6 +40766,9 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40463
40766
  releaseGoalTurn
40464
40767
  ]
40465
40768
  );
40769
+ (0, import_react136.useLayoutEffect)(() => {
40770
+ handleCompletedToolsRef.current = handleCompletedTools;
40771
+ }, [handleCompletedTools]);
40466
40772
  const pendingHistoryItems = (0, import_react136.useMemo)(
40467
40773
  () => [
40468
40774
  // Reasoning renders above the streaming answer.
@@ -40604,7 +40910,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40604
40910
  try {
40605
40911
  await scheduler.enableDurable(cronSessionIdRef.current);
40606
40912
  } catch (err) {
40607
- debugLogger37.warn(
40913
+ debugLogger38.warn(
40608
40914
  `Durable cron init failed \u2014 persistent tasks will not fire in this session: ${err}`
40609
40915
  );
40610
40916
  }
@@ -40755,7 +41061,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40755
41061
  setNotificationTrigger((n) => n + 1);
40756
41062
  }, "onGoalClaimDeferred")
40757
41063
  }).catch((error) => {
40758
- debugLogger37.warn("Failed to admit cron notification", error);
41064
+ debugLogger38.warn("Failed to admit cron notification", error);
40759
41065
  });
40760
41066
  return;
40761
41067
  }
@@ -40788,7 +41094,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40788
41094
  setNotificationTrigger((n) => n + 1);
40789
41095
  }, "onGoalClaimDeferred")
40790
41096
  }).catch((error) => {
40791
- debugLogger37.warn("Failed to admit background notification", error);
41097
+ debugLogger38.warn("Failed to admit background notification", error);
40792
41098
  });
40793
41099
  });
40794
41100
  }
@@ -40861,7 +41167,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
40861
41167
  setTeammateTrigger((n) => n + 1);
40862
41168
  }, "onGoalClaimDeferred")
40863
41169
  }).catch((error) => {
40864
- debugLogger37.warn("Failed to admit teammate notification", error);
41170
+ debugLogger38.warn("Failed to admit teammate notification", error);
40865
41171
  });
40866
41172
  });
40867
41173
  }
@@ -40900,7 +41206,7 @@ var DIGIT_MULTIPLIER = 10;
40900
41206
  var DEFAULT_COUNT = 1;
40901
41207
  var MAX_COUNT = 9999;
40902
41208
  var DIGIT_1_TO_9 = /^[1-9]$/;
40903
- var debugLogger38 = createDebugLogger("VIM_MODE");
41209
+ var debugLogger39 = createDebugLogger("VIM_MODE");
40904
41210
  var CMD_TYPES = {
40905
41211
  DELETE_WORD_FORWARD: "dw",
40906
41212
  DELETE_WORD_BACKWARD: "db",
@@ -41043,7 +41349,7 @@ function readClipboard() {
41043
41349
  }
41044
41350
  return "";
41045
41351
  } catch (e) {
41046
- debugLogger38.warn("readClipboard failed:", e);
41352
+ debugLogger39.warn("readClipboard failed:", e);
41047
41353
  return "";
41048
41354
  }
41049
41355
  }
@@ -41089,7 +41395,7 @@ function writeClipboard(text) {
41089
41395
  const [bin, ...args] = linuxWriteCmd;
41090
41396
  const child = execFile7(bin, args, { timeout: 500 }, (err) => {
41091
41397
  if (err && !writeOsc52(text)) {
41092
- debugLogger38.warn(
41398
+ debugLogger39.warn(
41093
41399
  "writeClipboard: cached tool and OSC 52 both failed"
41094
41400
  );
41095
41401
  }
@@ -41098,11 +41404,11 @@ function writeClipboard(text) {
41098
41404
  child.unref();
41099
41405
  } else {
41100
41406
  if (!writeOsc52(text)) {
41101
- debugLogger38.warn("OSC 52 clipboard write failed - no TTY available");
41407
+ debugLogger39.warn("OSC 52 clipboard write failed - no TTY available");
41102
41408
  }
41103
41409
  }
41104
41410
  } catch (e) {
41105
- debugLogger38.warn("writeClipboard failed:", e);
41411
+ debugLogger39.warn("writeClipboard failed:", e);
41106
41412
  }
41107
41413
  }
41108
41414
  __name(writeClipboard, "writeClipboard");
@@ -41817,7 +42123,7 @@ function useVim(buffer, onSubmit) {
41817
42123
  try {
41818
42124
  normalizedKey = normalizeKey(key);
41819
42125
  } catch (error) {
41820
- debugLogger38.warn("Malformed key input in vim mode:", key, error);
42126
+ debugLogger39.warn("Malformed key input in vim mode:", key, error);
41821
42127
  return false;
41822
42128
  }
41823
42129
  const s = stateRef.current;
@@ -43150,7 +43456,7 @@ __name(useCommandMigration, "useCommandMigration");
43150
43456
 
43151
43457
  // packages/cli/src/services/notificationService.ts
43152
43458
  init_esbuild_shims();
43153
- var debugLogger39 = createDebugLogger("NOTIFICATION_SERVICE");
43459
+ var debugLogger40 = createDebugLogger("NOTIFICATION_SERVICE");
43154
43460
  var DEFAULT_TITLE = "Qwen Code";
43155
43461
  function sendNotification(opts, terminal, enabled) {
43156
43462
  if (!enabled) {
@@ -43178,7 +43484,7 @@ function sendNotification(opts, terminal, enabled) {
43178
43484
  return "terminal_bell";
43179
43485
  }
43180
43486
  } catch (error) {
43181
- debugLogger39.warn("Failed to send notification:", error);
43487
+ debugLogger40.warn("Failed to send notification:", error);
43182
43488
  return "error";
43183
43489
  }
43184
43490
  }
@@ -44130,7 +44436,7 @@ var import_jsx_runtime132 = __toESM(require_jsx_runtime(), 1);
44130
44436
  var MCP_BATCH_FLUSH_MS = 16;
44131
44437
  var STARTUP_PROFILE_FINALIZE_CAP_MS = 35e3;
44132
44438
  var CTRL_EXIT_PROMPT_DURATION_MS = 1e3;
44133
- var debugLogger40 = createDebugLogger("APP_CONTAINER");
44439
+ var debugLogger41 = createDebugLogger("APP_CONTAINER");
44134
44440
  function isRenderModeToggleKey(key) {
44135
44441
  return keyMatchers["toggleRenderMode" /* TOGGLE_RENDER_MODE */](key) || key.name === "m" && key.meta && !key.ctrl && !key.paste;
44136
44442
  }
@@ -44282,7 +44588,7 @@ function useQueuedSubmissionDrain({
44282
44588
  }
44283
44589
  );
44284
44590
  void Promise.resolve(request).catch((error) => {
44285
- debugLogger40.warn("Queued submission failed during admission", error);
44591
+ debugLogger41.warn("Queued submission failed during admission", error);
44286
44592
  }).finally(() => {
44287
44593
  queueDrainingRef.current = false;
44288
44594
  if (!admissionFailed) {
@@ -44524,7 +44830,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44524
44830
  const staticExtraHeight = 3;
44525
44831
  (0, import_react162.useEffect)(() => {
44526
44832
  void loadLowlight().catch((err) => {
44527
- debugLogger40.warn(
44833
+ debugLogger41.warn(
44528
44834
  `Failed to load lowlight chunk; code blocks will render as plain text: ${err instanceof Error ? err.message : String(err)}`
44529
44835
  );
44530
44836
  });
@@ -44606,9 +44912,9 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44606
44912
  registerCleanup(async () => {
44607
44913
  try {
44608
44914
  await config.getHookSystem()?.fireSessionEndEvent("prompt_input_exit" /* PromptInputExit */);
44609
- debugLogger40.debug("SessionEnd event completed successfully!!!");
44915
+ debugLogger41.debug("SessionEnd event completed successfully!!!");
44610
44916
  } catch (err) {
44611
- debugLogger40.error(`SessionEnd hook failed: ${err}`);
44917
+ debugLogger41.error(`SessionEnd hook failed: ${err}`);
44612
44918
  }
44613
44919
  });
44614
44920
  registerCleanup(async () => {
@@ -44634,7 +44940,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44634
44940
  flushTimer = null;
44635
44941
  }
44636
44942
  return geminiClient2.setTools().catch((err) => {
44637
- debugLogger40.error(
44943
+ debugLogger41.error(
44638
44944
  `setTools() batch-flush failed: ${err instanceof Error ? err.message : String(err)}`
44639
44945
  );
44640
44946
  });
@@ -44652,7 +44958,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
44652
44958
  failureSurfaced = true;
44653
44959
  const failedNames = typeof config.getFailedMcpServerNames === "function" ? config.getFailedMcpServerNames() : [];
44654
44960
  if (failedNames.length > 0) {
44655
- debugLogger40.warn(
44961
+ debugLogger41.warn(
44656
44962
  `MCP server(s) failed to start: ${failedNames.join(", ")}. Continuing with built-in tools and any servers that did connect.`
44657
44963
  );
44658
44964
  }
@@ -45110,7 +45416,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
45110
45416
  try {
45111
45417
  cancelOngoingRequestRef.current();
45112
45418
  } catch (error) {
45113
- debugLogger40.debug("Failed to cancel request while quitting:", error);
45419
+ debugLogger41.debug("Failed to cancel request while quitting:", error);
45114
45420
  }
45115
45421
  setQuittingMessages(messages);
45116
45422
  config.getGeminiClient()?.requestShutdown();
@@ -45328,7 +45634,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
45328
45634
  },
45329
45635
  Date.now()
45330
45636
  );
45331
- debugLogger40.debug(
45637
+ debugLogger41.debug(
45332
45638
  `[DEBUG] Refreshed memory content in config: ${memoryContent.substring(
45333
45639
  0,
45334
45640
  200
@@ -45343,7 +45649,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
45343
45649
  },
45344
45650
  Date.now()
45345
45651
  );
45346
- debugLogger40.error("Error refreshing memory:", error);
45652
+ debugLogger41.error("Error refreshing memory:", error);
45347
45653
  }
45348
45654
  }, [config, historyManager, settings.merged]);
45349
45655
  const cancelHandlerRef = (0, import_react162.useRef)(() => {
@@ -45513,7 +45819,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
45513
45819
  );
45514
45820
  });
45515
45821
  goalReservationSettlementRef.current = settlement.catch((error) => {
45516
- debugLogger40.warn(
45822
+ debugLogger41.warn(
45517
45823
  `Failed to release queued Goal turns: ${getErrorMessage(error)}`
45518
45824
  );
45519
45825
  });
@@ -45704,14 +46010,14 @@ ${buildWorkflowSteeringNotice()}
45704
46010
  }
45705
46011
  if (streamingState === "responding" /* Responding */ && isBtwCommand(submittedValue)) {
45706
46012
  void Promise.resolve(
45707
- submitQuery(
45708
- submittedValue,
45709
- "userQuery" /* UserQuery */,
45710
- void 0,
45711
- submittedPrompt === void 0 ? void 0 : { submittedPrompt }
45712
- )
46013
+ submitQuery(submittedValue, "userQuery" /* UserQuery */, void 0, {
46014
+ ...submittedPrompt === void 0 ? {} : { submittedPrompt },
46015
+ onAdmissionFailed: /* @__PURE__ */ __name(() => {
46016
+ addMessage(submittedValue, true, submittedPrompt);
46017
+ }, "onAdmissionFailed")
46018
+ })
45713
46019
  ).catch((error) => {
45714
- debugLogger40.warn("Failed to admit /btw submission", error);
46020
+ debugLogger41.warn("Failed to admit /btw submission", error);
45715
46021
  });
45716
46022
  return;
45717
46023
  }
@@ -45805,7 +46111,7 @@ ${buildWorkflowSteeringNotice()}
45805
46111
  submittedPrompt === void 0 ? void 0 : { submittedPrompt }
45806
46112
  )
45807
46113
  ).catch((error) => {
45808
- debugLogger40.warn("Failed to admit slash command", error);
46114
+ debugLogger41.warn("Failed to admit slash command", error);
45809
46115
  });
45810
46116
  return;
45811
46117
  }
@@ -45882,18 +46188,18 @@ ${currentText}` : popped.modelText
45882
46188
  geminiClient?.stripOrphanedUserEntriesFromHistory?.();
45883
46189
  }
45884
46190
  if (!draftWasEmpty) {
45885
- debugLogger40.debug("auto-restore bail: buffer was non-empty");
46191
+ debugLogger41.debug("auto-restore bail: buffer was non-empty");
45886
46192
  return;
45887
46193
  }
45888
46194
  if (popped !== null) {
45889
- debugLogger40.debug(
46195
+ debugLogger41.debug(
45890
46196
  "auto-restore bail: queue had items (drained to buffer)"
45891
46197
  );
45892
46198
  return;
45893
46199
  }
45894
46200
  const cancelledTurnUserItem = info?.lastTurnUserItem;
45895
46201
  if (cancelledTurnUserItem == null) {
45896
- debugLogger40.debug(
46202
+ debugLogger41.debug(
45897
46203
  "auto-restore bail: cancelled turn did not add a user history item"
45898
46204
  );
45899
46205
  return;
@@ -45907,20 +46213,20 @@ ${currentText}` : popped.modelText
45907
46213
  buffer.setText(cancelledTurnUserItem.text);
45908
46214
  }, "restoreCancelledPrompt");
45909
46215
  if (pendingHistoryItems2.some((item) => item.type === "tool_group")) {
45910
- debugLogger40.debug(
46216
+ debugLogger41.debug(
45911
46217
  "auto-restore bail: tool execution is pending or committed"
45912
46218
  );
45913
46219
  return;
45914
46220
  }
45915
46221
  if (info?.turnProducedMeaningfulContent) {
45916
- debugLogger40.debug(
46222
+ debugLogger41.debug(
45917
46223
  "auto-restore: preserving streamed output and restoring prompt text"
45918
46224
  );
45919
46225
  restoreCancelledPrompt();
45920
46226
  return;
45921
46227
  }
45922
46228
  if (pendingHistoryItems2.some((item) => !isSyntheticHistoryItem(item))) {
45923
- debugLogger40.debug(
46229
+ debugLogger41.debug(
45924
46230
  "auto-restore bail: pending stream item has meaningful content"
45925
46231
  );
45926
46232
  return;
@@ -45928,11 +46234,11 @@ ${currentText}` : popped.modelText
45928
46234
  const history = historyRef.current;
45929
46235
  const lastUserIdx = findLastUserItemIndex(history);
45930
46236
  if (lastUserIdx === -1) {
45931
- debugLogger40.debug("auto-restore bail: no user item in history");
46237
+ debugLogger41.debug("auto-restore bail: no user item in history");
45932
46238
  return;
45933
46239
  }
45934
46240
  if (!itemsAfterAreOnlySynthetic(history, lastUserIdx)) {
45935
- debugLogger40.debug(
46241
+ debugLogger41.debug(
45936
46242
  "auto-restore: preserving committed output and restoring prompt text"
45937
46243
  );
45938
46244
  restoreCancelledPrompt();
@@ -45940,18 +46246,18 @@ ${currentText}` : popped.modelText
45940
46246
  }
45941
46247
  const lastUserItem = history[lastUserIdx];
45942
46248
  if (lastUserItem.type !== "user") {
45943
- debugLogger40.debug(
46249
+ debugLogger41.debug(
45944
46250
  "auto-restore bail: lastUserItem type narrowing failed (unexpected)"
45945
46251
  );
45946
46252
  return;
45947
46253
  }
45948
46254
  if (lastUserItem.id !== cancelledTurnUserItem.id || lastUserItem.text !== cancelledTurnUserItem.text) {
45949
- debugLogger40.debug(
46255
+ debugLogger41.debug(
45950
46256
  "auto-restore bail: lastUserItem identity does not match cancelled-turn user item"
45951
46257
  );
45952
46258
  return;
45953
46259
  }
45954
- debugLogger40.debug(
46260
+ debugLogger41.debug(
45955
46261
  "auto-restore: rewinding cancelled turn and restoring prompt"
45956
46262
  );
45957
46263
  historyManager.truncateToItem(lastUserItem.id);
@@ -45960,7 +46266,7 @@ ${currentText}` : popped.modelText
45960
46266
  geminiClient?.stripOrphanedUserEntriesFromHistory?.();
45961
46267
  if (info?.canUndoLastLoggedUserMessage) {
45962
46268
  void logger?.removeLastUserMessage().catch((err) => {
45963
- debugLogger40.debug("Failed to undo cancelled prompt from log:", err);
46269
+ debugLogger41.debug("Failed to undo cancelled prompt from log:", err);
45964
46270
  });
45965
46271
  }
45966
46272
  },
@@ -46051,7 +46357,13 @@ ${currentText}` : popped.modelText
46051
46357
  suggestionAbortRef.current = ac;
46052
46358
  const conversationHistory = geminiClient.getHistoryTail(40, true);
46053
46359
  generatePromptSuggestion(config, conversationHistory, ac.signal, {
46054
- enableCacheSharing: settings.merged.ui?.enableCacheSharing === true
46360
+ // On by default: the schema declares `default: true`, but
46361
+ // `mergeSettings` doesn't apply schema defaults, so an unset value is
46362
+ // `undefined` and a `=== true` gate left the cache-aware fork as dead
46363
+ // code unless the flag was explicitly set (#9230). Same treatment as
46364
+ // `enableFollowupSuggestions` above — only an explicit `false` opts
46365
+ // out.
46366
+ enableCacheSharing: settings.merged.ui?.enableCacheSharing !== false
46055
46367
  }).then((result) => {
46056
46368
  if (ac.signal.aborted) return;
46057
46369
  if (result.suggestion) {
@@ -46676,7 +46988,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
46676
46988
  const handleGlobalKeypress = (0, import_react162.useCallback)(
46677
46989
  (key) => {
46678
46990
  if (settings.merged.general?.debugKeystrokeLogging) {
46679
- debugLogger40.debug("[DEBUG] Keystroke:", JSON.stringify(key));
46991
+ debugLogger41.debug("[DEBUG] Keystroke:", JSON.stringify(key));
46680
46992
  }
46681
46993
  if (keyMatchers["toggleThinkingExpanded" /* TOGGLE_THINKING_EXPANDED */](key)) {
46682
46994
  setThoughtExpanded((prev) => !prev);
@@ -46794,7 +47106,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
46794
47106
  );
46795
47107
  if (promotableShells.length === 1) {
46796
47108
  const executingShell = promotableShells[0];
46797
- debugLogger40.debug(
47109
+ debugLogger41.debug(
46798
47110
  `Ctrl+B promote: matched executing shell tool call ${executingShell.request.callId}`
46799
47111
  );
46800
47112
  executingShell.promoteAbortController.abort({
@@ -46802,7 +47114,7 @@ ${migrationResult.failedFiles.map((f) => ` \u2022 ${f.file}: ${f.error}`).join(
46802
47114
  });
46803
47115
  return;
46804
47116
  }
46805
- debugLogger40.debug(
47117
+ debugLogger41.debug(
46806
47118
  `Ctrl+B promote: expected exactly one executing shell tool call; falling through (streamingState=${streamingState}, pendingToolCalls=${pendingToolCallsRef.current.length}, promotableShells=${promotableShells.length})`
46807
47119
  );
46808
47120
  }
@@ -47493,7 +47805,7 @@ __name(installSynchronizedOutput, "installSynchronizedOutput");
47493
47805
 
47494
47806
  // packages/cli/src/ui/startInteractiveUI.tsx
47495
47807
  var import_jsx_runtime133 = __toESM(require_jsx_runtime(), 1);
47496
- var debugLogger41 = createDebugLogger("STARTUP");
47808
+ var debugLogger42 = createDebugLogger("STARTUP");
47497
47809
  var PRESSURE_CHECK_INTERVAL_MS = 3e4;
47498
47810
  async function startInteractiveUI(config, settings, startupWarnings, workspaceRoot = process.cwd(), initializationResult, options = {}) {
47499
47811
  const version = await getCliVersion();
@@ -47531,7 +47843,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
47531
47843
  );
47532
47844
  }
47533
47845
  } catch (err) {
47534
- debugLogger41.error("Failed to initialize dual output bridge:", err);
47846
+ debugLogger42.error("Failed to initialize dual output bridge:", err);
47535
47847
  writeStderrLine(
47536
47848
  `Warning: dual output disabled \u2014 ${err instanceof Error ? err.message : String(err)}`
47537
47849
  );
@@ -47542,7 +47854,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
47542
47854
  try {
47543
47855
  remoteInputWatcher = new RemoteInputWatcher(inputFile);
47544
47856
  } catch (err) {
47545
- debugLogger41.error("Failed to initialize remote input watcher:", err);
47857
+ debugLogger42.error("Failed to initialize remote input watcher:", err);
47546
47858
  writeStderrLine(
47547
47859
  `Warning: remote input disabled \u2014 ${err instanceof Error ? err.message : String(err)}`
47548
47860
  );
@@ -47593,7 +47905,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
47593
47905
  {
47594
47906
  recordForExitEcho: true,
47595
47907
  onError: (error, info) => {
47596
- debugLogger41.error(
47908
+ debugLogger42.error(
47597
47909
  `[FATAL_RENDER_ERROR] ${error.message}
47598
47910
  ${info.componentStack ?? ""}
47599
47911
  ${error.stack ?? ""}`
@@ -47671,6 +47983,14 @@ qwen --resume ${sessionId}`
47671
47983
  } catch {
47672
47984
  }
47673
47985
  });
47986
+ config.trackSessionRegistration(
47987
+ registerSession({
47988
+ sessionId: config.getSessionId(),
47989
+ cwd: config.getTargetDir(),
47990
+ qwenVersion: version
47991
+ })
47992
+ );
47993
+ registerCleanup(() => config.unregisterSessionRegistry());
47674
47994
  }
47675
47995
  __name(startInteractiveUI, "startInteractiveUI");
47676
47996
  function setWindowTitle(settings, folderName) {