@qwen-code/qwen-code 0.21.10 → 0.21.11

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 (367) hide show
  1. package/bundled/coordinate/SKILL.md +52 -0
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +10 -8
  3. package/bundled/qc-helper/docs/extension/_meta.ts +1 -0
  4. package/bundled/qc-helper/docs/extension/agent-plugins.md +50 -0
  5. package/bundled/qc-helper/docs/extension/extension-releasing.md +3 -3
  6. package/bundled/qc-helper/docs/extension/introduction.md +17 -3
  7. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  8. package/bundled/qc-helper/docs/features/arena.md +4 -3
  9. package/bundled/qc-helper/docs/features/commands.md +7 -6
  10. package/bundled/qc-helper/docs/features/dual-output.md +5 -0
  11. package/bundled/qc-helper/docs/features/headless.md +8 -0
  12. package/bundled/qc-helper/docs/features/multi-agent-coordination.md +30 -0
  13. package/bundled/qc-helper/docs/qwen-serve.md +7 -7
  14. package/bundled/review/SKILL.md +17 -7
  15. package/chunks/{MaxSizedBox-FKXYULMW.js → MaxSizedBox-G7QPSZTF.js} +45 -44
  16. package/chunks/{StandaloneSessionPicker-OQS3M7AY.js → StandaloneSessionPicker-3CTEPV7S.js} +65 -64
  17. package/chunks/{acp-startup-profiler-VNTFWYAC.js → acp-startup-profiler-JMJBZDVO.js} +2 -2
  18. package/chunks/{acpAgent-AGS6HLQQ.js → acpAgent-43JURWOW.js} +1107 -285
  19. package/chunks/{agent-4NCVO27U.js → agent-MIY4LJJJ.js} +42 -41
  20. package/chunks/agent-headless-LWVA6GR5.js +87 -0
  21. package/chunks/{anthropicContentGenerator-D3Y4RFT4.js → anthropicContentGenerator-7HEP7Q5D.js} +8 -8
  22. package/chunks/{artifact-tool-N652YE4L.js → artifact-tool-M7UAJ5NT.js} +2 -2
  23. package/chunks/{askUserQuestion-ONW74PKJ.js → askUserQuestion-7G3LI3IZ.js} +2 -2
  24. package/chunks/{bridge-FHINXZMN.js → bridge-PTTJEBNP.js} +47 -46
  25. package/chunks/{ca-ZLKAB4K3.js → ca-4CQ6MYNQ.js} +2 -1
  26. package/chunks/{channel-management-service-PHELKOW2.js → channel-management-service-PQ6SU56M.js} +6 -6
  27. package/chunks/channel-settings-store-IKK34GMH.js +102 -0
  28. package/chunks/{channel-worker-group-WQP4RCDO.js → channel-worker-group-WBRE33ZV.js} +8 -7
  29. package/chunks/{channel-worker-manager-MRDFAKIM.js → channel-worker-manager-V4LYVTPH.js} +8 -7
  30. package/chunks/{channel-worker-supervisor-IVSDIMI4.js → channel-worker-supervisor-YDAGW2RP.js} +6 -5
  31. package/chunks/{chunk-2PLNY5TN.js → chunk-23GFHEM3.js} +4 -4
  32. package/chunks/{chunk-IIJEYBNH.js → chunk-25OFRBH2.js} +188 -58
  33. package/chunks/{chunk-F24A2JBM.js → chunk-2AAFGCWP.js} +690 -151
  34. package/chunks/{chunk-J6SZID63.js → chunk-2AZMF6G5.js} +2 -2
  35. package/chunks/{chunk-6LP743KE.js → chunk-2R2HYSUQ.js} +21 -102
  36. package/chunks/{chunk-DZUO626D.js → chunk-2XZWO53E.js} +3 -3
  37. package/chunks/{chunk-VKJ4KTPJ.js → chunk-3GCU5O2E.js} +1 -1
  38. package/chunks/{chunk-AQAJJMRR.js → chunk-3LHYTQ2R.js} +1 -1
  39. package/chunks/{chunk-QJMOAMXT.js → chunk-3SOTXJNO.js} +8 -8
  40. package/chunks/{chunk-URKIBIFC.js → chunk-45HPDU3F.js} +3 -3
  41. package/chunks/{chunk-OWMAZHIX.js → chunk-47FQVRCO.js} +1 -1
  42. package/chunks/{chunk-Z4JX4NSH.js → chunk-4C4QSXE3.js} +23 -23
  43. package/chunks/{chunk-IRZ2ZH72.js → chunk-4EX3DBFH.js} +4 -4
  44. package/chunks/{chunk-MFDYOYZZ.js → chunk-4MHDNGAV.js} +25 -2
  45. package/chunks/{chunk-ABVRJU3D.js → chunk-4PFKN7CQ.js} +7 -7
  46. package/chunks/{chunk-HV76SFIA.js → chunk-5HBFERG5.js} +3 -3
  47. package/chunks/{chunk-WAUGQKUU.js → chunk-6LYDH7VT.js} +9 -5
  48. package/chunks/{chunk-S6HYI3MF.js → chunk-6S52N6PG.js} +2 -2
  49. package/chunks/{chunk-FVKHVJZQ.js → chunk-732MOPEM.js} +1 -1
  50. package/chunks/{chunk-OCSFNUU4.js → chunk-7QE3QFU3.js} +8 -8
  51. package/chunks/{chunk-WCG5O7IP.js → chunk-7SUQZ7QH.js} +2 -2
  52. package/chunks/{chunk-QG3FFJYU.js → chunk-AAOONL5N.js} +1 -1
  53. package/chunks/{chunk-VSFKIRRW.js → chunk-AKLY5M2C.js} +4 -4
  54. package/chunks/{chunk-UVX4Y6IN.js → chunk-AQHNAA7E.js} +1 -1
  55. package/chunks/{chunk-IBUGFUXC.js → chunk-BIXG46YI.js} +12 -12
  56. package/chunks/{chunk-4TRQPFDP.js → chunk-BJKREW56.js} +6 -8
  57. package/chunks/{chunk-D27I6YJT.js → chunk-BNRNVMOT.js} +27 -18
  58. package/chunks/{chunk-IWTMYQ32.js → chunk-BR6TUEKJ.js} +9 -8
  59. package/chunks/{chunk-Q3JQ7OSU.js → chunk-BTYS2JAY.js} +1 -1
  60. package/chunks/{chunk-H6XPXXMH.js → chunk-CQ35AJ4Z.js} +252 -254
  61. package/chunks/{chunk-COBO5EBO.js → chunk-CTQE2NB2.js} +1 -1
  62. package/chunks/{chunk-P3BJLFSZ.js → chunk-DEKY5Y7V.js} +3 -3
  63. package/chunks/{chunk-Y3OVRWRY.js → chunk-DM4C3OX5.js} +1 -1
  64. package/chunks/{chunk-YWPSGJFI.js → chunk-DSKLWQHC.js} +2 -2
  65. package/chunks/{chunk-KKBPOU75.js → chunk-EFIMD5VA.js} +1 -1
  66. package/chunks/{chunk-CTJLZLB5.js → chunk-EN2J77G7.js} +1 -1
  67. package/chunks/{chunk-67EWJE77.js → chunk-ENEEQMGM.js} +1 -1
  68. package/chunks/{chunk-AEL7KN2O.js → chunk-EOBM4T2Z.js} +1 -1
  69. package/chunks/{chunk-NDU63YLI.js → chunk-ESVSQKPY.js} +4 -4
  70. package/chunks/{chunk-CPG6P4GG.js → chunk-EYS3GGM3.js} +1 -1
  71. package/chunks/{chunk-4PYCZH2V.js → chunk-EYW54TBD.js} +3 -3
  72. package/chunks/{chunk-EBZ6BJTF.js → chunk-F4T5J34H.js} +1 -1
  73. package/chunks/{chunk-FOGU3LJX.js → chunk-F6AOBFUN.js} +1 -1
  74. package/chunks/{chunk-ZBVS26BY.js → chunk-FPGTNKCP.js} +7 -5
  75. package/chunks/{chunk-YF5MALI4.js → chunk-G64M7R2Y.js} +5 -5
  76. package/chunks/{chunk-EI3HZX6C.js → chunk-GJJQV4PY.js} +1 -1
  77. package/chunks/{chunk-CKASRHZI.js → chunk-GLWWPFTW.js} +1 -1
  78. package/chunks/{chunk-GM463R2B.js → chunk-GZGDJ4E6.js} +1 -1
  79. package/chunks/{chunk-W5UC37EE.js → chunk-HHGQGTJQ.js} +2 -0
  80. package/chunks/chunk-HHJLM3WQ.js +41 -0
  81. package/chunks/{chunk-ZRBMO3C7.js → chunk-HMCSRTDY.js} +1 -1
  82. package/chunks/{chunk-L2AFWWJE.js → chunk-HUE2M6VI.js} +50 -5
  83. package/chunks/{chunk-LLCWZQCU.js → chunk-HZV75ET2.js} +3 -3
  84. package/chunks/{chunk-6ZRFAKXK.js → chunk-IEP44U2R.js} +1 -1
  85. package/chunks/{chunk-AOHJKPKL.js → chunk-IQFYO5BF.js} +1 -1
  86. package/chunks/{chunk-UDXSXLER.js → chunk-IW6RQPQB.js} +14 -4
  87. package/chunks/{chunk-XCWO3SMQ.js → chunk-IX7CFQGA.js} +3 -3
  88. package/chunks/{chunk-O3EU6GMH.js → chunk-J4EVBAB3.js} +27 -4
  89. package/chunks/{chunk-ZZCWJWTF.js → chunk-JHMFKJEP.js} +1 -1
  90. package/chunks/{chunk-XVHYA33G.js → chunk-JKEO6OQY.js} +4 -4
  91. package/chunks/{chunk-6Q5ABMTU.js → chunk-JLYYGKRN.js} +23 -19
  92. package/chunks/{chunk-KID7K6H2.js → chunk-JOXXPM3X.js} +6 -6
  93. package/chunks/{chunk-E2FPSSKP.js → chunk-JPA7IDTE.js} +57 -13
  94. package/chunks/{chunk-OQTXYMKW.js → chunk-JS4Q5NG5.js} +3 -3
  95. package/chunks/{chunk-PBRVUF5B.js → chunk-K7JW6V5O.js} +1 -1
  96. package/chunks/{chunk-3P2LV43B.js → chunk-KCCODSAA.js} +3 -3
  97. package/chunks/{chunk-DREZZAZM.js → chunk-KCDQGIHS.js} +13 -5
  98. package/chunks/{chunk-UEOKWYGY.js → chunk-KFCTC5IJ.js} +11 -11
  99. package/chunks/{chunk-M6HMMKVG.js → chunk-KPVVWKF3.js} +1 -1
  100. package/chunks/{chunk-MVUQRLOH.js → chunk-KT4OWAAZ.js} +3 -3
  101. package/chunks/{chunk-W4RQUHY3.js → chunk-L2GTEEEU.js} +142 -23
  102. package/chunks/{chunk-Q3AL4JQ3.js → chunk-LA3FF7RO.js} +2 -2
  103. package/chunks/{chunk-DX3RGJMS.js → chunk-LT532KF4.js} +71 -12
  104. package/chunks/{chunk-JT7XS4YW.js → chunk-M2NMFAFR.js} +1 -1
  105. package/chunks/{chunk-YTFDX4PR.js → chunk-M6NDLY2T.js} +1 -1
  106. package/chunks/{chunk-MIKXJYZB.js → chunk-MCHGE3EC.js} +305 -291
  107. package/chunks/{chunk-Y4R47ZUH.js → chunk-MDQSCFAZ.js} +7 -7
  108. package/chunks/{chunk-EKPKKXY2.js → chunk-MLZCPGDX.js} +1 -1
  109. package/chunks/{chunk-OIVKILPI.js → chunk-MPBRV3UU.js} +3 -0
  110. package/chunks/{chunk-VFMASYQA.js → chunk-MS7GNABG.js} +3 -0
  111. package/chunks/{chunk-2FRY5CRX.js → chunk-MWZYNOCG.js} +3 -3
  112. package/chunks/{chunk-ONSZH6VM.js → chunk-MZQ4I4AP.js} +2 -2
  113. package/chunks/{chunk-UMD7WQTR.js → chunk-N3ZWGKXN.js} +10 -8
  114. package/chunks/{chunk-7MH4J33A.js → chunk-N7NBMAMW.js} +2 -2
  115. package/chunks/{chunk-EUNWC2VS.js → chunk-NC4O6UE6.js} +2 -2
  116. package/chunks/{chunk-A7XMDZRI.js → chunk-NFSSQDB5.js} +5 -5
  117. package/chunks/{chunk-DCZEPFB4.js → chunk-NM3E6GGL.js} +3 -3
  118. package/chunks/{chunk-26CXSA6V.js → chunk-NQPYPDOY.js} +2 -2
  119. package/chunks/{chunk-HUWENAHO.js → chunk-NWPO6I7V.js} +1 -1
  120. package/chunks/{chunk-SR7RZ4MS.js → chunk-O4BBDP2G.js} +2 -2
  121. package/chunks/{chunk-ECWR5LQR.js → chunk-OC5SKSNX.js} +3 -3
  122. package/chunks/{chunk-VWKER4ZH.js → chunk-OGQERNHD.js} +3 -3
  123. package/chunks/{chunk-DA4HRSBW.js → chunk-OPBATTFQ.js} +1 -1
  124. package/chunks/{chunk-OONWZLFK.js → chunk-P7KCJGBR.js} +4 -4
  125. package/chunks/{chunk-OJUQF2PL.js → chunk-PBYVS6QT.js} +3 -3
  126. package/chunks/{chunk-VNNWAZSI.js → chunk-QG2IEE2E.js} +3 -3
  127. package/chunks/{chunk-KZ22NXBY.js → chunk-QGZN4RYB.js} +4 -4
  128. package/chunks/{chunk-2UUMVNYT.js → chunk-QTI7SRXI.js} +3 -3
  129. package/chunks/{chunk-B2GJNDTV.js → chunk-QUESTNOP.js} +1 -1
  130. package/chunks/{chunk-AAE6SR4Q.js → chunk-RUKNJEJO.js} +1 -1
  131. package/chunks/{chunk-NV65ZUVM.js → chunk-RUVZZKDH.js} +1 -1
  132. package/chunks/{chunk-QUI267ZP.js → chunk-SAQHDAUJ.js} +42 -8
  133. package/chunks/{chunk-4MKXUHXY.js → chunk-SUTP6CZA.js} +5 -5
  134. package/chunks/{chunk-UBX6NL47.js → chunk-T4576UW4.js} +3 -3
  135. package/chunks/{chunk-TZEZYNYD.js → chunk-T4FTABSW.js} +1 -1
  136. package/chunks/{chunk-SEZ556DZ.js → chunk-T6W4KACQ.js} +1 -1
  137. package/chunks/chunk-TKAEODJR.js +1279 -0
  138. package/chunks/{chunk-NV3F44FL.js → chunk-TNQLAI6I.js} +2 -2
  139. package/chunks/{chunk-F6WDTQ3M.js → chunk-TNS2M7VL.js} +5 -5
  140. package/chunks/{chunk-7GTMV7UE.js → chunk-TTB6GBJ6.js} +8323 -2227
  141. package/chunks/{chunk-YGT2AUJ7.js → chunk-U2JLICUY.js} +33 -16
  142. package/chunks/{chunk-NEOXOWYH.js → chunk-U7QUDFPD.js} +7 -7
  143. package/chunks/{chunk-QGNOFE5E.js → chunk-UEUE6LJX.js} +1 -1
  144. package/chunks/{chunk-EI3NWELG.js → chunk-UIZGNLBP.js} +4427 -3806
  145. package/chunks/{chunk-ZJ4W6SUY.js → chunk-UM57UTTV.js} +3 -3
  146. package/chunks/{chunk-EQL65XGA.js → chunk-V3LXMASR.js} +47 -21
  147. package/chunks/{chunk-LHEC5V6G.js → chunk-VRWOMUZM.js} +2 -2
  148. package/chunks/{chunk-5MZCSWI4.js → chunk-W2ITCESM.js} +176 -477
  149. package/chunks/{chunk-KONVMRK7.js → chunk-W2PNY24B.js} +1 -1
  150. package/chunks/{chunk-4WL6SY4F.js → chunk-X5GLCWPX.js} +1 -1
  151. package/chunks/{chunk-BSI645OU.js → chunk-XBLYC4MI.js} +3 -3
  152. package/chunks/{chunk-GNPNYXJB.js → chunk-XLQS3VI6.js} +2 -2
  153. package/chunks/{chunk-TRRF5BSP.js → chunk-XT6TGJFD.js} +1 -1
  154. package/chunks/{chunk-PYQADEFD.js → chunk-XTH2OMDS.js} +1 -1
  155. package/chunks/{chunk-47PEPJO7.js → chunk-XUMBOJC2.js} +3 -3
  156. package/chunks/{chunk-GWVUR3QZ.js → chunk-YIKMBYMT.js} +3 -3
  157. package/chunks/{chunk-WOJZWRAZ.js → chunk-YRLW2MSX.js} +1 -1
  158. package/chunks/{chunk-NRLFZWCT.js → chunk-YVVIFFU4.js} +3 -3
  159. package/chunks/chunk-Z7B6SRPM.js +32 -0
  160. package/chunks/{chunk-IA7TGCN2.js → chunk-ZV4XVYL3.js} +4 -4
  161. package/chunks/{chunk-PJRW65JO.js → chunk-ZWPWQEF5.js} +1 -1
  162. package/chunks/{computer-use-WQFK33Z3.js → computer-use-7TIKEXBX.js} +42 -41
  163. package/chunks/{config-utils-ULCSRMWD.js → config-utils-6MVJ54TY.js} +6 -6
  164. package/chunks/{contextCommand-7EOZND7C.js → contextCommand-5QKI7MRY.js} +44 -43
  165. package/chunks/{core-runtime-FGMQRM6E.js → core-runtime-USS7ZF3H.js} +42 -41
  166. package/chunks/{create-sub-session-QIDZUOPU.js → create-sub-session-Y4WYDZGC.js} +2 -2
  167. package/chunks/{create-sub-session-QM2K5HLZ.js → create-sub-session-ZD2F3BH2.js} +42 -41
  168. package/chunks/{cron-create-VONA5JYY.js → cron-create-ZOVA3CC2.js} +4 -4
  169. package/chunks/{cron-delete-5JXSP2MI.js → cron-delete-7Z3H4LJY.js} +4 -4
  170. package/chunks/{cron-list-KE4F2CIR.js → cron-list-UHGX3IQG.js} +4 -4
  171. package/chunks/{daemon-GWD7BT6E.js → daemon-Y3NOHFKQ.js} +38 -7
  172. package/chunks/daemon-status-provider-PMP4J7BC.js +103 -0
  173. package/chunks/daemon-trust-policy-2252VKXI.js +99 -0
  174. package/chunks/{daemon-trust-policy-monitor-6UKEABN5.js → daemon-trust-policy-monitor-OSGGKJXT.js} +49 -48
  175. package/chunks/{de-LIW4XVLN.js → de-UBEBKG6V.js} +2 -1
  176. package/chunks/{deferred-core-runtime-67GJXHXS.js → deferred-core-runtime-3VD4V6YZ.js} +42 -41
  177. package/chunks/{display-image-NQRSIBXM.js → display-image-ZE3GZNIK.js} +4 -4
  178. package/chunks/{dist-Z3CS4OVP.js → dist-AVUYBK7L.js} +11 -5
  179. package/chunks/{dist-6BMOAE3Z.js → dist-BNWP6IZL.js} +4 -4
  180. package/chunks/{dist-3NTTUAHT.js → dist-EFJILGIS.js} +3 -3
  181. package/chunks/{dist-EZE3V3Q7.js → dist-MAIUUIWN.js} +3 -3
  182. package/chunks/{dist-B2CGTW6T.js → dist-NPS52B2V.js} +3 -3
  183. package/chunks/{dist-J47AXBZC.js → dist-PKSRQAR2.js} +3 -3
  184. package/chunks/{dist-OTUO3AS2.js → dist-Q2WJ2IZU.js} +13 -5
  185. package/chunks/{dist-EWW3J4HQ.js → dist-ZWDH5HLS.js} +3 -3
  186. package/chunks/{earlyInputCapture-IWMYR6OB.js → earlyInputCapture-ER4HGLJN.js} +43 -42
  187. package/chunks/{edit-ZFGROCAF.js → edit-B3MT7O53.js} +42 -41
  188. package/chunks/{en-SY5GTIGX.js → en-X6YV7GME.js} +2 -1
  189. package/chunks/{enter-worktree-TZZZCDM5.js → enter-worktree-WVIYVSDJ.js} +42 -41
  190. package/chunks/{enterPlanMode-U77BI3R6.js → enterPlanMode-DDCIM6HA.js} +42 -41
  191. package/chunks/{environment-HC37DS2I.js → environment-LITGMOUP.js} +45 -44
  192. package/chunks/{errors-6AG54JPD.js → errors-E5CIOR2I.js} +44 -43
  193. package/chunks/{exit-worktree-UYYWFPNK.js → exit-worktree-NQ2A6URE.js} +42 -41
  194. package/chunks/exitPlanMode-YXSWN4D3.js +85 -0
  195. package/chunks/{fast-path-F5FSZ3O7.js → fast-path-PH3DBS6X.js} +3 -3
  196. package/chunks/{fast-path-settings-RPAVBD7P.js → fast-path-settings-LNOFM2YP.js} +2 -2
  197. package/chunks/{fr-RQFO7U4P.js → fr-VENTC2BS.js} +2 -1
  198. package/chunks/{gemini-NKQHYM36.js → gemini-4YPO4ADY.js} +88 -87
  199. package/chunks/{geminiContentGenerator-HCWZOUX3.js → geminiContentGenerator-GMSVVXOU.js} +6 -6
  200. package/chunks/{glob-3PDXKBAO.js → glob-3Y3VHLM2.js} +42 -41
  201. package/chunks/{goal-tools-SWNB6GP4.js → goal-tools-JDK2SNMV.js} +4 -4
  202. package/chunks/{grep-5HZKZYVD.js → grep-VUHUDZYG.js} +42 -41
  203. package/chunks/handleAutoUpdate-OBFFPWSJ.js +94 -0
  204. package/chunks/{i18n-Q27KKNDL.js → i18n-4PJA5KKU.js} +43 -42
  205. package/chunks/{image-gen-2Z2RJ6W7.js → image-gen-4IFV4HES.js} +10 -10
  206. package/chunks/initializer-ZTY3VSWL.js +100 -0
  207. package/chunks/{installationInfo-XXB75T7O.js → installationInfo-6USRNCD2.js} +43 -42
  208. package/chunks/{ja-KOZKHJHZ.js → ja-QHT4EQTO.js} +2 -1
  209. package/chunks/{keychain-token-storage-TVAMTNP7.js → keychain-token-storage-JTWUYFU7.js} +2 -2
  210. package/chunks/list-U2ZDKYWN.js +103 -0
  211. package/chunks/{list-agents-Z4WABFDZ.js → list-agents-4GQ2XNEU.js} +2 -2
  212. package/chunks/loadedSettingsAdapter-WW4HIVLO.js +97 -0
  213. package/chunks/{loggingContentGenerator-6NTFBM7Q.js → loggingContentGenerator-XXG6YWUE.js} +46 -27
  214. package/chunks/{loop-wakeup-UZ5RL5Y2.js → loop-wakeup-HOQI3K5D.js} +5 -5
  215. package/chunks/{ls-TVHDGIES.js → ls-O4VBQRG7.js} +4 -4
  216. package/chunks/{lsp-CVN6OQPI.js → lsp-APQJ5ZEZ.js} +2 -2
  217. package/chunks/{managed-npm-update-SPHYQUWZ.js → managed-npm-update-7GM2LPLL.js} +43 -42
  218. package/chunks/mcp-7KZW2T5P.js +97 -0
  219. package/chunks/{monitor-ZBBPAA54.js → monitor-RQROQHLD.js} +42 -41
  220. package/chunks/nonInteractiveCli-U7JNJGS6.js +163 -0
  221. package/chunks/{notebook-edit-5W3FW7Z2.js → notebook-edit-XQA6YCH2.js} +42 -41
  222. package/chunks/{openaiContentGenerator-TQANPEVZ.js → openaiContentGenerator-BZW2IB42.js} +29 -29
  223. package/chunks/{pidfile-EQOBLH4E.js → pidfile-NX5VZ3IK.js} +43 -42
  224. package/chunks/{processUtils-7XQG7EHS.js → processUtils-M635AD23.js} +2 -2
  225. package/chunks/{pt-U6AOCTMF.js → pt-VL3I5RNY.js} +2 -1
  226. package/chunks/{qwenContentGenerator-BKCPHHXU.js → qwenContentGenerator-KHJ73E2C.js} +48 -48
  227. package/chunks/{qwenOAuth2-BJ6PQKE6.js → qwenOAuth2-QMK25XO7.js} +9 -9
  228. package/chunks/read-file-6LKIKKXD.js +32 -0
  229. package/chunks/{read-mcp-resource-PZ4ZF6YL.js → read-mcp-resource-TJSJRH4F.js} +2 -2
  230. package/chunks/{record-artifact-P4HFMS7X.js → record-artifact-FXF5LHPE.js} +3 -3
  231. package/chunks/{resumeHistoryUtils-6N6XGJJW.js → resumeHistoryUtils-RR2KEVH5.js} +49 -48
  232. package/chunks/ripGrep-CF2WRBYV.js +85 -0
  233. package/chunks/{ru-CMX4UMYP.js → ru-4RCKL4PY.js} +2 -1
  234. package/chunks/{run-qwen-serve-BCKBCAMX.js → run-qwen-serve-L5TF57J4.js} +61 -50
  235. package/chunks/{runtime-E2437YKL.js → runtime-3RE3BPR4.js} +55 -54
  236. package/chunks/{scheduler-K3D5Z655.js → scheduler-LXQZAMYT.js} +44 -43
  237. package/chunks/{sdk-exporters-http-XVTZQRCE.js → sdk-exporters-http-7SYSCGEO.js} +3 -3
  238. package/chunks/{sdk-impl-7W7AKCS4.js → sdk-impl-VZI6M6EH.js} +6 -6
  239. package/chunks/{send-message-CAMSLG2L.js → send-message-RBYLV5NY.js} +6 -6
  240. package/chunks/{serve-IH4XR5IL.js → serve-5D4S7GIA.js} +49 -48
  241. package/chunks/{server-UD6INW7J.js → server-ILZB6TTC.js} +403 -178
  242. package/chunks/{session-GR4ZEVW4.js → session-SXCZITZ4.js} +114 -94
  243. package/chunks/{settings-5O24D3OJ.js → settings-4RQB3OVF.js} +48 -47
  244. package/chunks/{shell-UTLWLG5G.js → shell-FCTR3OI2.js} +42 -41
  245. package/chunks/{skill-QQAZL4VO.js → skill-IAKHPD5H.js} +19 -19
  246. package/chunks/{skill-settings-P3YHJVBZ.js → skill-settings-SOR23NOP.js} +48 -47
  247. package/chunks/spawnChannel-I6VAWYQJ.js +98 -0
  248. package/chunks/{standalone-update-QP742MGP.js → standalone-update-5NN3MTYH.js} +44 -43
  249. package/chunks/{startInteractiveUI-YCS6AEPN.js → startInteractiveUI-OYGL3NZJ.js} +590 -329
  250. package/chunks/{syntheticOutput-PEBJQYJV.js → syntheticOutput-D3Z64LJC.js} +3 -3
  251. package/chunks/{task-create-5NWCQSJF.js → task-create-URFZ5EUX.js} +10 -10
  252. package/chunks/{task-list-53265TRZ.js → task-list-6JDFMPUW.js} +5 -5
  253. package/chunks/{task-stop-FPCOIRYX.js → task-stop-HHUGCD25.js} +2 -2
  254. package/chunks/{task-update-5HN577LS.js → task-update-LCJM3EYG.js} +10 -10
  255. package/chunks/{team-create-WFH7OCDQ.js → team-create-J4JP6AXN.js} +44 -43
  256. package/chunks/{team-delete-MMQB4OSC.js → team-delete-PZGGBQLM.js} +5 -5
  257. package/chunks/{team-plan-approval-EGTT53MV.js → team-plan-approval-7BEAIR2H.js} +42 -41
  258. package/chunks/{terminal-image-renderer-BWRESAQ7.js → terminal-image-renderer-SGGTG5LN.js} +44 -43
  259. package/chunks/theme-manager-67TSB7LH.js +89 -0
  260. package/chunks/{todoWrite-JGV6VLOX.js → todoWrite-WINAZSZI.js} +4 -4
  261. package/chunks/{tool-search-TI5PTIBF.js → tool-search-XPOFDWOX.js} +19 -19
  262. package/chunks/{total-session-admission-66UDSOHO.js → total-session-admission-SZJFAM25.js} +47 -46
  263. package/chunks/{trustedFolders-4KYHA4IG.js → trustedFolders-44NTYYV4.js} +43 -42
  264. package/chunks/{update-relaunch-WB6LGIF2.js → update-relaunch-K33Q3WEH.js} +5 -5
  265. package/chunks/{updateCheck-LOS5GYFC.js → updateCheck-VBRNPLS4.js} +45 -44
  266. package/chunks/{useAutoAcceptIndicator-MHAPY52L.js → useAutoAcceptIndicator-AUNRB5S7.js} +52 -51
  267. package/chunks/{validateNonInterActiveAuth-QV22HNQU.js → validateNonInterActiveAuth-WTO36MTA.js} +83 -82
  268. package/chunks/{version-DALWZHKQ.js → version-JZA6HYPI.js} +1 -1
  269. package/chunks/{web-fetch-JMJVMYFE.js → web-fetch-LLHPV2IR.js} +19 -19
  270. package/chunks/{web-search-DNDUIPU5.js → web-search-4HCHRZ3U.js} +11 -11
  271. package/chunks/{workflow-JGNN64PM.js → workflow-YI74QTWW.js} +43 -42
  272. package/chunks/workspace-providers-status-CI3AO2BH.js +100 -0
  273. package/chunks/{workspace-registration-store-LRJG7QA4.js → workspace-registration-store-KPIKXDHA.js} +1 -1
  274. package/chunks/{workspace-registry-KVXIFM36.js → workspace-registry-XE22QDE6.js} +47 -46
  275. package/chunks/{workspace-service-PO4AAKKT.js → workspace-service-WI2FD72A.js} +54 -53
  276. package/chunks/workspace-skills-status-FFZU6FXL.js +100 -0
  277. package/chunks/{workspace-trust-reconciler-DOZPCVHG.js → workspace-trust-reconciler-GJLNXR2U.js} +54 -53
  278. package/chunks/write-file-IEAC3XC3.js +87 -0
  279. package/chunks/{zh-AGL2FVBI.js → zh-LMSTK4WD.js} +2 -1
  280. package/chunks/{zh-TW-KI66MHQY.js → zh-TW-SQ4HTSCW.js} +2 -1
  281. package/chunks/{zoom-image-CNC77ZMA.js → zoom-image-GTVVT25J.js} +15 -15
  282. package/cli.js +13 -13
  283. package/locales/ca.js +1 -0
  284. package/locales/de.js +1 -0
  285. package/locales/en.js +1 -0
  286. package/locales/fr.js +1 -0
  287. package/locales/ja.js +1 -0
  288. package/locales/pt.js +1 -0
  289. package/locales/ru.js +1 -0
  290. package/locales/zh-TW.js +1 -0
  291. package/locales/zh.js +1 -0
  292. package/package.json +3 -3
  293. package/web-shell/assets/{arc-CDk0d60K.js → arc-B13-S0Yo.js} +1 -1
  294. package/web-shell/assets/{architectureDiagram-3BPJPVTR-h-W3I2lP.js → architectureDiagram-3BPJPVTR-CHvWNlVW.js} +1 -1
  295. package/web-shell/assets/{blockDiagram-GPEHLZMM-D1pvSmZg.js → blockDiagram-GPEHLZMM-CXebOlXF.js} +1 -1
  296. package/web-shell/assets/{c4Diagram-AAUBKEIU-ByAm5ZNf.js → c4Diagram-AAUBKEIU-BQpx4y3Q.js} +1 -1
  297. package/web-shell/assets/channel-BB_Hm8Rf.js +1 -0
  298. package/web-shell/assets/{chunk-2J33WTMH-VrGPPOGV.js → chunk-2J33WTMH-Cak1exSv.js} +1 -1
  299. package/web-shell/assets/{chunk-4BX2VUAB-B7hTowgG.js → chunk-4BX2VUAB-BIc8BV5_.js} +1 -1
  300. package/web-shell/assets/{chunk-55IACEB6-j1Fq8DpE.js → chunk-55IACEB6-DoeJ5BL1.js} +1 -1
  301. package/web-shell/assets/{chunk-727SXJPM-UjABYpF2.js → chunk-727SXJPM-BDR_wYSu.js} +1 -1
  302. package/web-shell/assets/{chunk-AQP2D5EJ-D4uBItrs.js → chunk-AQP2D5EJ-BhRRGRq1.js} +1 -1
  303. package/web-shell/assets/{chunk-FMBD7UC4-DeFbKlb8.js → chunk-FMBD7UC4-BJGAwVXr.js} +1 -1
  304. package/web-shell/assets/{chunk-ND2GUHAM-rQJ8TIgT.js → chunk-ND2GUHAM-vhE73bsD.js} +1 -1
  305. package/web-shell/assets/{chunk-QZHKN3VN-DAGcRxvq.js → chunk-QZHKN3VN-BuTBZsdR.js} +1 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-B_hFK54Y.js +1 -0
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B_hFK54Y.js +1 -0
  308. package/web-shell/assets/{cose-bilkent-S5V4N54A-MaE7MJSt.js → cose-bilkent-S5V4N54A-CVHKipHP.js} +1 -1
  309. package/web-shell/assets/{dagre-BM42HDAG-DzijYGSb.js → dagre-BM42HDAG-C1DPa8SV.js} +1 -1
  310. package/web-shell/assets/{diagram-2AECGRRQ-WdbG7WnX.js → diagram-2AECGRRQ-BYP_QxkT.js} +1 -1
  311. package/web-shell/assets/{diagram-5GNKFQAL-NYutsBnw.js → diagram-5GNKFQAL-Cray7ruQ.js} +1 -1
  312. package/web-shell/assets/{diagram-KO2AKTUF-Dqg0eBY0.js → diagram-KO2AKTUF-Ds4vJANi.js} +1 -1
  313. package/web-shell/assets/{diagram-LMA3HP47-C7vRP2Lb.js → diagram-LMA3HP47-DxFrDykH.js} +1 -1
  314. package/web-shell/assets/{diagram-OG6HWLK6-B2sEPpPt.js → diagram-OG6HWLK6-BdIO-pF_.js} +1 -1
  315. package/web-shell/assets/{erDiagram-TEJ5UH35-a4zIbzm8.js → erDiagram-TEJ5UH35-5JA8KDYV.js} +1 -1
  316. package/web-shell/assets/{flowDiagram-I6XJVG4X-BK9y89ya.js → flowDiagram-I6XJVG4X-DL4drKro.js} +1 -1
  317. package/web-shell/assets/{ganttDiagram-6RSMTGT7-wUQTSNvV.js → ganttDiagram-6RSMTGT7-ijX2DD6_.js} +1 -1
  318. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Dnzt4SAi.js → gitGraphDiagram-PVQCEYII-_lPsFLFF.js} +1 -1
  319. package/web-shell/assets/index-BTwNYZkp.js +1785 -0
  320. package/web-shell/assets/{index-BA3wUcKL.js → index-C-YoqYbs.js} +1 -1
  321. package/web-shell/assets/index-dHAFxPHb.css +5 -0
  322. package/web-shell/assets/{infoDiagram-5YYISTIA-DcaoToij.js → infoDiagram-5YYISTIA-COFClLab.js} +1 -1
  323. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DzduqhP2.js → ishikawaDiagram-YF4QCWOH-Div9KOgO.js} +1 -1
  324. package/web-shell/assets/{journeyDiagram-JHISSGLW-BvviZR_O.js → journeyDiagram-JHISSGLW-VAw5u0wc.js} +1 -1
  325. package/web-shell/assets/{kanban-definition-UN3LZRKU-Efm2JxY3.js → kanban-definition-UN3LZRKU-CncCn8Nl.js} +1 -1
  326. package/web-shell/assets/{linear-DtY3IbOs.js → linear-D6ad7e_k.js} +1 -1
  327. package/web-shell/assets/{mermaid.core-PzpFqoMe.js → mermaid.core-BV1IECGb.js} +5 -5
  328. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BLlTkHS0.js → mindmap-definition-RKZ34NQL-a3jeNgPr.js} +1 -1
  329. package/web-shell/assets/{pieDiagram-4H26LBE5-D-mKF-jE.js → pieDiagram-4H26LBE5-DsVRY5BW.js} +1 -1
  330. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DYCzslGm.js → quadrantDiagram-W4KKPZXB-D6zgexJK.js} +1 -1
  331. package/web-shell/assets/{requirementDiagram-4Y6WPE33-Dfpxlk7R.js → requirementDiagram-4Y6WPE33-VEpSwJjn.js} +1 -1
  332. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-D5cRaaxh.js → sankeyDiagram-5OEKKPKP-CYEuOFne.js} +1 -1
  333. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-s04DReiS.js → sequenceDiagram-3UESZ5HK-CCg0lI-9.js} +1 -1
  334. package/web-shell/assets/{stateDiagram-AJRCARHV-01UNFgnb.js → stateDiagram-AJRCARHV-BHXPsL0B.js} +1 -1
  335. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-eTG8D0QT.js +1 -0
  336. package/web-shell/assets/{timeline-definition-PNZ67QCA-DX8_wZBC.js → timeline-definition-PNZ67QCA-gqTf9a0k.js} +1 -1
  337. package/web-shell/assets/{vennDiagram-CIIHVFJN-BK0FlBme.js → vennDiagram-CIIHVFJN-C4DXXkBh.js} +1 -1
  338. package/web-shell/assets/{wardley-L42UT6IY-DkPc9UlD.js → wardley-L42UT6IY-CMK46EiX.js} +1 -1
  339. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DNKkpDAo.js → wardleyDiagram-YWT4CUSO-DTk1Gzt9.js} +1 -1
  340. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CiPwg8QG.js → xychartDiagram-2RQKCTM6-BcJsM1dH.js} +1 -1
  341. package/web-shell/index.html +2 -2
  342. package/chunks/agent-headless-HYEHZFH6.js +0 -86
  343. package/chunks/channel-settings-store-OXYG5S5X.js +0 -101
  344. package/chunks/chunk-I5VM3SKY.js +0 -451
  345. package/chunks/chunk-PDPFQ2FO.js +0 -156
  346. package/chunks/daemon-status-provider-L3J6GKCT.js +0 -102
  347. package/chunks/daemon-trust-policy-4PHPY23S.js +0 -98
  348. package/chunks/exitPlanMode-RWJR2KGB.js +0 -84
  349. package/chunks/handleAutoUpdate-NHFSGYTF.js +0 -93
  350. package/chunks/initializer-Y5DJLT43.js +0 -99
  351. package/chunks/list-YHNQ32CS.js +0 -102
  352. package/chunks/loadedSettingsAdapter-GHUQK7H4.js +0 -96
  353. package/chunks/mcp-EA3KO6FS.js +0 -96
  354. package/chunks/nonInteractiveCli-NNOR56HU.js +0 -162
  355. package/chunks/read-file-KKTXGIZD.js +0 -32
  356. package/chunks/ripGrep-SJVAAYDV.js +0 -84
  357. package/chunks/spawnChannel-UAQMH6Y6.js +0 -94
  358. package/chunks/theme-manager-ZNDGAHJN.js +0 -88
  359. package/chunks/workspace-providers-status-K22B3Z6B.js +0 -99
  360. package/chunks/workspace-skills-status-DDYCBVSH.js +0 -99
  361. package/chunks/write-file-TT6MWIKC.js +0 -86
  362. package/web-shell/assets/channel-DPFUV4oi.js +0 -1
  363. package/web-shell/assets/classDiagram-4FO5ZUOK-CLm0hVvw.js +0 -1
  364. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CLm0hVvw.js +0 -1
  365. package/web-shell/assets/index-BjC3yjjL.css +0 -5
  366. package/web-shell/assets/index-QzFq6w7o.js +0 -1775
  367. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DXb5olqv.js +0 -1
