@qwen-code/qwen-code 0.24.1-preview.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/chunks/{MaxSizedBox-KUCJSYXS.js → MaxSizedBox-VP25QGME.js} +17 -17
  2. package/chunks/{StandaloneSessionPicker-QT4DUNJR.js → StandaloneSessionPicker-AXIM3BD3.js} +30 -30
  3. package/chunks/{acp-subagent-executor-KW6N4O5M.js → acp-subagent-executor-6R2L4TW4.js} +22 -22
  4. package/chunks/{acpAgent-RNLWJ6MG.js → acpAgent-ANIVCBU3.js} +60 -60
  5. package/chunks/{agent-JYSR2HWP.js → agent-WINHBR34.js} +8 -8
  6. package/chunks/{agent-headless-B5LKNH46.js → agent-headless-A5K4MW5N.js} +8 -8
  7. package/chunks/{anthropicContentGenerator-5IQ7K553.js → anthropicContentGenerator-32MSDQUP.js} +3 -3
  8. package/chunks/{bridge-6BIZOKHU.js → bridge-HPCI3VIX.js} +21 -21
  9. package/chunks/{channel-settings-store-GWLLLZNN.js → channel-settings-store-THO2BU2E.js} +22 -22
  10. package/chunks/{channel-worker-group-JQVH6YXZ.js → channel-worker-group-OXNNU6H7.js} +2 -2
  11. package/chunks/{channel-worker-manager-6GRAAS5P.js → channel-worker-manager-WVBU5ABS.js} +2 -2
  12. package/chunks/{chunk-5GGB5BBQ.js → chunk-2UK4NN6N.js} +3 -3
  13. package/chunks/{chunk-BUGGU43J.js → chunk-2WYISDSZ.js} +12 -12
  14. package/chunks/{chunk-N4SQ4YAQ.js → chunk-3JHSUEQN.js} +29 -29
  15. package/chunks/{chunk-NKRIFDS7.js → chunk-3MYXEXVX.js} +1 -1
  16. package/chunks/{chunk-FLMQNPT7.js → chunk-3T7YUINK.js} +1 -1
  17. package/chunks/{chunk-YTVYZJKS.js → chunk-3UOPPEN5.js} +1 -1
  18. package/chunks/{chunk-AGSCJIHL.js → chunk-3XH7WS7C.js} +1 -1
  19. package/chunks/{chunk-IXORUYH3.js → chunk-44LWSWTY.js} +4 -4
  20. package/chunks/{chunk-ITY5NM7C.js → chunk-4HIQNJMZ.js} +2 -2
  21. package/chunks/{chunk-WWLAMZKC.js → chunk-4VLVXV4E.js} +3 -3
  22. package/chunks/{chunk-CZIABXYD.js → chunk-5JDABAZR.js} +41 -16
  23. package/chunks/{chunk-ES7Y4WAU.js → chunk-5S2PLWHB.js} +3 -3
  24. package/chunks/{chunk-ZZHSX7DH.js → chunk-647NOM2H.js} +1 -1
  25. package/chunks/{chunk-FQRWWEBV.js → chunk-6SFODSTA.js} +5 -5
  26. package/chunks/{chunk-DP4UACBB.js → chunk-7MJKFPGJ.js} +1 -1
  27. package/chunks/{chunk-OVU4JKTO.js → chunk-7OQL6UOC.js} +1 -1
  28. package/chunks/{chunk-MCXETRWJ.js → chunk-7UWZX65L.js} +5 -5
  29. package/chunks/{chunk-AA7TDMW7.js → chunk-A4IJR5S6.js} +210 -21
  30. package/chunks/{chunk-L7TJUPNR.js → chunk-A4MRRFBI.js} +5 -0
  31. package/chunks/{chunk-EXWXXD6V.js → chunk-ADQSGJV5.js} +2 -2
  32. package/chunks/{chunk-SH4TBUBG.js → chunk-ADXJQFDY.js} +10 -10
  33. package/chunks/{chunk-NGUKVAO3.js → chunk-B3VUYOPR.js} +1 -1
  34. package/chunks/{chunk-SDOSMUK7.js → chunk-B5GKOUHJ.js} +10 -10
  35. package/chunks/{chunk-AHJF2GP6.js → chunk-C4B5ZCE5.js} +3 -3
  36. package/chunks/{chunk-TXPFRFNN.js → chunk-CBJBLKDH.js} +6 -6
  37. package/chunks/{chunk-DAIWLFBL.js → chunk-CGDPJBVR.js} +1 -1
  38. package/chunks/{chunk-SHJBXWWG.js → chunk-CT6GGM4O.js} +3 -3
  39. package/chunks/{chunk-EJ34K56Y.js → chunk-DARAVO2F.js} +3 -3
  40. package/chunks/{chunk-EIGKYA3A.js → chunk-DHM2SAA3.js} +6 -6
  41. package/chunks/{chunk-ZL4IRXYL.js → chunk-DIJ4SN6P.js} +2 -2
  42. package/chunks/{chunk-T5U7ZMER.js → chunk-DOG4JYVA.js} +1 -1
  43. package/chunks/{chunk-FP6ZEPRZ.js → chunk-E3BHICIC.js} +11 -11
  44. package/chunks/{chunk-CBIQ7JYA.js → chunk-EE5L2LJI.js} +1 -1
  45. package/chunks/{chunk-74JB3JDQ.js → chunk-ET3ETUJS.js} +11 -11
  46. package/chunks/{chunk-GOVHQ7MU.js → chunk-FHL2YO3J.js} +3 -3
  47. package/chunks/{chunk-5RX3WWHF.js → chunk-FIC4SULR.js} +1 -1
  48. package/chunks/{chunk-TRJLFLSG.js → chunk-FUZESLZQ.js} +1 -1
  49. package/chunks/{chunk-LRB2MK5S.js → chunk-FVLDT6YJ.js} +12 -12
  50. package/chunks/{chunk-7F4PJYUT.js → chunk-GJV3UMRE.js} +1 -1
  51. package/chunks/{chunk-MMRGG6R4.js → chunk-H32AKV4B.js} +1 -1
  52. package/chunks/{chunk-ZVSFBBEP.js → chunk-HAYKZNOJ.js} +39 -39
  53. package/chunks/{chunk-D4QVZ3JC.js → chunk-HISXBKXU.js} +2 -2
  54. package/chunks/{chunk-2SDAQDRJ.js → chunk-HVXNAVUO.js} +9 -3
  55. package/chunks/{chunk-CSZQMAJU.js → chunk-ICWTEQBN.js} +7 -2
  56. package/chunks/{chunk-RPGUFXRL.js → chunk-IDJYUSKS.js} +1 -1
  57. package/chunks/{chunk-U33SJE32.js → chunk-IDT4P6XO.js} +22 -22
  58. package/chunks/{chunk-AHAFF43V.js → chunk-IHTXJ34C.js} +3 -3
  59. package/chunks/{chunk-KEA5LER2.js → chunk-J6QWYIXU.js} +41 -41
  60. package/chunks/{chunk-FIGVLM7P.js → chunk-JDS6RRHY.js} +37 -2
  61. package/chunks/{chunk-5NMDAR3R.js → chunk-JNCTEVLS.js} +1 -1
  62. package/chunks/{chunk-IAXMFUQS.js → chunk-JSKHW2K5.js} +5 -5
  63. package/chunks/{chunk-ZRXYTB4K.js → chunk-JXSZU3MK.js} +3 -3
  64. package/chunks/{chunk-HQASDZCX.js → chunk-KGPIAV25.js} +1 -1
  65. package/chunks/{chunk-VBO2XHNW.js → chunk-KPRD727P.js} +4 -4
  66. package/chunks/{chunk-VCUAEDIB.js → chunk-KZADFPIV.js} +1 -1
  67. package/chunks/{chunk-AW4D3YZH.js → chunk-MJFPRGEQ.js} +5 -5
  68. package/chunks/{chunk-QSYAJODM.js → chunk-MQD3FY7L.js} +1 -1
  69. package/chunks/{chunk-GVRLIFA4.js → chunk-MUREOC7V.js} +3 -3
  70. package/chunks/{chunk-RJUBIGK4.js → chunk-MZJANQV6.js} +4 -4
  71. package/chunks/{chunk-R4CCSBN5.js → chunk-NCAZON2B.js} +7 -7
  72. package/chunks/{chunk-JEX74CST.js → chunk-NIXL6GCQ.js} +1 -1
  73. package/chunks/{chunk-UKJB6ZQG.js → chunk-NM2N7ZFI.js} +1 -1
  74. package/chunks/{chunk-YJUHLWQP.js → chunk-O62LF7MT.js} +2 -2
  75. package/chunks/{chunk-PUN3M7R2.js → chunk-ORC4JFM2.js} +3 -3
  76. package/chunks/{chunk-YXHY6BKS.js → chunk-OY4DP3XV.js} +14 -1
  77. package/chunks/{chunk-ZFRHTGGC.js → chunk-P6FFA7BC.js} +3 -3
  78. package/chunks/{chunk-BGVLXVEL.js → chunk-PESOPZ2F.js} +1 -1
  79. package/chunks/{chunk-AU2UW4DJ.js → chunk-QBCQIJ5K.js} +2 -2
  80. package/chunks/{chunk-QWJUL3EV.js → chunk-QEOLKEN7.js} +10 -10
  81. package/chunks/{chunk-4BJBICBR.js → chunk-QXYC7SNQ.js} +1 -1
  82. package/chunks/{chunk-4JL7XATQ.js → chunk-QZECTXG4.js} +1 -1
  83. package/chunks/{chunk-JTVICULJ.js → chunk-RUWHZMXW.js} +1 -1
  84. package/chunks/{chunk-NNT6O4J3.js → chunk-S4XLNZOV.js} +2 -2
  85. package/chunks/{chunk-LJV4K3DB.js → chunk-S6JKXUFG.js} +3 -3
  86. package/chunks/{chunk-E6LQ7EPP.js → chunk-S7Z7UUYJ.js} +2 -2
  87. package/chunks/{chunk-OM4T37CL.js → chunk-SMWV3EVV.js} +2 -2
  88. package/chunks/{chunk-WQRSYHOV.js → chunk-SR22PJAJ.js} +1 -1
  89. package/chunks/{chunk-M7L2SA2L.js → chunk-SWT6XVJE.js} +2 -2
  90. package/chunks/{chunk-B27WBTQL.js → chunk-SZ4UJWEJ.js} +3 -3
  91. package/chunks/{chunk-23AKEO2X.js → chunk-TG246JMY.js} +4 -4
  92. package/chunks/{chunk-EOAC7LYX.js → chunk-TUKPBUHT.js} +1 -1
  93. package/chunks/{chunk-UPFXN2I5.js → chunk-U6SF7GWW.js} +2 -2
  94. package/chunks/{chunk-G7XNSEWW.js → chunk-UE5VCGKO.js} +1 -1
  95. package/chunks/{chunk-SENYKRII.js → chunk-UM4V7562.js} +1 -1
  96. package/chunks/{chunk-BHBX535D.js → chunk-UO447HYN.js} +3 -3
  97. package/chunks/{chunk-BCT35JUS.js → chunk-UX6ROE5I.js} +1 -1
  98. package/chunks/{chunk-5YVH75II.js → chunk-VMTAPCG3.js} +1 -1
  99. package/chunks/{chunk-YHDKU3TE.js → chunk-VPE6VNNU.js} +1 -1
  100. package/chunks/{chunk-JSLE45K3.js → chunk-WTMM54T4.js} +4 -4
  101. package/chunks/{chunk-CQXPGQM3.js → chunk-WUOYMIIY.js} +4 -4
  102. package/chunks/{chunk-T4VZ2FFU.js → chunk-XEUHI5QA.js} +2 -2
  103. package/chunks/{chunk-CH3NP6IB.js → chunk-Y5IALOXP.js} +3 -3
  104. package/chunks/{chunk-2Y74HXRF.js → chunk-YJHAAGEJ.js} +7 -7
  105. package/chunks/{chunk-NQVLSKLN.js → chunk-Z5MSVVHR.js} +5 -5
  106. package/chunks/{chunk-HKJBFFQL.js → chunk-ZCBBV4LJ.js} +1 -1
  107. package/chunks/{chunk-3GHFKNQ4.js → chunk-ZHBCAABR.js} +3 -3
  108. package/chunks/{codex-subagent-executor-ASRNK33D.js → codex-subagent-executor-ZWGUSD5U.js} +22 -22
  109. package/chunks/{config-utils-276H35DM.js → config-utils-XLPSLGT7.js} +17 -17
  110. package/chunks/{contextCommand-3KJY52EZ.js → contextCommand-KE2557UZ.js} +18 -18
  111. package/chunks/{core-runtime-PCU5WKTW.js → core-runtime-7YAFJG7V.js} +17 -17
  112. package/chunks/{create-sub-session-ZQSEDQEP.js → create-sub-session-LTVMBDOG.js} +19 -19
  113. package/chunks/{daemon-E4MVZ7AP.js → daemon-LKIZ3HNV.js} +1 -1
  114. package/chunks/{daemon-git-worktree-guard-3G7OJZVE.js → daemon-git-worktree-guard-EN4SNZZC.js} +17 -17
  115. package/chunks/{daemon-status-provider-DK4OBIDO.js → daemon-status-provider-R3OHAHXV.js} +26 -26
  116. package/chunks/{daemon-trust-policy-AUJD73YS.js → daemon-trust-policy-DJNNV3HE.js} +22 -22
  117. package/chunks/{daemon-trust-policy-monitor-B36SX5ZD.js → daemon-trust-policy-monitor-2ZSYXRY3.js} +22 -22
  118. package/chunks/{deferred-core-runtime-X3AZHAKT.js → deferred-core-runtime-B7BBNY7B.js} +17 -17
  119. package/chunks/{edit-VOVWMP6A.js → edit-XY623A63.js} +9 -9
  120. package/chunks/{enterPlanMode-XH3H22Y5.js → enterPlanMode-VGKHLQVD.js} +8 -8
  121. package/chunks/{environment-6VXYH6VG.js → environment-RGWXBPFA.js} +19 -19
  122. package/chunks/{errors-NBZXAZ4Z.js → errors-XLKJ7JAN.js} +19 -19
  123. package/chunks/{execution-tool-HU4U2MZC.js → execution-tool-LGCWZ5JC.js} +9 -9
  124. package/chunks/{execution-worker-7S5M5TSJ.js → execution-worker-3AA3OGWV.js} +12 -12
  125. package/chunks/{exitPlanMode-GDM5HEN2.js → exitPlanMode-AGRSXL5M.js} +8 -8
  126. package/chunks/{fast-path-ZA6QMLO5.js → fast-path-FS4CO72C.js} +2 -2
  127. package/chunks/{glob-QFBHEAGO.js → glob-KMXCAZRN.js} +8 -8
  128. package/chunks/{goal-tools-GY3COQCT.js → goal-tools-52S6IYSS.js} +8 -8
  129. package/chunks/{handleAutoUpdate-B2USOESX.js → handleAutoUpdate-6EGQYSNX.js} +19 -19
  130. package/chunks/{i18n-MJLCQAHB.js → i18n-BVX7GWVL.js} +17 -17
  131. package/chunks/{initializer-YC5FADAU.js → initializer-YMBTVCPZ.js} +22 -22
  132. package/chunks/{installationInfo-GLODYMH6.js → installationInfo-YUODJVWE.js} +17 -17
  133. package/chunks/{list-KXO6KPDE.js → list-4Y32CIK4.js} +25 -25
  134. package/chunks/{llm-IH445P53.js → llm-DBL6E66T.js} +51 -51
  135. package/chunks/{llm-content-generator-644JX24D.js → llm-content-generator-IXWLZ4HX.js} +3 -3
  136. package/chunks/{loadedSettingsAdapter-7SRX7VUN.js → loadedSettingsAdapter-5JNMUP3T.js} +22 -22
  137. package/chunks/{local-execution-environment-E7R4JG7E.js → local-execution-environment-JIXYT7RU.js} +12 -12
  138. package/chunks/{loggingContentGenerator-OJZWGSGX.js → loggingContentGenerator-ORTEE7AH.js} +9 -9
  139. package/chunks/{managed-npm-update-BWI3YFRU.js → managed-npm-update-RRIST4P4.js} +17 -17
  140. package/chunks/{mcp-JWWJ5TU7.js → mcp-3WQIHJPV.js} +22 -22
  141. package/chunks/{model-call-collection-NZHEJIY7.js → model-call-collection-NNN4RJL2.js} +1 -1
  142. package/chunks/{model-configuration-ZVHNQSJS.js → model-configuration-LOEF5WVW.js} +22 -22
  143. package/chunks/{modelConfigUtils-AG2S7GA7.js → modelConfigUtils-UDCM5BQO.js} +18 -18
  144. package/chunks/{monitor-EQRAWX7A.js → monitor-AMX4GGO4.js} +8 -8
  145. package/chunks/{nonInteractiveCli-MMJVDGEY.js → nonInteractiveCli-HODI6ON6.js} +47 -47
  146. package/chunks/{nonInteractiveToolExecutor-3IEPY5DJ.js → nonInteractiveToolExecutor-IZ3L3ZUR.js} +9 -9
  147. package/chunks/{notebook-edit-SQVDWVV6.js → notebook-edit-VZ3HDVGJ.js} +9 -9
  148. package/chunks/{omni-35EBXSME.js → omni-J44KEAF2.js} +7 -7
  149. package/chunks/{openaiContentGenerator-53O227CL.js → openaiContentGenerator-WNTCGOOP.js} +6 -6
  150. package/chunks/{openaiResponsesContentGenerator-BAYPOZEC.js → openaiResponsesContentGenerator-EXCS4CPS.js} +2 -2
  151. package/chunks/{pidfile-HAEQEZ64.js → pidfile-MO4VIRCZ.js} +17 -17
  152. package/chunks/{process-registry-7LAPI3ZB.js → process-registry-MDKO6QY2.js} +1 -1
  153. package/chunks/{processUtils-KYIV5HC3.js → processUtils-PTWIWCBV.js} +2 -2
  154. package/chunks/{prompt-terminal-ledger-GXIT72Z5.js → prompt-terminal-ledger-OJQFCVY7.js} +18 -18
  155. package/chunks/{qwenContentGenerator-AX6DSXDT.js → qwenContentGenerator-CEHDHYS7.js} +10 -10
  156. package/chunks/{reactive-degrade-AMTLWTLV.js → reactive-degrade-N2GKSQDU.js} +6 -6
  157. package/chunks/{read-file-6S4GIC2K.js → read-file-MGTENCNH.js} +2 -2
  158. package/chunks/{resumeHistoryUtils-GWHFVTC3.js → resumeHistoryUtils-D7HKDUH5.js} +18 -18
  159. package/chunks/{ripGrep-VQGJNW4K.js → ripGrep-GY3USA7L.js} +3 -3
  160. package/chunks/{run-qwen-serve-RVON37J5.js → run-qwen-serve-BYDSQGXR.js} +49 -49
  161. package/chunks/{runtime-HV7PSD3Q.js → runtime-2VYDGP5Q.js} +23 -23
  162. package/chunks/{sandbox-2OKPORXP.js → sandbox-DEDZKXWQ.js} +24 -24
  163. package/chunks/{sandboxConfig-JS3ZI2GL.js → sandboxConfig-KKO5NHYT.js} +17 -17
  164. package/chunks/{scheduled-tasks-V3JMXVOV.js → scheduled-tasks-SBK77VA3.js} +25 -25
  165. package/chunks/{scheduler-YWUNAEFF.js → scheduler-WFLBJDYN.js} +19 -19
  166. package/chunks/{serve-ID2Q4MWD.js → serve-Z25BL7HQ.js} +22 -22
  167. package/chunks/{server-HK6IXBVP.js → server-PN5WV25I.js} +360 -80
  168. package/chunks/{session-6CRGACLX.js → session-OCQ6TJAW.js} +48 -48
  169. package/chunks/{session-attachments-root-O6ZRZXDP.js → session-attachments-root-KQDWFXMV.js} +17 -17
  170. package/chunks/{session-pr-refresh-MEJYBAXR.js → session-pr-refresh-TPCBGPHC.js} +23 -23
  171. package/chunks/{settings-BRDCRWGI.js → settings-7B5BGXUM.js} +21 -21
  172. package/chunks/{shell-YU4MQWEI.js → shell-OHI4FUG7.js} +8 -8
  173. package/chunks/{skill-26WK45TC.js → skill-3VAIVEQN.js} +3 -3
  174. package/chunks/{skill-settings-ASVFIW7I.js → skill-settings-V3CDB6OM.js} +22 -22
  175. package/chunks/{spawnChannel-ILC4CSNK.js → spawnChannel-I3W24E2N.js} +20 -20
  176. package/chunks/{standalone-update-44PGH5CI.js → standalone-update-25IAVDS4.js} +18 -18
  177. package/chunks/{start-opentui-ui-3WNJ3Y3B.js → start-opentui-ui-54TLE52K.js} +55 -55
  178. package/chunks/{startInteractiveUI-ICMITNVB.js → startInteractiveUI-6O4AE46W.js} +58 -58
  179. package/chunks/{team-create-4EL4BNT6.js → team-create-ED6VAG37.js} +8 -8
  180. package/chunks/{team-plan-approval-T7XDAPCT.js → team-plan-approval-LDAEETXQ.js} +8 -8
  181. package/chunks/{terminal-image-renderer-J4E6JEVD.js → terminal-image-renderer-WQW44MKO.js} +17 -17
  182. package/chunks/{theme-manager-EAA4P7ZB.js → theme-manager-5COG22M3.js} +17 -17
  183. package/chunks/{tool-result-media-LVUF5W62.js → tool-result-media-LWY3EMBX.js} +7 -7
  184. package/chunks/{tool-search-BJ47WF7Y.js → tool-search-5RPYPGFG.js} +2 -2
  185. package/chunks/{total-session-admission-AFSEND5Y.js → total-session-admission-VK6OEGTQ.js} +22 -22
  186. package/chunks/{trustedFolders-BXVC2ZSN.js → trustedFolders-AXSP2EBB.js} +18 -18
  187. package/chunks/{update-relaunch-3VTLQD6Y.js → update-relaunch-XO6DITTA.js} +5 -5
  188. package/chunks/{updateCheck-T7CBK52C.js → updateCheck-XXUEDPUG.js} +17 -17
  189. package/chunks/{upload-config-ITUYOGSZ.js → upload-config-PE3LJBUR.js} +4 -4
  190. package/chunks/{useAutoAcceptIndicator-7B2FZOXS.js → useAutoAcceptIndicator-ZHUEUC5M.js} +23 -23
  191. package/chunks/{validateNonInterActiveAuth-2GLGIBX2.js → validateNonInterActiveAuth-QLGYQ3U6.js} +45 -45
  192. package/chunks/{version-XTAYX4SL.js → version-6WI5GKX6.js} +1 -1
  193. package/chunks/{web-fetch-RAXAPC6C.js → web-fetch-WVJPQMBM.js} +2 -2
  194. package/chunks/{web-search-GDJDCAZK.js → web-search-MLYZQUGL.js} +4 -4
  195. package/chunks/{web-shell-static-7D6SWOB2.js → web-shell-static-Y7Q6BKAX.js} +3 -3
  196. package/chunks/{workflow-TOLHCUKY.js → workflow-AQ74SHPL.js} +9 -9
  197. package/chunks/{workspace-providers-status-JY4WYV7Y.js → workspace-providers-status-XJEFMVE4.js} +27 -27
  198. package/chunks/{workspace-registration-store-WECAXTJZ.js → workspace-registration-store-ZQT3LZZS.js} +1 -1
  199. package/chunks/{workspace-registry-ZI47BE24.js → workspace-registry-TVK2R2Z2.js} +22 -22
  200. package/chunks/{workspace-runtime-coordinator-G7MYTPB5.js → workspace-runtime-coordinator-GC5P3UDU.js} +22 -22
  201. package/chunks/{workspace-service-VXXHCV4D.js → workspace-service-65RQN5D7.js} +25 -25
  202. package/chunks/{workspace-skills-status-2PZDUB5Q.js → workspace-skills-status-JKWIQAI2.js} +25 -25
  203. package/chunks/{workspace-trust-reconciler-SJVRYLJZ.js → workspace-trust-reconciler-BQ6QIZNQ.js} +27 -27
  204. package/chunks/{write-file-52PVKECT.js → write-file-BJ5NTPQB.js} +9 -9
  205. package/chunks/{zoom-image-3WGAMQBO.js → zoom-image-7INIHGVL.js} +2 -2
  206. package/cli.js +12 -12
  207. package/execution-worker.js +1 -1
  208. package/export-transcript-document.js +2 -2
  209. package/package.json +3 -3
  210. package/web-shell/assets/{abnfDiagram-VCTEODGH-D0JEBuhT.js → abnfDiagram-VCTEODGH-BkQBgBMY.js} +1 -1
  211. package/web-shell/assets/{arc-DAGU6UBq.js → arc-Br3zpBwP.js} +1 -1
  212. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BwwmZlIz.js → architectureDiagram-5GKGNRK7-hfIGqSc7.js} +1 -1
  213. package/web-shell/assets/{blockDiagram-NRAW4CY4-CVlamuqi.js → blockDiagram-NRAW4CY4-BLvXFxuL.js} +1 -1
  214. package/web-shell/assets/{c4Diagram-UCG6FXSJ-Ci_IwJMk.js → c4Diagram-UCG6FXSJ-B0ySRqbF.js} +1 -1
  215. package/web-shell/assets/channel-B2iKEcGd.js +1 -0
  216. package/web-shell/assets/{chunk-2Q5K7J3B-BTkMSTwx.js → chunk-2Q5K7J3B-Cir7zOVC.js} +1 -1
  217. package/web-shell/assets/{chunk-5VM5RSS4-B1PRIYDb.js → chunk-5VM5RSS4-CDD4SztQ.js} +1 -1
  218. package/web-shell/assets/{chunk-F27PBJKO-DxAa9kyk.js → chunk-F27PBJKO-asK4yFXN.js} +1 -1
  219. package/web-shell/assets/{chunk-G27WJ6UU-B6U4bvzH.js → chunk-G27WJ6UU-Duv3kKeG.js} +1 -1
  220. package/web-shell/assets/{chunk-JWPE2WC7-BisoH50p.js → chunk-JWPE2WC7-CxLgEAVC.js} +1 -1
  221. package/web-shell/assets/{chunk-LCL6LL3I-CMRFZX9Y.js → chunk-LCL6LL3I-C272Eh40.js} +1 -1
  222. package/web-shell/assets/{chunk-POPQ4Y6H-Bc3bX2-1.js → chunk-POPQ4Y6H-BEa9L8Rf.js} +1 -1
  223. package/web-shell/assets/{chunk-SVP7TREG-BSY_Of1a.js → chunk-SVP7TREG-Du7ekG8H.js} +1 -1
  224. package/web-shell/assets/{chunk-XXDRQBXY-DHYrtDpD.js → chunk-XXDRQBXY-D1NXTUyy.js} +1 -1
  225. package/web-shell/assets/classDiagram-DTDB5LWJ-mSbS1rbo.js +1 -0
  226. package/web-shell/assets/classDiagram-v2-JRS7N3AN-mSbS1rbo.js +1 -0
  227. package/web-shell/assets/{cose-bilkent-JH36ORCC-Bys8oqE4.js → cose-bilkent-JH36ORCC-DfpxBocn.js} +1 -1
  228. package/web-shell/assets/{cynefin-OW5HDTMX-Bk-1CHqw.js → cynefin-OW5HDTMX-DaA3nwgS.js} +1 -1
  229. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-COEAsK-6.js → cynefinDiagram-5FMLGOSQ-aTwGPwXr.js} +1 -1
  230. package/web-shell/assets/{dagre-3AP2YEHR-BnG-9dPK.js → dagre-3AP2YEHR-BPQureZ2.js} +1 -1
  231. package/web-shell/assets/{diagram-S7CK7UJ4-BtVOEWgf.js → diagram-S7CK7UJ4-B9l9YMYC.js} +1 -1
  232. package/web-shell/assets/{diagram-UQ7AKVKN-d4UMEB4H.js → diagram-UQ7AKVKN-BINF0OVO.js} +1 -1
  233. package/web-shell/assets/{diagram-VSXAHHWV-DyumoLYZ.js → diagram-VSXAHHWV-CiZZUkn4.js} +1 -1
  234. package/web-shell/assets/{diagram-VX7I27RA-Cldjtjw-.js → diagram-VX7I27RA-DSryZ82r.js} +1 -1
  235. package/web-shell/assets/{diagram-Z3DM3KII-Ca2x7FQT.js → diagram-Z3DM3KII-DVVmSiV6.js} +1 -1
  236. package/web-shell/assets/{ebnfDiagram-PWID7BFC-_aBrHXYY.js → ebnfDiagram-PWID7BFC-DlyDLz4E.js} +1 -1
  237. package/web-shell/assets/{erDiagram-SSCWMZ5O-DNwW3a90.js → erDiagram-SSCWMZ5O-CKzUW1DF.js} +1 -1
  238. package/web-shell/assets/{flowDiagram-A5DVABFB-BfJ0C05G.js → flowDiagram-A5DVABFB-BJbhb4Ms.js} +1 -1
  239. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BjF5dWdv.js → ganttDiagram-EL5Y4UJY-C3MvAYYH.js} +1 -1
  240. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-CGWbHD_5.js → gitGraphDiagram-WWUBYQGX-WAlEYhpV.js} +1 -1
  241. package/web-shell/assets/{index-DzP0zXEw.js → index-B-m7jwUn.js} +478 -478
  242. package/web-shell/assets/{index-CfVvGORC.css → index-C6EbTEEX.css} +1 -1
  243. package/web-shell/assets/{index-nCA_zAWZ.js → index-D-0jw_Mv.js} +1 -1
  244. package/web-shell/assets/{infoDiagram-RXCK75RN-Cb54Ezi2.js → infoDiagram-RXCK75RN-lCSiGsnv.js} +1 -1
  245. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-24hQd7nh.js → ishikawaDiagram-5VMMS53U-DO2Phifr.js} +1 -1
  246. package/web-shell/assets/{journeyDiagram-EYS64GPL-BeMX0Fob.js → journeyDiagram-EYS64GPL-CMopttgZ.js} +1 -1
  247. package/web-shell/assets/{kanban-definition-3QL26DDD-CtzuHfsW.js → kanban-definition-3QL26DDD-C9fCgZW7.js} +1 -1
  248. package/web-shell/assets/{layout-Cm8Q-zkY.js → layout-jwnqp6Nz.js} +1 -1
  249. package/web-shell/assets/{linear-ROsyxegk.js → linear-BzQI00gV.js} +1 -1
  250. package/web-shell/assets/{mermaid.core-CbsHVklJ.js → mermaid.core-D8V71OO3.js} +6 -6
  251. package/web-shell/assets/{mindmap-definition-FBJOCRG2-D-1wgZM8.js → mindmap-definition-FBJOCRG2-BLUH8tli.js} +1 -1
  252. package/web-shell/assets/{pegDiagram-XKGWAZYB-CA0EenND.js → pegDiagram-XKGWAZYB-BO0qnSfj.js} +1 -1
  253. package/web-shell/assets/{pieDiagram-E7YTZNPT-DpQYQEr7.js → pieDiagram-E7YTZNPT-e4Cjh-6j.js} +1 -1
  254. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-p_vAaR6O.js → quadrantDiagram-AXDQQJYC-BwTHa_JF.js} +1 -1
  255. package/web-shell/assets/{railroadDiagram-O6MQD6OU-BKyJ5sVa.js → railroadDiagram-O6MQD6OU-B-KW5-Sx.js} +1 -1
  256. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-DSLOYpCE.js → requirementDiagram-EFPCY7ZU-D54hNSnQ.js} +1 -1
  257. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-BKsyb3xf.js → sankeyDiagram-P5KCCOFB-CBBp5lR9.js} +1 -1
  258. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-gKXhvPcm.js → sequenceDiagram-WJ2MYXX4-OqoAVsuX.js} +1 -1
  259. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CMICsW9l.js → sizeCapture-X5ZJPWSS-D8TpQJlP.js} +1 -1
  260. package/web-shell/assets/{stateDiagram-HBIQ2CUA-D1DfVVxo.js → stateDiagram-HBIQ2CUA-BU9Ei757.js} +1 -1
  261. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-67Q7WT5I.js +1 -0
  262. package/web-shell/assets/{swimlanes-XN3QIQJK-CwStpdu7.js → swimlanes-XN3QIQJK-BpN3knRL.js} +1 -1
  263. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Dh3LDQRv.js +8 -0
  264. package/web-shell/assets/{timeline-definition-24CTP7MA-Cr0FW_dQ.js → timeline-definition-24CTP7MA-B_Qj6PLG.js} +1 -1
  265. package/web-shell/assets/{vennDiagram-4TSXK5OY-BdBYY1sF.js → vennDiagram-4TSXK5OY-USf6WC_3.js} +1 -1
  266. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-D_0NskWe.js → wardleyDiagram-VM6X3IG4-DhXuNigR.js} +1 -1
  267. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-C92n2C8T.js → xychartDiagram-S5SC5T6Z-64GH9bS_.js} +1 -1
  268. package/web-shell/index.html +2 -2
  269. package/web-shell/sw.js +1 -1
  270. package/web-shell/assets/channel-BnrGNlLf.js +0 -1
  271. package/web-shell/assets/classDiagram-DTDB5LWJ-CFT-ig3n.js +0 -1
  272. package/web-shell/assets/classDiagram-v2-JRS7N3AN-CFT-ig3n.js +0 -1
  273. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CPEnbJbA.js +0 -1
  274. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ByuUl_Y1.js +0 -8
