@qwen-code/qwen-code 0.21.12-preview.5 → 0.21.13

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 (347) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +7 -5
  2. package/bundled/qc-helper/docs/features/channels/overview.md +1 -1
  3. package/bundled/qc-helper/docs/features/channels/plugins.md +11 -11
  4. package/bundled/qc-helper/docs/features/code-review.md +13 -12
  5. package/bundled/qc-helper/docs/qwen-serve.md +65 -0
  6. package/bundled/review/SKILL.md +96 -68
  7. package/chunks/{MaxSizedBox-6STELMXN.js → MaxSizedBox-UQALOVVT.js} +46 -46
  8. package/chunks/{StandaloneSessionPicker-LXMGCAIF.js → StandaloneSessionPicker-KEGXNUG6.js} +68 -69
  9. package/chunks/{acp-startup-profiler-TVI2OVUN.js → acp-startup-profiler-NMDXYGDN.js} +2 -2
  10. package/chunks/{acpAgent-NFRP4O5A.js → acpAgent-XPES32S7.js} +804 -380
  11. package/chunks/{agent-4AGYD6I6.js → agent-DPTOZFEM.js} +42 -42
  12. package/chunks/{agent-headless-GH4UIDXU.js → agent-headless-GJCQMURW.js} +42 -42
  13. package/chunks/{anthropicContentGenerator-ZBBX5VMY.js → anthropicContentGenerator-G7BVXTKN.js} +25 -25
  14. package/chunks/{artifact-tool-RWJAKYBZ.js → artifact-tool-GEXTOPVO.js} +5 -5
  15. package/chunks/{askUserQuestion-IQCA2SOX.js → askUserQuestion-B33XRSB7.js} +2 -2
  16. package/chunks/{bridge-3S4SKXSQ.js → bridge-YNQBAA4Z.js} +48 -48
  17. package/chunks/{build-RZS65IIX.js → build-GDBLPA24.js} +1 -1
  18. package/chunks/{channel-management-service-5ZYX4ROW.js → channel-management-service-GWY2GAIC.js} +4 -4
  19. package/chunks/{channel-settings-store-62E3TWVK.js → channel-settings-store-WNWYFHG7.js} +49 -49
  20. package/chunks/{channel-worker-group-QFJKXO7R.js → channel-worker-group-7LXCMZ77.js} +6 -6
  21. package/chunks/{channel-worker-manager-PWD2UURZ.js → channel-worker-manager-RYEME4ZZ.js} +6 -6
  22. package/chunks/{channel-worker-supervisor-XQJBGFCM.js → channel-worker-supervisor-OEVWBHGT.js} +4 -4
  23. package/chunks/{chunk-LHOG4E6Y.js → chunk-22C7BQ6D.js} +3 -3
  24. package/chunks/{chunk-KTWUFHS4.js → chunk-25EYDK42.js} +3 -3
  25. package/chunks/{chunk-QEWAHAW2.js → chunk-2B2BF7P7.js} +3 -3
  26. package/chunks/{chunk-2SB4SLKC.js → chunk-2IIJTXYF.js} +1 -3
  27. package/chunks/{chunk-6LDLDK6E.js → chunk-2M55OBEB.js} +1 -3
  28. package/chunks/{chunk-V3NMFQD2.js → chunk-3EZLLVDF.js} +2 -2
  29. package/chunks/{chunk-HUDUANHL.js → chunk-3U3VAL47.js} +1 -1
  30. package/chunks/{chunk-BKHCW2BI.js → chunk-3VUENPWF.js} +10 -0
  31. package/chunks/{chunk-XY7DGTIC.js → chunk-45NQKMYB.js} +1 -1
  32. package/chunks/{chunk-VGGNHRYZ.js → chunk-4PKCUT7F.js} +7 -7
  33. package/chunks/{chunk-T7YMWGFY.js → chunk-4S5337WV.js} +1491 -711
  34. package/chunks/{chunk-FVHLDSQS.js → chunk-4W5U2TUT.js} +3 -3
  35. package/chunks/{chunk-6SU6OW5Z.js → chunk-5CVO7YES.js} +1 -1
  36. package/chunks/{chunk-OZTGLK53.js → chunk-5EYKMUUY.js} +1 -1
  37. package/chunks/{chunk-ZRT36RSF.js → chunk-6HY6IF3Z.js} +1 -1
  38. package/chunks/{chunk-HRAFAUM7.js → chunk-6ORZ2EDC.js} +3 -3
  39. package/chunks/{chunk-JOVJCXN4.js → chunk-6QFDQMQX.js} +1 -1
  40. package/chunks/{chunk-CPTIJGUK.js → chunk-6YKYPVDV.js} +4 -4
  41. package/chunks/{chunk-62OKKUOX.js → chunk-76J3IJ3M.js} +9 -7
  42. package/chunks/{chunk-JVY7FHUZ.js → chunk-7U5G6JXI.js} +9 -0
  43. package/chunks/{chunk-TIM7NVEO.js → chunk-7UXUJ5T3.js} +1 -1
  44. package/chunks/{chunk-YCGXJ4Q3.js → chunk-A267JX7H.js} +6 -6
  45. package/chunks/{chunk-4JS2QK7P.js → chunk-A4MFR4C5.js} +1 -1
  46. package/chunks/{chunk-TN3REXN4.js → chunk-A4QRWUDE.js} +79 -36
  47. package/chunks/{chunk-JW5UEE3V.js → chunk-A6NRNRKE.js} +1 -1
  48. package/chunks/{chunk-T4G33L3W.js → chunk-AA2BEKV3.js} +3 -3
  49. package/chunks/{chunk-M3DWLXEO.js → chunk-AFSG32D5.js} +1 -1
  50. package/chunks/{chunk-R4YAQULI.js → chunk-AS5IN4GK.js} +5 -5
  51. package/chunks/{chunk-ADJDLEVO.js → chunk-AW27A43Y.js} +9 -11
  52. package/chunks/{chunk-RIDUB2GC.js → chunk-AW4TRXOC.js} +1 -1
  53. package/chunks/{chunk-XL6GYJL2.js → chunk-AXN7UPYQ.js} +2 -2
  54. package/chunks/{chunk-M4NWDIFU.js → chunk-AZQ3DT76.js} +1 -1
  55. package/chunks/{chunk-OSA2TFDI.js → chunk-BHILXOC3.js} +3 -3
  56. package/chunks/{chunk-YMIQ24FR.js → chunk-BKPPWD33.js} +2 -2
  57. package/chunks/{chunk-YMB77M76.js → chunk-BUQDLC2G.js} +59 -0
  58. package/chunks/{chunk-DXXYMK2U.js → chunk-BVJS5BSP.js} +1 -1
  59. package/chunks/{chunk-EGB2PIYM.js → chunk-BZ263IKX.js} +1 -1
  60. package/chunks/{chunk-6OJDN5ZT.js → chunk-CHHABXPE.js} +1 -1
  61. package/chunks/{chunk-ZPZANKVP.js → chunk-CKSJECTU.js} +4 -4
  62. package/chunks/{chunk-H6BFLALJ.js → chunk-CPHEPGAO.js} +1 -1
  63. package/chunks/{chunk-V6PERRH4.js → chunk-CU6GJD55.js} +1 -1
  64. package/chunks/{chunk-ZZ7RUTJ4.js → chunk-CZBYX5MY.js} +1 -1
  65. package/chunks/{chunk-2OFDCPMS.js → chunk-DGK6P3BQ.js} +13 -13
  66. package/chunks/{chunk-NM33GGOM.js → chunk-DGZEMW5R.js} +3 -3
  67. package/chunks/{chunk-UPUAGRKY.js → chunk-DXIBNLBZ.js} +2 -4
  68. package/chunks/{chunk-J5SUM3ZJ.js → chunk-E23IPNGS.js} +25 -2
  69. package/chunks/{chunk-TNETSI2A.js → chunk-E3DYKPYZ.js} +3 -3
  70. package/chunks/{chunk-3MJ44LNC.js → chunk-EL5SXY3T.js} +265 -138
  71. package/chunks/{chunk-AFKOAHC3.js → chunk-EZ5RP345.js} +13 -11
  72. package/chunks/{chunk-PSTHNTHF.js → chunk-FAAUPSY2.js} +1 -1
  73. package/chunks/{chunk-NW7SPXVG.js → chunk-FDGGZIYW.js} +1 -1
  74. package/chunks/{chunk-6YSSQFHQ.js → chunk-GGDBMYGZ.js} +5 -5
  75. package/chunks/{chunk-CDDLHCC2.js → chunk-GMIEIY3Y.js} +5 -5
  76. package/chunks/{chunk-6JFPUJ2O.js → chunk-GO7STP6N.js} +4 -4
  77. package/chunks/{chunk-7JL5YBSA.js → chunk-H4A72DE5.js} +1 -1
  78. package/chunks/{chunk-I3UEXUWJ.js → chunk-HUTNYWBG.js} +2 -2
  79. package/chunks/{chunk-UQPLUR4A.js → chunk-IA2K2HJE.js} +2 -2
  80. package/chunks/{chunk-Q7VJUIIB.js → chunk-IGGGG5CX.js} +4104 -1293
  81. package/chunks/{chunk-VE2UV7IN.js → chunk-IWPYVAO2.js} +4 -4
  82. package/chunks/{chunk-HAR4G5K2.js → chunk-JNDY2MDR.js} +2 -2
  83. package/chunks/{chunk-UALXTL5Y.js → chunk-JOOFMXGF.js} +6 -6
  84. package/chunks/{chunk-HOXEJHJQ.js → chunk-JUEPY766.js} +3 -3
  85. package/chunks/{chunk-Q7YDKOGY.js → chunk-JVEGA3MM.js} +1 -1
  86. package/chunks/{chunk-QBJYSIQ4.js → chunk-K3LPAED5.js} +53 -12
  87. package/chunks/{chunk-UHF5VBKO.js → chunk-KBXKR5R2.js} +1 -1
  88. package/chunks/{chunk-32SNBMNP.js → chunk-KD5BOPLP.js} +27 -27
  89. package/chunks/{chunk-67F2BEYW.js → chunk-KV27IEHM.js} +1 -1
  90. package/chunks/{chunk-DLDVO2NY.js → chunk-LJQAUZMR.js} +360 -174
  91. package/chunks/{chunk-BNRIQWXW.js → chunk-M732YJPW.js} +7 -7
  92. package/chunks/{chunk-JRTJEGSP.js → chunk-MA2HEDVP.js} +1 -1
  93. package/chunks/{chunk-5IW3FJGD.js → chunk-MC4TLKEI.js} +2 -2
  94. package/chunks/{chunk-2ASWIM4A.js → chunk-MIPFDQAF.js} +1 -1
  95. package/chunks/{chunk-6GTKI2YX.js → chunk-MLPXSYXR.js} +133 -28
  96. package/chunks/{chunk-KRXPRVGL.js → chunk-MLXTMF7H.js} +0 -1
  97. package/chunks/{chunk-NNGCKJAD.js → chunk-MRMJCLIY.js} +3 -3
  98. package/chunks/{chunk-E7XJWIWC.js → chunk-N5YPT6PH.js} +7 -7
  99. package/chunks/{chunk-72SKJ3E7.js → chunk-NEFOOD54.js} +3 -3
  100. package/chunks/{chunk-2U3UCXZ3.js → chunk-NHDR76JX.js} +45 -13
  101. package/chunks/{chunk-QLFTWYTO.js → chunk-NM5V5OVW.js} +3 -3
  102. package/chunks/{chunk-N4LVA3S6.js → chunk-NNHNLJ2X.js} +840 -60
  103. package/chunks/chunk-NYWWQ437.js +24 -0
  104. package/chunks/{chunk-DGNQ5AFX.js → chunk-O4D7SPJN.js} +2 -2
  105. package/chunks/{chunk-YY23TR4M.js → chunk-O565M6A4.js} +411 -10
  106. package/chunks/{chunk-VUTOV2HG.js → chunk-OD2WU5QY.js} +4 -3
  107. package/chunks/{chunk-B66LYK4B.js → chunk-OMLJNPBE.js} +42 -12
  108. package/chunks/{chunk-WAF6AR5Y.js → chunk-OOQUVWIG.js} +4 -4
  109. package/chunks/{chunk-A6GQUQ7I.js → chunk-OVZPVYZB.js} +2 -2
  110. package/chunks/{chunk-VPZMLGD3.js → chunk-OXCMMLED.js} +5 -5
  111. package/chunks/{chunk-646ZB2TS.js → chunk-OY5RNSV4.js} +3 -3
  112. package/chunks/{chunk-V7RNNPGC.js → chunk-P5Y23G2L.js} +18 -1
  113. package/chunks/{chunk-O6SLWH4X.js → chunk-P7MPQI75.js} +2 -2
  114. package/chunks/{chunk-3HXLH5QV.js → chunk-PP4FUZNV.js} +47 -4
  115. package/chunks/{chunk-4XX2LZ3E.js → chunk-PQ36L4F5.js} +1 -1
  116. package/chunks/{chunk-SKRHR6N2.js → chunk-PT4I7NBA.js} +1 -1
  117. package/chunks/{chunk-KQLW7LLV.js → chunk-QF2NHSPB.js} +603 -66
  118. package/chunks/{chunk-KK3FEHPJ.js → chunk-QFJ5JHQR.js} +1 -1
  119. package/chunks/{chunk-N2G4RA77.js → chunk-QIH2HAEN.js} +1 -1
  120. package/chunks/{chunk-QSWDGAIC.js → chunk-QILD6R27.js} +1 -1
  121. package/chunks/{chunk-NHZF4VCD.js → chunk-QNQAPSN2.js} +1 -1
  122. package/chunks/{chunk-6DH5YA3X.js → chunk-QRCNA3SR.js} +8 -8
  123. package/chunks/{chunk-3RC5Q66G.js → chunk-QV5YN5YD.js} +7 -5
  124. package/chunks/{chunk-7TKNMQ6L.js → chunk-RIAABG2K.js} +2 -2
  125. package/chunks/{chunk-LYRA6ZTI.js → chunk-RLKC46YT.js} +138 -11
  126. package/chunks/{chunk-YI5G32RU.js → chunk-ROIYNTHJ.js} +3 -3
  127. package/chunks/{chunk-UAAWNTOC.js → chunk-RVOJ2FBP.js} +12 -12
  128. package/chunks/{chunk-SNHBRO4C.js → chunk-RWDNJBWN.js} +2 -2
  129. package/chunks/{chunk-UFHPAMAV.js → chunk-S5DWMTHO.js} +11 -1
  130. package/chunks/{chunk-TROB4PZY.js → chunk-SG7ZP5PG.js} +4 -4
  131. package/chunks/{chunk-E74YSVIN.js → chunk-SXCOEJO4.js} +1 -1
  132. package/chunks/{chunk-U5C2GIN2.js → chunk-TIGA2IVL.js} +117 -3
  133. package/chunks/chunk-TS6625XH.js +488 -0
  134. package/chunks/{chunk-EHXS5MAC.js → chunk-TUGSVUJB.js} +7 -7
  135. package/chunks/{chunk-E3GLDLYB.js → chunk-TYAMGABM.js} +0 -6
  136. package/chunks/{chunk-ZLX7FTZQ.js → chunk-U3VNBPUO.js} +3 -3
  137. package/chunks/{chunk-F7PTQFTB.js → chunk-UKMR3CKV.js} +4 -4
  138. package/chunks/{chunk-7WUMS2UA.js → chunk-UPDOZBWO.js} +1 -1
  139. package/chunks/{chunk-YK4O72LT.js → chunk-UZPM4XHR.js} +4 -4
  140. package/chunks/{chunk-VKEA37IR.js → chunk-V26NVGAU.js} +1 -1
  141. package/chunks/{chunk-IJCZP2MA.js → chunk-V57QC6WW.js} +3 -3
  142. package/chunks/{chunk-LSMCI42W.js → chunk-WFSTRPRO.js} +3 -3
  143. package/chunks/{chunk-5KZNWF2M.js → chunk-WGHHA7ZH.js} +1 -1
  144. package/chunks/{chunk-A4BAHMJF.js → chunk-WSH6GRKG.js} +4 -4
  145. package/chunks/{chunk-OK727E5D.js → chunk-X26JYGTD.js} +1 -1
  146. package/chunks/{chunk-VAPNUDD5.js → chunk-XHRY7BXD.js} +4 -4
  147. package/chunks/{chunk-XNL23MGG.js → chunk-XIT3GURH.js} +3 -3
  148. package/chunks/{chunk-2RTRFLWH.js → chunk-XLLKYULU.js} +6 -6
  149. package/chunks/{chunk-C2DR57L6.js → chunk-XUJNK7Y6.js} +1 -1
  150. package/chunks/{chunk-AAZWJAPQ.js → chunk-Y3YCSWG5.js} +2 -2
  151. package/chunks/{chunk-ZTBFA7I6.js → chunk-YEYY7TEP.js} +7 -7
  152. package/chunks/{chunk-FTGU6G45.js → chunk-YZHRN3CF.js} +2 -2
  153. package/chunks/{chunk-2N6CV4PW.js → chunk-YZOSNW4R.js} +1 -1
  154. package/chunks/{chunk-U7ROFHSH.js → chunk-ZLCT4C5A.js} +1 -1
  155. package/chunks/{chunk-VBKTP7TH.js → chunk-ZYBBISBY.js} +15 -34
  156. package/chunks/{chunk-7ATQGA6V.js → chunk-ZYYTZUI2.js} +6 -6
  157. package/chunks/{chunk-RXX5T3IF.js → chunk-ZZO74WKW.js} +44 -8
  158. package/chunks/{computer-use-ZFBJYSR3.js → computer-use-77C5FHMW.js} +45 -45
  159. package/chunks/{config-utils-7JZQN6L2.js → config-utils-IVHRSXWI.js} +4 -4
  160. package/chunks/{contextCommand-G3TAIY7T.js → contextCommand-PJ77GBWL.js} +44 -44
  161. package/chunks/{core-runtime-K3MQVNSF.js → core-runtime-7VMIKUTG.js} +42 -42
  162. package/chunks/{create-sub-session-DMTLJPDG.js → create-sub-session-2L5MQRN4.js} +42 -42
  163. package/chunks/{create-sub-session-23ULO5PO.js → create-sub-session-KRQULJE6.js} +2 -2
  164. package/chunks/{cron-create-5WUTNKNF.js → cron-create-H7UEPDSN.js} +4 -4
  165. package/chunks/{cron-delete-JEQ27YPS.js → cron-delete-6SZK7YFM.js} +4 -4
  166. package/chunks/{cron-list-IXGCA7UR.js → cron-list-H25JIHEZ.js} +4 -4
  167. package/chunks/{daemon-UBVOQMWY.js → daemon-2KTG7ZBN.js} +108 -9
  168. package/chunks/daemon-git-worktree-guard-DXYIMWFT.js +2062 -0
  169. package/chunks/{daemon-status-provider-KFLEZGD7.js → daemon-status-provider-ZDOYJCU6.js} +52 -53
  170. package/chunks/{daemon-trust-policy-ZZ6DRDAC.js → daemon-trust-policy-E67OYUK2.js} +48 -48
  171. package/chunks/{daemon-trust-policy-monitor-CIKHNV2K.js → daemon-trust-policy-monitor-RYYGCQ3J.js} +48 -48
  172. package/chunks/{deferred-core-runtime-MM7X7UYR.js → deferred-core-runtime-3SGXFXEQ.js} +44 -44
  173. package/chunks/{devtools-X6ROTKHE.js → devtools-4QFYJT6U.js} +1 -1
  174. package/chunks/discovery-ORA5J7YP.js +27 -0
  175. package/chunks/{display-image-CAD7RAUM.js → display-image-ON3EYFRD.js} +4 -4
  176. package/chunks/{dist-B3ODKYEB.js → dist-4ZPG4BY6.js} +2 -2
  177. package/chunks/{dist-CCUH2Z4C.js → dist-BROOP2EG.js} +1 -1
  178. package/chunks/{dist-DANKRAB3.js → dist-IYYN3RUT.js} +2 -2
  179. package/chunks/{dist-5VDE7U3A.js → dist-JWMKPWT5.js} +3 -1
  180. package/chunks/{dist-6RK4U6VU.js → dist-K7IQB53U.js} +1 -1
  181. package/chunks/{dist-EZHCZSW6.js → dist-MAQXAQ2Y.js} +1 -1
  182. package/chunks/{dist-362MN6CP.js → dist-WJ4BHIEW.js} +2 -2
  183. package/chunks/{dist-M3XMEIP2.js → dist-YEPL4RAW.js} +1 -1
  184. package/chunks/{earlyInputCapture-O77TUBIF.js → earlyInputCapture-KJMLFVQV.js} +43 -43
  185. package/chunks/{edit-CZ23AVP6.js → edit-I4LQFAEC.js} +50 -49
  186. package/chunks/{enter-worktree-4EMS7IRL.js → enter-worktree-YNPOJSRH.js} +47 -47
  187. package/chunks/{enterPlanMode-TS6KO6DU.js → enterPlanMode-XCPK62ER.js} +47 -47
  188. package/chunks/{environment-7JAXEU6I.js → environment-S7CTIHMX.js} +44 -44
  189. package/chunks/{errors-NBABPF4S.js → errors-7HB2AIDS.js} +44 -44
  190. package/chunks/{exit-worktree-Q3NFHYUI.js → exit-worktree-AIIY7SR6.js} +47 -47
  191. package/chunks/{exitPlanMode-4JH6WLKL.js → exitPlanMode-R4JY7V2O.js} +42 -42
  192. package/chunks/{external-tool-guard-provider-5HTGOPGU.js → external-tool-guard-provider-TE4DRY36.js} +1 -1
  193. package/chunks/{fast-path-5LFDLPHJ.js → fast-path-NDJV3ZFJ.js} +3 -3
  194. package/chunks/{gemini-MB4S7YLN.js → gemini-RSUFP5OE.js} +108 -103
  195. package/chunks/{geminiContentGenerator-EQY2QU7K.js → geminiContentGenerator-SQ5XBPZ7.js} +11 -11
  196. package/chunks/{glob-LA5XO2H7.js → glob-J4RUJAHX.js} +49 -49
  197. package/chunks/{goal-tools-LQFO4BRY.js → goal-tools-VHTNVOKK.js} +56 -12
  198. package/chunks/{grep-KYBZMY36.js → grep-VJWPLFOT.js} +47 -47
  199. package/chunks/{handleAutoUpdate-HZJSAUNC.js → handleAutoUpdate-POCX2MNB.js} +46 -46
  200. package/chunks/{i18n-BSCIN4J4.js → i18n-RM5YOICI.js} +43 -43
  201. package/chunks/{image-gen-HGURQAHX.js → image-gen-EXECB5XM.js} +11 -11
  202. package/chunks/{initializer-WUHJXIB3.js → initializer-Z2AFGBNR.js} +49 -49
  203. package/chunks/{installationInfo-G3PDBWG2.js → installationInfo-4I5FXNMH.js} +43 -43
  204. package/chunks/{keychain-token-storage-GU75J2T2.js → keychain-token-storage-3XFJ5ZB2.js} +2 -2
  205. package/chunks/{list-IC7KDSZ6.js → list-ZMBFIGZA.js} +51 -51
  206. package/chunks/{list-agents-5PNMK2AM.js → list-agents-OSVDFI6S.js} +2 -2
  207. package/chunks/{loadedSettingsAdapter-Z3GOJRI7.js → loadedSettingsAdapter-T6TV4YJ7.js} +48 -48
  208. package/chunks/{loggingContentGenerator-E2QENFPH.js → loggingContentGenerator-WF4ZOJEZ.js} +99 -66
  209. package/chunks/{loop-wakeup-OV65FEGR.js → loop-wakeup-WQS6JYAG.js} +5 -5
  210. package/chunks/{ls-RPRSX26R.js → ls-D3HUFHDP.js} +6 -6
  211. package/chunks/{lsp-IWTJWFLT.js → lsp-3QDDJTCS.js} +2 -2
  212. package/chunks/{managed-npm-update-MX2OPCW4.js → managed-npm-update-E7IW6N7V.js} +43 -43
  213. package/chunks/{mcp-QQEWPNWV.js → mcp-6UNYX4HG.js} +48 -48
  214. package/chunks/{monitor-SV64FNV3.js → monitor-EE2UYMGE.js} +47 -47
  215. package/chunks/{node-YSOU44FX.js → node-UUDY34IG.js} +3 -3
  216. package/chunks/nonInteractiveCli-WAY237O4.js +163 -0
  217. package/chunks/{notebook-edit-QPYSWPRI.js → notebook-edit-NTDY4QDU.js} +47 -47
  218. package/chunks/{openaiContentGenerator-CMZXOSVA.js → openaiContentGenerator-YNFVJMRJ.js} +30 -30
  219. package/chunks/{pidfile-D5UXVVAI.js → pidfile-4XSFLYBZ.js} +43 -43
  220. package/chunks/{processUtils-ZEIMIVPX.js → processUtils-WDA2MJFD.js} +2 -2
  221. package/chunks/proper-lockfile-3LHWIM44.js +8 -0
  222. package/chunks/{qwenContentGenerator-JAXZKB7R.js → qwenContentGenerator-434M7QKY.js} +50 -50
  223. package/chunks/{qwenOAuth2-C2QWTD2G.js → qwenOAuth2-GMYZOO6A.js} +10 -10
  224. package/chunks/{read-file-2V5GE6ZW.js → read-file-TAFBKMNI.js} +11 -11
  225. package/chunks/{read-mcp-resource-THCSZHXO.js → read-mcp-resource-XD54ZQMC.js} +2 -2
  226. package/chunks/{record-artifact-76YYQA5F.js → record-artifact-SEYFJEJF.js} +3 -3
  227. package/chunks/{resumeHistoryUtils-UZ7GHPNY.js → resumeHistoryUtils-EVG3WYK2.js} +50 -50
  228. package/chunks/{ripGrep-MUTMPQSV.js → ripGrep-WOEK2PXS.js} +42 -42
  229. package/chunks/{run-qwen-serve-WU43JKEA.js → run-qwen-serve-3QSGRXAN.js} +417 -208
  230. package/chunks/{runtime-YLOFDP2P.js → runtime-5MLLZ7DC.js} +53 -53
  231. package/chunks/{scheduler-G44OPSZE.js → scheduler-RPBJ63CH.js} +44 -44
  232. package/chunks/{sdk-exporters-grpc-4QKV6MCX.js → sdk-exporters-grpc-54L4LS5L.js} +2 -2
  233. package/chunks/{sdk-exporters-http-A7XLKZO7.js → sdk-exporters-http-XUVP63H6.js} +12 -12
  234. package/chunks/{sdk-impl-XO4UF6PR.js → sdk-impl-YXUEN2Z2.js} +8 -8
  235. package/chunks/{send-message-P5SLP57G.js → send-message-VZENRWRH.js} +6 -6
  236. package/chunks/{serve-CZQDBDYV.js → serve-HS3XLPXU.js} +50 -50
  237. package/chunks/{server-HGI2KF3Y.js → server-TC4A7AAZ.js} +3850 -1630
  238. package/chunks/{session-OVMSHAO5.js → session-UBOFXVMN.js} +92 -95
  239. package/chunks/{settings-TWX6ROGP.js → settings-D5644OM5.js} +47 -47
  240. package/chunks/{shell-JDSWGVC7.js → shell-3PZULQQV.js} +42 -42
  241. package/chunks/{skill-QILHTMYJ.js → skill-PEVVXQ3L.js} +22 -22
  242. package/chunks/{skill-settings-RKRD34RZ.js → skill-settings-J65JKKES.js} +47 -47
  243. package/chunks/{spawnChannel-V5PYSDEI.js → spawnChannel-IYGXRHSQ.js} +45 -47
  244. package/chunks/{standalone-update-Y52CWCGG.js → standalone-update-IFM53PE7.js} +44 -44
  245. package/chunks/{startInteractiveUI-RVA62ZM6.js → startInteractiveUI-3AVH7L6H.js} +3340 -2460
  246. package/chunks/{syntheticOutput-SEW4NA47.js → syntheticOutput-7GWFIDXT.js} +3 -3
  247. package/chunks/{task-create-247EAVF7.js → task-create-FCBDX7UH.js} +12 -12
  248. package/chunks/{task-list-ZJN4QHLK.js → task-list-YIYIUFUA.js} +6 -6
  249. package/chunks/{task-stop-MAYQJ42I.js → task-stop-X37KYTKB.js} +2 -2
  250. package/chunks/{task-update-SU5TMZGG.js → task-update-MYPFVOVM.js} +12 -12
  251. package/chunks/{team-create-YMWUDIE3.js → team-create-ZAIA7KAV.js} +47 -47
  252. package/chunks/{team-delete-3XVRPQBP.js → team-delete-6UMU4XLS.js} +6 -6
  253. package/chunks/{team-plan-approval-3GPZAW46.js → team-plan-approval-UNIUS7OD.js} +47 -47
  254. package/chunks/{terminal-image-renderer-UGQKWDM3.js → terminal-image-renderer-G343P2RV.js} +44 -44
  255. package/chunks/{theme-manager-KRG4GGFY.js → theme-manager-Z3RIT7DB.js} +43 -43
  256. package/chunks/{todoWrite-IE2YTCK7.js → todoWrite-U2R4NVF4.js} +4 -4
  257. package/chunks/{tool-search-SZRO5G72.js → tool-search-5R2OE4C7.js} +17 -17
  258. package/chunks/{total-session-admission-JYHYOKWX.js → total-session-admission-4KBHMQQ2.js} +48 -48
  259. package/chunks/{trustedFolders-2BDCB5NJ.js → trustedFolders-LK6T4XC7.js} +43 -43
  260. package/chunks/{update-relaunch-XSYVPSDL.js → update-relaunch-UBKROIC6.js} +5 -5
  261. package/chunks/{updateCheck-SMMJ27GG.js → updateCheck-W4Y2GFSD.js} +45 -45
  262. package/chunks/{useAutoAcceptIndicator-HPG4UFIZ.js → useAutoAcceptIndicator-C7BEICBF.js} +51 -51
  263. package/chunks/{validateNonInterActiveAuth-IIL774NT.js → validateNonInterActiveAuth-LTEI2TB6.js} +84 -86
  264. package/chunks/{version-WSGAB2PA.js → version-G5A5DGVS.js} +1 -1
  265. package/chunks/{web-fetch-LKC2F5DM.js → web-fetch-RTEQTR5Z.js} +20 -20
  266. package/chunks/{web-search-BHMAMXEU.js → web-search-5OXHEZPV.js} +16 -16
  267. package/chunks/{workflow-A7AQ52HO.js → workflow-ISQJHPG2.js} +54 -53
  268. package/chunks/{workspace-providers-status-JRT57TLL.js → workspace-providers-status-2ZPZPUPZ.js} +51 -51
  269. package/chunks/{workspace-registration-store-EACJNCM5.js → workspace-registration-store-CYNY6IP6.js} +2 -2
  270. package/chunks/{workspace-registry-OV5SI4ES.js → workspace-registry-34GTUUHB.js} +50 -49
  271. package/chunks/{workspace-service-PUHU4EEK.js → workspace-service-XCDQLE2Y.js} +53 -53
  272. package/chunks/{workspace-skills-status-YAJE3UW3.js → workspace-skills-status-RS4O7AIJ.js} +49 -49
  273. package/chunks/{workspace-trust-reconciler-JP5UR2H6.js → workspace-trust-reconciler-AYGXC7A3.js} +57 -56
  274. package/chunks/{write-file-UBIHUP5M.js → write-file-EWXKVVXF.js} +42 -42
  275. package/chunks/{zoom-image-4QTKAMTP.js → zoom-image-4BFYJ3HG.js} +11 -11
  276. package/cli.js +18 -17
  277. package/package.json +3 -3
  278. package/web-shell/assets/{arc-lZ04kynw.js → arc-CgOpDKvm.js} +1 -1
  279. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B1wZVhzD.js → architectureDiagram-3BPJPVTR-0Ag_m34F.js} +1 -1
  280. package/web-shell/assets/{blockDiagram-GPEHLZMM-CO0e0yJt.js → blockDiagram-GPEHLZMM-IwTwFau0.js} +1 -1
  281. package/web-shell/assets/{c4Diagram-AAUBKEIU-Dfpo6Qie.js → c4Diagram-AAUBKEIU-DLa5GUv8.js} +1 -1
  282. package/web-shell/assets/channel-BrGVBa2L.js +1 -0
  283. package/web-shell/assets/{chunk-2J33WTMH-BvxArftT.js → chunk-2J33WTMH-DcYP-WFG.js} +1 -1
  284. package/web-shell/assets/{chunk-4BX2VUAB-BS2XXjGY.js → chunk-4BX2VUAB-C8MVPMiQ.js} +1 -1
  285. package/web-shell/assets/{chunk-55IACEB6-CYL6h3Ph.js → chunk-55IACEB6-BUi4Yfv3.js} +1 -1
  286. package/web-shell/assets/{chunk-727SXJPM-C-cWPX30.js → chunk-727SXJPM-Cy3Su2YY.js} +1 -1
  287. package/web-shell/assets/{chunk-AQP2D5EJ-CJLxNbVV.js → chunk-AQP2D5EJ-Dp8Teqv6.js} +1 -1
  288. package/web-shell/assets/{chunk-FMBD7UC4-DwfzKywA.js → chunk-FMBD7UC4-BDTDM-4j.js} +1 -1
  289. package/web-shell/assets/{chunk-ND2GUHAM-BI5raYHQ.js → chunk-ND2GUHAM-7HfDt0r2.js} +1 -1
  290. package/web-shell/assets/{chunk-QZHKN3VN-_GkNI90J.js → chunk-QZHKN3VN-BIBU0uCF.js} +1 -1
  291. package/web-shell/assets/classDiagram-4FO5ZUOK-B5TUzJzI.js +1 -0
  292. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B5TUzJzI.js +1 -0
  293. package/web-shell/assets/{cose-bilkent-S5V4N54A-BAVLNxh9.js → cose-bilkent-S5V4N54A-DRLdcg9p.js} +1 -1
  294. package/web-shell/assets/{dagre-BM42HDAG-BD4XNLqp.js → dagre-BM42HDAG-DCCgDwqW.js} +1 -1
  295. package/web-shell/assets/{diagram-2AECGRRQ-WO567p8w.js → diagram-2AECGRRQ-CsBTBmk3.js} +1 -1
  296. package/web-shell/assets/{diagram-5GNKFQAL-mAk23VWO.js → diagram-5GNKFQAL-C9qjH8Lt.js} +1 -1
  297. package/web-shell/assets/{diagram-KO2AKTUF-YQEeHKze.js → diagram-KO2AKTUF-Brjs_lj2.js} +1 -1
  298. package/web-shell/assets/{diagram-LMA3HP47-CMVjxAjv.js → diagram-LMA3HP47-DtiWCl_F.js} +1 -1
  299. package/web-shell/assets/{diagram-OG6HWLK6-42hPvbM-.js → diagram-OG6HWLK6-DmfKLkBT.js} +1 -1
  300. package/web-shell/assets/{erDiagram-TEJ5UH35-CXU_cPfu.js → erDiagram-TEJ5UH35-Bve_4deH.js} +1 -1
  301. package/web-shell/assets/{flowDiagram-I6XJVG4X-D-3TdhMT.js → flowDiagram-I6XJVG4X-C2_kXCcV.js} +1 -1
  302. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CsgkXolz.js → ganttDiagram-6RSMTGT7-BSBIjiTF.js} +1 -1
  303. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-B6Q3PBLD.js → gitGraphDiagram-PVQCEYII-CyebwI55.js} +1 -1
  304. package/web-shell/assets/index-CIDsgxTe.js +1792 -0
  305. package/web-shell/assets/index-DiQnWi_E.css +5 -0
  306. package/web-shell/assets/{index-BFrkGj2B.js → index-d0yfnV1M.js} +1 -1
  307. package/web-shell/assets/{infoDiagram-5YYISTIA-jiAfSXp8.js → infoDiagram-5YYISTIA-CSDGnWxU.js} +1 -1
  308. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BWif5KeJ.js → ishikawaDiagram-YF4QCWOH-BK4jU13p.js} +1 -1
  309. package/web-shell/assets/{journeyDiagram-JHISSGLW-B-GAZthS.js → journeyDiagram-JHISSGLW-D_W6j-oF.js} +1 -1
  310. package/web-shell/assets/{kanban-definition-UN3LZRKU-9TEuATdL.js → kanban-definition-UN3LZRKU-C7xf-SdC.js} +1 -1
  311. package/web-shell/assets/{linear-dy_QPfyE.js → linear-DQmzxpxd.js} +1 -1
  312. package/web-shell/assets/{mermaid.core-DB2uLAnq.js → mermaid.core-9P7AGOLG.js} +5 -5
  313. package/web-shell/assets/{mindmap-definition-RKZ34NQL-ey_dyxi-.js → mindmap-definition-RKZ34NQL-DgcgMyPk.js} +1 -1
  314. package/web-shell/assets/{pieDiagram-4H26LBE5-_6BuMdDj.js → pieDiagram-4H26LBE5-3wWGb9eG.js} +1 -1
  315. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-B2rM19W2.js → quadrantDiagram-W4KKPZXB-BeCXnQw9.js} +1 -1
  316. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DWj8b7vW.js → requirementDiagram-4Y6WPE33-Bi1UOHDz.js} +1 -1
  317. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-D5dtYh0N.js → sankeyDiagram-5OEKKPKP-lrLUjjbb.js} +1 -1
  318. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DVkdn_qW.js → sequenceDiagram-3UESZ5HK-BFuqKz6Q.js} +1 -1
  319. package/web-shell/assets/{stateDiagram-AJRCARHV-DgwD_fi6.js → stateDiagram-AJRCARHV-8DemQLhu.js} +1 -1
  320. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DhM5ixYd.js +1 -0
  321. package/web-shell/assets/{timeline-definition-PNZ67QCA-vNr_1UNX.js → timeline-definition-PNZ67QCA-uzEuVQXg.js} +1 -1
  322. package/web-shell/assets/{vennDiagram-CIIHVFJN-ChFcGAcu.js → vennDiagram-CIIHVFJN-BQTeZ_-o.js} +1 -1
  323. package/web-shell/assets/{wardley-L42UT6IY-C8PXoSWk.js → wardley-L42UT6IY-B6yM5Im7.js} +1 -1
  324. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-C2nqOV6i.js → wardleyDiagram-YWT4CUSO-ChM8bmgn.js} +1 -1
  325. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BntaqhSB.js → xychartDiagram-2RQKCTM6-oNG6HyB1.js} +1 -1
  326. package/web-shell/index.html +2 -2
  327. package/chunks/chunk-5PLOQW7H.js +0 -830
  328. package/chunks/chunk-DMODRHNL.js +0 -649
  329. package/chunks/chunk-L34XSHIZ.js +0 -28
  330. package/chunks/chunk-N2TNM3QB.js +0 -9
  331. package/chunks/chunk-RECPKBBD.js +0 -622
  332. package/chunks/chunk-WLML6VIA.js +0 -18
  333. package/chunks/chunk-ZBBVBZBR.js +0 -137
  334. package/chunks/chunk-bdqvmfwv-OHYAFAAO.js +0 -17446
  335. package/chunks/discovery-XLHITE74.js +0 -220
  336. package/chunks/dispatch-FW7DX2CR.js +0 -43
  337. package/chunks/nonInteractiveCli-3XFIFXBR.js +0 -166
  338. package/chunks/opentui-entry-TEHHLGN7.js +0 -52419
  339. package/chunks/runtime-gate-T4ICWGQJ.js +0 -89
  340. package/chunks/wrapper-46Z24CTM.js +0 -35
  341. package/web-shell/assets/channel-BxvRq3pV.js +0 -1
  342. package/web-shell/assets/classDiagram-4FO5ZUOK-tL8nAxYf.js +0 -1
  343. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-tL8nAxYf.js +0 -1
  344. package/web-shell/assets/index-BgjULKyF.css +0 -5
  345. package/web-shell/assets/index-CxXlPYfl.js +0 -1789
  346. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BWGkVGVB.js +0 -1
  347. /package/chunks/{chunk-44CTCCLY.js → chunk-NWNEANAT.js} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  EventBus,