@@ -5,7 +5,7 @@ import {
5
5
  openQwenAsrRealtimeStream,
6
6
  openVoiceStream,
7
7
  openVoiceStreamWithRetry
8
- } from "./chunk-Q3JQ7OSU.js";
8
+ } from "./chunk-BTYS2JAY.js";
9
9
  import {
10
10
  GENERATION_MAX_PROMPT_BYTES,
11
11
  LIVE_SESSION_SOURCE_PREFIX,
@@ -26,7 +26,7 @@ import {
26
26
  shouldSuppressRememberErrorDetails,
27
27
  workspaceMemoryFailureCode,
28
28
  workspaceMemoryFailureDiagnostics
29
- } from "./chunk-6LP743KE.js";
29
+ } from "./chunk-2R2HYSUQ.js";
30
30
  import {
31
31
  SetupGithubError,
32
32
  collectSessionData,
@@ -38,18 +38,17 @@ import {
38
38
  toJson,
39
39
  toJsonl,
40
40
  toMarkdown
41
- } from "./chunk-5MZCSWI4.js";
41
+ } from "./chunk-W2ITCESM.js";
42
42
  import {
43
43
  OBSERVED_CONTACT_MAX_FRESH_WITHIN_SECONDS,
44
44
  ObservedChannelContactStore
45
- } from "./chunk-OWMAZHIX.js";
46
- import "./chunk-ZRBMO3C7.js";
45
+ } from "./chunk-47FQVRCO.js";
46
+ import "./chunk-HMCSRTDY.js";
47
47
  import {
48
48
  escapeAnsiCtrlCodes
49
49
  } from "./chunk-4NFY2S7N.js";
