@qwen-code/qwen-code 0.21.9 → 0.21.10

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 (218) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +1 -1
  2. package/bundled/qc-helper/docs/features/status-line.md +13 -13
  3. package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
  4. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +14 -10
  5. package/bundled/review/SKILL.md +2 -2
  6. package/chunks/{MaxSizedBox-6BZANW7X.js → MaxSizedBox-FKXYULMW.js} +5 -5
  7. package/chunks/{StandaloneSessionPicker-VDC5KE7T.js → StandaloneSessionPicker-OQS3M7AY.js} +19 -19
  8. package/chunks/{acp-startup-profiler-B5BYAMYQ.js → acp-startup-profiler-VNTFWYAC.js} +2 -2
  9. package/chunks/{acpAgent-F2NSBCUF.js → acpAgent-AGS6HLQQ.js} +95 -43
  10. package/chunks/{agent-VOHJOEBB.js → agent-4NCVO27U.js} +5 -5
  11. package/chunks/{agent-headless-J5NFOPHP.js → agent-headless-HYEHZFH6.js} +5 -5
  12. package/chunks/{anthropicContentGenerator-SSFE2753.js → anthropicContentGenerator-D3Y4RFT4.js} +1 -1
  13. package/chunks/{bridge-NQIZZLAS.js → bridge-FHINXZMN.js} +8 -8
  14. package/chunks/{channel-settings-store-VIY2OENO.js → channel-settings-store-OXYG5S5X.js} +11 -11
  15. package/chunks/{channel-worker-group-MSHT6CWR.js → channel-worker-group-WQP4RCDO.js} +3 -3
  16. package/chunks/{channel-worker-manager-XXD3GDSK.js → channel-worker-manager-MRDFAKIM.js} +3 -3
  17. package/chunks/{chunk-7AEPJGL4.js → chunk-26CXSA6V.js} +1 -1
  18. package/chunks/{chunk-KTQGGPGV.js → chunk-2PLNY5TN.js} +4 -4
  19. package/chunks/{chunk-G2TX5ZXC.js → chunk-47PEPJO7.js} +3 -3
  20. package/chunks/{chunk-3XVDTHBJ.js → chunk-4MKXUHXY.js} +2 -2
  21. package/chunks/{chunk-D7BXVKSF.js → chunk-4WL6SY4F.js} +1 -1
  22. package/chunks/{chunk-P3RBMQ4P.js → chunk-5MZCSWI4.js} +4 -4
  23. package/chunks/{chunk-LP2QGNSP.js → chunk-624NHDGB.js} +3 -1
  24. package/chunks/{chunk-FBMCDU63.js → chunk-6LP743KE.js} +4 -4
  25. package/chunks/{chunk-II6G3EY6.js → chunk-7GTMV7UE.js} +339 -213
  26. package/chunks/{chunk-4XQNB3KN.js → chunk-A7XMDZRI.js} +2 -2
  27. package/chunks/{chunk-PNBBJOCP.js → chunk-AAE6SR4Q.js} +1 -1
  28. package/chunks/{chunk-JUWS2Z5K.js → chunk-ABVRJU3D.js} +5 -5
  29. package/chunks/{chunk-IOEZE2YT.js → chunk-AEL7KN2O.js} +1 -1
  30. package/chunks/{chunk-OGDIJKHK.js → chunk-AQAJJMRR.js} +1 -1
  31. package/chunks/{chunk-AKJQSWV4.js → chunk-BSI645OU.js} +2 -2
  32. package/chunks/{chunk-FCLHHEUK.js → chunk-D27I6YJT.js} +11 -11
  33. package/chunks/{chunk-P2FK2HBV.js → chunk-DCZEPFB4.js} +2 -2
  34. package/chunks/{chunk-GAKGOXTC.js → chunk-EBZ6BJTF.js} +1 -1
  35. package/chunks/{chunk-KSAFZ5TA.js → chunk-ECWR5LQR.js} +1 -1
  36. package/chunks/{chunk-XX7QFP34.js → chunk-EI3NWELG.js} +116 -62
  37. package/chunks/{chunk-P4ZEZSJZ.js → chunk-F24A2JBM.js} +260 -65
  38. package/chunks/{chunk-DH5YXSIF.js → chunk-F6WDTQ3M.js} +2 -2
  39. package/chunks/{chunk-ZOSTTOUJ.js → chunk-GWVUR3QZ.js} +1 -1
  40. package/chunks/{chunk-BZP4QPNK.js → chunk-IBUGFUXC.js} +9 -9
  41. package/chunks/{chunk-SCAZZ3Q4.js → chunk-IRZ2ZH72.js} +4 -4
  42. package/chunks/{chunk-OGNFHGIG.js → chunk-IWTMYQ32.js} +4 -4
  43. package/chunks/{chunk-CG3WBKJK.js → chunk-JT7XS4YW.js} +1 -1
  44. package/chunks/{chunk-MTCYGTWH.js → chunk-KID7K6H2.js} +4 -4
  45. package/chunks/{chunk-DGEIYUC3.js → chunk-KM73TBQ4.js} +7 -1
  46. package/chunks/{chunk-TZ6KJ44L.js → chunk-KONVMRK7.js} +1 -1
  47. package/chunks/{scheduler-YNQNOU2E.js → chunk-KZ22NXBY.js} +238 -110
  48. package/chunks/{chunk-RBHQXGDK.js → chunk-LLCWZQCU.js} +1 -1
  49. package/chunks/{chunk-UJUM2SRN.js → chunk-MIKXJYZB.js} +27 -26
  50. package/chunks/{chunk-THIKWITR.js → chunk-NDU63YLI.js} +2 -2
  51. package/chunks/{chunk-ATMO54WE.js → chunk-NEOXOWYH.js} +2 -2
  52. package/chunks/{chunk-QSNSL4R4.js → chunk-NRLFZWCT.js} +1 -1
  53. package/chunks/{chunk-TQCYNLNJ.js → chunk-NV65ZUVM.js} +1 -1
  54. package/chunks/{chunk-HZGBKOX3.js → chunk-O3EU6GMH.js} +2 -2
  55. package/chunks/{chunk-46YJDYCU.js → chunk-OCSFNUU4.js} +7 -7
  56. package/chunks/{chunk-T5RLUXWJ.js → chunk-OJUQF2PL.js} +2 -2
  57. package/chunks/{chunk-ZTQSOV56.js → chunk-OONWZLFK.js} +3 -3
  58. package/chunks/{chunk-23VQTELM.js → chunk-P3BJLFSZ.js} +1 -1
  59. package/chunks/{chunk-BIRWP6LU.js → chunk-Q3AL4JQ3.js} +1 -1
  60. package/chunks/{chunk-CMOBWHWW.js → chunk-QBJYSIQ4.js} +1 -1
  61. package/chunks/{chunk-XTY5DN4Y.js → chunk-QG3FFJYU.js} +1 -1
  62. package/chunks/{chunk-W3FSZSF2.js → chunk-QGNOFE5E.js} +1 -1
  63. package/chunks/{chunk-3WDYBTTI.js → chunk-QJMOAMXT.js} +4 -4
  64. package/chunks/{chunk-67N6HB5H.js → chunk-QUI267ZP.js} +1 -0
  65. package/chunks/{chunk-K4ADGWHU.js → chunk-TRRF5BSP.js} +1 -1
  66. package/chunks/{chunk-7GOYZQPR.js → chunk-UBX6NL47.js} +3 -3
  67. package/chunks/{chunk-WP5VOXF7.js → chunk-UEOKWYGY.js} +1 -1
  68. package/chunks/{chunk-HADWBW5R.js → chunk-UMD7WQTR.js} +4 -4
  69. package/chunks/{chunk-RVSTTOJ4.js → chunk-URKIBIFC.js} +2 -2
  70. package/chunks/{chunk-7S4JBJLU.js → chunk-VSFKIRRW.js} +3 -3
  71. package/chunks/{chunk-ZBXGWQ4S.js → chunk-VWKER4ZH.js} +2 -2
  72. package/chunks/{chunk-M2PNLYGY.js → chunk-W5UC37EE.js} +2 -0
  73. package/chunks/{chunk-BT6GQIEJ.js → chunk-X2UOOG5V.js} +1 -1
  74. package/chunks/{chunk-WGK4TSB7.js → chunk-XVHYA33G.js} +3 -3
  75. package/chunks/{chunk-BAMN6XSD.js → chunk-Y3OVRWRY.js} +1 -1
  76. package/chunks/{chunk-PVOGHGSF.js → chunk-Y4R47ZUH.js} +6 -6
  77. package/chunks/{chunk-LZZLUCRS.js → chunk-YF5MALI4.js} +3 -3
  78. package/chunks/{chunk-5RBDAGC6.js → chunk-YWPSGJFI.js} +2 -2
  79. package/chunks/{chunk-MHP476D3.js → chunk-Z4JX4NSH.js} +52 -39
  80. package/chunks/{chunk-T6HEQR2Q.js → chunk-ZJ4W6SUY.js} +1 -1
  81. package/chunks/{chunk-UYAUA63Q.js → chunk-ZRBMO3C7.js} +1 -1
  82. package/chunks/{chunk-KTKYGS2P.js → chunk-ZZCWJWTF.js} +8 -1
  83. package/chunks/{computer-use-PMZ7ICGY.js → computer-use-WQFK33Z3.js} +5 -5
  84. package/chunks/{contextCommand-GEZU7YHE.js → contextCommand-7EOZND7C.js} +7 -7
  85. package/chunks/{core-runtime-HRJI2MN6.js → core-runtime-FGMQRM6E.js} +5 -5
  86. package/chunks/{create-sub-session-VBNVI4YU.js → create-sub-session-QM2K5HLZ.js} +6 -6
  87. package/chunks/{daemon-POSQPD3G.js → daemon-GWD7BT6E.js} +46 -5
  88. package/chunks/{daemon-status-provider-N4CRQKFI.js → daemon-status-provider-L3J6GKCT.js} +12 -12
  89. package/chunks/{daemon-trust-policy-BHO3JUHM.js → daemon-trust-policy-4PHPY23S.js} +11 -11
  90. package/chunks/{daemon-trust-policy-monitor-YEKJ2726.js → daemon-trust-policy-monitor-6UKEABN5.js} +11 -11
  91. package/chunks/{deferred-core-runtime-SH57E3J3.js → deferred-core-runtime-67GJXHXS.js} +5 -5
  92. package/chunks/{earlyInputCapture-B2JJ2HME.js → earlyInputCapture-IWMYR6OB.js} +5 -5
  93. package/chunks/{edit-7FTXENAN.js → edit-ZFGROCAF.js} +5 -5
  94. package/chunks/{enter-worktree-JPHV2PBG.js → enter-worktree-TZZZCDM5.js} +5 -5
  95. package/chunks/{enterPlanMode-CGBJ3AHJ.js → enterPlanMode-U77BI3R6.js} +5 -5
  96. package/chunks/{environment-LXASZAHD.js → environment-HC37DS2I.js} +7 -7
  97. package/chunks/{errors-XIGVT2AD.js → errors-6AG54JPD.js} +7 -7
  98. package/chunks/{exit-worktree-DKSGXW65.js → exit-worktree-UYYWFPNK.js} +5 -5
  99. package/chunks/{exitPlanMode-THFL2HYN.js → exitPlanMode-RWJR2KGB.js} +5 -5
  100. package/chunks/{fast-path-4NXAT5UL.js → fast-path-F5FSZ3O7.js} +2 -2
  101. package/chunks/{gemini-B3N6FACU.js → gemini-NKQHYM36.js} +76 -52
  102. package/chunks/{geminiContentGenerator-YYFE2HIE.js → geminiContentGenerator-HCWZOUX3.js} +1 -1
  103. package/chunks/{glob-BPHSCFJP.js → glob-3PDXKBAO.js} +5 -5
  104. package/chunks/{goal-tools-PXWN5VK3.js → goal-tools-SWNB6GP4.js} +1 -1
  105. package/chunks/{grep-ROZIRFLU.js → grep-5HZKZYVD.js} +5 -5
  106. package/chunks/{handleAutoUpdate-WV6SPZQB.js → handleAutoUpdate-NHFSGYTF.js} +9 -9
  107. package/chunks/{i18n-YWJWPQKD.js → i18n-Q27KKNDL.js} +6 -6
  108. package/chunks/{image-gen-SISRZ6FS.js → image-gen-2Z2RJ6W7.js} +1 -1
  109. package/chunks/{initializer-66OAD6GO.js → initializer-Y5DJLT43.js} +11 -11
  110. package/chunks/{installationInfo-3YUGIP36.js → installationInfo-XXB75T7O.js} +6 -6
  111. package/chunks/{list-VEYR66XB.js → list-YHNQ32CS.js} +14 -14
  112. package/chunks/{loadedSettingsAdapter-V2JCPCYD.js → loadedSettingsAdapter-GHUQK7H4.js} +11 -11
  113. package/chunks/{loggingContentGenerator-RBLNDREC.js → loggingContentGenerator-6NTFBM7Q.js} +1 -1
  114. package/chunks/{managed-npm-update-C5ID5R4R.js → managed-npm-update-SPHYQUWZ.js} +6 -6
  115. package/chunks/{mcp-OZ54NZJQ.js → mcp-EA3KO6FS.js} +11 -11
  116. package/chunks/{monitor-7Y4TVFTK.js → monitor-ZBBPAA54.js} +5 -5
  117. package/chunks/{nonInteractiveCli-QEK4LHAC.js → nonInteractiveCli-NNOR56HU.js} +35 -35
  118. package/chunks/{notebook-edit-OG35EBGY.js → notebook-edit-5W3FW7Z2.js} +5 -5
  119. package/chunks/{openaiContentGenerator-443BNRPJ.js → openaiContentGenerator-TQANPEVZ.js} +1 -1
  120. package/chunks/{pidfile-ZK4OLRZA.js → pidfile-EQOBLH4E.js} +5 -5
  121. package/chunks/{processUtils-4YGB4RUZ.js → processUtils-7XQG7EHS.js} +2 -2
  122. package/chunks/{qwenContentGenerator-D5C2LCSZ.js → qwenContentGenerator-BKCPHHXU.js} +5 -5
  123. package/chunks/{qwenOAuth2-Z4YQBMYN.js → qwenOAuth2-BJ6PQKE6.js} +1 -1
  124. package/chunks/{read-file-EXTJLWMU.js → read-file-KKTXGIZD.js} +1 -1
  125. package/chunks/{resumeHistoryUtils-UPCGRJUL.js → resumeHistoryUtils-6N6XGJJW.js} +8 -8
  126. package/chunks/{ripGrep-QBVIRCU4.js → ripGrep-SJVAAYDV.js} +5 -5
  127. package/chunks/{run-qwen-serve-ZYGJNE3E.js → run-qwen-serve-BCKBCAMX.js} +34 -34
  128. package/chunks/{runtime-BZZ4LWCP.js → runtime-E2437YKL.js} +12 -12
  129. package/chunks/scheduler-K3D5Z655.js +108 -0
  130. package/chunks/{serve-LJHAXDCH.js → serve-IH4XR5IL.js} +11 -11
  131. package/chunks/{server-ADMLELR6.js → server-UD6INW7J.js} +616 -245
  132. package/chunks/{session-YKZXFFTM.js → session-GR4ZEVW4.js} +43 -44
  133. package/chunks/{settings-EQBUAQ7Y.js → settings-5O24D3OJ.js} +10 -10
  134. package/chunks/{shell-3QZOJGTT.js → shell-UTLWLG5G.js} +5 -5
  135. package/chunks/{skill-UWSSMXE7.js → skill-QQAZL4VO.js} +1 -1
  136. package/chunks/{skill-settings-T6MLB7NU.js → skill-settings-P3YHJVBZ.js} +10 -10
  137. package/chunks/{spawnChannel-VS7ZFUFP.js → spawnChannel-UAQMH6Y6.js} +5 -5
  138. package/chunks/{standalone-update-2W26SRRO.js → standalone-update-QP742MGP.js} +7 -7
  139. package/chunks/{startInteractiveUI-CVS7K3D6.js → startInteractiveUI-YCS6AEPN.js} +1209 -926
  140. package/chunks/{team-create-4WFTNNUL.js → team-create-WFH7OCDQ.js} +5 -5
  141. package/chunks/{team-plan-approval-DBYI33S3.js → team-plan-approval-EGTT53MV.js} +5 -5
  142. package/chunks/{terminal-image-renderer-S5WPPQKH.js → terminal-image-renderer-BWRESAQ7.js} +5 -5
  143. package/chunks/{theme-manager-LI2RIOVR.js → theme-manager-ZNDGAHJN.js} +5 -5
  144. package/chunks/{tool-search-4773EUQ4.js → tool-search-TI5PTIBF.js} +1 -1
  145. package/chunks/{total-session-admission-PAY5CH2Z.js → total-session-admission-66UDSOHO.js} +9 -9
  146. package/chunks/{trustedFolders-FRSLE674.js → trustedFolders-4KYHA4IG.js} +6 -6
  147. package/chunks/{update-relaunch-ZSFQTU6M.js → update-relaunch-WB6LGIF2.js} +5 -5
  148. package/chunks/{updateCheck-AXWSO7KA.js → updateCheck-LOS5GYFC.js} +8 -8
  149. package/chunks/{useAutoAcceptIndicator-VHLXIA7U.js → useAutoAcceptIndicator-MHAPY52L.js} +11 -11
  150. package/chunks/{validateNonInterActiveAuth-PDJECMFU.js → validateNonInterActiveAuth-QV22HNQU.js} +32 -32
  151. package/chunks/{version-RBN764QS.js → version-DALWZHKQ.js} +1 -1
  152. package/chunks/{web-fetch-7BJK42AF.js → web-fetch-JMJVMYFE.js} +1 -1
  153. package/chunks/{web-search-L2CILQXV.js → web-search-DNDUIPU5.js} +2 -2
  154. package/chunks/{workflow-5VH2R74I.js → workflow-JGNN64PM.js} +6 -6
  155. package/chunks/{workspace-providers-status-OZTQ6JFH.js → workspace-providers-status-K22B3Z6B.js} +13 -13
  156. package/chunks/{workspace-registration-store-IX5RJQS5.js → workspace-registration-store-LRJG7QA4.js} +1 -1
  157. package/chunks/{workspace-registry-73N4BGG4.js → workspace-registry-KVXIFM36.js} +9 -9
  158. package/chunks/{workspace-service-I5RUPSNV.js → workspace-service-PO4AAKKT.js} +15 -15
  159. package/chunks/{workspace-skills-status-DMK6VYDO.js → workspace-skills-status-DDYCBVSH.js} +11 -11
  160. package/chunks/{workspace-trust-reconciler-QX4RL3TC.js → workspace-trust-reconciler-DOZPCVHG.js} +15 -15
  161. package/chunks/{write-file-UGDD5UTS.js → write-file-TT6MWIKC.js} +5 -5
  162. package/chunks/{zoom-image-ZAHEO3YP.js → zoom-image-CNC77ZMA.js} +1 -1
  163. package/cli.js +13 -13
  164. package/package.json +3 -3
  165. package/web-shell/assets/{arc-CHY4saMJ.js → arc-CDk0d60K.js} +1 -1
  166. package/web-shell/assets/{architectureDiagram-3BPJPVTR-Bu6CwvHj.js → architectureDiagram-3BPJPVTR-h-W3I2lP.js} +1 -1
  167. package/web-shell/assets/{blockDiagram-GPEHLZMM-XGt6iGf_.js → blockDiagram-GPEHLZMM-D1pvSmZg.js} +1 -1
  168. package/web-shell/assets/{c4Diagram-AAUBKEIU-CBbYl19W.js → c4Diagram-AAUBKEIU-ByAm5ZNf.js} +1 -1
  169. package/web-shell/assets/channel-DPFUV4oi.js +1 -0
  170. package/web-shell/assets/{chunk-2J33WTMH-BEhmVrdx.js → chunk-2J33WTMH-VrGPPOGV.js} +1 -1
  171. package/web-shell/assets/{chunk-4BX2VUAB-fQLyE0Bg.js → chunk-4BX2VUAB-B7hTowgG.js} +1 -1
  172. package/web-shell/assets/{chunk-55IACEB6-yGdtyx4a.js → chunk-55IACEB6-j1Fq8DpE.js} +1 -1
  173. package/web-shell/assets/{chunk-727SXJPM-DYbX2GLo.js → chunk-727SXJPM-UjABYpF2.js} +1 -1
  174. package/web-shell/assets/{chunk-AQP2D5EJ-DyKTEsYn.js → chunk-AQP2D5EJ-D4uBItrs.js} +1 -1
  175. package/web-shell/assets/{chunk-FMBD7UC4-D8Uy_GzX.js → chunk-FMBD7UC4-DeFbKlb8.js} +1 -1
  176. package/web-shell/assets/{chunk-ND2GUHAM-C8wNR2K7.js → chunk-ND2GUHAM-rQJ8TIgT.js} +1 -1
  177. package/web-shell/assets/{chunk-QZHKN3VN-BnybNxnt.js → chunk-QZHKN3VN-DAGcRxvq.js} +1 -1
  178. package/web-shell/assets/classDiagram-4FO5ZUOK-CLm0hVvw.js +1 -0
  179. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CLm0hVvw.js +1 -0
  180. package/web-shell/assets/{cose-bilkent-S5V4N54A-jq4uiFRp.js → cose-bilkent-S5V4N54A-MaE7MJSt.js} +1 -1
  181. package/web-shell/assets/{dagre-BM42HDAG-Bs7oye1U.js → dagre-BM42HDAG-DzijYGSb.js} +1 -1
  182. package/web-shell/assets/{diagram-2AECGRRQ-BHGGJNyM.js → diagram-2AECGRRQ-WdbG7WnX.js} +1 -1
  183. package/web-shell/assets/{diagram-5GNKFQAL-BJezVLGT.js → diagram-5GNKFQAL-NYutsBnw.js} +1 -1
  184. package/web-shell/assets/{diagram-KO2AKTUF-5JzQN_rL.js → diagram-KO2AKTUF-Dqg0eBY0.js} +1 -1
  185. package/web-shell/assets/{diagram-LMA3HP47-BlPYOgY9.js → diagram-LMA3HP47-C7vRP2Lb.js} +1 -1
  186. package/web-shell/assets/{diagram-OG6HWLK6-CtMHEaFK.js → diagram-OG6HWLK6-B2sEPpPt.js} +1 -1
  187. package/web-shell/assets/{erDiagram-TEJ5UH35-CRNdq2AB.js → erDiagram-TEJ5UH35-a4zIbzm8.js} +1 -1
  188. package/web-shell/assets/{flowDiagram-I6XJVG4X-De1WwLzu.js → flowDiagram-I6XJVG4X-BK9y89ya.js} +1 -1
  189. package/web-shell/assets/{ganttDiagram-6RSMTGT7-YbWfL5Zn.js → ganttDiagram-6RSMTGT7-wUQTSNvV.js} +1 -1
  190. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DzCN8bmd.js → gitGraphDiagram-PVQCEYII-Dnzt4SAi.js} +1 -1
  191. package/web-shell/assets/{index-CocPvF9Q.js → index-BA3wUcKL.js} +1 -1
  192. package/web-shell/assets/{index-BDOGGGaN.css → index-BjC3yjjL.css} +2 -2
  193. package/web-shell/assets/index-QzFq6w7o.js +1775 -0
  194. package/web-shell/assets/{infoDiagram-5YYISTIA-DLHoopnE.js → infoDiagram-5YYISTIA-DcaoToij.js} +1 -1
  195. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-XnbU04SS.js → ishikawaDiagram-YF4QCWOH-DzduqhP2.js} +1 -1
  196. package/web-shell/assets/{journeyDiagram-JHISSGLW-CipPyEeJ.js → journeyDiagram-JHISSGLW-BvviZR_O.js} +1 -1
  197. package/web-shell/assets/{kanban-definition-UN3LZRKU-DrSeyE5d.js → kanban-definition-UN3LZRKU-Efm2JxY3.js} +1 -1
  198. package/web-shell/assets/{linear-LrBKnAo_.js → linear-DtY3IbOs.js} +1 -1
  199. package/web-shell/assets/{mermaid.core-C3U9UVmf.js → mermaid.core-PzpFqoMe.js} +5 -5
  200. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DqRWgC9H.js → mindmap-definition-RKZ34NQL-BLlTkHS0.js} +1 -1
  201. package/web-shell/assets/{pieDiagram-4H26LBE5-BNXY5p6H.js → pieDiagram-4H26LBE5-D-mKF-jE.js} +1 -1
  202. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Ccj9QzE4.js → quadrantDiagram-W4KKPZXB-DYCzslGm.js} +1 -1
  203. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CjPM2_gx.js → requirementDiagram-4Y6WPE33-Dfpxlk7R.js} +1 -1
  204. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C0RsvKbj.js → sankeyDiagram-5OEKKPKP-D5cRaaxh.js} +1 -1
  205. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-ClN1P5z7.js → sequenceDiagram-3UESZ5HK-s04DReiS.js} +1 -1
  206. package/web-shell/assets/{stateDiagram-AJRCARHV-By0eiB2Y.js → stateDiagram-AJRCARHV-01UNFgnb.js} +1 -1
  207. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DXb5olqv.js +1 -0
  208. package/web-shell/assets/{timeline-definition-PNZ67QCA-g_iaSQgv.js → timeline-definition-PNZ67QCA-DX8_wZBC.js} +1 -1
  209. package/web-shell/assets/{vennDiagram-CIIHVFJN-y9ZqJ-TD.js → vennDiagram-CIIHVFJN-BK0FlBme.js} +1 -1
  210. package/web-shell/assets/{wardley-L42UT6IY-BVVfaxpF.js → wardley-L42UT6IY-DkPc9UlD.js} +1 -1
  211. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D3ooZKZT.js → wardleyDiagram-YWT4CUSO-DNKkpDAo.js} +1 -1
  212. package/web-shell/assets/{xychartDiagram-2RQKCTM6-6GXrY6M1.js → xychartDiagram-2RQKCTM6-CiPwg8QG.js} +1 -1
  213. package/web-shell/index.html +2 -2
  214. package/web-shell/assets/channel-B40srHOa.js +0 -1
  215. package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +0 -1
  216. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +0 -1
  217. package/web-shell/assets/index-DSH2KrMc.js +0 -1771
  218. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +0 -1