7
7
  logEventSizingFailed,
8
8
  serializedBridgeEventByteLength
9
- } from "./chunk-JVY7FHUZ.js";
9
+ } from "./chunk-7U5G6JXI.js";
10
10
  import {
11
11
  JOURNAL_GROWTH_HARD_CAP_BYTES,
12
12
  normalizeCompactedReplayMaxBytes,
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-OCPBI7J5.js";
20
20
  import {
21
21
  defaultSpawnChannelFactory
22
- } from "./chunk-2U3UCXZ3.js";
22
+ } from "./chunk-NHDR76JX.js";
23
23
  import {
24
24
  BridgeChannelClosedError,
25
25
  BridgeTimeoutError,
@@ -29,7 +29,7 @@ import {
29
29
  SessionRestoreTimeoutError,
30
30
  createIdleWorkspaceExtensionsStatus,
31
31
  createIdleWorkspaceHooksStatus
32
- } from "./chunk-NHZF4VCD.js";
32
+ } from "./chunk-QNQAPSN2.js";
33
33
  import {
34
34
  ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM,
35
35
  ACTIVE_WORK_CLOSE_TIMEOUT_MS,
@@ -41,6 +41,7 @@ import {
41
41
  ACTIVE_WORK_MAX_SNAPSHOT_SESSIONS,
42
42
  ACTIVE_WORK_NOTIFICATION_METHOD,
43
43
  ACTIVE_WORK_STALE_INTERVALS,
44
+ CHANNEL_PROMPT_META_KEY,
44
45
  CHANNEL_STARTUP_PROFILE_META_KEY,
45
46
  CHANNEL_STARTUP_PROFILE_VERSION,
46
47
  DAEMON_CHANNEL_DELIVERY_META_KEY,
@@ -61,8 +62,9 @@ import {
61
62
  TODO_STOP_GUARD_QUEUE_RELEASE_METHOD,
62
63
  WORKTREE_MCP_DEFER_META_KEY,
63
64
  clampActiveWorkIntervalMs,
64
- isValidTrustedModelPrompt
65
- } from "./chunk-UFHPAMAV.js";
65
+ isValidTrustedModelPrompt,
66
+ sessionCloseDrainBudgetMs
67
+ } from "./chunk-S5DWMTHO.js";
66
68
  import {
67
69
  BranchWhilePromptActiveError,
68
70
  BridgeChannelQuarantinedError,
@@ -101,7 +103,7 @@ import {
101
103
  EXTERNAL_TOOL_GUARD_READY_META_KEY,
102
104
  EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
103
105
  isValidExternalToolGuardDenialReason
104
- } from "./chunk-BKHCW2BI.js";
106
+ } from "./chunk-3VUENPWF.js";
105
107
  import {
106
108
  ClientSideConnection,
107
109
  PROTOCOL_VERSION,
@@ -119,16 +121,16 @@ import {
119
121
  metadataBudgetBytes,
120
122
  normalizeSnapshotPayload,
121
123
  stableSessionArtifactId
122
- } from "./chunk-T7YMWGFY.js";
124
+ } from "./chunk-4S5337WV.js";
123
125
  import {
124
126
  DAEMON_TRACEPARENT_META_KEY,
125
127
  DAEMON_TRACESTATE_META_KEY
126
- } from "./chunk-U5C2GIN2.js";
128
+ } from "./chunk-TIGA2IVL.js";
127
129
  import {
128
130
  INVOCATION_CONTEXT_META_KEY,
129
131
  PRIVATE_ACP_CAPABILITY_ENV,
130
132
  PRIVATE_PARENT_CAPABILITY_META_KEY
131
- } from "./chunk-UAAWNTOC.js";
133
+ } from "./chunk-RVOJ2FBP.js";
132
134
  import {
133
135
  init_esbuild_shims
134
136
  } from "./chunk-5O2XNYP6.js";