50
50
  import "./chunk-2MIN6GRR.js";
51
51
  import "./chunk-QHTIBUWB.js";
52
- import "./chunk-EKTCKZV5.js";
53
52
  import "./chunk-3Z43GZUQ.js";
54
53
  import {
55
54
  CAPABILITIES_SCHEMA_VERSION,
@@ -107,7 +106,7 @@ import {
107
106
  setRateLimiter,
108
107
  unsafeRevealSecret,
109
108
  validateMcpRuntimeServerName
110
- } from "./chunk-ZZCWJWTF.js";
109
+ } from "./chunk-JHMFKJEP.js";
111
110
  import "./chunk-VGHZT6JR.js";
112
111
  import {
113
112
  isLoopbackBind,
@@ -128,14 +127,14 @@ import {
128
127
  validateWorkspaceSkillName,
129
128
  validateWorkspaceVoiceState,
130
129
  voiceSettingsScopeToWire
131
- } from "./chunk-OCSFNUU4.js";
130
+ } from "./chunk-7QE3QFU3.js";
132
131
  import {
133
132
  PermissionRulesValidationError,
134
133
  buildPermissionSettings,
135
134
  isPermissionRuleType,
136
135
  normalizePermissionRules,
137
136
  readPermissionRuleSet
138
- } from "./chunk-Y3OVRWRY.js";
137
+ } from "./chunk-DM4C3OX5.js";
139
138
  import {
140
139
  assertVoiceBaseUrlNetworkAllowed,
141
140
  isStreamingVoiceModel,
@@ -143,13 +142,13 @@ import {
143
142
  resolveVoiceTranscriptionConfig,
144
143
  sanitizeVoiceErrorMessage,
145
144
  transcribeVoiceAudio
146
- } from "./chunk-LLCWZQCU.js";
145
+ } from "./chunk-HZV75ET2.js";
147
146
  import {
148
147
  isVoiceEnabled,
149
148
  isVoiceMode,
150
149
  readVoiceModel
151
- } from "./chunk-EBZ6BJTF.js";
152
- import "./chunk-AOHJKPKL.js";
150
+ } from "./chunk-F4T5J34H.js";
151
+ import "./chunk-IQFYO5BF.js";
153
152
  import {
154
153
  createTotalSessionAdmissionController
155
154
  } from "./chunk-X2UOOG5V.js";