@@ -23,7 +23,7 @@ import {
23
23
  import {
24
24
  channelFactoryForwardsChildEnv,
25
25
  defaultSpawnChannelFactory
26
- } from "./chunk-2SDAQDRJ.js";
26
+ } from "./chunk-HVXNAVUO.js";
27
27
  import {
28
28
  BridgeChannelClosedError,
29
29
  BridgeTimeoutError,
@@ -33,7 +33,7 @@ import {
33
33
  SessionRestoreTimeoutError,
34
34
  createIdleWorkspaceExtensionsStatus,
35
35
  createIdleWorkspaceHooksStatus
36
- } from "./chunk-EOAC7LYX.js";
36
+ } from "./chunk-TUKPBUHT.js";
37
37
  import {
38
38
  ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM,
39
39
  ACTIVE_WORK_CLOSE_TIMEOUT_MS,
@@ -106,9 +106,11 @@ import {
106
106
  SessionShellClientRequiredError,
107
107
  SessionShellDisabledError,
108
108
  StandaloneSessionSpawnError,
109
+ WorkspaceDrainingError,
109
110
  WorkspaceMismatchError,
111
+ WorkspaceRuntimeStopError,
110
112
  isNotCurrentlyGeneratingCancelError
111
- } from "./chunk-YXHY6BKS.js";
113
+ } from "./chunk-OY4DP3XV.js";
112
114
  import {
113
115
  canonicalizeWorkspace,
114
116
  translateAndCheckAbsoluteWorkspacePath
@@ -156,7 +158,7 @@ import {
156
158
  canonicalSessionPrUrl,
157
159
  normalizeTurnResultError,
158
160
  toSessionPrInfo
159
- } from "./chunk-KEA5LER2.js";
161
+ } from "./chunk-J6QWYIXU.js";
160
162
  import {
161
163
  isUnverifiableIdentityError,
162
164
  openNoFollow
@@ -1254,7 +1256,8 @@ function createChannelHarness(options) {
1254
1256
  }
1255
1257
  __name(resolvedChannelIdleTimeoutMs, "resolvedChannelIdleTimeoutMs");
1256
1258
  async function startIdleTimer(ci, context) {
1257
- if (ci.isDying || liveHarnessChannel() !== ci) return;
1259
+ if (options.isRuntimeStopping() || ci.isDying || liveHarnessChannel() !== ci)
1260
+ return;
1258
1261
  const timeoutMs = resolvedChannelIdleTimeoutMs();
1259
1262
  if (timeoutMs <= 0) {
1260
1263
  await killChannelWithLog(ci, context);
@@ -1273,6 +1276,14 @@ function createChannelHarness(options) {
1273
1276
  idleTimer.unref();
1274
1277
  }
1275
1278
  __name(startIdleTimer, "startIdleTimer");
1279
+ function retireChannel(info, context) {
1280
+ info.isDying = true;
1281
+ cancelIdleTimer();
1282
+ keepAliveUntil = 0;
1283
+ info.channelLiveness?.stop();
1284
+ return terminateChannel(info.channel, initTimeoutMs, context);
1285
+ }
1286
+ __name(retireChannel, "retireChannel");
1276
1287
  async function reapPendingEmptyChannel(ci, opts) {
1277
1288
  if (!channelShouldReapWhenIdle(ci) || !hasNoChannelWork(ci, opts)) return;
1278
1289
  ci.emptyReapPending = false;
@@ -1287,6 +1298,8 @@ function createChannelHarness(options) {
1287
1298
  }
1288
1299
  __name(reapPendingEmptyChannel, "reapPendingEmptyChannel");
1289
1300
  async function withWorkspaceControl(ci, fn, recordUse = true) {
1301
+ if (options.isRuntimeStopping())
1302
+ throw new WorkspaceDrainingError(options.boundWorkspace ?? "");
1290
1303
  if (liveHarnessChannel() === ci) cancelIdleTimer();
1291
1304
  if (recordUse) ci.lastUsedAt = Date.now();
1292
1305
  ci.workspaceControlInFlight++;
@@ -1328,6 +1341,8 @@ function createChannelHarness(options) {
1328
1341
  }
1329
1342
  __name(releaseRuntimeOperationReservation, "releaseRuntimeOperationReservation");
1330
1343
  async function ensureChannel() {
1344
+ if (options.isRuntimeStopping())
1345
+ throw new WorkspaceDrainingError(options.boundWorkspace ?? "");
1331
1346
  if (isShuttingDown()) {
1332
1347
  throw new Error("AcpSessionBridge is shutting down");
1333
1348
  }
@@ -1463,16 +1478,11 @@ function createChannelHarness(options) {
1463
1478
  settleReleasedRuntimeWork,
1464
1479
  preheat,
1465
1480
  reclaimIdleChannel(info) {
1466
- info.isDying = true;
1467
- cancelIdleTimer();
1468
- keepAliveUntil = 0;
1469
- info.channelLiveness?.stop();
1470
1481
  writeStderrLine(`qwen serve: reclaiming idle ACP channel ${info.id}`);
1471
- return terminateChannel(
1472
- info.channel,
1473
- initTimeoutMs,
1474
- "capacity reclamation"
1475
- );
1482
+ return retireChannel(info, "capacity reclamation");
1483
+ },
1484
+ stopChannel(info) {
1485
+ return retireChannel(info, "user-confirmed workspace stop");
1476
1486
  },
1477
1487
  markDying(channels) {
1478
1488
  for (const ci of channels) {
@@ -10043,6 +10053,7 @@ function createSessionControlPlane(opts, createHarness) {
10043
10053
  return void 0;
10044
10054
  }, "freshSessionBlocker");
10045
10055
  const assertFreshSessionsAvailable = /* @__PURE__ */ __name(() => {
10056
+ assertRuntimeNotStopping();
10046
10057
  const blocker = freshSessionBlocker();
10047
10058
  if (blocker) {
10048
10059
  throw new BridgeChannelQuarantinedError(
@@ -10345,6 +10356,7 @@ function createSessionControlPlane(opts, createHarness) {
10345
10356
  }
10346
10357
  __name(maybeCloseIdleSession, "maybeCloseIdleSession");
10347
10358
  async function closeIfChildUnheld(entry, opts2) {
10359
+ if (runtimeStop) return;
10348
10360
  entry.activeWorkCloseInFlight = true;
10349
10361
  try {
10350
10362
  if (!await confirmChildUnheld(entry)) return;
@@ -10623,7 +10635,7 @@ function createSessionControlPlane(opts, createHarness) {
10623
10635
  `qwen serve: session reaper started (interval ${sessionReapIntervalMs}ms, idle threshold ${sessionIdleTimeoutMs}ms)`
10624
10636
  );
10625
10637
  sessionReaper = setInterval(() => {
10626
- if (shuttingDown) return;
10638
+ if (shuttingDown || runtimeStop) return;
10627
10639
  const now = Date.now();
10628
10640
  for (const [id, entry] of byId) {
10629
10641
  if (sessionIdleTimeoutMs <= 0) break;
@@ -10768,6 +10780,13 @@ function createSessionControlPlane(opts, createHarness) {
10768
10780
  }
10769
10781
  );
10770
10782
  let shuttingDown = false;
10783
+ let runtimeStopToken = randomUUID3();
10784
+ let lastRuntimeStop;
10785
+ let runtimeStop;
10786
+ function assertRuntimeNotStopping() {
10787
+ if (runtimeStop) throw new WorkspaceDrainingError(boundWorkspace ?? "");
10788
+ }
10789
+ __name(assertRuntimeNotStopping, "assertRuntimeNotStopping");
10771
10790
  let shutdownPromise;
10772
10791
  const teeServeDebugLine = /* @__PURE__ */ __name((message) => {
10773
10792
  writeServeDebugLine(message);
@@ -10782,6 +10801,7 @@ function createSessionControlPlane(opts, createHarness) {
10782
10801
  const inFlightRestores = /* @__PURE__ */ new Map();
10783
10802
  const resetPendingSessions = /* @__PURE__ */ new Set();
10784
10803
  function assertSessionResetNotPending(sessionId) {
10804
+ assertRuntimeNotStopping();
10785
10805
  if (resetPendingSessions.has(sessionId)) {
10786
10806
  throw new SessionResetPendingError(sessionId);
10787
10807
  }
@@ -11092,10 +11112,14 @@ function createSessionControlPlane(opts, createHarness) {
11092
11112
  );
11093
11113
  try {
11094
11114
  sessEntry.events.publish({
11095
- type: "session_died",
11115
+ type: runtimeStop?.channel === info ? "session_closed" : "session_died",
11096
11116
  data: {
11097
11117
  sessionId: sid,
11098
- reason: "channel_closed",
11118
+ reason: runtimeStop?.channel === info ? "client_close" : "channel_closed",
11119
+ ...runtimeStop?.channel === info ? {
11120
+ cause: "workspace_runtime_stop",
11121
+ persistenceUnconfirmed: true
11122
+ } : {},
11099
11123
  // BX9_P: thread exitCode/signalCode through.
11100
11124
  exitCode: exitInfo?.exitCode ?? null,
11101
11125
  signalCode: exitInfo?.signalCode ?? null
@@ -11142,6 +11166,7 @@ function createSessionControlPlane(opts, createHarness) {
11142
11166
  delegateReadTextFileToClient,
11143
11167
  isExternalToolGuardRequired: /* @__PURE__ */ __name(() => !!opts.externalToolGuard, "isExternalToolGuardRequired"),
11144
11168
  isShuttingDown: /* @__PURE__ */ __name(() => shuttingDown, "isShuttingDown"),
11169
+ isRuntimeStopping: /* @__PURE__ */ __name(() => runtimeStop !== void 0, "isRuntimeStopping"),
11145
11170
  constructHarnessChannel: constructChannelInfo,
11146
11171
  handleChannelTransportUnavailable: /* @__PURE__ */ __name((channel) => handleChannelTransportUnavailable(getChannelInfo(channel)), "handleChannelTransportUnavailable"),
11147
11172
  beforeChannelExit: /* @__PURE__ */ __name((channel) => beforeChannelExit(getChannelInfo(channel)), "beforeChannelExit"),
@@ -11854,6 +11879,7 @@ function createSessionControlPlane(opts, createHarness) {
11854
11879
  return void 0;
11855
11880
  }, "channelInfoForEntry");
11856
11881
  const assertAttachableSessionEntry = /* @__PURE__ */ __name((sessionId, entry) => {
11882
+ assertRuntimeNotStopping();
11857
11883
  if (byId.get(sessionId) !== entry) {
11858
11884
  throw new SessionNotFoundError(
11859
11885
  sessionId,
@@ -11876,6 +11902,7 @@ function createSessionControlPlane(opts, createHarness) {
11876
11902
  }
11877
11903
  }, "assertAttachableSessionEntry");
11878
11904
  const assertLivePromptEntry = /* @__PURE__ */ __name((sessionId, entry) => {
11905
+ assertRuntimeNotStopping();
11879
11906
  const info = channelInfoForEntry(entry);
11880
11907
  if (byId.get(sessionId) !== entry || !info || info.harness.isDying) {
11881
11908
  throw new SessionNotFoundError(sessionId);
@@ -13865,6 +13892,8 @@ function createSessionControlPlane(opts, createHarness) {
13865
13892
  }
13866
13893
  __name(restoreSessionWithReplay, "restoreSessionWithReplay");
13867
13894
  async function closeSessionImpl(sessionId, context, closeOpts) {
13895
+ if (closeOpts?.cause !== "workspace_runtime_stop")
13896
+ assertRuntimeNotStopping();
13868
13897
  const entry = byId.get(sessionId);
13869
13898
  if (!entry) throw new SessionNotFoundError(sessionId);
13870
13899
  if (entry.closing) {
@@ -13911,6 +13940,12 @@ function createSessionControlPlane(opts, createHarness) {
13911
13940
  ...closeOpts?.agentCloseTimeoutMs !== void 0 ? { timeoutMs: closeOpts.agentCloseTimeoutMs } : {}
13912
13941
  }
13913
13942
  );
13943
+ if (closeOpts?.cause === "workspace_runtime_stop" && !agentSessionClosed) {
13944
+ throw new RequestError(
13945
+ -32603,
13946
+ "Agent did not acknowledge session close"
13947
+ );
13948
+ }
13914
13949
  } catch (error) {
13915
13950
  if (isDefinitiveAcpRequestError(error)) {
13916
13951
  entry.closing = false;
@@ -13956,6 +13991,7 @@ function createSessionControlPlane(opts, createHarness) {
13956
13991
  data: {
13957
13992
  sessionId,
13958
13993
  reason,
13994
+ ...closeOpts?.cause ? { cause: closeOpts.cause } : {},
13959
13995
  // `data.closedBy` is kept for back-compat with existing
13960
13996
  // wire consumers; new code should read envelope-level
13961
13997
  // `originatorClientId` (matches `session_metadata_updated`,
@@ -14002,6 +14038,152 @@ function createSessionControlPlane(opts, createHarness) {
14002
14038
  }
14003
14039
  }
14004
14040
  __name(closeSessionImpl, "closeSessionImpl");
14041
+ function copyRuntimeStop(result) {
14042
+ return {
14043
+ ...result,
14044
+ affectedSessionIds: [...result.affectedSessionIds],
14045
+ closedSessionIds: [...result.closedSessionIds],
14046
+ interruptedSessionIds: [...result.interruptedSessionIds],
14047
+ remainingSessionIds: [...result.remainingSessionIds]
14048
+ };
14049
+ }
14050
+ __name(copyRuntimeStop, "copyRuntimeStop");
14051
+ function runtimeStopSnapshot() {
14052
+ const ci = liveChannelInfo();
14053
+ const blockedReasons = [];
14054
+ if (shuttingDown || runtimeStop || [...harness.values()].some((c) => c.isDying))
14055
+ blockedReasons.push("stopping");
14056
+ if (!ci) blockedReasons.push("not_live");
14057
+ else if (!ci.channel.registryReleased)
14058
+ blockedReasons.push("release_unavailable");
14059
+ if (harness.starting || inFlightSpawns.size || inFlightRestores.size || abandonedNewSessionSettlements.size || harness.runtimeOperationReservations || harness.pendingKeepAliveCount || inFlightSessionIdReservations.size || abandonedSessionIdReservations.size || ci && (ci.sessionSpawnsInFlight || ci.pendingRestoreIds.size))
14060
+ blockedReasons.push("session_start_pending");
14061
+ if (ci && (ci.harness.workspaceControlInFlight || ci.workspaceMcpDiscoveryInFlight || ci.workspaceMcpAuthenticationServerNames.size))
14062
+ blockedReasons.push("workspace_control_pending");
14063
+ if ([...byId.values()].some(
14064
+ (e) => isClosingOrAuthorizingClose(e) || resetPendingSessions.has(e.sessionId)
14065
+ ))
14066
+ blockedReasons.push("session_closing");
14067
+ return {
14068
+ ...ci ? { channelId: ci.id } : {},
14069
+ runtimeEpoch: harness.epoch,
14070
+ stopToken: runtimeStopToken,
14071
+ blockedReasons,
14072
+ sessions: [...byId.values()].map((entry) => {
14073
+ const summary = toSessionSummary(entry);
14074
+ return {
14075
+ sessionId: entry.sessionId,
14076
+ displayName: summary.displayName,
14077
+ hasActivePrompt: summary.hasActivePrompt,
14078
+ queuedPrompts: entry.pendingPromptList.filter((p) => p.state === "queued").length + entry.midTurnMessageQueue.length,
14079
+ isWaitingForPermission: summary.isWaitingForPermission === true,
14080
+ isWaitingForUserQuestion: summary.isWaitingForUserQuestion === true,
14081
+ ...summary.hasRunningBackgroundTasks !== void 0 ? { hasRunningBackgroundTasks: summary.hasRunningBackgroundTasks } : {}
14082
+ };
14083
+ }),
14084
+ ...lastRuntimeStop ? { lastStop: copyRuntimeStop(lastRuntimeStop) } : {}
14085
+ };
14086
+ }
14087
+ __name(runtimeStopSnapshot, "runtimeStopSnapshot");
14088
+ function stopWorkspaceRuntime(request, timeoutMs = 6e4) {
14089
+ if (lastRuntimeStop?.stopToken === request.expectedStopToken && lastRuntimeStop.channelId === request.expectedChannelId && lastRuntimeStop.runtimeEpoch === request.expectedRuntimeEpoch) {
14090
+ return runtimeStop?.promise ?? Promise.resolve(copyRuntimeStop(lastRuntimeStop));
14091
+ }
14092
+ const snapshot = runtimeStopSnapshot();
14093
+ const ids = snapshot.sessions.map((session) => session.sessionId).sort();
14094
+ if (request.confirmInterruptions !== true || snapshot.stopToken !== request.expectedStopToken || snapshot.channelId !== request.expectedChannelId || snapshot.runtimeEpoch !== request.expectedRuntimeEpoch || JSON.stringify(ids) !== JSON.stringify([...request.expectedSessionIds].sort())) {
14095
+ throw new WorkspaceRuntimeStopError("workspace_runtime_stop_stale");
14096
+ }
14097
+ if (snapshot.blockedReasons.length || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
14098
+ throw new WorkspaceRuntimeStopError("workspace_runtime_stop_blocked");
14099
+ }
14100
+ const ci = liveChannelInfo();
14101
+ const released = ci.channel.registryReleased;
14102
+ const receipt = {
14103
+ channelId: ci.id,
14104
+ runtimeEpoch: harness.epoch,
14105
+ stopToken: runtimeStopToken,
14106
+ state: "stopping",
14107
+ stopped: false,
14108
+ released: false,
14109
+ affectedSessionIds: ids,
14110
+ closedSessionIds: [],
14111
+ interruptedSessionIds: [],
14112
+ remainingSessionIds: [...ids]
14113
+ };
14114
+ lastRuntimeStop = receipt;
14115
+ runtimeStopToken = randomUUID3();
14116
+ harness.cancelIdleTimer();
14117
+ const deadline = Date.now() + timeoutMs;
14118
+ const operation = {
14119
+ channel: ci,
14120
+ promise: Promise.resolve(receipt),
14121
+ completion: Promise.resolve(receipt)
14122
+ };
14123
+ runtimeStop = operation;
14124
+ void released.then(() => {
14125
+ receipt.released = true;
14126
+ });
14127
+ operation.completion = Promise.resolve().then(async () => {
14128
+ try {
14129
+ for (const sessionId of ids) {
14130
+ const remainingMs = deadline - Date.now();
14131
+ if (remainingMs <= 0) {
14132
+ receipt.state = "incomplete";
14133
+ receipt.error = "Session close budget exhausted; remaining sessions were not closed.";
14134
+ return copyRuntimeStop(receipt);
14135
+ }
14136
+ receipt.interruptedSessionIds.push(sessionId);
14137
+ try {
14138
+ await closeSessionImpl(sessionId, void 0, {
14139
+ cause: "workspace_runtime_stop",
14140
+ requireAgentClose: true,
14141
+ agentCloseTimeoutMs: Math.min(initTimeoutMs, remainingMs)
14142
+ });
14143
+ receipt.closedSessionIds.push(sessionId);
14144
+ receipt.remainingSessionIds = receipt.remainingSessionIds.filter(
14145
+ (id) => id !== sessionId
14146
+ );
14147
+ } catch (error) {
14148
+ receipt.error = error instanceof Error ? error.message : String(error);
14149
+ if (ci.harness.isDying || !harness.has(ci.harness)) {
14150
+ receipt.interruptedSessionIds = [...ids];
14151
+ await released;
14152
+ receipt.remainingSessionIds = ids.filter((id) => byId.has(id));
14153
+ }
14154
+ receipt.state = "incomplete";
14155
+ return copyRuntimeStop(receipt);
14156
+ }
14157
+ }
14158
+ try {
14159
+ await harness.stopChannel(ci.harness);
14160
+ } catch (error) {
14161
+ receipt.state = "failed";
14162
+ receipt.error = error instanceof Error ? error.message : String(error);
14163
+ }
14164
+ await released;
14165
+ receipt.state = "stopped";
14166
+ receipt.stopped = true;
14167
+ return copyRuntimeStop(receipt);
14168
+ } finally {
14169
+ if (runtimeStop === operation) runtimeStop = void 0;
14170
+ }
14171
+ });
14172
+ let timer;
14173
+ operation.promise = Promise.race([
14174
+ operation.completion,
14175
+ new Promise((resolve2) => {
14176
+ timer = setTimeout(() => {
14177
+ receipt.state = "failed";
14178
+ receipt.error ??= "Workspace stop timed out before cleanup completed.";
14179
+ resolve2(copyRuntimeStop(receipt));
14180
+ }, timeoutMs);
14181
+ timer.unref?.();
14182
+ })
14183
+ ]).finally(() => clearTimeout(timer));
14184
+ return operation.promise;
14185
+ }
14186
+ __name(stopWorkspaceRuntime, "stopWorkspaceRuntime");
14005
14187
  startSessionReaper();
14006
14188
  const rememberMidTurnId = /* @__PURE__ */ __name((ring, messageId) => {
14007
14189
  ring.push(messageId);
@@ -14248,18 +14430,21 @@ function createSessionControlPlane(opts, createHarness) {
14248
14430
  );
14249
14431
  }
14250
14432
  const starting = harness.starting !== void 0;
14251
- const stopping = Array.from(channelInfos()).some(
14433
+ const stopping = runtimeStop !== void 0 || Array.from(channelInfos()).some(
14252
14434
  (candidate) => candidate.harness.isDying
14253
14435
  );
14254
14436
  const reservedWork = harness.runtimeOperationReservations > 0 || inFlightSpawns.size > 0 || inFlightRestores.size > 0 || abandonedNewSessionSettlements.size > 0 || harness.pendingKeepAliveCount > 0;
14255
14437
  const activeWork = starting || stopping || reservedWork || info !== void 0 && !harness.hasNoChannelWork(info.harness);
14256
14438
  return {
14257
- state: !runtimeLive ? stopping ? "stopping" : starting ? "starting" : "cold" : activeWork ? "active" : "idle",
14439
+ state: runtimeStop ? "stopping" : !runtimeLive ? stopping ? "stopping" : starting ? "starting" : "cold" : activeWork ? "active" : "idle",
14258
14440
  runtimeLive,
14259
14441
  runtimeEpoch: runtimeLive ? harness.epoch : sourceRuntimeEpoch,
14260
14442
  activeWork
14261
14443
  };
14262
14444
  },
14445
+ getRuntimeStopSnapshot: runtimeStopSnapshot,
14446
+ getRuntimeStopCompletion: /* @__PURE__ */ __name(() => runtimeStop?.completion, "getRuntimeStopCompletion"),
14447
+ stopWorkspaceRuntime,
14263
14448
  getIdleChannelCandidate() {
14264
14449
  const info = liveChannelInfo();
14265
14450
  if (shuttingDown || !info || byId.size > 0 || channelShouldReapWhenIdle(info) || bridgeApi.getWorkspaceRuntimeLifecycleSnapshot().activeWork) {
@@ -18001,6 +18186,10 @@ function createSessionControlPlane(opts, createHarness) {
18001
18186
  entry.spawnOwnerWantedKill = true;
18002
18187
  return false;
18003
18188
  }
18189
+ if (runtimeStop) {
18190
+ entry.spawnOwnerWantedKill = true;
18191
+ return false;
18192
+ }
18004
18193
  if (entry.closing) {
18005
18194
  const closingChannel = channelInfoForEntry(entry);
18006
18195
  if (!closingChannel) return false;
@@ -18226,12 +18415,12 @@ __name(createAcpSessionBridge, "createAcpSessionBridge");
18226
18415
  var createHttpAcpBridge = createAcpSessionBridge;
18227
18416
 
18228
18417
  export {
18229
- SessionArtifactValidationError,
18230
- SessionArtifactAuthorizationError,
18231
18418
  SCHEDULED_TASK_RUN_SOURCE_TYPE,
18232
18419
  SCHEDULED_TASK_RUN_SOURCE_ID_PREFIX,
18233
18420
  parseSessionSource,
18234
18421
  isA2uiToolMeta,
18422
+ SessionArtifactValidationError,
18423
+ SessionArtifactAuthorizationError,
18235
18424
  extractErrorMessage,
18236
18425
  extractErrorCode,
18237
18426
  classifyTurnErrorKind,
@@ -115,6 +115,10 @@ var TrackedChild = class {
115
115
  child;
116
116
  ownsProcessTree;
117
117
  onRelease;
118
+ resolveRegistryReleased;
119
+ registryReleased = new Promise((resolve) => {
120
+ this.resolveRegistryReleased = resolve;
121
+ });
118
122
  exited;
119
123
  knownGroups = /* @__PURE__ */ new Set();
120
124
  cleanupProofError;
@@ -247,6 +251,7 @@ var TrackedChild = class {
247
251
  if (this.releasePollTimer)
248
252
  clearTimeout(this.releasePollTimer);
249
253
  this.onRelease();
254
+ this.resolveRegistryReleased();
250
255
  }
251
256
  killDirectChildSync() {
252
257
  if (this.exitedSettled)
@@ -2,14 +2,14 @@
2
2
  "use strict";
3
3
  import {
4
4
  SCHEDULED_TASK_RUN_SOURCE_ID_PREFIX
5
- } from "./chunk-AA7TDMW7.js";
5
+ } from "./chunk-A4IJR5S6.js";
6
6
  import {
7
7
  ChannelDeliveryError,
8
8
  MAX_CHANNEL_DELIVERY_TEXT_LENGTH
9
9
  } from "./chunk-RKFGE7JH.js";
10
10
  import {
11
11
  stripTerminalControlSequences
12
- } from "./chunk-KEA5LER2.js";
12
+ } from "./chunk-J6QWYIXU.js";
13
13
  import {
14
14
  MAX_CHANNEL_DELIVERY_NAME_LENGTH,
15
15
  MAX_CHANNEL_DELIVERY_TARGET_ID_LENGTH
@@ -2,14 +2,17 @@
2
2
  "use strict";
3
3
  import {
4
4
  buildModelReasoningRoutePreview
5
- } from "./chunk-NNT6O4J3.js";
5
+ } from "./chunk-S4XLNZOV.js";
6
+ import {
7
+ snapshotProcessEnv
8
+ } from "./chunk-3T7YUINK.js";
6
9
  import {
7
10
  getAuthTypeFromEnv,
8
11
  resolveCliGenerationConfig
9
- } from "./chunk-3GHFKNQ4.js";
12
+ } from "./chunk-ZHBCAABR.js";
10
13
  import {
11
14
  getModelConfigurationKey
12
- } from "./chunk-AU2UW4DJ.js";
15
+ } from "./chunk-QBCQIJ5K.js";
13
16
  import {
14
17
  ACP_ROUTE_ID_PREFIX,
15
18
  buildAcpModelOptions,
@@ -17,25 +20,22 @@ import {
17
20
  parseAcpBaseModelId,
18
21
  sanitizeProviderBaseUrl
19
22
  } from "./chunk-Y3Q5OK4D.js";
20
- import {
21
- snapshotProcessEnv
22
- } from "./chunk-FLMQNPT7.js";
23
23
  import {
24
24
  STATUS_SCHEMA_VERSION
25
- } from "./chunk-EOAC7LYX.js";
25
+ } from "./chunk-TUKPBUHT.js";
26
26
  import {
27
27
  loadSettings
28
- } from "./chunk-VBO2XHNW.js";
28
+ } from "./chunk-KPRD727P.js";
29
29
  import {
30
30
  APPROVAL_MODES
31
31
  } from "./chunk-JX6XHPTX.js";
32
32
  import {
33
33
  ModelsConfig,
34
34
  resolveReasoningCapabilities
35
- } from "./chunk-TRJLFLSG.js";
35
+ } from "./chunk-FUZESLZQ.js";
36
36
  import {
37
37
  tokenLimit
38
- } from "./chunk-TXPFRFNN.js";
38
+ } from "./chunk-CBJBLKDH.js";
39
39
  import {
40
40
  createDebugLogger
41
41
  } from "./chunk-ZYDMQCQP.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  registerCleanup
5
- } from "./chunk-WQRSYHOV.js";
5
+ } from "./chunk-SR22PJAJ.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -2,22 +2,22 @@
2
2
  "use strict";
3
3
  import {
4
4
  appEvents
5
- } from "./chunk-ZVSFBBEP.js";
5
+ } from "./chunk-HAYKZNOJ.js";
6
6
  import {
7
7
  CUSTOM_SANDBOX_IMAGE_ENV_VAR,
8
8
  HOST_UPDATE_RELAUNCH_ENV_VAR,
9
9
  SKIP_UPDATE_CHECK_ENV_VAR,
10
10
  requestUpdateOnExit
11
- } from "./chunk-BGVLXVEL.js";
11
+ } from "./chunk-PESOPZ2F.js";
12
12
  import {
13
13
  loadUndici
14
14
  } from "./chunk-TXASDT2M.js";
15
15
  import {
16
16
  IdeClient
17
- } from "./chunk-KEA5LER2.js";
17
+ } from "./chunk-J6QWYIXU.js";
18
18
  import {
19
19
  getAllProviderBaseUrls
20
- } from "./chunk-TRJLFLSG.js";
20
+ } from "./chunk-FUZESLZQ.js";
21
21
  import {
22
22
  detectRuntime,
23
23
  getOrCreateSharedDispatcher,
@@ -233,11 +233,11 @@ function startPostRenderPrefetches(config, settings, options = {}) {
233
233
  { updateEventEmitter },
234
234
  { t }
235
235
  ] = await Promise.all([
236
- import("./updateCheck-T7CBK52C.js"),
237
- import("./handleAutoUpdate-B2USOESX.js"),
238
- import("./installationInfo-GLODYMH6.js"),
236
+ import("./updateCheck-XXUEDPUG.js"),
237
+ import("./handleAutoUpdate-6EGQYSNX.js"),
238
+ import("./installationInfo-YUODJVWE.js"),
239
239
  import("./updateEventEmitter-5MKC7BLQ.js"),
240
- import("./i18n-MJLCQAHB.js")
240
+ import("./i18n-BVX7GWVL.js")
241
241
  ]);
242
242
  const updateCheckSkippedMessage = /* @__PURE__ */ __name((error) => t("Update check skipped ({{reason}}) \u2014 run /update to retry.", {
243
243
  reason: describeUpdateCheckFailure(error)
@@ -310,7 +310,7 @@ ${t(
310
310
  state: "connecting"
311
311
  });
312
312
  try {
313
- const { connectIdeForStartup } = await import("./initializer-YC5FADAU.js");
313
+ const { connectIdeForStartup } = await import("./initializer-YMBTVCPZ.js");
314
314
  await withTimeout(
315
315
  connectIdeForStartup(config),
316
316
  "ide_connect",
@@ -334,7 +334,7 @@ ${t(
334
334
  }
335
335
  if (config.isInteractive()) {
336
336
  runDeferredTask("background_housekeeping", async () => {
337
- const { startBackgroundHousekeeping } = await import("./scheduler-YWUNAEFF.js");
337
+ const { startBackgroundHousekeeping } = await import("./scheduler-WFLBJDYN.js");
338
338
  startBackgroundHousekeeping(config, settings);
339
339
  });
340
340
  }
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  getUserSettingsPath,
5
5
  v1ToV2Migration
6
- } from "./chunk-VBO2XHNW.js";
6
+ } from "./chunk-KPRD727P.js";
7
7
  import {
8
8
  getSystemDefaultsPath,
9
9
  getSystemSettingsPath
@@ -13,7 +13,7 @@ import {
13
13
  TrustLevel,
14
14
  getExplicitTrustLevel,
15
15
  getTrustedFoldersPath
16
- } from "./chunk-G7XNSEWW.js";
16
+ } from "./chunk-UE5VCGKO.js";
17
17
  import {
18
18
  require_strip_json_comments
19
19
  } from "./chunk-NPQ5ZKRP.js";
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-MR3PXB6E.js";
23
23
  import {
24
24
  ideContextStore
25
- } from "./chunk-KEA5LER2.js";
25
+ } from "./chunk-J6QWYIXU.js";
26
26
  import {
27
27
  init_esbuild_shims
28
28
  } from "./chunk-5O2XNYP6.js";
@@ -858,12 +858,12 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
858
858
  try {
859
859
  if (authType === "openai" /* USE_OPENAI */) {
860
860
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
861
- const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-53O227CL.js");
861
+ const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-WNTCGOOP.js");
862
862
  return createOpenAIContentGenerator(generatorConfig, config);
863
863
  }, "loadBaseGenerator");
864
864
  } else if (authType === "openai-responses" /* USE_OPENAI_RESPONSES */) {
865
865
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
866
- const { createOpenAIResponsesContentGenerator } = await import("./openaiResponsesContentGenerator-BAYPOZEC.js");
866
+ const { createOpenAIResponsesContentGenerator } = await import("./openaiResponsesContentGenerator-EXCS4CPS.js");
867
867
  return createOpenAIResponsesContentGenerator(generatorConfig, config);
868
868
  }, "loadBaseGenerator");
869
869
  } else if (authType === "qwen-oauth" /* QWEN_OAUTH */) {
@@ -874,7 +874,7 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
874
874
  isInitialAuth ? { requireCachedCredentials: true } : void 0
875
875
  );
876
876
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
877
- const { QwenContentGenerator } = await import("./qwenContentGenerator-AX6DSXDT.js");
877
+ const { QwenContentGenerator } = await import("./qwenContentGenerator-CEHDHYS7.js");
878
878
  return new QwenContentGenerator(qwenClient, generatorConfig, config);
879
879
  }, "loadBaseGenerator");
880
880
  } catch (error) {
@@ -885,12 +885,12 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
885
885
  }
886
886
  } else if (authType === "anthropic" /* USE_ANTHROPIC */) {
887
887
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
888
- const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-5IQ7K553.js");
888
+ const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-32MSDQUP.js");
889
889
  return createAnthropicContentGenerator(generatorConfig, config);
890
890
  }, "loadBaseGenerator");
891
891
  } else if (authType === "gemini" /* USE_GEMINI */ || authType === "vertex-ai" /* USE_VERTEX_AI */) {
892
892
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
893
- const { createLlmContentGenerator } = await import("./llm-content-generator-644JX24D.js");
893
+ const { createLlmContentGenerator } = await import("./llm-content-generator-IXWLZ4HX.js");
894
894
  return createLlmContentGenerator(generatorConfig, config);
895
895
  }, "loadBaseGenerator");
896
896
  } else {
@@ -905,7 +905,7 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
905
905
  try {
906
906
  const [baseGenerator, { LoggingContentGenerator }] = await Promise.all([
907
907
  loadBaseGenerator(),
908
- import("./loggingContentGenerator-OJZWGSGX.js")
908
+ import("./loggingContentGenerator-ORTEE7AH.js")
909
909
  ]);
910
910
  return new LoggingContentGenerator(
911
911
  baseGenerator,
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-ZL4HFSL6.js";
6
6
  import {
7
7
  WEB_SHELL_PWA_ASSETS
8
- } from "./chunk-FIGVLM7P.js";
8
+ } from "./chunk-JDS6RRHY.js";
9
9
  import {
10
10
  require_mime_db
11
11
  } from "./chunk-K6KS3LTN.js";
@@ -2,13 +2,13 @@
2
2
  "use strict";
3
3
  import {
4
4
  GIT_COMMIT_INFO
5
- } from "./chunk-M7L2SA2L.js";
5
+ } from "./chunk-SWT6XVJE.js";
6
6
  import {
7
7
  getCliVersion
8
- } from "./chunk-OVU4JKTO.js";
8
+ } from "./chunk-7OQL6UOC.js";
9
9
  import {
10
10
  IdeClient
11
- } from "./chunk-KEA5LER2.js";
11
+ } from "./chunk-J6QWYIXU.js";
12
12
  import {
13
13
  formatMemoryUsage
14
14
  } from "./chunk-CHEIIBT3.js";