@@ -297,6 +299,19 @@ var TurnBoundaryCompactionEngine = class {
297
299
  this.makeHistoryTruncatedEvent(compactedTurns.length)
298
300
  );
299
301
  }
302
+ return {
303
+ compactedTurns,
304
+ liveJournal: this.liveJournalSnapshot(liveReplayMode),
305
+ lastEventId: this.lastEventId
306
+ };
307
+ }
308
+ /**
309
+ * Snapshot of only the in-flight live journal — the events ingested
310
+ * since the last turn boundary (a boundary folds its turn into the
311
+ * replay window and resets the journal). Cheaper than `snapshot()`:
312
+ * no replay-window flatten.
313
+ */
314
+ liveJournalSnapshot(liveReplayMode = "full") {
300
315
  const journal = liveReplayMode === "summary" ? this.summaryJournal : this.fullJournal;
301
316
  const journalRecordId = liveReplayMode === "summary" ? this.summaryRecordId : this.activeRecordId;
302
317
  const liveJournal = journal.entries.map(
@@ -323,11 +338,7 @@ var TurnBoundaryCompactionEngine = class {
323
338
  }
324
339
  });
325
340
  }
326
- return {
327
- compactedTurns,
328
- liveJournal,
329
- lastEventId: this.lastEventId
330
- };
341
+ return liveJournal;
331
342
  }