@@ -166,26 +165,26 @@ import {
166
165
  } from "./chunk-4JRM2BSM.js";
167
166
  import {
168
167
  assertValidChannelSecretUpdates
169
- } from "./chunk-NRLFZWCT.js";
168
+ } from "./chunk-YVVIFFU4.js";
170
169
  import {
171
170
  createDaemonStatusProvider
172
- } from "./chunk-OONWZLFK.js";
171
+ } from "./chunk-P7KCJGBR.js";
173
172
  import "./chunk-NTTBXH7U.js";
174
- import "./chunk-VSFKIRRW.js";
173
+ import "./chunk-AKLY5M2C.js";
175
174
  import "./chunk-3SH53ANB.js";
176
175
  import {
177
176
  createWorkspaceProvidersStatusProvider
178
- } from "./chunk-QJMOAMXT.js";
177
+ } from "./chunk-3SOTXJNO.js";
179
178
  import {
180
179
  getAuthTypeFromEnv,
181
180
  resolveCliGenerationConfig
182
- } from "./chunk-2PLNY5TN.js";
181
+ } from "./chunk-23GFHEM3.js";
183
182
  import {
184
183
  snapshotProcessEnv
185
- } from "./chunk-P3BJLFSZ.js";
184
+ } from "./chunk-DEKY5Y7V.js";
186
185
  import {
187
186
  createWorkspaceSkillsStatusProvider
188
- } from "./chunk-VWKER4ZH.js";
187
+ } from "./chunk-OGQERNHD.js";
189
188
  import "./chunk-BGXZBI5B.js";
190
189
  import "./chunk-Z4X5MTRT.js";
191
190
  import {
@@ -204,20 +203,20 @@ import {
204
203
  import {
205
204
  evaluateDaemonWorkspaceTrust,
206
205
  readDaemonTrustPolicySnapshot
207
- } from "./chunk-47PEPJO7.js";
206
+ } from "./chunk-XUMBOJC2.js";
208
207
  import {
209
208
  daemonObservedContactsPath,
210
209
  loadChannelsConfig
211
- } from "./chunk-NEOXOWYH.js";
212
- import "./chunk-UMD7WQTR.js";
210
+ } from "./chunk-U7QUDFPD.js";
211
+ import "./chunk-N3ZWGKXN.js";
213
212
  import "./chunk-57OAHC2Y.js";
214
213
  import {
215
214
  parseChannelWebhookConfigLenient
216
- } from "./chunk-LHEC5V6G.js";
217
- import "./chunk-67EWJE77.js";
215
+ } from "./chunk-VRWOMUZM.js";
216
+ import "./chunk-ENEEQMGM.js";
218
217
  import {
219
218
  supportedChannelCatalog
220
- } from "./chunk-E2FPSSKP.js";
219
+ } from "./chunk-JPA7IDTE.js";
221
220
  import {
222
221
  LIVE_HOST_BUNDLE_ID,
223
222
  LIVE_HOST_PROTOCOL_VERSION,
@@ -228,7 +227,7 @@ import {
228
227
  SessionArtifactValidationError,
229
228
  createAcpSessionBridge,
230
229
  parseSessionSource
231
- } from "./chunk-F24A2JBM.js";
230
+ } from "./chunk-2AAFGCWP.js";
232
231
  import {
233
232
  EVENT_SCHEMA_VERSION,
234
233
  EventBus,
@@ -236,13 +235,13 @@ import {
236
235
  } from "./chunk-MZSJ43WV.js";
237
236
  import "./chunk-XCGIMOLN.js";
238
237
  import "./chunk-OCPBI7J5.js";
239
- import "./chunk-I5VM3SKY.js";
238
+ import "./chunk-TKAEODJR.js";
240
239
  import {
241
240
  STATUS_SCHEMA_VERSION,
242
241
  SessionRestoreTimeoutError,
243
242
  createIdleWorkspaceMemoryStatus,
244
243
  mapDomainErrorToErrorKind
245
- } from "./chunk-DA4HRSBW.js";
244
+ } from "./chunk-OPBATTFQ.js";
246
245
  import "./chunk-K6KS3LTN.js";
247
246
  import "./chunk-FC4KQFCS.js";
248
247
  import "./chunk-T3CHYWJZ.js";
@@ -254,11 +253,12 @@ import {
254
253
  WorkspaceRegistrationStoreLimitError,
255
254
  normalizeWorkspaceDisplayName,
256
255
  workspaceRegistrationId
257
- } from "./chunk-QGNOFE5E.js";
256
+ } from "./chunk-UEUE6LJX.js";
258
257
  import {
258
+ DAEMON_PROMPT_DISPLAY_TEXT_META_KEY,
259
259
  REQUESTED_SESSION_ID_META_KEY,
260
260
  gradeActiveWorkCoverage
261
- } from "./chunk-W5UC37EE.js";
261
+ } from "./chunk-HHGQGTJQ.js";
262
262
  import {
263
263
  BranchWhilePromptActiveError,
264
264
  BridgeChannelQuarantinedError,
@@ -299,6 +299,10 @@ import {
299
299
  canonicalizeWorkspaces,
300
300
  translateAndCheckAbsoluteWorkspacePath
301
301
  } from "./chunk-6PLDPT2C.js";
302
+ import {
303
+ CHANNEL_WORKER_PROMPT_AUTHORIZATION_META_KEY,
304
+ isChannelWorkerPromptAuthorized
305
+ } from "./chunk-Z7B6SRPM.js";
302
306
  import {
303
307
  ChannelDeliveryError,
304
308
  MAX_CHANNEL_STARTUP_FAILURES,
@@ -311,7 +315,7 @@ import {
311
315
  } from "./chunk-YP5KH5Y7.js";
312
316
  import {
313
317
  normalizeWorkerDiagnostic
314
- } from "./chunk-PBRVUF5B.js";
318
+ } from "./chunk-K7JW6V5O.js";
315
319
  import {
316
320
  normalizeServeChannelSelection
317
321
  } from "./chunk-ALMR3E6Q.js";
@@ -323,8 +327,8 @@ import "./chunk-BKHCW2BI.js";
323
327
  import "./chunk-5HBA2Z7V.js";
324
328
  import {
325
329
  sanitizeLogText
326
- } from "./chunk-DX3RGJMS.js";
327
- import "./chunk-UDXSXLER.js";
330
+ } from "./chunk-LT532KF4.js";
331
+ import "./chunk-IW6RQPQB.js";
328
332
  import {
329
333
  getDialogSettingKeys,
330
334
  getModelProvidersOwnerScope,
@@ -334,26 +338,26 @@ import {
334
338
  getWritableScopes,
335
339
  loadSettings,
336
340
  validateSettingValue
337
- } from "./chunk-ABVRJU3D.js";
338
- import "./chunk-UBX6NL47.js";
341
+ } from "./chunk-4PFKN7CQ.js";
342
+ import "./chunk-T4576UW4.js";
339
343
  import "./chunk-RKUWKYED.js";
340
344
  import "./chunk-GOXKNSDZ.js";
341
345
  import "./chunk-IDS7MSUP.js";