@@ -50,6 +50,7 @@ import {
50
50
  LOAD_REPLAY_PAGE_SIZE_META_KEY,
51
51
  LOAD_REPLAY_VERSION,
52
52
  MID_TURN_QUEUE_DRAIN_METHOD,
53
+ MID_TURN_RECONCILIATION_RING_SIZE,
53
54
  PROMPT_CANCEL_METHOD,
54
55
  REQUESTED_SESSION_ID_META_KEY,
55
56
  TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD,
@@ -57,7 +58,7 @@ import {
57
58
  WORKTREE_MCP_DEFER_META_KEY,
58
59
  clampActiveWorkIntervalMs,
59
60
  isValidTrustedModelPrompt
60
- } from "./chunk-M2PNLYGY.js";
61
+ } from "./chunk-W5UC37EE.js";
61
62
  import {
62
63
  BranchWhilePromptActiveError,
63
64
  BridgeChannelQuarantinedError,
@@ -79,7 +80,7 @@ import {
79
80
  SessionShellDisabledError,
80
81
  WorkspaceMismatchError,
81
82
  isNotCurrentlyGeneratingCancelError
82
- } from "./chunk-LP2QGNSP.js";
83
+ } from "./chunk-624NHDGB.js";
83
84
  import {
84
85
  canonicalizeWorkspace,
85
86
  translateAndCheckAbsoluteWorkspacePath
@@ -113,7 +114,7 @@ import {
113
114
  metadataBudgetBytes,
114
115
  normalizeSnapshotPayload,
115
116
  stableSessionArtifactId
116
- } from "./chunk-XX7QFP34.js";
117
+ } from "./chunk-EI3NWELG.js";
117
118
  import {
118
119
  DAEMON_TRACEPARENT_META_KEY,
119
120
  DAEMON_TRACESTATE_META_KEY
@@ -2414,34 +2415,36 @@ var BridgeClient = class {
2414
2415
  const entry = this.resolveEntry(sessionId);
2415
2416
  if (!entry) return { messages: [], hasQueuedPrompt: false };
2416
2417
  const drained = entry.midTurnMessageQueue.splice(0);
2417
- const messages = drained.map((item) => item.text);
2418
- const hasQueuedPrompt = entry.pendingPromptList.some(
2419
- (prompt) => prompt.state === "queued" && !prompt.abortController.signal.aborted
2420
- );
2421
2418
  if (drained.length > 0) {
2422
- const byOriginator = /* @__PURE__ */ new Map();
2423
2419
  for (const item of drained) {
2424
- const group = byOriginator.get(item.originatorClientId);
2425
- if (group) group.push(item);
2426
- else byOriginator.set(item.originatorClientId, [item]);
2427
- }
2428
- for (const [originatorClientId, items] of byOriginator) {
2429
- const texts = items.map((item) => item.text);
2430
- const published = entry.events.publish({
2431
- type: MID_TURN_MESSAGE_INJECTED_EVENT,
2432
- ...entry.activePromptId ? { promptId: entry.activePromptId } : {},
2433
- data: {
2434
- sessionId: entry.sessionId,
2435
- messages: texts,
2436
- messageIds: items.map((item) => item.messageId)
2437
- },
2438
- ...originatorClientId ? { originatorClientId } : {}
2439
- });
2440
- writeStderrLine(
2441
- published ? `[mid-turn] session=${entry.sessionId} drained=${texts.length}${originatorClientId ? ` originator=${originatorClientId}` : ""} injected into running turn` : `[mid-turn] session=${entry.sessionId} drained=${texts.length} echo frame dropped (bus closed); browser may resend next turn`
2420
+ entry.settledMidTurnMessageIds.push(item.messageId);
2421
+ }
2422
+ if (entry.settledMidTurnMessageIds.length > MID_TURN_RECONCILIATION_RING_SIZE) {
2423
+ entry.settledMidTurnMessageIds.splice(
2424
+ 0,
2425
+ entry.settledMidTurnMessageIds.length - MID_TURN_RECONCILIATION_RING_SIZE
2442
2426
  );
2443
2427
  }
2444
2428
  }
2429
+ const echoed = drained.filter((item) => !item.queueOnly);
2430
+ const messages = drained.map((item) => item.text);
2431
+ const hasQueuedPrompt = entry.pendingPromptList.some(
2432
+ (prompt) => prompt.state === "queued" && !prompt.abortController.signal.aborted
2433
+ );
2434
+ if (echoed.length > 0) {
2435
+ const published = entry.events.publish({
2436
+ type: MID_TURN_MESSAGE_INJECTED_EVENT,
2437
+ ...entry.activePromptId ? { promptId: entry.activePromptId } : {},
2438
+ data: {
2439
+ sessionId: entry.sessionId,
2440
+ messages: echoed.map((item) => item.text),
2441
+ messageIds: echoed.map((item) => item.messageId)
2442
+ }
2443
+ });
2444
+ writeStderrLine(
2445
+ published ? `[mid-turn] session=${entry.sessionId} drained=${messages.length} echoed=${echoed.length} injected into running turn` : `[mid-turn] session=${entry.sessionId} drained=${messages.length} echoed=${echoed.length} echo frame dropped (bus closed); reconciliation required`
2446
+ );
2447
+ }
2445
2448
  return { messages, hasQueuedPrompt };
2446
2449
  }
2447
2450
  async handleExternalToolGuardPrepare(params) {
@@ -6385,6 +6388,7 @@ var SESSION_GENERATION_TIMEOUT_MS = 65e3;
6385
6388
  var GENERATION_STREAM_QUEUE_CAPACITY = 128;
6386
6389
  var SESSION_BTW_TIMEOUT_MS = 6e4;
6387
6390
  var SESSION_TRANSCRIPT_TIMEOUT_MS = 6e4;
6391
+ var MAX_EMPTY_TRANSCRIPT_PAGES = 20;
6388
6392
  var SHELL_COMMAND_TIMEOUT_MS = 12e4;
6389
6393
  var MAX_SHELL_OUTPUT_FOR_HISTORY = 1e4;
6390
6394
  var MAX_MID_TURN_QUEUE_DEPTH = 20;
@@ -8236,6 +8240,8 @@ function createAcpSessionBridge(opts) {
8236
8240
  pendingAgentNotificationCount: 0,
8237
8241
  pendingPromptList: [],
8238
8242
  midTurnMessageQueue: [],
8243
+ settledMidTurnMessageIds: [],
8244
+ promotedMidTurnMessageIds: [],
8239
8245
  modelChangeQueue: Promise.resolve(),
8240
8246
  approvalModeQueue: Promise.resolve(),
8241
8247
  modelPublishGeneration: 0,
@@ -8486,11 +8492,26 @@ function createAcpSessionBridge(opts) {
8486
8492
  for (let attempt = 0; attempt < 2; attempt++) {
8487
8493
  try {
8488
8494
  const lastEventId = entry.events.lastEventId;
8489
- const page = await requestSessionTranscriptPage({
8490
- sessionId: entry.sessionId,
8491
- direction: "backward",
8492
- limit: historyPageSize
8493
- });
8495
+ const seenCursors = /* @__PURE__ */ new Set();
8496
+ let emptyPageCount = 0;
8497
+ let cursor;
8498
+ let page;
8499
+ do {
8500
+ page = await requestSessionTranscriptPage({
8501
+ sessionId: entry.sessionId,
8502
+ ...cursor ? { cursor } : { direction: "backward" },
8503
+ limit: historyPageSize
8504
+ });
8505
+ const nextCursor = page.nextCursor;
8506
+ if (page.events.length === 0 && page.hasMore && (nextCursor === void 0 || seenCursors.has(nextCursor))) {
8507
+ throw new Error("Transcript cursor did not advance");
8508
+ }
8509
+ if (page.events.length === 0 && page.hasMore && ++emptyPageCount >= MAX_EMPTY_TRANSCRIPT_PAGES) {
8510
+ throw new Error("Transcript empty-page limit exceeded");
8511
+ }
8512
+ cursor = nextCursor;
8513
+ if (cursor !== void 0) seenCursors.add(cursor);
8514
+ } while (page.events.length === 0 && page.hasMore && cursor !== void 0 && page.partial !== true && page.replayError === void 0);
8494
8515
  if (byId.get(entry.sessionId) === entry && !entry.promptActive && entry.events.lastEventId === lastEventId) {
8495
8516
  return {
8496
8517
  compactedReplay: page.events,
@@ -8565,14 +8586,22 @@ function createAcpSessionBridge(opts) {
8565
8586
  if (isClosingOrAuthorizingClose(existing)) {
8566
8587
  throw new SessionNotFoundError(
8567
8588
  req.sessionId,
8568
- "The session is closing; retry after close completes"
8589
+ "The session is closing; retry after close completes",
8590
+ "session_closing"
8569
8591
  );
8570
8592
  }
8571
8593
  const replayFields = action === "load" && req.historyPageSize !== void 0 ? await refreshedReplayFieldsFor(existing, req.historyPageSize) : replayFieldsFor(existing, action);
8572
8594
  const historyAnchorRecordId = action === "load" ? await resolveHistoryAnchorRecordId(existing, replayFields) : void 0;
8573
- if (byId.get(req.sessionId) !== existing || isClosingOrAuthorizingClose(existing)) {
8595
+ if (byId.get(req.sessionId) !== existing) {
8574
8596
  throw new SessionNotFoundError(req.sessionId);
8575
8597
  }
8598
+ if (isClosingOrAuthorizingClose(existing)) {
8599
+ throw new SessionNotFoundError(
8600
+ req.sessionId,
8601
+ "The session is closing; retry after close completes",
8602
+ "session_closing"
8603
+ );
8604
+ }
8576
8605
  existing.attachCount++;
8577
8606
  const clientId = registerClient(existing, req.clientId);
8578
8607
  recordAttachRef(existing, clientId);
@@ -8950,7 +8979,8 @@ function createAcpSessionBridge(opts) {
8950
8979
  if (isClosingOrAuthorizingClose(racedEntry)) {
8951
8980
  throw new SessionNotFoundError(
8952
8981
  req.sessionId,
8953
- "The session is closing; retry after close completes"
8982
+ "The session is closing; retry after close completes",
8983
+ "session_closing"
8954
8984
  );
8955
8985
  }
8956
8986
  racedEntry.attachCount += 1 + coalesceState.count;
@@ -9138,7 +9168,8 @@ function createAcpSessionBridge(opts) {
9138
9168
  if (entry.closing) {
9139
9169
  throw new SessionNotFoundError(
9140
9170
  sessionId,
9141
- "The session is already closing"
9171
+ "The session is already closing",
9172
+ "session_closing"
9142
9173
  );
9143
9174
  }
9144
9175
  let originatorClientId;
@@ -9243,6 +9274,36 @@ function createAcpSessionBridge(opts) {
9243
9274
  }
9244
9275
  __name(closeSessionImpl, "closeSessionImpl");
9245
9276
  startSessionReaper();
9277
+ const rememberMidTurnId = /* @__PURE__ */ __name((ring, messageId) => {
9278
+ ring.push(messageId);
9279
+ if (ring.length > MID_TURN_RECONCILIATION_RING_SIZE) {
9280
+ ring.splice(0, ring.length - MID_TURN_RECONCILIATION_RING_SIZE);
9281
+ }
9282
+ }, "rememberMidTurnId");
9283
+ const promoteMidTurnMessage = /* @__PURE__ */ __name((entry, messageId, text, originatorClientId) => {
9284
+ void bridgeApi.sendPrompt(
9285
+ entry.sessionId,
9286
+ {
9287
+ sessionId: entry.sessionId,
9288
+ prompt: [{ type: "text", text }]
9289
+ },
9290
+ void 0,
9291
+ {
9292
+ promptId: messageId,
9293
+ promotedMidTurn: { originatorClientId },
9294
+ // Record the id only once sendPrompt owns its FIFO slot: an
9295
+ // admission failure must not land the id in the reconciliation
9296
+ // ring, or retries would be acked for a message that never runs.
9297
+ onPromptAdmitted: /* @__PURE__ */ __name(() => {
9298
+ rememberMidTurnId(entry.promotedMidTurnMessageIds, messageId);
9299
+ }, "onPromptAdmitted")
9300
+ }
9301
+ ).catch((error) => {
9302
+ writeStderrLine(
9303
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} failed to run promoted message ${JSON.stringify(messageId)}: ${JSON.stringify(error instanceof Error ? error.message : String(error))}`
9304
+ );
9305
+ });
9306
+ }, "promoteMidTurnMessage");
9246
9307
  const bridgeApi = {
9247
9308
  setLiveScreenContextCaptureHandler(handler) {
9248
9309
  liveScreenContextCaptureHandler = handler;
@@ -9389,7 +9450,8 @@ function createAcpSessionBridge(opts) {
9389
9450
  if (isClosingOrAuthorizingClose(existing)) {
9390
9451
  throw new SessionNotFoundError(
9391
9452
  existing.sessionId,
9392
- "The session is closing; retry after close completes"
9453
+ "The session is closing; retry after close completes",
9454
+ "session_closing"
9393
9455
  );
9394
9456
  }
9395
9457
  existing.attachCount++;
@@ -9549,14 +9611,14 @@ function createAcpSessionBridge(opts) {
9549
9611
  return Promise.reject(
9550
9612
  new SessionNotFoundError(
9551
9613
  sessionId,
9552
- "The session is closing; retry after close completes"
9614
+ "The session is closing; retry after close completes",
9615
+ "session_closing"
9553
9616
  )
9554
9617
  );
9555
9618
  }
9556
- const originatorClientId = resolveTrustedClientId(
9557
- entry,
9558
- context?.clientId
9559
- );
9619
+ const promotedMidTurn = context?.promotedMidTurn;
9620
+ const isPromotedMidTurn = promotedMidTurn !== void 0;
9621
+ const originatorClientId = promotedMidTurn ? promotedMidTurn.originatorClientId : resolveTrustedClientId(entry, context?.clientId);
9560
9622
  const modelPrompt = context?.modelPrompt;
9561
9623
  if (modelPrompt !== void 0 && !isValidTrustedModelPrompt(modelPrompt)) {
9562
9624
  throw new TypeError(
@@ -9566,7 +9628,7 @@ function createAcpSessionBridge(opts) {
9566
9628
  if (signal?.aborted) {
9567
9629
  throw new DOMException("Prompt aborted", "AbortError");
9568
9630
  }
9569
- if (entry.pendingPromptCount >= maxPendingPromptsPerSession) {
9631
+ if (!isPromotedMidTurn && entry.pendingPromptCount >= maxPendingPromptsPerSession) {
9570
9632
  throw new PromptQueueFullError(
9571
9633
  maxPendingPromptsPerSession,
9572
9634
  entry.pendingPromptCount,
@@ -9604,6 +9666,7 @@ function createAcpSessionBridge(opts) {
9604
9666
  promptId,
9605
9667
  queuedAt,
9606
9668
  ...originatorClientId !== void 0 ? { originatorClientId } : {},
9669
+ ...isPromotedMidTurn ? { promotedMidTurn: true } : {},
9607
9670
  text: extractPromptText(req.prompt),
9608
9671
  abortController: pendingAbort,
9609
9672
  state: isQueued ? "queued" : "running"
@@ -9697,9 +9760,11 @@ function createAcpSessionBridge(opts) {
9697
9760
  }
9698
9761
  throw new DOMException("Prompt aborted", "AbortError");
9699
9762
  }
9700
- if (pendingEntry.state === "queued") {
9701
- delete entry.todoStopGuardAwaitingQueuedPromptOwnerPromptId;
9702
- pendingEntry.state = "running";
9763
+ if (pendingEntry.state === "queued" || isPromotedMidTurn) {
9764
+ if (pendingEntry.state === "queued") {
9765
+ delete entry.todoStopGuardAwaitingQueuedPromptOwnerPromptId;
9766
+ pendingEntry.state = "running";
9767
+ }
9703
9768
  entry.events.publish({
9704
9769
  type: "pending_prompt_started",
9705
9770
  promptId: pendingEntry.promptId,
@@ -9915,12 +9980,26 @@ function createAcpSessionBridge(opts) {
9915
9980
  }
9916
9981
  }
9917
9982
  }
9983
+ const shouldSettleMidTurnQueue = entry.pendingPromptCount === 1 && !entry.closing && byId.get(entry.sessionId) === entry;
9984
+ const undrainedMessages = shouldSettleMidTurnQueue ? entry.midTurnMessageQueue.splice(0) : [];
9918
9985
  releasePromptSlot();
9919
- if (entry.pendingPromptCount === 0 && entry.midTurnMessageQueue.length > 0) {
9920
- writeStderrLine(
9921
- `[mid-turn] session=${entry.sessionId} dropped ${entry.midTurnMessageQueue.length} undrained message(s) at idle; browser resends next turn`
9986
+ for (const message of undrainedMessages) {
9987
+ if (message.queueOnly) {
9988
+ try {
9989
+ message.onSettledWithoutDrain?.();
9990
+ } catch (error) {
9991
+ writeStderrLine(
9992
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} failed to hand undrained queue-only message ${JSON.stringify(message.messageId)} back to its caller: ${JSON.stringify(error instanceof Error ? error.message : String(error))}`
9993
+ );
9994
+ }
9995
+ continue;
9996
+ }
9997
+ promoteMidTurnMessage(
9998
+ entry,
9999
+ message.messageId,
10000
+ message.text,
10001
+ message.originatorClientId
9922
10002
  );
9923
- entry.midTurnMessageQueue.length = 0;
9924
10003
  }
9925
10004
  void maybeCloseIdleSession(entry, "prompt_settled");
9926
10005
  }).catch(() => {
@@ -11192,7 +11271,7 @@ function createAcpSessionBridge(opts) {
11192
11271
  }
11193
11272
  return { removed: true };
11194
11273
  },
11195
- enqueueMidTurnMessage(sessionId, message, context) {
11274
+ enqueueMidTurnMessage(sessionId, message, context, requestedMessageId, options) {
11196
11275
  const entry = byId.get(sessionId);
11197
11276
  if (!entry) throw new SessionNotFoundError(sessionId);
11198
11277
  const originatorClientId = resolveTrustedClientId(
@@ -11200,43 +11279,139 @@ function createAcpSessionBridge(opts) {
11200
11279
  context?.clientId
11201
11280
  );
11202
11281
  const trimmed = message.trim();
11203
- if (trimmed.length === 0 || entry.pendingPromptCount === 0) {
11282
+ if (trimmed.length === 0) {
11283
+ writeStderrLine(
11284
+ `[mid-turn] session=${entry.sessionId} rejected: empty`
11285
+ );
11286
+ return { accepted: false };
11287
+ }
11288
+ if (requestedMessageId !== void 0) {
11289
+ const existing = entry.midTurnMessageQueue.find(
11290
+ (queued) => queued.messageId === requestedMessageId
11291
+ );
11292
+ if (existing) {
11293
+ if (existing.text === trimmed) {
11294
+ return { accepted: true, messageId: requestedMessageId };
11295
+ }
11296
+ writeStderrLine(
11297
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected id ${JSON.stringify(requestedMessageId)}: text mismatch`
11298
+ );
11299
+ return { accepted: false };
11300
+ }
11301
+ const promoted = entry.pendingPromptList.find(
11302
+ (pending) => pending.promptId === requestedMessageId
11303
+ );
11304
+ if (promoted) {
11305
+ if (promoted.text === trimmed) {
11306
+ return { accepted: true, messageId: requestedMessageId };
11307
+ }
11308
+ writeStderrLine(
11309
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected promoted id ${JSON.stringify(requestedMessageId)}: text mismatch`
11310
+ );
11311
+ return { accepted: false };
11312
+ }
11313
+ if (entry.settledMidTurnMessageIds.includes(requestedMessageId)) {
11314
+ return { accepted: true, messageId: requestedMessageId };
11315
+ }
11316
+ if (entry.promotedMidTurnMessageIds.includes(requestedMessageId)) {
11317
+ return { accepted: true, messageId: requestedMessageId };
11318
+ }
11319
+ }
11320
+ if (isClosingOrAuthorizingClose(entry)) {
11204
11321
  writeStderrLine(
11205
- `[mid-turn] session=${entry.sessionId} rejected: ${trimmed.length === 0 ? "empty message" : "session idle"}; browser keeps it for next turn`
11322
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected: session closing`
11206
11323
  );
11207
11324
  return { accepted: false };
11208
11325
  }
11326
+ const messageId = requestedMessageId ?? randomUUID2();
11327
+ if (entry.pendingPromptCount === 0) {
11328
+ if (options?.queueOnly) {
11329
+ writeStderrLine(
11330
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected id ${JSON.stringify(messageId)}: session idle`
11331
+ );
11332
+ return { accepted: false };
11333
+ }
11334
+ promoteMidTurnMessage(entry, messageId, trimmed, originatorClientId);
11335
+ return { accepted: true, messageId };
11336
+ }
11209
11337
  if (entry.midTurnMessageQueue.length >= MAX_MID_TURN_QUEUE_DEPTH) {
11210
11338
  writeStderrLine(
11211
- `[mid-turn] session=${entry.sessionId} rejected: queue full (depth ${entry.midTurnMessageQueue.length} >= ${MAX_MID_TURN_QUEUE_DEPTH}); browser keeps it for next turn`
11339
+ `[mid-turn] session=${entry.sessionId} rejected: queue full (depth ${entry.midTurnMessageQueue.length} >= ${MAX_MID_TURN_QUEUE_DEPTH})`
11212
11340
  );
11213
11341
  return { accepted: false };
11214
11342
  }
11215
- const messageId = randomUUID2();
11216
- entry.midTurnMessageQueue.push({
11343
+ const queuedMessage = {
11217
11344
  messageId,
11218
11345
  text: trimmed,
11219
- originatorClientId
11220
- });
11346
+ originatorClientId,
11347
+ ...options?.queueOnly ? {
11348
+ queueOnly: true,
11349
+ onSettledWithoutDrain: options.onSettledWithoutDrain
11350
+ } : {}
11351
+ };
11352
+ entry.midTurnMessageQueue.push(queuedMessage);
11353
+ if (originatorClientId) {
11354
+ try {
11355
+ entry.events.publish({
11356
+ type: "pending_prompt_added",
11357
+ promptId: messageId,
11358
+ data: {
11359
+ sessionId,
11360
+ promptId: messageId,
11361
+ text: trimmed,
11362
+ queuedAt: Date.now()
11363
+ },
11364
+ originatorClientId
11365
+ });
11366
+ } catch {
11367
+ }
11368
+ }
11221
11369
  return { accepted: true, messageId };
11222
11370
  },
11223
11371
  removeMidTurnMessage(sessionId, messageId, context) {
11224
11372
  const entry = byId.get(sessionId);
11225
11373
  if (!entry) throw new SessionNotFoundError(sessionId);
11226
- const originatorClientId = resolveTrustedClientId(
11227
- entry,
11228
- context?.clientId
11229
- );
11374
+ resolveTrustedClientId(entry, context?.clientId);
11230
11375
  const index = entry.midTurnMessageQueue.findIndex(
11231
- (message) => message.messageId === messageId && message.originatorClientId === originatorClientId
11376
+ (message) => message.messageId === messageId
11232
11377
  );
11233
11378
  if (index === -1) {
11379
+ const isPromoted = entry.pendingPromptList.some(
11380
+ (pending) => pending.promptId === messageId && pending.promotedMidTurn === true
11381
+ );
11382
+ if (!isPromoted) {
11383
+ writeStderrLine(
11384
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} remove missed messageId=${JSON.stringify(messageId)} (already drained or completed)`
11385
+ );
11386
+ return { removed: false };
11387
+ }
11388
+ const promoted = bridgeApi.removePendingPrompt(
11389
+ sessionId,
11390
+ messageId,
11391
+ context
11392
+ );
11393
+ if (promoted.removed) {
11394
+ rememberMidTurnId(entry.settledMidTurnMessageIds, messageId);
11395
+ return promoted;
11396
+ }
11234
11397
  writeStderrLine(
11235
- `[mid-turn] session=${JSON.stringify(entry.sessionId)} remove missed messageId=${JSON.stringify(messageId)} (already drained or originator mismatch)`
11398
+ `[mid-turn] session=${JSON.stringify(entry.sessionId)} remove missed messageId=${JSON.stringify(messageId)} (already drained or completed)`
11236
11399
  );
11237
11400
  return { removed: false };
11238
11401
  }
11239
- entry.midTurnMessageQueue.splice(index, 1);
11402
+ const [removed] = entry.midTurnMessageQueue.splice(index, 1);
11403
+ rememberMidTurnId(entry.settledMidTurnMessageIds, messageId);
11404
+ if (removed) {
11405
+ try {
11406
+ entry.events.publish({
11407
+ type: "pending_prompt_completed",
11408
+ promptId: messageId,
11409
+ data: { sessionId, promptId: messageId, state: "removed" },
11410
+ ...removed.originatorClientId ? { originatorClientId: removed.originatorClientId } : {}
11411
+ });
11412
+ } catch {
11413
+ }
11414
+ }
11240
11415
  return { removed: true };
11241
11416
  },
11242
11417
  async enqueueBackgroundNotification(sessionId, notification) {
@@ -11266,6 +11441,22 @@ function createAcpSessionBridge(opts) {
11266
11441
  void maybeCloseIdleSession(entry, "agent_notification_settled");
11267
11442
  }
11268
11443
  },
11444
+ getMidTurnMessages(sessionId, context) {
11445
+ const entry = byId.get(sessionId);
11446
+ if (!entry) throw new SessionNotFoundError(sessionId);
11447
+ resolveTrustedClientId(entry, context?.clientId);
11448
+ return {
11449
+ // Anonymous enqueues (live steering) stay off the shared surface:
11450
+ // their delegation text is not a user message other attached clients
11451
+ // should restore into their queue views.
11452
+ messages: entry.midTurnMessageQueue.filter((message) => message.originatorClientId !== void 0).map((message) => ({
11453
+ messageId: message.messageId,
11454
+ text: message.text
11455
+ })),
11456
+ settledMessageIds: [...entry.settledMidTurnMessageIds],
11457
+ promotedMessageIds: [...entry.promotedMidTurnMessageIds]
11458
+ };
11459
+ },
11269
11460
  async generateSessionBtw(sessionId, question, signal, _context) {
11270
11461
  const entry = byId.get(sessionId);
11271
11462
  if (!entry) throw new SessionNotFoundError(sessionId);
@@ -11506,7 +11697,11 @@ function createAcpSessionBridge(opts) {
11506
11697
  const entry = byId.get(sessionId);
11507
11698
  if (!entry) throw new SessionNotFoundError(sessionId);
11508
11699
  if (isClosingOrAuthorizingClose(entry)) {
11509
- throw new SessionNotFoundError(sessionId, "The session is closing");
11700
+ throw new SessionNotFoundError(
11701
+ sessionId,
11702
+ "The session is closing; retry after close completes",
11703
+ "session_closing"
11704
+ );
11510
11705
  }
11511
11706
  const info = channelInfoForEntry(entry);
11512
11707
  if (!info || info.isDying) throw new SessionNotFoundError(sessionId);
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  t
5
- } from "./chunk-WP5VOXF7.js";
5
+ } from "./chunk-UEOKWYGY.js";
6
6
  import {
7
7
  computeThresholds,
8
8
  getCoreSystemPrompt,
9
9
  resolveInteractionMode
10
- } from "./chunk-XX7QFP34.js";
10
+ } from "./chunk-EI3NWELG.js";
11
11
  import {
12
12
  buildSkillLlmContent
13
13
  } from "./chunk-K623ENWT.js";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-MR3PXB6E.js";
13
13
  import {
14
14
  ideContextStore
15
- } from "./chunk-XX7QFP34.js";
15
+ } from "./chunk-EI3NWELG.js";
16
16
  import {
17
17
  require_proper_lockfile
18
18
  } from "./chunk-KRXPRVGL.js";
@@ -2,20 +2,20 @@
2
2
  "use strict";
3
3
  import {
4
4
  appEvents
5
- } from "./chunk-II6G3EY6.js";
5
+ } from "./chunk-7GTMV7UE.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-TZ6KJ44L.js";
11
+ } from "./chunk-KONVMRK7.js";
12
12
  import {
13
13
  loadUndici
14
14
  } from "./chunk-3Z43GZUQ.js";
15
15
  import {
16
16
  IdeClient,
17
17
  getAllProviderBaseUrls
18
- } from "./chunk-XX7QFP34.js";
18
+ } from "./chunk-EI3NWELG.js";
19
19
  import {
20
20
  detectRuntime,
21
21
  getOrCreateSharedDispatcher,
@@ -231,11 +231,11 @@ function startPostRenderPrefetches(config, settings, options = {}) {
231
231
  { updateEventEmitter },
232
232
  { t }
233
233
  ] = await Promise.all([
234
- import("./updateCheck-AXWSO7KA.js"),
235
- import("./handleAutoUpdate-WV6SPZQB.js"),
236
- import("./installationInfo-3YUGIP36.js"),
234
+ import("./updateCheck-LOS5GYFC.js"),
235
+ import("./handleAutoUpdate-NHFSGYTF.js"),
236
+ import("./installationInfo-XXB75T7O.js"),
237
237
  import("./updateEventEmitter-5MKC7BLQ.js"),
238
- import("./i18n-YWJWPQKD.js")
238
+ import("./i18n-Q27KKNDL.js")
239
239
  ]);
240
240
  const updateCheckSkippedMessage = /* @__PURE__ */ __name((error) => t("Update check skipped ({{reason}}) \u2014 run /update to retry.", {
241
241
  reason: describeUpdateCheckFailure(error)
@@ -308,7 +308,7 @@ ${t(
308
308
  state: "connecting"
309
309
  });
310
310
  try {
311
- const { connectIdeForStartup } = await import("./initializer-66OAD6GO.js");
311
+ const { connectIdeForStartup } = await import("./initializer-Y5DJLT43.js");
312
312
  await withTimeout(
313
313
  connectIdeForStartup(config),
314
314
  "ide_connect",
@@ -332,7 +332,7 @@ ${t(
332
332
  }
333
333
  if (config.isInteractive()) {
334
334
  runDeferredTask("background_housekeeping", async () => {
335
- const { startBackgroundHousekeeping } = await import("./scheduler-YNQNOU2E.js");
335
+ const { startBackgroundHousekeeping } = await import("./scheduler-K3D5Z655.js");
336
336
  startBackgroundHousekeeping(config, settings);
337
337
  });
338
338
  }
@@ -2,19 +2,19 @@
2
2
  "use strict";
3
3
  import {
4
4
  getErrorMessage
5
- } from "./chunk-P2FK2HBV.js";
5
+ } from "./chunk-DCZEPFB4.js";
6
6
  import {
7
7
  extensionToOutputString,
8
8
  getExtensionManager
9
- } from "./chunk-HADWBW5R.js";
9
+ } from "./chunk-UMD7WQTR.js";
10
10
  import {
11
11
  loadSettings
12
- } from "./chunk-JUWS2Z5K.js";
12
+ } from "./chunk-ABVRJU3D.js";
13
13
  import {
14
14
  initializeI18n,
15
15
  resolveLanguageSetting,
16
16
  t
17
- } from "./chunk-WP5VOXF7.js";
17
+ } from "./chunk-UEOKWYGY.js";
18
18
  import {
19
19
  writeStderrLine,
20
20
  writeStdoutLine
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  formatHistoryGapNotice,
23
23
  indexGapsByChild
24
- } from "./chunk-UYAUA63Q.js";
24
+ } from "./chunk-ZRBMO3C7.js";
25
25
  import {
26
26
  stringWidth
27
27
  } from "./chunk-2MIN6GRR.js";
@@ -33,11 +33,11 @@ import {
33
33
  } from "./chunk-3SH53ANB.js";
34
34
  import {
35
35
  t
36
- } from "./chunk-WP5VOXF7.js";
36
+ } from "./chunk-UEOKWYGY.js";
37
37
  import {
38
38
  getToolResponseDisplayText,
39
39
  isGoalCheckpointBookkeepingRecord
40
- } from "./chunk-XX7QFP34.js";
40
+ } from "./chunk-EI3NWELG.js";
41
41
  import {
42
42
  stripAnsi
43
43
  } from "./chunk-TWPJO254.js";
@@ -45,7 +45,7 @@ import {
45
45
  GoalPersistenceUnavailableError,
46
46
  parseGoalStateRecordPayloadV2,
47
47
  projectUserTranscriptForDisplay
48
- } from "./chunk-67N6HB5H.js";
48
+ } from "./chunk-QUI267ZP.js";
49
49
  import {
50
50
  ToolDisplayNames
51
51
  } from "./chunk-PYQADEFD.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  CHANNEL_STARTUP_PROFILE_VERSION
5
- } from "./chunk-M2PNLYGY.js";
5
+ } from "./chunk-W5UC37EE.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";