332
343
  seed(snapshot) {
333
344
  if (this.closed) return;
@@ -594,7 +605,7 @@ var TurnBoundaryCompactionEngine = class {
594
605
  const slot = this.slots[existingIdx];
595
606
  slot.chunks.push(text);
596
607
  if (event.id !== void 0) slot.lastEventId = event.id;
597
- slot.lastMeta = meta ?? slot.lastMeta;
608
+ slot.lastMeta = mergeTranscriptUpdateMeta(slot.lastMeta, meta);
598
609
  slot.lastEnvelopeMeta = event._meta ?? slot.lastEnvelopeMeta;
599
610
  slot.lastTurn = captureTurnFields(event, slot.lastTurn);
600
611
  slot.lastSessionId = captureSessionId(event) ?? slot.lastSessionId;
@@ -618,7 +629,7 @@ var TurnBoundaryCompactionEngine = class {
618
629
  if (lastSlot && lastSlot.kind === kind && lastSlot.parentToolCallId == null && stringArraysEqual(lastSlot.sourceRecordIds, sourceRecordIds)) {
619
630
  lastSlot.chunks.push(text);
620
631
  if (event.id !== void 0) lastSlot.lastEventId = event.id;
621
- lastSlot.lastMeta = meta ?? lastSlot.lastMeta;
632
+ lastSlot.lastMeta = mergeTranscriptUpdateMeta(lastSlot.lastMeta, meta);
622
633
  lastSlot.lastEnvelopeMeta = event._meta ?? lastSlot.lastEnvelopeMeta;
623
634
  lastSlot.lastTurn = captureTurnFields(event, lastSlot.lastTurn);
624
635
  lastSlot.lastSessionId = captureSessionId(event) ?? lastSlot.lastSessionId;
@@ -1043,13 +1054,26 @@ function mergeTranscriptUpdateMeta(existing, incoming) {
1043
1054
  ...extractSourceRecordIdsFromMeta(incomingRecord) ?? []
1044
1055
  ])
1045
1056
  ];
1057
+ const existingTranscript = extractTranscriptMeta(existingRecord);
1058
+ const incomingTranscript = extractTranscriptMeta(incomingRecord);
1046
1059
  return {
1047
1060
  ...existingRecord ?? {},
1048
1061
  ...incomingRecord ?? {},
1049
- ...sourceRecordIds.length > 0 ? { qwenTranscript: { sourceRecordIds } } : {}
1062
+ ...existingTranscript || incomingTranscript || sourceRecordIds.length > 0 ? {
1063
+ qwenTranscript: {
1064
+ ...existingTranscript ?? {},
1065
+ ...incomingTranscript ?? {},
1066
+ ...sourceRecordIds.length > 0 ? { sourceRecordIds } : {}
1067
+ }
1068
+ } : {}
1050
1069
  };
1051
1070
  }
1052
1071
  __name(mergeTranscriptUpdateMeta, "mergeTranscriptUpdateMeta");
1072
+ function extractTranscriptMeta(meta) {
1073
+ const transcript = meta?.["qwenTranscript"];
1074
+ return typeof transcript === "object" && transcript !== null ? transcript : void 0;
1075
+ }
1076
+ __name(extractTranscriptMeta, "extractTranscriptMeta");
1053
1077
 
1054
1078
  // packages/acp-bridge/src/journalGrowthPolicy.ts
1055
1079
  init_esbuild_shims();
@@ -2622,12 +2646,13 @@ var BridgeClient = class {
2622
2646
  const toolCallId = params["toolCallId"];
2623
2647
  const toolName = params["toolName"];
2624
2648
  const args = params["arguments"];
2625
- if (typeof sessionId !== "string" || sessionId.length === 0 || typeof promptId !== "string" || promptId.length === 0 || typeof toolCallId !== "string" || toolCallId.length === 0 || typeof toolName !== "string" || toolName.length === 0 || !isRecord2(args)) {
2649
+ if (typeof sessionId !== "string" || sessionId.length === 0 || promptId !== void 0 && (typeof promptId !== "string" || promptId.length === 0) || typeof toolCallId !== "string" || toolCallId.length === 0 || typeof toolName !== "string" || toolName.length === 0 || !isRecord2(args)) {
2626
2650
  throw RequestError.invalidParams(
2627
2651
  void 0,
2628
2652
  "Invalid external tool guard request"
2629
2653
  );
2630
2654
  }
2655
+ const promptScoped = promptId !== void 0;
2631
2656
  if (!this.ownsSession(sessionId)) {
2632
2657
  throw RequestError.invalidParams(
2633
2658
  void 0,
@@ -2635,21 +2660,26 @@ var BridgeClient = class {
2635
2660
  );
2636
2661
  }
2637
2662
  const entry = this.resolveEntry(sessionId);
2638
- if (!entry || !entry.promptActive || entry.activePromptId !== promptId) {
2663
+ if (!entry || promptScoped && (!entry.promptActive || entry.activePromptId !== promptId)) {
2639
2664
  throw RequestError.invalidParams(
2640
2665
  void 0,
2641
2666
  "External tool guard prompt is not the active prompt"
2642
2667
  );
2643
2668
  }
2669
+ const invocationCwd = params["invocationCwd"];
2644
2670
  const decision = await this.externalToolGuard({
2645
2671
  sessionId: entry.sessionId,
2646
- promptId: entry.activePromptId,
2672
+ ...promptScoped ? { promptId } : {},
2647
2673
  toolCallId,
2648
2674
  toolName,
2649
- arguments: args
2675
+ arguments: args,
2676
+ effectiveCwd: entry.effectiveCwd,
2677
+ // Forwarded verbatim and explicitly untrusted: the host policy decides
2678
+ // whether it can establish this scope from state it owns.
2679
+ ...typeof invocationCwd === "string" && invocationCwd.length > 0 ? { invocationCwd } : {}
2650
2680
  });
2651
2681
  const currentEntry = this.resolveEntry(sessionId);
2652
- if (!this.ownsSession(sessionId) || currentEntry !== entry || !currentEntry.promptActive || currentEntry.activePromptId !== promptId) {
2682
+ if (!this.ownsSession(sessionId) || currentEntry !== entry || promptScoped && (!currentEntry.promptActive || currentEntry.activePromptId !== promptId)) {
2653
2683
  throw RequestError.invalidParams(
2654
2684
  void 0,
2655
2685
  "External tool guard prompt is no longer active"
@@ -6660,18 +6690,27 @@ function broadcastPromptCancelledOnce(entry, sessionId, promptId, originatorClie
6660
6690
  );
6661
6691
  }
6662
6692
  __name(broadcastPromptCancelledOnce, "broadcastPromptCancelledOnce");
6663
- function broadcastTurnComplete(entry, sessionId, promptResult, promptId, originatorClientId) {
6693
+ function broadcastTurnComplete(entry, sessionId, promptResult, promptId, originatorClientId, mutateTurnState) {
6664
6694
  try {
6665
- entry.events.publish({
6695
+ const meta = promptResult["_meta"] && typeof promptResult["_meta"] === "object" ? promptResult["_meta"] : void 0;
6696
+ const rawBranchPoint = meta?.["qwen.branchPoint"] && typeof meta["qwen.branchPoint"] === "object" ? meta["qwen.branchPoint"] : void 0;
6697
+ const branchPoint = promptResult.stopReason === "end_turn" && typeof rawBranchPoint?.["assistantRecordUuid"] === "string" && CHAT_RECORD_UUID_RE.test(rawBranchPoint["assistantRecordUuid"]) && typeof rawBranchPoint["checkpointUuid"] === "string" && CHAT_RECORD_UUID_RE.test(rawBranchPoint["checkpointUuid"]) ? {
6698
+ assistantRecordUuid: rawBranchPoint["assistantRecordUuid"],
6699
+ checkpointUuid: rawBranchPoint["checkpointUuid"]
6700
+ } : void 0;
6701
+ const published = entry.events.publish({
6666
6702
  type: "turn_complete",
6667
6703
  ...promptId ? { promptId } : {},
6668
6704
  data: {
6669
6705
  sessionId,
6670
6706
  stopReason: promptResult.stopReason ?? "end_turn",
6671
- ...promptId ? { promptId } : {}
6707
+ ...promptId ? { promptId } : {},
6708
+ ...branchPoint ? { branchPoint } : {}
6672
6709
  },
6673
6710
  ...originatorClientId ? { originatorClientId } : {}
6674
6711
  });
6712
+ if (mutateTurnState && published !== void 0)
6713
+ entry.turnErrorEvent = void 0;
6675
6714
  } catch {
6676
6715
  }
6677
6716
  }
@@ -6703,6 +6742,14 @@ function extractJsonRpcErrorDetail(data) {
6703
6742
  return void 0;
6704
6743
  }
6705
6744
  __name(extractJsonRpcErrorDetail, "extractJsonRpcErrorDetail");
6745
+ function extractJsonRpcErrorField(err, field) {
6746
+ if (typeof err !== "object" || err === null) return void 0;
6747
+ const data = err.data;
6748
+ if (typeof data !== "object" || data === null) return void 0;
6749
+ const value = data[field];
6750
+ return typeof value === "string" && value.length > 0 ? value : void 0;
6751
+ }
6752
+ __name(extractJsonRpcErrorField, "extractJsonRpcErrorField");
6706
6753
  function extractErrorCode(err) {
6707
6754
  if (typeof err !== "object" || err === null || !("code" in err))
6708
6755
  return void 0;
@@ -6712,14 +6759,79 @@ function extractErrorCode(err) {
6712
6759
  return void 0;
6713
6760
  }
6714
6761
  __name(extractErrorCode, "extractErrorCode");
6762
+ var REFRESH_APPEND_BOOKKEEPING_EVENT_TYPES = /* @__PURE__ */ new Set([
6763
+ "pending_prompt_added",
6764
+ "pending_prompt_completed",
6765
+ "prompt_cancelled",
6766
+ "model_switched",
6767
+ "model_switch_failed",
6768
+ "approval_mode_changed",
6769
+ "language_changed",
6770
+ "session_metadata_updated",
6771
+ "session_cwd_changed",
6772
+ "artifact_changed",
6773
+ "settings_changed",
6774
+ "extensions_changed",
6775
+ "mcp_server_changed",
6776
+ "mcp_server_added",
6777
+ "mcp_server_removed",
6778
+ "user_shell_command",
6779
+ "user_shell_result",
6780
+ // Workspace-level fan-out (workspace service, git watcher, memory /
6781
+ // agent CRUD, device-flow registry) reaches every session bus via
6782
+ // `publishWorkspaceEvent` while idle. The `auth_device_flow_*` members
6783
+ // mirror the closed `DeviceFlowEventEmission` union — audit that union
6784
+ // when it grows.
6785
+ "tool_toggled",
6786
+ "workspace_initialized",
6787
+ "mcp_server_restarted",
6788
+ "mcp_server_restart_refused",
6789
+ "settings_reloaded",
6790
+ "trust_change_requested",
6791
+ "memory_changed",
6792
+ "agent_changed",
6793
+ "git_status_changed",
6794
+ "git_branch_changed",
6795
+ "github_setup_completed",
6796
+ "auth_device_flow_started",
6797
+ "auth_device_flow_throttled",
6798
+ "auth_device_flow_authorized",
6799
+ "auth_device_flow_failed",
6800
+ "auth_device_flow_cancelled"
6801
+ ]);
6802
+ function isIdleBookkeepingSessionUpdate(event) {
6803
+ if (event.type !== "session_update") return false;
6804
+ const data = event.data;
6805
+ if (!data || typeof data !== "object" || Array.isArray(data)) return false;
6806
+ const update = data["update"];
6807
+ if (!update || typeof update !== "object" || Array.isArray(update))
6808
+ return false;
6809
+ const updateRecord = update;
6810
+ const subtype = updateRecord["sessionUpdate"];
6811
+ if (subtype === "available_commands_update" || subtype === "current_mode_update") {
6812
+ return true;
6813
+ }
6814
+ const meta = updateRecord["_meta"];
6815
+ if (!meta || typeof meta !== "object" || Array.isArray(meta)) return false;
6816
+ return meta["source"] === "user-shell";
6817
+ }
6818
+ __name(isIdleBookkeepingSessionUpdate, "isIdleBookkeepingSessionUpdate");
6819
+ function isRefreshAppendTurnContent(event) {
6820
+ if (event.type === "history_truncated") return false;
6821
+ if (REFRESH_APPEND_BOOKKEEPING_EVENT_TYPES.has(event.type)) return false;
6822
+ return !isIdleBookkeepingSessionUpdate(event);
6823
+ }
6824
+ __name(isRefreshAppendTurnContent, "isRefreshAppendTurnContent");
6715
6825
  function classifyTurnErrorKind(message) {
6716
6826
  return message.trim().toLowerCase() === "terminated" ? "model_stream_interrupted" : void 0;
6717
6827
  }
6718
6828
  __name(classifyTurnErrorKind, "classifyTurnErrorKind");
6719
6829
  function broadcastTurnError(entry, sessionId, err, promptId, originatorClientId, mutateTurnState) {
6720
6830
  const message = extractErrorMessage(err);
6721
- const code = extractErrorCode(err);
6722
- const errorKind = classifyTurnErrorKind(message);
6831
+ const structuredErrorKind = extractJsonRpcErrorField(err, "errorKind");
6832
+ const errorKind = structuredErrorKind ?? classifyTurnErrorKind(message);
6833
+ const code = structuredErrorKind !== void 0 ? extractJsonRpcErrorField(err, "code") ?? extractErrorCode(err) : extractErrorCode(err);
6834
+ const loopType = extractJsonRpcErrorField(err, "loopType");
6723
6835
  if (errorKind) {
6724
6836
  writeServeDebugLine(
6725
6837
  `turn_error classified session=${JSON.stringify(sessionId)} message=${JSON.stringify(message)} errorKind=${JSON.stringify(errorKind)}` + (code ? ` code=${JSON.stringify(code)}` : "") + (promptId ? ` promptId=${JSON.stringify(promptId)}` : "")
@@ -6734,7 +6846,7 @@ function broadcastTurnError(entry, sessionId, err, promptId, originatorClientId,
6734
6846
  };
6735
6847
  }
6736
6848
  try {
6737
- entry.events.publish({
6849
+ const published = entry.events.publish({
6738
6850
  type: "turn_error",
6739
6851
  ...promptId ? { promptId } : {},
6740
6852
  data: {
@@ -6742,10 +6854,14 @@ function broadcastTurnError(entry, sessionId, err, promptId, originatorClientId,
6742
6854
  message,
6743
6855
  ...code ? { code } : {},
6744
6856
  ...errorKind ? { errorKind } : {},
6857
+ ...loopType ? { loopType } : {},
6745
6858
  ...promptId ? { promptId } : {}
6746
6859
  },
6747
6860
  ...originatorClientId ? { originatorClientId } : {}
6748
6861
  });
6862
+ if (mutateTurnState) {
6863
+ entry.turnErrorEvent = published;
6864
+ }
6749
6865
  } catch {
6750
6866
  }
6751
6867
  }
@@ -6759,13 +6875,21 @@ function publishPromptTerminal(entry, pendingEntry, terminal) {
6759
6875
  }
6760
6876
  pendingEntry.terminalPublished = true;
6761
6877
  const originatorClientId = pendingEntry.originatorClientId;
6878
+ const mutateTurnState = pendingEntry.state === "running";
6879
+ if (!mutateTurnState && entry.turnErrorEvent) {
6880
+ const journal = entry.events.liveJournalSnapshot() ?? [];
6881
+ if (journal.some(isRefreshAppendTurnContent)) {
6882
+ entry.turnErrorEvent = void 0;
6883
+ }
6884
+ }
6762
6885
  if (terminal.kind === "complete") {
6763
6886
  broadcastTurnComplete(
6764
6887
  entry,
6765
6888
  entry.sessionId,
6766
6889
  terminal.result,
6767
6890
  pendingEntry.promptId,
6768
- originatorClientId
6891
+ originatorClientId,
6892
+ mutateTurnState
6769
6893
  );
6770
6894
  } else if (terminal.kind === "cancelled") {
6771
6895
  broadcastTurnComplete(
@@ -6773,7 +6897,8 @@ function publishPromptTerminal(entry, pendingEntry, terminal) {
6773
6897
  entry.sessionId,
6774
6898
  { stopReason: "cancelled" },
6775
6899
  pendingEntry.promptId,
6776
- originatorClientId
6900
+ originatorClientId,
6901
+ mutateTurnState
6777
6902
  );
6778
6903
  } else {
6779
6904
  broadcastTurnError(
@@ -6782,13 +6907,7 @@ function publishPromptTerminal(entry, pendingEntry, terminal) {
6782
6907
  terminal.err,
6783
6908
  pendingEntry.promptId,
6784
6909
  originatorClientId,
6785
- // Only a running prompt's failure is the active turn's failure. The
6786
- // `state === 'running'` gate (not `activePromptId`) is deliberate:
6787
- // on the normal settle path `settleActivePromptState` runs in
6788
- // `promptPromise.finally` BEFORE the terminal is published, so
6789
- // `activePromptId` is already cleared when a genuine active failure
6790
- // lands here.
6791
- pendingEntry.state === "running"
6910
+ mutateTurnState
6792
6911
  );
6793
6912
  }
6794
6913
  }
@@ -6851,6 +6970,7 @@ var MAX_SHELL_OUTPUT_FOR_HISTORY = 1e4;
6851
6970
  var MAX_MID_TURN_QUEUE_DEPTH = 20;
6852
6971
  var DEFAULT_MAX_SESSIONS = 32;
6853
6972
  var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
6973
+ var CHAT_RECORD_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
6854
6974
  var MAX_EVENT_RING_SIZE = 1e6;
6855
6975
  var DEFAULT_PERMISSION_TIMEOUT_MS = 5 * 60 * 1e3;
6856
6976
  var DEFAULT_MAX_PENDING_PER_SESSION = 64;
@@ -7046,6 +7166,12 @@ function createAcpSessionBridge(opts) {
7046
7166
  if (entryHasLocalWork(entry)) return false;
7047
7167
  const owner = channelInfoForEntry(entry);
7048
7168
  if (owner?.pendingRestoreIds.has(entry.sessionId)) return false;
7169
+ const capability = owner?.activeWork;
7170
+ if (capability && !owner.isQuarantined && !owner.restoreSettlementOverdue && ACTIVE_WORK_HOLD_CATEGORIES.some(
7171
+ (category) => !capability.categories.includes(category)
7172
+ )) {
7173
+ return false;
7174
+ }
7049
7175
  return !childReportsHeldWork(entry);
7050
7176
  }
7051
7177
  __name(entryIsAutoCloseCandidate, "entryIsAutoCloseCandidate");
@@ -7054,12 +7180,15 @@ function createAcpSessionBridge(opts) {
7054
7180
  }
7055
7181
  __name(isClosingOrAuthorizingClose, "isClosingOrAuthorizingClose");
7056
7182
  async function maybeCloseIdleSession(entry, reason) {
7057
- if (!entryIsAutoCloseCandidate(entry)) return;
7058
- if (entry.spawnOwnerWantedKill && entry.attachCount === 0) {
7183
+ if (byId.get(entry.sessionId) === entry && !isClosingOrAuthorizingClose(entry) && entry.spawnOwnerWantedKill && entry.attachCount === 0) {
7184
+ writeStderrLine(
7185
+ `qwen serve: completing deferred kill of session ${JSON.stringify(entry.sessionId)} (${reason})`
7186
+ );
7059
7187
  await bridgeApi.killSession(entry.sessionId).catch(() => {
7060
7188
  });
7061
7189
  return;
7062
7190
  }
7191
+ if (!entryIsAutoCloseCandidate(entry)) return;
7063
7192
  if (entry.clientIds.size > 0) return;
7064
7193
  await closeIfChildUnheld(entry, {
7065
7194
  trigger: reason,
@@ -7096,7 +7225,10 @@ function createAcpSessionBridge(opts) {
7096
7225
  const response = await withTimeout(
7097
7226
  entry.connection.extMethod(SERVE_CONTROL_EXT_METHODS.sessionClose, {
7098
7227
  sessionId: entry.sessionId,
7099
- [ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM]: true
7228
+ [ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM]: true,
7229
+ drainTimeoutMs: sessionCloseDrainBudgetMs(
7230
+ ACTIVE_WORK_CLOSE_TIMEOUT_MS
7231
+ )
7100
7232
  }),
7101
7233
  ACTIVE_WORK_CLOSE_TIMEOUT_MS,
7102
7234
  SERVE_CONTROL_EXT_METHODS.sessionClose
@@ -7833,7 +7965,8 @@ function createAcpSessionBridge(opts) {
7833
7965
  _meta: {
7834
7966
  [ACTIVE_WORK_HEARTBEAT_META_KEY]: {
7835
7967
  v: ACTIVE_WORK_HEARTBEAT_VERSION,
7836
- intervalMs: ACTIVE_WORK_HEARTBEAT_INTERVAL_MS
7968
+ intervalMs: ACTIVE_WORK_HEARTBEAT_INTERVAL_MS,
7969
+ categories: [...ACTIVE_WORK_HOLD_CATEGORIES]
7837
7970
  },
7838
7971
  [CHANNEL_STARTUP_PROFILE_META_KEY]: {
7839
7972
  v: CHANNEL_STARTUP_PROFILE_VERSION
@@ -8625,7 +8758,9 @@ function createAcpSessionBridge(opts) {
8625
8758
  SERVE_CONTROL_EXT_METHODS.sessionClose,
8626
8759
  {
8627
8760
  sessionId: entry.sessionId,
8628
- drainTimeoutMs: Math.max(1, Math.floor(initTimeoutMs * 0.8)),
8761
+ drainTimeoutMs: sessionCloseDrainBudgetMs(
8762
+ opts2?.timeoutMs ?? initTimeoutMs
8763
+ ),
8629
8764
  ...opts2?.requireFlush === true ? { requireFlush: true } : {}
8630
8765
  }
8631
8766
  );
@@ -9124,8 +9259,19 @@ function createAcpSessionBridge(opts) {
9124
9259
  if (cursor !== void 0) seenCursors.add(cursor);
9125
9260
  } while (page.events.length === 0 && page.hasMore && cursor !== void 0 && page.partial !== true && page.replayError === void 0);
9126
9261
  if (byId.get(entry.sessionId) === entry && !entry.promptActive && entry.events.epoch === eventEpoch && entry.events.lastEventId === lastEventId) {
9262
+ let compactedReplay = page.events;
9263
+ const turnErrorEvent = entry.turnErrorEvent;
9264
+ if (turnErrorEvent) {
9265
+ const journal = entry.events.liveJournalSnapshot() ?? [];
9266
+ const hasNewerTurnContent = journal.some(
9267
+ isRefreshAppendTurnContent
9268
+ );
9269
+ if (!hasNewerTurnContent) {
9270
+ compactedReplay = [...page.events, turnErrorEvent];
9271
+ }
9272
+ }
9127
9273
  return {
9128
- compactedReplay: page.events,
9274
+ compactedReplay,
9129
9275
  liveJournal: [],
9130
9276
  lastEventId,
9131
9277
  eventEpoch,
@@ -9415,7 +9561,7 @@ function createAcpSessionBridge(opts) {
9415
9561
  SERVE_CONTROL_EXT_METHODS.sessionClose,
9416
9562
  {
9417
9563
  sessionId: req.sessionId,
9418
- drainTimeoutMs: Math.max(1, Math.floor(initTimeoutMs * 0.8))
9564
+ drainTimeoutMs: sessionCloseDrainBudgetMs(initTimeoutMs)
9419
9565
  }
9420
9566
  ),
9421
9567
  initTimeoutMs,
@@ -10548,6 +10694,7 @@ function createAcpSessionBridge(opts) {
10548
10694
  delete meta[DAEMON_CHANNEL_DELIVERY_META_KEY];
10549
10695
  delete meta[DAEMON_PROMPT_DISPLAY_TEXT_META_KEY];
10550
10696
  delete meta[DAEMON_MODEL_PROMPT_META_KEY];
10697
+ delete meta[CHANNEL_PROMPT_META_KEY];
10551
10698
  if (isRetry) {
10552
10699
  meta[DAEMON_RETRY_META_KEY] = true;
10553
10700
  }
@@ -10563,6 +10710,9 @@ function createAcpSessionBridge(opts) {
10563
10710
  if (modelPrompt !== void 0) {
10564
10711
  meta[DAEMON_MODEL_PROMPT_META_KEY] = modelPrompt;
10565
10712
  }
10713
+ if (context?.channelPrompt === true) {
10714
+ meta[CHANNEL_PROMPT_META_KEY] = true;
10715
+ }
10566
10716
  meta[INVOCATION_CONTEXT_META_KEY] = invocationContext;
10567
10717
  if (Object.keys(meta).length > 0) {
10568
10718
  copy._meta = meta;
@@ -10575,6 +10725,7 @@ function createAcpSessionBridge(opts) {
10575
10725
  entry.activePromptId = pendingEntry.promptId;
10576
10726
  delete entry.cancelBroadcastWithoutPrompt;
10577
10727
  delete entry.turnError;
10728
+ delete entry.turnErrorEvent;
10578
10729
  activePromptCounter++;
10579
10730
  entry.sessionLastSeenAt = Date.now();
10580
10731
  touchActivity();
@@ -10622,6 +10773,10 @@ function createAcpSessionBridge(opts) {
10622
10773
  );
10623
10774
  return;
10624
10775
  }
10776
+ if (extractJsonRpcErrorField(err, "errorKind")) {
10777
+ cancelPendingForSession(sessionId);
10778
+ return;
10779
+ }
10625
10780
  writeStderrLine(
10626
10781
  `sendPrompt: forward failed for session ${sessionId}: ${extractErrorMessage(err)}`
10627
10782
  );
@@ -10919,53 +11074,68 @@ function createAcpSessionBridge(opts) {
10919
11074
  if (shuttingDown) throw new Error("AcpSessionBridge is shutting down");
10920
11075
  const entry = byId.get(sessionId);
10921
11076
  if (!entry) throw new SessionNotFoundError(sessionId);
11077
+ if (isClosingOrAuthorizingClose(entry)) {
11078
+ throw new SessionNotFoundError(sessionId, "The session is closing");
11079
+ }
10922
11080
  const source = parseSessionSource(req.sourceType, req.sourceId);
10923
11081
  if ("error" in source) {
10924
11082
  throw new InvalidSessionMetadataError("sourceType", source.error);
10925
11083
  }
10926
11084
  const isSideTask = source.sourceType === "side_task";
10927
- let originatorClientId;
11085
+ const restoreBranch = isSideTask || req.atRecordId === void 0;
10928
11086
  if (context?.clientId !== void 0) {
10929
- originatorClientId = resolveTrustedClientId(entry, context.clientId);
11087
+ resolveTrustedClientId(entry, context.clientId);
10930
11088
  }
10931
11089
  const concurrentSideTask = isSideTask && entry.promptActive;
11090
+ if (!isSideTask && (entry.pendingPromptCount > 0 || entry.promptActive)) {
11091
+ throw new BranchWhilePromptActiveError(sessionId);
11092
+ }
10932
11093
  const branchResult = (concurrentSideTask ? Promise.resolve() : entry.promptQueue).then(async () => {
10933
- if (entry.promptActive && !isSideTask) {
10934
- throw new BranchWhilePromptActiveError(sessionId);
11094
+ if (isClosingOrAuthorizingClose(entry) || byId.get(sessionId) !== entry) {
11095
+ throw new SessionNotFoundError(sessionId, "The session is closing");
10935
11096
  }
10936
11097
  assertFreshSessionsAvailable();
10937
- if (byId.size + inFlightSpawns.size + inFlightRestores.size >= maxSessions) {
10938
- throw new SessionLimitExceededError(maxSessions);
11098
+ let admission;
11099
+ if (restoreBranch) {
11100
+ if (byId.size + inFlightSpawns.size + inFlightRestores.size >= maxSessions) {
11101
+ throw new SessionLimitExceededError(maxSessions);
11102
+ }
11103
+ admission = reserveFreshSession({
11104
+ operation: "branch",
11105
+ workspaceCwd: boundWorkspace,
11106
+ sourceSessionId: sessionId
11107
+ });
10939
11108
  }
10940
- const admission = reserveFreshSession({
10941
- operation: "branch",
10942
- workspaceCwd: boundWorkspace,
10943
- sourceSessionId: sessionId
10944
- });
10945
11109
  let admissionReleased = false;
10946
11110
  const releaseAdmissionOnce = /* @__PURE__ */ __name(() => {
10947
- if (admissionReleased) return;
11111
+ if (admissionReleased || !admission) return;
10948
11112
  admissionReleased = true;
10949
11113
  releaseFreshSessionReservation(admission);
10950
11114
  }, "releaseAdmissionOnce");
10951
11115
  try {
10952
- assertLivePromptEntry(sessionId, entry);
10953
- const ci = channelInfoForEntry(entry);
10954
- const result = await withTimeout(
10955
- Promise.race([
10956
- ci.connection.extMethod(
10957
- isSideTask ? SERVE_CONTROL_EXT_METHODS.sessionSideTask : SERVE_CONTROL_EXT_METHODS.sessionBranch,
10958
- {
10959
- sessionId,
10960
- cwd: boundWorkspace,
10961
- name: req.name
10962
- }
10963
- ),
10964
- getTransportClosedReject(entry)
10965
- ]),
10966
- initTimeoutMs,
10967
- isSideTask ? "createSideTaskSession" : "branchSession"
11116
+ const mutation = entry.connection.extMethod(
11117
+ isSideTask ? SERVE_CONTROL_EXT_METHODS.sessionSideTask : SERVE_CONTROL_EXT_METHODS.sessionBranch,
11118
+ {
11119
+ sessionId,
11120
+ cwd: boundWorkspace,
11121
+ name: req.name,
11122
+ ...req.atRecordId !== void 0 ? { atRecordId: req.atRecordId } : {}
11123
+ }
10968
11124
  );
11125
+ let result;
11126
+ try {
11127
+ result = await Promise.race([
11128
+ mutation,
11129
+ getTransportClosedReject(entry)
11130
+ ]);
11131
+ } catch (err) {
11132
+ const data = err?.data;
11133
+ if (!isSideTask && data && typeof data === "object" && data.errorKind === "session_busy") {
11134
+ const msg = err?.message ?? "Branch failed";
11135
+ throw new SessionBusyError(sessionId, msg);
11136
+ }
11137
+ throw err;
11138
+ }
10969
11139
  if (!result || typeof result.newSessionId !== "string") {
10970
11140
  throw new Error(
10971
11141
  `branchSession: agent returned invalid response: ${JSON.stringify(result)}`
@@ -10973,6 +11143,17 @@ function createAcpSessionBridge(opts) {
10973
11143
  }
10974
11144
  const rawBranchName = result.displayName ?? result.title;
10975
11145
  const branchDisplayName = typeof rawBranchName === "string" ? rawBranchName : result.newSessionId.slice(0, 8);
11146
+ if (!restoreBranch) {
11147
+ return {
11148
+ sessionId: result.newSessionId,
11149
+ displayName: branchDisplayName,
11150
+ forkedFrom: {
11151
+ sessionId,
11152
+ displayName: entry.displayName ?? sessionId.slice(0, 8)
11153
+ }
11154
+ };
11155
+ }
11156
+ const ci = await ensureChannel();
10976
11157
  let restored;
10977
11158
  try {
10978
11159
  const hideInheritedHistory = req.replayInheritedHistory === false;
@@ -10995,7 +11176,7 @@ function createAcpSessionBridge(opts) {
10995
11176
  releaseAdmissionOnce();
10996
11177
  } catch (restoreErr) {
10997
11178
  writeStderrLine(
10998
- `qwen serve: branchSession load failed for ${result.newSessionId}, attempting cleanup...`
11179
+ `qwen serve: branchSession load failed for ${result.newSessionId}; closing partial live state while preserving the committed session...`
10999
11180
  );
11000
11181
  try {
11001
11182
  if (!ci.isDying) {
@@ -11005,7 +11186,8 @@ function createAcpSessionBridge(opts) {
11005
11186
  SERVE_CONTROL_EXT_METHODS.sessionClose,
11006
11187
  {
11007
11188
  sessionId: result.newSessionId,
11008
- cwd: boundWorkspace
11189
+ cwd: boundWorkspace,
11190
+ drainTimeoutMs: sessionCloseDrainBudgetMs(initTimeoutMs)
11009
11191
  }
11010
11192
  ),
11011
11193
  channelUnavailableReject(
@@ -11019,7 +11201,7 @@ function createAcpSessionBridge(opts) {
11019
11201
  }
11020
11202
  } catch (cleanupErr) {
11021
11203
  writeStderrLine(
11022
- `qwen serve: branchSession cleanup of ${result.newSessionId} failed: ${cleanupErr instanceof Error ? cleanupErr.message : cleanupErr}`
11204
+ `qwen serve: branchSession live-state close for ${result.newSessionId} failed: ${cleanupErr instanceof Error ? cleanupErr.message : cleanupErr}`
11023
11205
  );
11024
11206
  }
11025
11207
  throw restoreErr;
@@ -11049,19 +11231,6 @@ function createAcpSessionBridge(opts) {
11049
11231
  );
11050
11232
  }
11051
11233
  }
11052
- if (!isSideTask) {
11053
- const eventData = {
11054
- sourceSessionId: sessionId,
11055
- newSessionId: result.newSessionId,
11056
- displayName: branchDisplayName
11057
- };
11058
- const branchEnvelope = {
11059
- type: "session_branched",
11060
- data: eventData,
11061
- ...originatorClientId ? { originatorClientId } : {}
11062
- };
11063
- newEntry?.events.publish(branchEnvelope);
11064
- }
11065
11234
  return {
11066
11235
  ...restored,
11067
11236
  displayName: branchDisplayName,
@@ -11094,7 +11263,8 @@ function createAcpSessionBridge(opts) {
11094
11263
  },
11095
11264
  context
11096
11265
  );
11097
- const { forkedFrom: _forkedFrom, ...sideTask } = result;
11266
+ const restoredResult = result;
11267
+ const { forkedFrom: _forkedFrom, ...sideTask } = restoredResult;
11098
11268
  return {
11099
11269
  ...sideTask,
11100
11270
  parentSessionId: sessionId
@@ -12509,10 +12679,19 @@ function createAcpSessionBridge(opts) {
12509
12679
  entry,
12510
12680
  context?.clientId
12511
12681
  );
12512
- let response;
12513
- try {
12514
- response = await Promise.race([
12515
- withTimeout(
12682
+ if (entry.pendingPromptCount > 0 || entry.promptActive) {
12683
+ throw new SessionBusyError(
12684
+ sessionId,
12685
+ "Cannot rewind while a prompt is running"
12686
+ );
12687
+ }
12688
+ const rewindResult = entry.promptQueue.then(async () => {
12689
+ if (entry.closing) {
12690
+ throw new SessionNotFoundError(sessionId, "The session is closing");
12691
+ }
12692
+ let response;
12693
+ try {
12694
+ response = await Promise.race([
12516
12695
  entry.connection.extMethod(
12517
12696
  SERVE_CONTROL_EXT_METHODS.sessionRewind,
12518
12697
  {
@@ -12521,92 +12700,95 @@ function createAcpSessionBridge(opts) {
12521
12700
  rewindFiles: req.rewindFiles !== false
12522
12701
  }
12523
12702
  ),
12524
- initTimeoutMs,
12525
- SERVE_CONTROL_EXT_METHODS.sessionRewind
12526
- ),
12527
- getTransportClosedReject(entry)
12528
- ]);
12529
- } catch (err) {
12530
- const data = err?.data;
12531
- if (data && typeof data === "object" && "errorKind" in data) {
12532
- const kind = data.errorKind;
12533
- const msg = err?.message ?? "Rewind failed";
12534
- if (kind === "session_busy") {
12535
- throw new SessionBusyError(sessionId, msg);
12536
- }
12537
- if (kind === "invalid_rewind_target") {
12538
- throw new InvalidRewindTargetError(sessionId, msg);
12703
+ getTransportClosedReject(entry)
12704
+ ]);
12705
+ } catch (err) {
12706
+ const data = err?.data;
12707
+ if (data && typeof data === "object" && "errorKind" in data) {
12708
+ const kind = data.errorKind;
12709
+ const msg = err?.message ?? "Rewind failed";
12710
+ if (kind === "session_busy") {
12711
+ throw new SessionBusyError(sessionId, msg);
12712
+ }
12713
+ if (kind === "invalid_rewind_target") {
12714
+ throw new InvalidRewindTargetError(sessionId, msg);
12715
+ }
12539
12716
  }
12717
+ throw err;
12540
12718
  }
12541
- throw err;
12542
- }
12543
- const targetTurnIndex = response["targetTurnIndex"] ?? 0;
12544
- const filesChanged = response["filesChanged"] ?? [];
12545
- const filesFailed = response["filesFailed"] ?? [];
12546
- const artifactSnapshot = restoredArtifactSnapshotFromState(
12547
- response
12548
- );
12549
- const artifactSnapshotUnavailable = artifactSnapshotUnavailableReason(
12550
- response
12551
- );
12552
- const beforeArtifacts = (await entry.artifacts.list()).artifacts;
12553
- const shouldRestoreArtifactSnapshot = artifactSnapshot !== void 0 && artifactSnapshotUnavailable === void 0;
12554
- const artifactRestoreWarnings = artifactSnapshotUnavailable !== void 0 ? [
12555
- `artifact snapshot rebuild unavailable during rewind: ${artifactSnapshotUnavailable}`
12556
- ] : shouldRestoreArtifactSnapshot ? await entry.artifacts.restore(artifactSnapshot, {
12557
- preserveLiveEphemeral: true
12558
- }) : [];
12559
- const artifactRestoreFailed = artifactRestoreWarnings.some(
12560
- isArtifactRestoreFailureWarning
12561
- );
12562
- const shouldRecordArtifactSnapshot = shouldRestoreArtifactSnapshot && !artifactRestoreFailed;
12563
- const artifactSnapshotWarnings = shouldRecordArtifactSnapshot ? await entry.artifacts.recordSnapshot() : [];
12564
- const artifactWarnings = [
12565
- ...artifactRestoreWarnings,
12566
- ...artifactSnapshotWarnings
12567
- ];
12568
- for (const warning of artifactRestoreWarnings) {
12569
- writeStderrLine(
12570
- `[artifacts] session=${entry.sessionId} action=rewind_restore_warning warning=${JSON.stringify(
12571
- warning
12572
- )}`
12719
+ const targetTurnIndex = response["targetTurnIndex"] ?? 0;
12720
+ const filesChanged = response["filesChanged"] ?? [];
12721
+ const filesFailed = response["filesFailed"] ?? [];
12722
+ const artifactSnapshot = restoredArtifactSnapshotFromState(
12723
+ response
12573
12724
  );
12574
- }
12575
- for (const warning of artifactSnapshotWarnings) {
12576
- writeStderrLine(
12577
- `[artifacts] session=${entry.sessionId} action=rewind_snapshot_warning warning=${JSON.stringify(
12578
- warning
12579
- )}`
12725
+ const artifactSnapshotUnavailable = artifactSnapshotUnavailableReason(
12726
+ response
12580
12727
  );
12581
- }
12582
- const afterArtifacts = (await entry.artifacts.list()).artifacts;
12583
- publishArtifactChanges(
12584
- entry,
12585
- artifactReseedChanges(beforeArtifacts, afterArtifacts),
12586
- originatorClientId
12728
+ const beforeArtifacts = (await entry.artifacts.list()).artifacts;
12729
+ const shouldRestoreArtifactSnapshot = artifactSnapshot !== void 0 && artifactSnapshotUnavailable === void 0;
12730
+ const artifactRestoreWarnings = artifactSnapshotUnavailable !== void 0 ? [
12731
+ `artifact snapshot rebuild unavailable during rewind: ${artifactSnapshotUnavailable}`
12732
+ ] : shouldRestoreArtifactSnapshot ? await entry.artifacts.restore(artifactSnapshot, {
12733
+ preserveLiveEphemeral: true
12734
+ }) : [];
12735
+ const artifactRestoreFailed = artifactRestoreWarnings.some(
12736
+ isArtifactRestoreFailureWarning
12737
+ );
12738
+ const shouldRecordArtifactSnapshot = shouldRestoreArtifactSnapshot && !artifactRestoreFailed;
12739
+ const artifactSnapshotWarnings = shouldRecordArtifactSnapshot ? await entry.artifacts.recordSnapshot() : [];
12740
+ const artifactWarnings = [
12741
+ ...artifactRestoreWarnings,
12742
+ ...artifactSnapshotWarnings
12743
+ ];
12744
+ for (const warning of artifactRestoreWarnings) {
12745
+ writeStderrLine(
12746
+ `[artifacts] session=${entry.sessionId} action=rewind_restore_warning warning=${JSON.stringify(
12747
+ warning
12748
+ )}`
12749
+ );
12750
+ }
12751
+ for (const warning of artifactSnapshotWarnings) {
12752
+ writeStderrLine(
12753
+ `[artifacts] session=${entry.sessionId} action=rewind_snapshot_warning warning=${JSON.stringify(
12754
+ warning
12755
+ )}`
12756
+ );
12757
+ }
12758
+ const afterArtifacts = (await entry.artifacts.list()).artifacts;
12759
+ publishArtifactChanges(
12760
+ entry,
12761
+ artifactReseedChanges(beforeArtifacts, afterArtifacts),
12762
+ originatorClientId
12763
+ );
12764
+ try {
12765
+ entry.events.publish({
12766
+ type: "session_rewound",
12767
+ data: {
12768
+ sessionId,
12769
+ promptId: req.promptId,
12770
+ targetTurnIndex,
12771
+ filesChanged,
12772
+ filesFailed,
12773
+ ...artifactWarnings.length > 0 ? { warnings: artifactWarnings } : {}
12774
+ },
12775
+ ...originatorClientId ? { originatorClientId } : {}
12776
+ });
12777
+ } catch {
12778
+ }
12779
+ return {
12780
+ rewound: filesFailed.length === 0,
12781
+ targetTurnIndex,
12782
+ filesChanged,
12783
+ filesFailed,
12784
+ ...artifactWarnings.length > 0 ? { warnings: artifactWarnings } : {}
12785
+ };
12786
+ });
12787
+ entry.promptQueue = rewindResult.then(
12788
+ () => void 0,
12789
+ () => void 0
12587
12790
  );
12588
- try {
12589
- entry.events.publish({
12590
- type: "session_rewound",
12591
- data: {
12592
- sessionId,
12593
- promptId: req.promptId,
12594
- targetTurnIndex,
12595
- filesChanged,
12596
- filesFailed,
12597
- ...artifactWarnings.length > 0 ? { warnings: artifactWarnings } : {}
12598
- },
12599
- ...originatorClientId ? { originatorClientId } : {}
12600
- });
12601
- } catch {
12602
- }
12603
- return {
12604
- rewound: filesFailed.length === 0,
12605
- targetTurnIndex,
12606
- filesChanged,
12607
- filesFailed,
12608
- ...artifactWarnings.length > 0 ? { warnings: artifactWarnings } : {}
12609
- };
12791
+ return rewindResult;
12610
12792
  },
12611
12793
  async manageMcpServer(serverName, action, originatorClientId) {
12612
12794
  const info = await ensureChannel();
@@ -12934,6 +13116,10 @@ function createAcpSessionBridge(opts) {
12934
13116
  timeoutMs: initTimeoutMs
12935
13117
  });
12936
13118
  } catch (error) {
13119
+ if (isDefinitiveAcpRequestError(error)) {
13120
+ entry.closing = false;
13121
+ return false;
13122
+ }
12937
13123
  if (ci) {
12938
13124
  await killChannelWithLog(
12939
13125
  ci,