342
346
  import {
343
347
  detectSystemLanguage,
344
348
  resolveLanguageSetting
345
- } from "./chunk-UEOKWYGY.js";
349
+ } from "./chunk-KFCTC5IJ.js";
346
350
  import {
347
351
  SUPPORTED_LANGUAGES,
348
352
  resolveSupportedLanguage
349
353
  } from "./chunk-5EJZE3FP.js";
350
- import "./chunk-ZJ4W6SUY.js";
351
- import "./chunk-VFMASYQA.js";
352
- import "./chunk-AEL7KN2O.js";
354
+ import "./chunk-UM57UTTV.js";
355
+ import "./chunk-MS7GNABG.js";
356
+ import "./chunk-EOBM4T2Z.js";
353
357
  import "./chunk-VJNBRRZG.js";
354
358
  import {
355
359
  getWorkspaceTrustStatus
356
- } from "./chunk-GWVUR3QZ.js";
360
+ } from "./chunk-YIKMBYMT.js";
357
361
  import "./chunk-NPQ5ZKRP.js";
358
362
  import {
359
363
  isWithinRoot as isWithinRoot2
@@ -433,20 +437,20 @@ import {
433
437
  writeWorkspaceContextFile,
434
438
  writeWorktreeSession,
435
439
  writeWorktreeSessionMarker
436
- } from "./chunk-EI3NWELG.js";
440
+ } from "./chunk-UIZGNLBP.js";
437
441
  import "./chunk-GOFAQQZA.js";
438
442
  import "./chunk-5M6IDOMF.js";
439
443
  import "./chunk-TWPJO254.js";
440
- import "./chunk-H6XPXXMH.js";
444
+ import "./chunk-CQ35AJ4Z.js";
441
445
  import {
442
446
  MAX_JOBS,
443
447
  nextDurableFireMs
444
- } from "./chunk-2UUMVNYT.js";
445
- import "./chunk-MVUQRLOH.js";
446
- import "./chunk-XCWO3SMQ.js";
447
- import "./chunk-7MH4J33A.js";
448
+ } from "./chunk-QTI7SRXI.js";
449
+ import "./chunk-KT4OWAAZ.js";
450
+ import "./chunk-IX7CFQGA.js";
451
+ import "./chunk-N7NBMAMW.js";
448
452
  import "./chunk-6PVPNMXU.js";
449
- import "./chunk-TRRF5BSP.js";
453
+ import "./chunk-XT6TGJFD.js";
450
454
  import {
451
455
  nextFireTime,
452
456
  parseCron
@@ -459,22 +463,22 @@ import {
459
463
  readCronTasks,
460
464
  taskHasLegacyCondition,
461
465
  updateCronTasks
462
- } from "./chunk-GNPNYXJB.js";
463
- import "./chunk-HUWENAHO.js";
466
+ } from "./chunk-XLQS3VI6.js";
467
+ import "./chunk-NWPO6I7V.js";
464
468
  import "./chunk-O6GEWCJA.js";
465
469
  import "./chunk-T26EAKDL.js";
466
470
  import "./chunk-ZPJWUGCS.js";
467
471
  import "./chunk-CPBF7KYF.js";
468
- import "./chunk-J6SZID63.js";
472
+ import "./chunk-2AZMF6G5.js";
469
473
  import "./chunk-KRXPRVGL.js";
470
- import "./chunk-GM463R2B.js";
471
- import "./chunk-SEZ556DZ.js";
472
- import "./chunk-2FRY5CRX.js";
473
- import "./chunk-QUI267ZP.js";
474
+ import "./chunk-GZGDJ4E6.js";
475
+ import "./chunk-T6W4KACQ.js";
476
+ import "./chunk-MWZYNOCG.js";
477
+ import "./chunk-SAQHDAUJ.js";
474
478
  import {
475
479
  APPROVAL_MODES
476
- } from "./chunk-WAUGQKUU.js";
477
- import "./chunk-DZUO626D.js";
480
+ } from "./chunk-6LYDH7VT.js";
481
+ import "./chunk-2XZWO53E.js";
478
482
  import {
479
483
  addDaemonRequestAttribute,
480
484
  captureDaemonTelemetryContext,
@@ -486,20 +490,21 @@ import {
486
490
  recordDaemonHttpResponse,
487
491
  runWithDaemonTelemetryContext,
488
492
  withDaemonRequestSpan
489
- } from "./chunk-4TRQPFDP.js";
493
+ } from "./chunk-BJKREW56.js";
490
494
  import "./chunk-SAH4BD2J.js";
491
- import "./chunk-CPG6P4GG.js";
495
+ import "./chunk-25OFRBH2.js";
496
+ import "./chunk-EYS3GGM3.js";
492
497
  import "./chunk-S6LOFUVP.js";
493
498
  import "./chunk-2J3OJGTL.js";
494
499
  import {
495
500
  SubagentError,
496
501
  SubagentErrorCode
497
- } from "./chunk-IA7TGCN2.js";
502
+ } from "./chunk-ZV4XVYL3.js";
498
503
  import "./chunk-K623ENWT.js";
499
504
  import {
500
505
  escapeXml
501
506
  } from "./chunk-AQ37AY7B.js";
502
- import "./chunk-EQL65XGA.js";
507
+ import "./chunk-V3LXMASR.js";
503
508
  import {
504
509
  QwenOAuth2Client,
505
510
  QwenOAuthPollError,
@@ -508,19 +513,19 @@ import {
508
513
  isDeviceAuthorizationSuccess,
509
514
  isDeviceTokenPending,
510
515
  isDeviceTokenSuccess
511
- } from "./chunk-3P2LV43B.js";
516
+ } from "./chunk-KCCODSAA.js";
512
517
  import "./chunk-NAVJD2PQ.js";
513
- import "./chunk-HV76SFIA.js";
514
- import "./chunk-4PYCZH2V.js";
518
+ import "./chunk-5HBFERG5.js";
519
+ import "./chunk-EYW54TBD.js";
515
520
  import "./chunk-P3QQPMQA.js";
516
- import "./chunk-SR7RZ4MS.js";
517
- import "./chunk-M6HMMKVG.js";
521
+ import "./chunk-O4BBDP2G.js";
522
+ import "./chunk-KPVVWKF3.js";
518
523
  import "./chunk-KM73TBQ4.js";
519
524
  import "./chunk-MPHPFVKK.js";
520
525
  import "./chunk-AXMWHKXA.js";
521
526
  import "./chunk-GLCZKT5V.js";
522
527
  import "./chunk-DJ2GSRLV.js";
523
- import "./chunk-EI3HZX6C.js";
528
+ import "./chunk-GJJQV4PY.js";
524
529
  import "./chunk-CR3C7WXL.js";
525
530
  import "./chunk-XWRJCPHC.js";
526
531
  import {
@@ -533,30 +538,30 @@ import {
533
538
  isWithinRoot,
534
539
  parseLineTolerant,
535
540
  read
536
- } from "./chunk-YGT2AUJ7.js";
537
- import "./chunk-WOJZWRAZ.js";
541
+ } from "./chunk-U2JLICUY.js";
542
+ import "./chunk-YRLW2MSX.js";
538
543
  import "./chunk-VGC4I5JJ.js";
539
- import "./chunk-FVKHVJZQ.js";
540
- import "./chunk-COBO5EBO.js";
541
- import "./chunk-6ZRFAKXK.js";
542
- import "./chunk-PYQADEFD.js";
543
- import "./chunk-Y4R47ZUH.js";
544
+ import "./chunk-732MOPEM.js";
545
+ import "./chunk-CTQE2NB2.js";
546
+ import "./chunk-IEP44U2R.js";
547
+ import "./chunk-XTH2OMDS.js";
548
+ import "./chunk-MDQSCFAZ.js";
544
549
  import "./chunk-F6WFNA7U.js";
545
550
  import "./chunk-46UV252V.js";
546
- import "./chunk-ZBVS26BY.js";
547
- import "./chunk-KKBPOU75.js";
548
- import "./chunk-EUNWC2VS.js";
549
- import "./chunk-FOGU3LJX.js";
550
- import "./chunk-L2AFWWJE.js";
551
- import "./chunk-W4RQUHY3.js";
552
- import "./chunk-PDPFQ2FO.js";
551
+ import "./chunk-FPGTNKCP.js";
552
+ import "./chunk-EFIMD5VA.js";
553
+ import "./chunk-NC4O6UE6.js";
554
+ import "./chunk-F6AOBFUN.js";
555
+ import "./chunk-HUE2M6VI.js";
556
+ import "./chunk-HHJLM3WQ.js";
557
+ import "./chunk-L2GTEEEU.js";
553
558
  import {
554
559
  FatalConfigError,
555
560
  Storage,
556
561
  createDebugLogger,
557
562
  getErrorMessage,
558
563
  runWithoutDebugLogSession
559
- } from "./chunk-OIVKILPI.js";
564
+ } from "./chunk-MPBRV3UU.js";
560
565
  import "./chunk-VOQXFAY5.js";
561
566
  import {
562
567
  writeStderrLine,
@@ -9839,20 +9844,31 @@ var AcpDispatcher = class {
9839
9844
  if ("error" in parsedSource) {
9840
9845
  throw new AcpParamError(parsedSource.error);
9841
9846
  }
9842
- const result = await listWorkspaceSessionsForResponse(
9843
- this.bridge,
9844
- workspaceCwd,
9845
- {
9846
- cursor,
9847
- size: metaSize,
9848
- archiveState,
9849
- view,
9850
- group,
9851
- parentSessionId,
9852
- ...parsedSource
9853
- },
9854
- { runtimeBaseDir: this.sessionRuntimeBaseDir }
9855
- );
9847
+ let result;
9848
+ try {
9849
+ conn.abortSignal.throwIfAborted();
9850
+ result = await listWorkspaceSessionsForResponse(
9851
+ this.bridge,
9852
+ workspaceCwd,
9853
+ {
9854
+ cursor,
9855
+ size: metaSize,
9856
+ archiveState,
9857
+ view,
9858
+ group,
9859
+ parentSessionId,
9860
+ ...parsedSource
9861
+ },
9862
+ {
9863
+ runtimeBaseDir: this.sessionRuntimeBaseDir,
9864
+ signal: conn.abortSignal
9865
+ }
9866
+ );
9867
+ conn.abortSignal.throwIfAborted();
9868
+ } catch (error2) {
9869
+ if (conn.abortSignal.aborted) return;
9870
+ throw error2;
9871
+ }
9856
9872
  this.replyConn(conn, id, {
9857
9873
  sessions: result.sessions.map((s) => ({
9858
9874
  sessionId: s.sessionId,
@@ -20288,15 +20304,15 @@ var legacySessionTelemetryRoutes = [
20288
20304
  },
20289
20305
  {
20290
20306
  method: "GET",
20291
- path: "/session/:id/subagents/:toolCallId",
20307
+ path: "/session/:id/subagents/:subagentRef",
20292
20308
  attribution: "handler_resolved",
20293
- route: "GET /session/:id/subagents/:toolCallId"
20309
+ route: "GET /session/:id/subagents/:subagentRef"
20294
20310
  },
20295
20311
  {
20296
20312
  method: "POST",
20297
- path: "/session/:id/subagents/:toolCallId/cancel",
20313
+ path: "/session/:id/subagents/:subagentRef/cancel",
20298
20314
  attribution: "handler_resolved",
20299
- route: "POST /session/:id/subagents/:toolCallId/cancel"
20315
+ route: "POST /session/:id/subagents/:subagentRef/cancel"
20300
20316
  },
20301
20317
  {
20302
20318
  method: "GET",
@@ -20418,6 +20434,12 @@ var legacySessionTelemetryRoutes = [
20418
20434
  attribution: "handler_resolved",
20419
20435
  route: "POST /session/:id/model"
20420
20436
  },
20437
+ {
20438
+ method: "POST",
20439
+ path: "/session/:id/config-option",
20440
+ attribution: "handler_resolved",
20441
+ route: "POST /session/:id/config-option"
20442
+ },
20421
20443
  {
20422
20444
  method: "POST",
20423
20445
  path: "/session/:id/recap",
@@ -21033,7 +21055,8 @@ var PersistedSessionListCache = class {
21033
21055
  }
21034
21056
  slots = /* @__PURE__ */ new Map();
21035
21057
  retainedSummaries = 0;
21036
- lookup(scope, loader) {
21058
+ lookup(scope, loader, options = {}) {
21059
+ options.signal?.throwIfAborted();
21037
21060
  const key = this.key(scope);
21038
21061
  let slot = this.slots.get(key);
21039
21062
  if (!slot) {
@@ -21044,27 +21067,43 @@ var PersistedSessionListCache = class {
21044
21067
  if (slot.value) {
21045
21068
  const cacheAgeMs = Math.max(0, now - slot.value.completedAt);
21046
21069
  if (cacheAgeMs < this.ttlMs) {
21070
+ const snapshot = slot.value.snapshot;
21047
21071
  return {
21048
21072
  status: "cache_hit",
21049
- promise: Promise.resolve(slot.value.snapshot),
21073
+ promise: Promise.resolve().then(() => {
21074
+ options.signal?.throwIfAborted();
21075
+ return snapshot;
21076
+ }),
21050
21077
  cacheAgeMs
21051
21078
  };
21052
21079
  }
21053
21080
  this.removeValue(slot);
21054
21081
  }
21055
- if (slot.inFlight !== void 0 && slot.inFlight.generation === slot.generation) {
21082
+ if (slot.inFlight !== void 0 && slot.inFlight.generation === slot.generation && !slot.inFlight.controller.signal.aborted) {
21056
21083
  return {
21057
21084
  status: "single_flight",
21058
- promise: slot.inFlight.promise
21085
+ promise: this.attachWaiter(key, slot, slot.inFlight, options.signal)
21059
21086
  };
21060
21087
  }
21061
21088
  const generation = slot.generation;
21062
- const managed = Promise.resolve().then(loader).then(
21089
+ const controller = new AbortController();
21090
+ const load = {
21091
+ generation,
21092
+ controller,
21093
+ promise: void 0,
21094
+ waiterCount: 0,
21095
+ settled: false
21096
+ };
21097
+ const managed = Promise.resolve().then(() => {
21098
+ controller.signal.throwIfAborted();
21099
+ return loader(controller.signal);
21100
+ }).then(
21063
21101
  (snapshot) => {
21102
+ load.settled = true;
21064
21103
  const current = this.slots.get(key);
21065
- if (current === slot && current.inFlight?.promise === managed) {
21104
+ if (current === slot && current.inFlight === load) {
21066
21105
  current.inFlight = void 0;
21067
- if (current.generation === generation && snapshot.sessions.length <= this.maxRetainedSummaries) {
21106
+ if (current.generation === generation && !controller.signal.aborted && snapshot.sessions.length <= this.maxRetainedSummaries) {
21068
21107
  this.installValue(key, current, snapshot);
21069
21108
  } else if (current.value === void 0) {
21070
21109
  this.slots.delete(key);
@@ -21073,16 +21112,21 @@ var PersistedSessionListCache = class {
21073
21112
  return snapshot;
21074
21113
  },
21075
21114
  (error2) => {
21115
+ load.settled = true;
21076
21116
  const current = this.slots.get(key);
21077
- if (current === slot && current.inFlight?.promise === managed) {
21117
+ if (current === slot && current.inFlight === load) {
21078
21118
  current.inFlight = void 0;
21079
21119
  if (current.value === void 0) this.slots.delete(key);
21080
21120
  }
21081
21121
  throw error2;
21082
21122
  }
21083
21123
  );
21084
- slot.inFlight = { generation, promise: managed };
21085
- return { status: "scan", promise: managed };
21124
+ load.promise = managed;
21125
+ slot.inFlight = load;
21126
+ return {
21127
+ status: "scan",
21128
+ promise: this.attachWaiter(key, slot, load, options.signal)
21129
+ };
21086
21130
  }
21087
21131
  invalidate(scope) {
21088
21132
  const key = this.key(scope);
@@ -21136,6 +21180,39 @@ var PersistedSessionListCache = class {
21136
21180
  this.retainedSummaries -= value.snapshot.sessions.length;
21137
21181
  slot.value = void 0;
21138
21182
  }
21183
+ attachWaiter(key, slot, load, signal) {
21184
+ load.waiterCount += 1;
21185
+ return new Promise((resolve5, reject) => {
21186
+ let settled = false;
21187
+ const settle = /* @__PURE__ */ __name((finish) => {
21188
+ if (settled) return;
21189
+ settled = true;
21190
+ signal?.removeEventListener("abort", onAbort);
21191
+ load.waiterCount -= 1;
21192
+ if (load.waiterCount === 0 && !load.settled) {
21193
+ load.controller.abort(
21194
+ new DOMException("No active session list waiters", "AbortError")
21195
+ );
21196
+ const current = this.slots.get(key);
21197
+ if (current === slot && current.inFlight === load) {
21198
+ current.inFlight = void 0;
21199
+ if (current.value === void 0) this.slots.delete(key);
21200
+ }
21201
+ }
21202
+ finish();
21203
+ }, "settle");
21204
+ const onAbort = /* @__PURE__ */ __name(() => {
21205
+ if (load.settled) return;
21206
+ settle(() => reject(signal?.reason));
21207
+ }, "onAbort");
21208
+ signal?.addEventListener("abort", onAbort, { once: true });
21209
+ if (signal?.aborted) onAbort();
21210
+ void load.promise.then(
21211
+ (snapshot) => settle(() => resolve5(snapshot)),
21212
+ (error2) => settle(() => reject(error2))
21213
+ );
21214
+ });
21215
+ }
21139
21216
  key(scope) {
21140
21217
  return JSON.stringify([
21141
21218
  path10.resolve(scope.runtimeBaseDir),
@@ -21257,15 +21334,21 @@ function encodeMetadataSessionCursor(last, filter, archiveState) {
21257
21334
  ).toString("base64url");
21258
21335
  }
21259
21336
  __name(encodeMetadataSessionCursor, "encodeMetadataSessionCursor");
21260
- async function enrichWorktreeSidecars(bySessionId, sessionService, archiveState = "active") {
21337
+ async function enrichWorktreeSidecars(bySessionId, sessionService, archiveState = "active", signal) {
21261
21338
  for (const [sessionId, summary] of bySessionId) {
21339
+ signal?.throwIfAborted();
21262
21340
  if (summary.worktree) continue;
21263
- const sidecar = await readWorktreeSession(
21264
- sessionService.getWorktreeSessionPathForArchiveState(
21341
+ let sidecar;
21342
+ try {
21343
+ const sidecarPath = sessionService.getWorktreeSessionPathForArchiveState(
21265
21344
  sessionId,
21266
21345
  archiveState
21267
- )
21268
- ).catch(() => null);
21346
+ );
21347
+ sidecar = signal ? await readWorktreeSession(sidecarPath, { signal }) : await readWorktreeSession(sidecarPath);
21348
+ } catch {
21349
+ signal?.throwIfAborted();
21350
+ sidecar = null;
21351
+ }
21269
21352
  if (sidecar) {
21270
21353
  bySessionId.set(sessionId, {
21271
21354
  ...summary,
@@ -21320,8 +21403,9 @@ function clonePersistedSummary(session) {
21320
21403
  };
21321
21404
  }
21322
21405
  __name(clonePersistedSummary, "clonePersistedSummary");
21323
- async function loadAllPersistedSummaries(sessionService, archiveState) {
21406
+ async function loadAllPersistedSummaries(sessionService, archiveState, signal) {
21324
21407
  const scanStartedAt = performance.now();
21408
+ signal.throwIfAborted();
21325
21409
  const sessions = [];
21326
21410
  let truncated = false;
21327
21411
  let scanPages = 0;
@@ -21331,8 +21415,10 @@ async function loadAllPersistedSummaries(sessionService, archiveState) {
21331
21415
  const page = await sessionService.listSessions({
21332
21416
  cursor,
21333
21417
  size: 1e4,
21334
- archiveState
21418
+ archiveState,
21419
+ signal
21335
21420
  });
21421
+ signal.throwIfAborted();
21336
21422
  const remaining = MAX_ORGANIZED_SESSIONS - sessions.length;
21337
21423
  sessions.push(...page.items.slice(0, remaining).map(toSummary2));
21338
21424
  cursor = page.nextCursor;
@@ -21350,7 +21436,13 @@ async function loadAllPersistedSummaries(sessionService, archiveState) {
21350
21436
  const bySessionId = new Map(
21351
21437
  sessions.map((session) => [session.sessionId, session])
21352
21438
  );
21353
- await enrichWorktreeSidecars(bySessionId, sessionService, archiveState);
21439
+ await enrichWorktreeSidecars(
21440
+ bySessionId,
21441
+ sessionService,
21442
+ archiveState,
21443
+ signal
21444
+ );
21445
+ signal.throwIfAborted();
21354
21446
  return {
21355
21447
  sessions: [...bySessionId.values()],
21356
21448
  truncated,
@@ -21359,10 +21451,11 @@ async function loadAllPersistedSummaries(sessionService, archiveState) {
21359
21451
  };
21360
21452
  }
21361
21453
  __name(loadAllPersistedSummaries, "loadAllPersistedSummaries");
21362
- async function listAllPersistedSummaries(sessionService, workspaceCwd, archiveState, runtimeBaseDir, queryKind) {
21454
+ async function listAllPersistedSummaries(sessionService, workspaceCwd, archiveState, runtimeBaseDir, queryKind, signal) {
21363
21455
  const lookup = persistedSessionListCache.lookup(
21364
21456
  { runtimeBaseDir, workspaceCwd, archiveState },
21365
- () => loadAllPersistedSummaries(sessionService, archiveState)
21457
+ (loadSignal) => loadAllPersistedSummaries(sessionService, archiveState, loadSignal),
21458
+ { signal }
21366
21459
  );
21367
21460
  addDaemonRequestAttribute(
21368
21461
  "qwen-code.daemon.session_list.cache_status",
@@ -21383,6 +21476,7 @@ async function listAllPersistedSummaries(sessionService, workspaceCwd, archiveSt
21383
21476
  );
21384
21477
  }
21385
21478
  const snapshot = await lookup.promise;
21479
+ signal?.throwIfAborted();
21386
21480
  addDaemonRequestAttribute(
21387
21481
  "qwen-code.daemon.session_list.persisted_sessions",
21388
21482
  snapshot.sessions.length
@@ -21395,7 +21489,7 @@ async function listAllPersistedSummaries(sessionService, workspaceCwd, archiveSt
21395
21489
  "qwen-code.daemon.session_list.truncated",
21396
21490
  snapshot.truncated
21397
21491
  );
21398
- if (lookup.status === "scan") {
21492
+ if (lookup.status !== "cache_hit") {
21399
21493
  addDaemonRequestAttribute(
21400
21494
  "qwen-code.daemon.session_list.scan_duration_ms",
21401
21495
  snapshot.scanDurationMs
@@ -21459,7 +21553,9 @@ async function listOrganizedWorkspaceSessionsForResponse(bridge, workspaceCwd, o
21459
21553
  const archiveState = options.archiveState ?? "active";
21460
21554
  const sessionService = new SessionService(workspaceCwd);
21461
21555
  const organizationService = createSessionOrganizationService(workspaceCwd);
21556
+ readOptions.signal?.throwIfAborted();
21462
21557
  const snapshot = await organizationService.readSnapshot();
21558
+ readOptions.signal?.throwIfAborted();
21463
21559
  const knownGroupIds = new Set(snapshot.groups.map((group2) => group2.id));
21464
21560
  const group = options.group ?? "all";
21465
21561
  if (group !== "all" && group !== "pinned" && group !== "ungrouped" && !knownGroupIds.has(group)) {
@@ -21483,8 +21579,10 @@ async function listOrganizedWorkspaceSessionsForResponse(bridge, workspaceCwd, o
21483
21579
  workspaceCwd,
21484
21580
  archiveState,
21485
21581
  readOptions.runtimeBaseDir,
21486
- "organized"
21582
+ "organized",
21583
+ readOptions.signal
21487
21584
  );
21585
+ readOptions.signal?.throwIfAborted();
21488
21586
  for (const session of persisted.sessions) {
21489
21587
  bySessionId.set(
21490
21588
  session.sessionId,
@@ -21517,7 +21615,9 @@ async function listOrganizedWorkspaceSessionsForResponse(bridge, workspaceCwd, o
21517
21615
  // above and this point: `existing` stayed undefined but
21518
21616
  // `sessionExists` flipped to true, silently dropping the live
21519
21617
  // session from the response instead of merging it.
21520
- !persisted.truncated || !await sessionService.sessionExists(live.sessionId)
21618
+ !persisted.truncated || !await (readOptions.signal ? sessionService.sessionExists(live.sessionId, {
21619
+ signal: readOptions.signal
21620
+ }) : sessionService.sessionExists(live.sessionId))
21521
21621
  ) {
21522
21622
  bySessionId.set(
21523
21623
  live.sessionId,
@@ -21535,6 +21635,7 @@ async function listOrganizedWorkspaceSessionsForResponse(bridge, workspaceCwd, o
21535
21635
  }
21536
21636
  }
21537
21637
  } catch (error2) {
21638
+ readOptions.signal?.throwIfAborted();
21538
21639
  liveMergeFailed = true;
21539
21640
  writeStderrLine(
21540
21641
  `qwen serve: organized session list live merge failed; using persisted sessions only: ${error2 instanceof Error ? error2.message : String(error2)}`
@@ -21549,6 +21650,7 @@ async function listOrganizedWorkspaceSessionsForResponse(bridge, workspaceCwd, o
21549
21650
  return session.groupId == null && session.color == null;
21550
21651
  return session.color == null && session.groupId === group;
21551
21652
  });
21653
+ readOptions.signal?.throwIfAborted();
21552
21654
  const activityTimeById = new Map(
21553
21655
  filtered.map((session) => [
21554
21656
  session.sessionId,
@@ -21556,6 +21658,7 @@ async function listOrganizedWorkspaceSessionsForResponse(bridge, workspaceCwd, o
21556
21658
  ])
21557
21659
  );
21558
21660
  filtered.sort((a, b) => compareOrganizedSessions(activityTimeById, a, b));
21661
+ readOptions.signal?.throwIfAborted();
21559
21662
  const afterCursor = cursorKey === void 0 ? filtered : filtered.filter(
21560
21663
  (session) => compareOrganizedCursorKeys(
21561
21664
  cursorKey,
@@ -21587,8 +21690,10 @@ async function listWorkspaceSessionsByMetadataForResponse(bridge, workspaceCwd,
21587
21690
  workspaceCwd,
21588
21691
  archiveState,
21589
21692
  readOptions.runtimeBaseDir,
21590
- "metadata"
21693
+ "metadata",
21694
+ readOptions.signal
21591
21695
  );
21696
+ readOptions.signal?.throwIfAborted();
21592
21697
  for (const session of persisted.sessions) {
21593
21698
  bySessionId.set(session.sessionId, clonePersistedSummary(session));
21594
21699
  }
@@ -21607,7 +21712,9 @@ async function listWorkspaceSessionsByMetadataForResponse(bridge, workspaceCwd,
21607
21712
  // `listOrganizedWorkspaceSessionsForResponse`: an untruncated scan
21608
21713
  // already covers every persisted session, so skip the racy
21609
21714
  // re-check when nothing was truncated.
21610
- !persisted.truncated || !await sessionService.sessionExists(live.sessionId)
21715
+ !persisted.truncated || !await (readOptions.signal ? sessionService.sessionExists(live.sessionId, {
21716
+ signal: readOptions.signal
21717
+ }) : sessionService.sessionExists(live.sessionId))
21611
21718
  ) {
21612
21719
  bySessionId.set(live.sessionId, {
21613
21720
  ...live,
@@ -21619,6 +21726,7 @@ async function listWorkspaceSessionsByMetadataForResponse(bridge, workspaceCwd,
21619
21726
  }
21620
21727
  }
21621
21728
  } catch (error2) {
21729
+ readOptions.signal?.throwIfAborted();
21622
21730
  liveMergeFailed = true;
21623
21731
  writeStderrLine(
21624
21732
  `qwen serve: session metadata filter live merge failed; using persisted sessions only: ${error2 instanceof Error ? error2.message : String(error2)}`
@@ -21633,6 +21741,7 @@ async function listWorkspaceSessionsByMetadataForResponse(bridge, workspaceCwd,
21633
21741
  getLiveSessionCursorKey(b)
21634
21742
  )
21635
21743
  );
21744
+ readOptions.signal?.throwIfAborted();
21636
21745
  const cursorKey = options.cursor !== void 0 && options.cursor !== "" ? parseMetadataSessionCursor(options.cursor, {
21637
21746
  ...filter,
21638
21747
  archiveState
@@ -21658,20 +21767,25 @@ async function listWorkspaceSessionsByMetadataForResponse(bridge, workspaceCwd,
21658
21767
  }
21659
21768
  __name(listWorkspaceSessionsByMetadataForResponse, "listWorkspaceSessionsByMetadataForResponse");
21660
21769
  async function listWorkspaceSessionsForResponse(bridge, workspaceCwd, options, readOptions = {}) {
21770
+ readOptions.signal?.throwIfAborted();
21661
21771
  const runtimeBaseDir = new Storage(
21662
21772
  workspaceCwd,
21663
21773
  readOptions.runtimeBaseDir
21664
21774
  ).getRuntimeBaseDir();
21665
- return Storage.runWithResolvedRuntimeBaseDir(
21775
+ const result = await Storage.runWithResolvedRuntimeBaseDir(
21666
21776
  runtimeBaseDir,
21667
21777
  () => listWorkspaceSessionsForResponseInRuntime(bridge, workspaceCwd, options, {
21668
21778
  ...readOptions.mergeLive !== void 0 ? { mergeLive: readOptions.mergeLive } : {},
21779
+ ...readOptions.signal !== void 0 ? { signal: readOptions.signal } : {},
21669
21780
  runtimeBaseDir
21670
21781
  })
21671
21782
  );
21783
+ readOptions.signal?.throwIfAborted();
21784
+ return result;
21672
21785
  }
21673
21786
  __name(listWorkspaceSessionsForResponse, "listWorkspaceSessionsForResponse");
21674
21787
  async function listWorkspaceSessionsForResponseInRuntime(bridge, workspaceCwd, options, readOptions) {
21788
+ readOptions.signal?.throwIfAborted();
21675
21789
  const rawSize = options?.size;
21676
21790
  const requestedSize = typeof rawSize === "number" && Number.isSafeInteger(rawSize) ? rawSize : DEFAULT_SESSION_PAGE_SIZE;
21677
21791
  const pageSize = Math.min(Math.max(requestedSize, 1), MAX_SESSION_PAGE_SIZE);
@@ -21708,13 +21822,21 @@ async function listWorkspaceSessionsForResponseInRuntime(bridge, workspaceCwd, o
21708
21822
  const persisted = await sessionService.listSessions({
21709
21823
  cursor: numericCursor,
21710
21824
  size: pageSize,
21711
- archiveState
21825
+ archiveState,
21826
+ ...readOptions.signal ? { signal: readOptions.signal } : {}
21712
21827
  });
21828
+ readOptions.signal?.throwIfAborted();
21713
21829
  const bySessionId = /* @__PURE__ */ new Map();
21714
21830
  for (const item of persisted.items) {
21715
21831
  bySessionId.set(item.sessionId, toSummary2(item));
21716
21832
  }
21717
- await enrichWorktreeSidecars(bySessionId, sessionService, archiveState);
21833
+ await enrichWorktreeSidecars(
21834
+ bySessionId,
21835
+ sessionService,
21836
+ archiveState,
21837
+ readOptions.signal
21838
+ );
21839
+ readOptions.signal?.throwIfAborted();
21718
21840
  if (archiveState === "archived" || readOptions.mergeLive === false) {
21719
21841
  const sessions2 = [...bySessionId.values()];
21720
21842
  const nextCursor2 = persisted.nextCursor != null ? String(persisted.nextCursor) : void 0;
@@ -21732,7 +21854,9 @@ async function listWorkspaceSessionsForResponseInRuntime(bridge, workspaceCwd, o
21732
21854
  // `existing` stayed undefined but `sessionExists` flipped to true,
21733
21855
  // silently dropping the live session from the response instead of
21734
21856
  // merging it.
21735
- (persisted.nextCursor == null || !await sessionService.sessionExists(live.sessionId))) {
21857
+ (persisted.nextCursor == null || !await (readOptions.signal ? sessionService.sessionExists(live.sessionId, {
21858
+ signal: readOptions.signal
21859
+ }) : sessionService.sessionExists(live.sessionId)))) {
21736
21860
  bySessionId.set(live.sessionId, {
21737
21861
  ...live,
21738
21862
  createdAt: live.createdAt,
@@ -21747,6 +21871,7 @@ async function listWorkspaceSessionsForResponseInRuntime(bridge, workspaceCwd, o
21747
21871
  const bTime = Date.parse(b.updatedAt ?? b.createdAt);
21748
21872
  return bTime - aTime;
21749
21873
  });
21874
+ readOptions.signal?.throwIfAborted();
21750
21875
  const nextCursor = persisted.nextCursor != null ? String(persisted.nextCursor) : void 0;
21751
21876
  return { sessions, nextCursor };
21752
21877
  }
@@ -21927,6 +22052,8 @@ import * as fs5 from "node:fs/promises";
21927
22052
  import { createReadStream } from "node:fs";
21928
22053
  import readline from "node:readline";
21929
22054
  var PREFIX = "subagent.";
22055
+ var MAX_VIRTUAL_SESSION_ID_PART_LENGTH = 500;
22056
+ var MAX_VIRTUAL_SESSION_ID_LENGTH = 2e3;
21930
22057
  var POLL_INTERVAL_MS = 250;
21931
22058
  var TARGET_RETENTION_MS = 6e4;
21932
22059
  async function readFirstUserText(filePath) {
@@ -22015,26 +22142,40 @@ function decodePart(value) {
22015
22142
  }
22016
22143
  }
22017
22144
  __name(decodePart, "decodePart");
22018
- function isValidVirtualSessionPart(value) {
22019
- return /^[a-zA-Z0-9_-]{1,500}$/.test(value);
22145
+ function isValidVirtualParentSessionId(value) {
22146
+ return value.length > 0 && value.length <= MAX_VIRTUAL_SESSION_ID_PART_LENGTH && /^[a-zA-Z0-9_-]+$/.test(value);
22020
22147
  }
22021
- __name(isValidVirtualSessionPart, "isValidVirtualSessionPart");
22148
+ __name(isValidVirtualParentSessionId, "isValidVirtualParentSessionId");
22149
+ function isValidVirtualAgentId(value) {
22150
+ return value.length > 0 && value.length <= MAX_VIRTUAL_SESSION_ID_PART_LENGTH && // Round-trip rejects lone surrogates: UTF-8 maps them to U+FFFD, so two
22151
+ // distinct agent ids would otherwise encode to the same session id.
22152
+ decodePart(encodePart(value)) === value;
22153
+ }
22154
+ __name(isValidVirtualAgentId, "isValidVirtualAgentId");
22022
22155
  function createVirtualSubagentSessionId(parentSessionId, agentId) {
22023
- if (!isValidVirtualSessionPart(parentSessionId) || !isValidVirtualSessionPart(agentId)) {
22156
+ if (!isValidVirtualParentSessionId(parentSessionId) || !isValidVirtualAgentId(agentId)) {
22024
22157
  throw new Error("Virtual subagent session ids require valid id parts");
22025
22158
  }
22026
- return `${PREFIX}${encodePart(parentSessionId)}.${encodePart(agentId)}`;
22159
+ const sessionId = `${PREFIX}${encodePart(parentSessionId)}.${encodePart(agentId)}`;
22160
+ if (sessionId.length > MAX_VIRTUAL_SESSION_ID_LENGTH) {
22161
+ throw new Error(
22162
+ `Virtual subagent session id exceeds ${MAX_VIRTUAL_SESSION_ID_LENGTH} characters`
22163
+ );
22164
+ }
22165
+ return sessionId;
22027
22166
  }
22028
22167
  __name(createVirtualSubagentSessionId, "createVirtualSubagentSessionId");
22029
22168
  function parseVirtualSubagentSessionId(sessionId) {
22030
- if (!sessionId.startsWith(PREFIX) || sessionId.length > 2e3) {
22169
+ if (!sessionId.startsWith(PREFIX) || sessionId.length > MAX_VIRTUAL_SESSION_ID_LENGTH) {
22031
22170
  return void 0;
22032
22171
  }
22033
22172
  const parts = sessionId.slice(PREFIX.length).split(".");
22034
22173
  if (parts.length !== 2) return void 0;
22035
- const parentSessionId = decodePart(parts[0]);
22036
- const agentId = decodePart(parts[1]);
22037
- if (!parentSessionId || !agentId || !isValidVirtualSessionPart(parentSessionId) || !isValidVirtualSessionPart(agentId)) {
22174
+ const parentPart = parts[0];
22175
+ const agentPart = parts[1];
22176
+ const parentSessionId = decodePart(parentPart);
22177
+ const agentId = decodePart(agentPart);
22178
+ if (!parentSessionId || !agentId || !isValidVirtualParentSessionId(parentSessionId) || !isValidVirtualAgentId(agentId) || encodePart(parentSessionId) !== parentPart || encodePart(agentId) !== agentPart) {
22038
22179
  return void 0;
22039
22180
  }
22040
22181
  return { parentSessionId, agentId };
@@ -23090,16 +23231,19 @@ function registerSessionRoutes(app, deps) {
23090
23231
  }
23091
23232
  return runtime;
23092
23233
  }, "resolveLegacyPrimaryRuntimeFromParam");
23093
- const hasActivePersistedSessions = /* @__PURE__ */ __name(async (runtime) => {
23234
+ const hasActivePersistedSessions = /* @__PURE__ */ __name(async (runtime, signal) => {
23094
23235
  try {
23095
23236
  const page = await createWorkspaceRuntimeSessionService(
23096
23237
  runtime
23097
23238
  ).listSessions({
23098
23239
  archiveState: "active",
23099
- size: 1
23240
+ size: 1,
23241
+ signal
23100
23242
  });
23243
+ signal.throwIfAborted();
23101
23244
  return page.items.length > 0;
23102
23245
  } catch {
23246
+ signal.throwIfAborted();
23103
23247
  return false;
23104
23248
  }
23105
23249
  }, "hasActivePersistedSessions");
@@ -24271,8 +24415,8 @@ function registerSessionRoutes(app, deps) {
24271
24415
  }, "restoreSessionHandler");
24272
24416
  app.post("/session/:id/load", mutate(), restoreSessionHandler("load"));
24273
24417
  app.post("/session/:id/resume", mutate(), restoreSessionHandler("resume"));
24274
- app.get("/session/:id/subagents/:toolCallId", async (req, res) => {
24275
- const route = "GET /session/:id/subagents/:toolCallId";
24418
+ app.get("/session/:id/subagents/:subagentRef", async (req, res) => {
24419
+ const route = "GET /session/:id/subagents/:subagentRef";
24276
24420
  const sessionId = requireSessionId(req, res);
24277
24421
  if (!sessionId) return;
24278
24422
  if (!virtualSubagentSessions) {
@@ -24283,11 +24427,11 @@ function registerSessionRoutes(app, deps) {
24283
24427
  });
24284
24428
  return;
24285
24429
  }
24286
- const toolCallId = req.params["toolCallId"];
24287
- if (!toolCallId || toolCallId.length > 500) {
24430
+ const subagentRef = req.params["subagentRef"];
24431
+ if (!subagentRef || subagentRef.length > MAX_VIRTUAL_SESSION_ID_PART_LENGTH) {
24288
24432
  res.status(400).json({
24289
- error: "`toolCallId` must be a non-empty tool call id",
24290
- code: "invalid_tool_call_id"
24433
+ error: "`subagentRef` must be a non-empty subagent reference",
24434
+ code: "invalid_subagent_ref"
24291
24435
  });
24292
24436
  return;
24293
24437
  }
@@ -24303,14 +24447,14 @@ function registerSessionRoutes(app, deps) {
24303
24447
  const resolved = await virtualSubagentSessions.resolve(
24304
24448
  runtime,
24305
24449
  sessionId,
24306
- toolCallId
24450
+ subagentRef
24307
24451
  );
24308
24452
  if (!resolved) {
24309
24453
  res.status(404).json({
24310
24454
  error: "Subagent session not found",
24311
24455
  code: "session_not_found",
24312
24456
  sessionId,
24313
- toolCallId
24457
+ subagentRef
24314
24458
  });
24315
24459
  return;
24316
24460
  }
@@ -24320,10 +24464,10 @@ function registerSessionRoutes(app, deps) {
24320
24464
  }
24321
24465
  });
24322
24466
  app.post(
24323
- "/session/:id/subagents/:toolCallId/cancel",
24467
+ "/session/:id/subagents/:subagentRef/cancel",
24324
24468
  mutate(),
24325
24469
  async (req, res) => {
24326
- const route = "POST /session/:id/subagents/:toolCallId/cancel";
24470
+ const route = "POST /session/:id/subagents/:subagentRef/cancel";
24327
24471
  const sessionId = requireSessionId(req, res);
24328
24472
  if (!sessionId) return;
24329
24473
  if (!virtualSubagentSessions) {
@@ -24334,11 +24478,11 @@ function registerSessionRoutes(app, deps) {
24334
24478
  });
24335
24479
  return;
24336
24480
  }
24337
- const toolCallId = req.params["toolCallId"];
24338
- if (!toolCallId || toolCallId.length > 500) {
24481
+ const subagentRef = req.params["subagentRef"];
24482
+ if (!subagentRef || subagentRef.length > MAX_VIRTUAL_SESSION_ID_PART_LENGTH) {
24339
24483
  res.status(400).json({
24340
- error: "`toolCallId` must be a non-empty tool call id",
24341
- code: "invalid_tool_call_id"
24484
+ error: "`subagentRef` must be a non-empty subagent reference",
24485
+ code: "invalid_subagent_ref"
24342
24486
  });
24343
24487
  return;
24344
24488
  }
@@ -24354,14 +24498,14 @@ function registerSessionRoutes(app, deps) {
24354
24498
  const resolved = await virtualSubagentSessions.resolve(
24355
24499
  runtime,
24356
24500
  sessionId,
24357
- toolCallId
24501
+ subagentRef
24358
24502
  );
24359
24503
  if (!resolved) {
24360
24504
  res.status(404).json({
24361
24505
  error: "Subagent session not found",
24362
24506
  code: "session_not_found",
24363
24507
  sessionId,
24364
- toolCallId
24508
+ subagentRef
24365
24509
  });
24366
24510
  return;
24367
24511
  }
@@ -25034,12 +25178,18 @@ function registerSessionRoutes(app, deps) {
25034
25178
  const clientId = parseClientIdHeader(req, res);
25035
25179
  if (clientId === null) return;
25036
25180
  const promptId = crypto3.randomUUID();
25037
- res.status(200).json(
25038
- await runtime.bridge.continueSession(sessionId, {
25039
- ...clientId !== void 0 ? { clientId } : {},
25040
- promptId
25041
- })
25042
- );
25181
+ const result = await runtime.bridge.continueSession(sessionId, {
25182
+ ...clientId !== void 0 ? { clientId } : {},
25183
+ promptId
25184
+ });
25185
+ if (daemonLog && result.accepted) {
25186
+ daemonLog.info("continuation enqueued", {
25187
+ sessionId,
25188
+ promptId,
25189
+ clientId
25190
+ });
25191
+ }
25192
+ res.status(200).json(result);
25043
25193
  }
25044
25194
  )
25045
25195
  );
@@ -25104,6 +25254,22 @@ function registerSessionRoutes(app, deps) {
25104
25254
  const forwardedBody = { ...body };
25105
25255
  delete forwardedBody["deadlineMs"];
25106
25256
  delete forwardedBody["delivery"];
25257
+ const forwardedMeta = typeof forwardedBody["_meta"] === "object" && forwardedBody["_meta"] !== null && !Array.isArray(forwardedBody["_meta"]) ? { ...forwardedBody["_meta"] } : void 0;
25258
+ const promptAuthorization = forwardedMeta?.[CHANNEL_WORKER_PROMPT_AUTHORIZATION_META_KEY];
25259
+ const promptDisplayText = forwardedMeta?.[DAEMON_PROMPT_DISPLAY_TEXT_META_KEY];
25260
+ if (forwardedMeta) {
25261
+ delete forwardedMeta[CHANNEL_WORKER_PROMPT_AUTHORIZATION_META_KEY];
25262
+ delete forwardedMeta[DAEMON_PROMPT_DISPLAY_TEXT_META_KEY];
25263
+ if (Object.keys(forwardedMeta).length > 0) {
25264
+ forwardedBody["_meta"] = forwardedMeta;
25265
+ } else {
25266
+ delete forwardedBody["_meta"];
25267
+ }
25268
+ }
25269
+ const trustedPromptDisplayText = typeof promptDisplayText === "string" && isChannelWorkerPromptAuthorized(
25270
+ promptAuthorization,
25271
+ runtime.workspaceCwd
25272
+ ) ? promptDisplayText : void 0;
25107
25273
  const lastEventId = ownerBridge.getSessionLastEventId(sessionId);
25108
25274
  const eventEpoch = ownerBridge.getSessionEventEpoch(sessionId);
25109
25275
  addDaemonRequestAttribute("qwen-code.prompt_id", promptId);
@@ -25136,6 +25302,7 @@ function registerSessionRoutes(app, deps) {
25136
25302
  ...clientId !== void 0 ? { clientId } : {},
25137
25303
  promptId,
25138
25304
  ...effectiveDeadlineMs !== void 0 ? { deadlineMs: effectiveDeadlineMs } : {},
25305
+ ...trustedPromptDisplayText !== void 0 ? { promptDisplayText: trustedPromptDisplayText } : {},
25139
25306
  ...delivery !== void 0 ? {
25140
25307
  channelDelivery: {
25141
25308
  deliveryId: promptId,
@@ -26014,25 +26181,54 @@ function registerSessionRoutes(app, deps) {
26014
26181
  ...parentSessionId !== void 0 ? { parentSessionId } : {},
26015
26182
  ...parsedSource
26016
26183
  };
26017
- const usePersisted = readOnlySecondary || runtime.primary || view === "organized" || archiveState === "archived" || parentSessionId !== void 0 || parsedSource.sourceType !== void 0 || (cursor !== void 0 && cursor !== "" ? isNumericSessionCursor(cursor) : await hasActivePersistedSessions(runtime));
26018
- if (!usePersisted && (view !== void 0 || archiveState === "archived" || parentSessionId !== void 0 || parsedSource.sourceType !== void 0)) {
26019
- throw new Error(
26020
- "session list live path received persisted-only options"
26184
+ const controller = new AbortController();
26185
+ const onRequestAborted = /* @__PURE__ */ __name(() => {
26186
+ controller.abort(new DOMException("Request aborted", "AbortError"));
26187
+ }, "onRequestAborted");
26188
+ const onResponseClosed = /* @__PURE__ */ __name(() => {
26189
+ if (!res.writableEnded) {
26190
+ controller.abort(new DOMException("Response closed", "AbortError"));
26191
+ }
26192
+ }, "onResponseClosed");
26193
+ req.once("aborted", onRequestAborted);
26194
+ res.once("close", onResponseClosed);
26195
+ if (req.aborted || res.destroyed) onRequestAborted();
26196
+ try {
26197
+ const usePersisted = readOnlySecondary || runtime.primary || view === "organized" || archiveState === "archived" || parentSessionId !== void 0 || parsedSource.sourceType !== void 0 || (cursor !== void 0 && cursor !== "" ? isNumericSessionCursor(cursor) : await hasActivePersistedSessions(runtime, controller.signal));
26198
+ if (!usePersisted && (view !== void 0 || archiveState === "archived" || parentSessionId !== void 0 || parsedSource.sourceType !== void 0)) {
26199
+ throw new Error(
26200
+ "session list live path received persisted-only options"
26201
+ );
26202
+ }
26203
+ const result = usePersisted ? await runWorkspaceInspectionWithLogPolicy(
26204
+ runtime,
26205
+ () => listWorkspaceSessionsForResponse(runtime.bridge, key, options, {
26206
+ mergeLive: !readOnlySecondary,
26207
+ runtimeBaseDir: runtime.sessionRuntimeBaseDir,
26208
+ signal: controller.signal
26209
+ })
26210
+ ) : listLiveWorkspaceSessionsForResponse(
26211
+ runtime.bridge,
26212
+ key,
26213
+ options
26021
26214
  );
26215
+ controller.signal.throwIfAborted();
26216
+ if (res.destroyed) return;
26217
+ res.status(200).json({
26218
+ sessions: result.sessions,
26219
+ ...result.nextCursor != null ? { nextCursor: result.nextCursor } : {},
26220
+ ...result.liveMergeFailed ? { liveMergeFailed: true } : {},
26221
+ ...result.truncated ? { truncated: true } : {}
26222
+ });
26223
+ } catch (err) {
26224
+ if (controller.signal.aborted || res.destroyed) {
26225
+ return;
26226
+ }
26227
+ throw err;
26228
+ } finally {
26229
+ req.off("aborted", onRequestAborted);
26230
+ res.off("close", onResponseClosed);
26022
26231
  }
26023
- const result = usePersisted ? await runWorkspaceInspectionWithLogPolicy(
26024
- runtime,
26025
- () => listWorkspaceSessionsForResponse(runtime.bridge, key, options, {
26026
- mergeLive: !readOnlySecondary,
26027
- runtimeBaseDir: runtime.sessionRuntimeBaseDir
26028
- })
26029
- ) : listLiveWorkspaceSessionsForResponse(runtime.bridge, key, options);
26030
- res.status(200).json({
26031
- sessions: result.sessions,
26032
- ...result.nextCursor != null ? { nextCursor: result.nextCursor } : {},
26033
- ...result.liveMergeFailed ? { liveMergeFailed: true } : {},
26034
- ...result.truncated ? { truncated: true } : {}
26035
- });
26036
26232
  } catch (err) {
26037
26233
  if (err instanceof InvalidCursorError) {
26038
26234
  res.status(400).json({
@@ -26125,6 +26321,35 @@ function registerSessionRoutes(app, deps) {
26125
26321
  }
26126
26322
  )
26127
26323
  );
26324
+ app.post(
26325
+ "/session/:id/config-option",
26326
+ mutate(),
26327
+ withOwnerMutableSession(
26328
+ "POST /session/:id/config-option",
26329
+ async (req, res, sessionId, runtime) => {
26330
+ const body = safeBody(req);
26331
+ const configId = body["configId"];
26332
+ const value = body["value"];
26333
+ if (configId !== "reasoning_effort") {
26334
+ res.status(400).json({
26335
+ error: "`configId` must be reasoning_effort"
26336
+ });
26337
+ return;
26338
+ }
26339
+ if (typeof value !== "string" || !value) {
26340
+ res.status(400).json({
26341
+ error: "`value` is required and must be a non-empty string"
26342
+ });
26343
+ return;
26344
+ }
26345
+ const response = await runtime.bridge.setSessionConfigOption(
26346
+ sessionId,
26347
+ { sessionId, configId, value }
26348
+ );
26349
+ res.status(200).json(response);
26350
+ }
26351
+ )
26352
+ );
26128
26353
  app.post(
26129
26354
  "/session/:id/recap",
26130
26355
  mutate(),