@qwen-code/qwen-code 0.23.2 → 0.23.3-nightly.20260911.aaa6a32aae

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 (419) hide show
  1. package/README.md +35 -15
  2. package/bundled/computer-use/SKILL.md +1 -1
  3. package/bundled/goal-draft/SKILL.md +10 -10
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +66 -28
  5. package/bundled/qc-helper/docs/configuration/settings.md +8 -3
  6. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  7. package/bundled/qc-helper/docs/features/channels/dingtalk.md +0 -20
  8. package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
  9. package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
  10. package/bundled/qc-helper/docs/features/commands.md +62 -9
  11. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  12. package/bundled/qc-helper/docs/features/cross-session-protocol.md +338 -0
  13. package/bundled/qc-helper/docs/features/goals.md +22 -18
  14. package/bundled/qc-helper/docs/features/hooks.md +28 -22
  15. package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +23 -6
  17. package/bundled/review/SKILL.md +93 -80
  18. package/bundled/review/references/persistence.md +2 -0
  19. package/bundled/review/references/posting.md +31 -14
  20. package/bundled/workflow-authoring/SKILL.md +410 -0
  21. package/bundled/workflow-creator/SKILL.md +1 -1
  22. package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-7C5XTBZI.js} +64 -53
  23. package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IGTT3ZRX.js} +88 -76
  24. package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
  25. package/chunks/acp-subagent-executor-IUHVNVVO.js +140 -0
  26. package/chunks/{acpAgent-H5XBKGB4.js → acpAgent-W43WM2K4.js} +957 -243
  27. package/chunks/{agent-T5LEFJIU.js → agent-2XMXC5JW.js} +48 -38
  28. package/chunks/{agent-headless-VZKSRH36.js → agent-headless-2HHBVCP6.js} +48 -38
  29. package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-7RI3MPIW.js} +69 -36
  30. package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-HHVHCPNG.js} +59 -109
  31. package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-RFMXTD3B.js} +2 -2
  32. package/chunks/{bridge-AOX5IY44.js → bridge-ID6N4IH5.js} +69 -58
  33. package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
  34. package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-ASCXI7FR.js} +6 -6
  35. package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-TPJFQAZY.js} +76 -65
  36. package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-JR6JOELM.js} +9 -9
  37. package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-AVKJEZFL.js} +19 -10
  38. package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-OOYY7BAQ.js} +7 -7
  39. package/chunks/{chunk-4WMGYG3F.js → chunk-22FWWGSM.js} +2 -2
  40. package/chunks/{chunk-LWX4WDFF.js → chunk-2S5RIGZJ.js} +43 -15
  41. package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
  42. package/chunks/{chunk-HJ5UJQQL.js → chunk-2UKKQGRA.js} +3639 -1804
  43. package/chunks/{chunk-MWIO7MF6.js → chunk-2WSLXP3W.js} +4 -0
  44. package/chunks/{chunk-HNLMYDQE.js → chunk-33LYAC4R.js} +10 -6
  45. package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
  46. package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
  47. package/chunks/{chunk-WXFCI3O5.js → chunk-3MAUPOZ4.js} +2 -2
  48. package/chunks/{chunk-CRZBDVP2.js → chunk-432JQKIO.js} +10 -10
  49. package/chunks/{chunk-IRGDIDGJ.js → chunk-43RQ552L.js} +364 -84
  50. package/chunks/{chunk-PFKGV6PO.js → chunk-465USTVK.js} +9 -15
  51. package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
  52. package/chunks/{chunk-J3VZF2AL.js → chunk-4O2AXZXU.js} +2 -2
  53. package/chunks/{chunk-N6S3NUYJ.js → chunk-55VOWZ4C.js} +1 -1
  54. package/chunks/{chunk-OWCFKIFQ.js → chunk-5CZMWDJI.js} +2 -2
  55. package/chunks/{chunk-7NDZKE2M.js → chunk-5MUIHID6.js} +5 -5
  56. package/chunks/{chunk-RM244SCQ.js → chunk-5Z74GE4N.js} +1 -1
  57. package/chunks/{chunk-G5VOXCRX.js → chunk-6375QMAO.js} +2 -2
  58. package/chunks/{chunk-3LPJ776W.js → chunk-63GQZKXL.js} +164 -31
  59. package/chunks/{chunk-O2FEO2CB.js → chunk-6GDELAVL.js} +18 -2
  60. package/chunks/{chunk-7PD7ZMX5.js → chunk-6HI2I3OM.js} +168 -6
  61. package/chunks/{chunk-CALNF3Z3.js → chunk-7C57HCOR.js} +1 -1
  62. package/chunks/{chunk-UYDQYDW2.js → chunk-7IBS746B.js} +1 -1
  63. package/chunks/{chunk-AUTUFD5X.js → chunk-ABNX6E6K.js} +1 -1
  64. package/chunks/chunk-ACHCT36C.js +28 -0
  65. package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
  66. package/chunks/{chunk-AO2VMS72.js → chunk-AQFRRH73.js} +3 -3
  67. package/chunks/{chunk-PDN7FJZV.js → chunk-ASWEMQIZ.js} +4 -4
  68. package/chunks/chunk-AYEJOTIU.js +43 -0
  69. package/chunks/{chunk-QFJZAY7W.js → chunk-BKFRA4F5.js} +5 -5
  70. package/chunks/{chunk-KCF2436G.js → chunk-BNLW5N6U.js} +4 -4
  71. package/chunks/{chunk-GOKAOSCN.js → chunk-BRFOZEPA.js} +2 -2
  72. package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
  73. package/chunks/chunk-C5CECJ46.js +340 -0
  74. package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
  75. package/chunks/chunk-CAAMI77K.js +937 -0
  76. package/chunks/{chunk-QTB4VP4K.js → chunk-CBGHRAWM.js} +304 -23
  77. package/chunks/chunk-CF5KXZZX.js +150 -0
  78. package/chunks/chunk-CFMZLE3L.js +75 -0
  79. package/chunks/{chunk-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
  80. package/chunks/{chunk-ERXNTINK.js → chunk-CQZJYGRX.js} +1 -1
  81. package/chunks/{chunk-WBU2PIZ5.js → chunk-CSDKDHWV.js} +23 -16
  82. package/chunks/{chunk-2EKVPSIJ.js → chunk-D754KKNZ.js} +9 -2
  83. package/chunks/{chunk-E6TI726I.js → chunk-DGC7BKEZ.js} +1 -1
  84. package/chunks/{chunk-7SVM3RP2.js → chunk-DMMOQWRF.js} +4 -6
  85. package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
  86. package/chunks/{chunk-2BMXHB6N.js → chunk-DWBNQR53.js} +7 -7
  87. package/chunks/{chunk-ZN5TKAVR.js → chunk-E5LTUWKZ.js} +3 -3
  88. package/chunks/chunk-EGW3ZP6Y.js +32 -0
  89. package/chunks/chunk-ELRMZTPF.js +374 -0
  90. package/chunks/{chunk-RNAJVXUG.js → chunk-ENAUXRPG.js} +6 -6
  91. package/chunks/{chunk-WXD7INFV.js → chunk-EO4U2X47.js} +10 -8
  92. package/chunks/{chunk-WDVV3LRM.js → chunk-EPVEPTI3.js} +45 -152
  93. package/chunks/chunk-ERU3SDXT.js +27 -0
  94. package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
  95. package/chunks/{chunk-GSFV5RQW.js → chunk-EYN3G5XD.js} +328 -4
  96. package/chunks/{chunk-QB3KS3N3.js → chunk-FGROOEKM.js} +5 -40
  97. package/chunks/{chunk-TOOOLHVS.js → chunk-FH5AVEWJ.js} +3 -3
  98. package/chunks/{chunk-DAI65CMX.js → chunk-FJZWRNEW.js} +1 -1
  99. package/chunks/{chunk-GNY7B3CA.js → chunk-FUQK5ZNL.js} +1 -1
  100. package/chunks/{chunk-GOEVQADN.js → chunk-GDIPPCW6.js} +330 -175
  101. package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
  102. package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
  103. package/chunks/{chunk-ELD3OBPU.js → chunk-GWOVD63C.js} +3 -3
  104. package/chunks/{chunk-IWABUX6T.js → chunk-GX5FF2IE.js} +6 -6
  105. package/chunks/{chunk-22GORRNY.js → chunk-GZMNHAYC.js} +1 -1
  106. package/chunks/{chunk-YZTGGCEE.js → chunk-H3TFIFX3.js} +1 -1
  107. package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
  108. package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
  109. package/chunks/{chunk-KEPC5BOL.js → chunk-IBRQG2MP.js} +12 -15
  110. package/chunks/{chunk-OXR34GCD.js → chunk-IILWL3KY.js} +2054 -146
  111. package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
  112. package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
  113. package/chunks/{chunk-CMWU6P4D.js → chunk-IRJRB3OD.js} +1 -1
  114. package/chunks/{chunk-QHLHE2OT.js → chunk-IUN5ZMFY.js} +1 -1
  115. package/chunks/{chunk-LYT2OU7D.js → chunk-IXXV6BVB.js} +172 -6
  116. package/chunks/{chunk-R3JIDRUL.js → chunk-J6H4JP25.js} +4 -4
  117. package/chunks/{chunk-NB3NDQQK.js → chunk-J6SBP5G2.js} +1 -1
  118. package/chunks/{chunk-TRQNRP2H.js → chunk-J7LBAKDH.js} +46 -3
  119. package/chunks/{chunk-67XTVRVB.js → chunk-JJFHISXU.js} +30 -25
  120. package/chunks/chunk-JL6APGBX.js +43 -0
  121. package/chunks/{chunk-NX7ZTXFF.js → chunk-JSKEW4E7.js} +2 -1
  122. package/chunks/{chunk-BK7D2JR6.js → chunk-JVTXAA35.js} +3 -3
  123. package/chunks/chunk-K2OJUPOE.js +78 -0
  124. package/chunks/{chunk-G3ZUMSFS.js → chunk-K3U6VB3O.js} +6 -6
  125. package/chunks/{chunk-4I3WFI3U.js → chunk-K4KWLF7Q.js} +12 -12
  126. package/chunks/{chunk-WXPPUPHM.js → chunk-KWFFJ6AK.js} +1 -1
  127. package/chunks/{chunk-46MMBZHI.js → chunk-KZYOFJ6V.js} +4 -4
  128. package/chunks/{chunk-ULZECEIP.js → chunk-LDQHA6L4.js} +2 -20
  129. package/chunks/{chunk-7LTCFO6T.js → chunk-LQBAFO5D.js} +6 -5
  130. package/chunks/{chunk-SOA4HKRJ.js → chunk-LT2XFADM.js} +2 -2
  131. package/chunks/{chunk-JYGIJA4W.js → chunk-LWWRJRCD.js} +1 -1
  132. package/chunks/{chunk-YQGW3M6Z.js → chunk-MFQWRBFB.js} +5 -5
  133. package/chunks/{chunk-TODNHE76.js → chunk-MUFGTWQH.js} +5 -5
  134. package/chunks/{chunk-5DQ4YTIZ.js → chunk-MV5XRRML.js} +3 -3
  135. package/chunks/{chunk-IR6JKBAP.js → chunk-NOUK63IR.js} +2 -2
  136. package/chunks/{chunk-XQ4RDO5B.js → chunk-NV77SEX3.js} +1 -1
  137. package/chunks/{chunk-OFVAS4AR.js → chunk-NWDPOFJI.js} +2 -2
  138. package/chunks/chunk-NY6OPAPS.js +820 -0
  139. package/chunks/{chunk-WDN64MVT.js → chunk-O5VX66FB.js} +127 -18
  140. package/chunks/{chunk-MV5DTLJV.js → chunk-OHCR4O3U.js} +1 -1
  141. package/chunks/{chunk-LEAOJ43M.js → chunk-OKOPKQ2X.js} +1310 -2107
  142. package/chunks/{chunk-B25JYXZE.js → chunk-ONLJBOI2.js} +971 -17
  143. package/chunks/{chunk-QQK4L3UU.js → chunk-OWUAZXXN.js} +132 -26
  144. package/chunks/{chunk-R457KFV7.js → chunk-P42IUOAO.js} +3 -3
  145. package/chunks/{chunk-LUNC5KCL.js → chunk-PRELUGCQ.js} +214 -39
  146. package/chunks/{chunk-5OZUKLL7.js → chunk-QSMQKTXV.js} +4 -4
  147. package/chunks/{chunk-FAJPLSYF.js → chunk-QTQYLQ5A.js} +85 -81
  148. package/chunks/{chunk-CALTQWTZ.js → chunk-QVZDV4ZS.js} +2 -2
  149. package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
  150. package/chunks/{chunk-KFECPHLV.js → chunk-RBWAGV73.js} +3 -3
  151. package/chunks/{chunk-4VY3ITHR.js → chunk-RF5RQRTD.js} +3 -3
  152. package/chunks/{chunk-HIXUUCGY.js → chunk-RPMXMR6U.js} +2 -2
  153. package/chunks/{chunk-3OAXF3UK.js → chunk-RRQEZBL2.js} +3756 -1343
  154. package/chunks/{chunk-4ALNJDHL.js → chunk-RSGEAWFJ.js} +19 -1
  155. package/chunks/{chunk-5BH2AIEY.js → chunk-RUE62UH6.js} +2 -2
  156. package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
  157. package/chunks/{chunk-A7EFXK7P.js → chunk-SAOJHRWY.js} +2 -2
  158. package/chunks/{chunk-JO77FGNZ.js → chunk-SDUIETBG.js} +19 -7
  159. package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
  160. package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
  161. package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
  162. package/chunks/{chunk-XDNFODER.js → chunk-TUIW5LLK.js} +1 -1
  163. package/chunks/{chunk-APXIW2TF.js → chunk-TVV5FA3G.js} +4 -4
  164. package/chunks/chunk-U6H3XTFA.js +95 -0
  165. package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
  166. package/chunks/{chunk-U6REWGVR.js → chunk-VG2BRSEK.js} +2 -2
  167. package/chunks/chunk-VGBOJH2D.js +127 -0
  168. package/chunks/chunk-VGY2RGXL.js +100 -0
  169. package/chunks/{chunk-ZP5XDLSA.js → chunk-VLWG3EHY.js} +12 -12
  170. package/chunks/{chunk-4JNHNVAZ.js → chunk-W547PYQ7.js} +9 -4
  171. package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
  172. package/chunks/{chunk-QAZ2MGYT.js → chunk-W7JJLUSB.js} +2 -2
  173. package/chunks/{chunk-CCBTNJB4.js → chunk-W7Q7XDQI.js} +39 -27
  174. package/chunks/{chunk-DARWOZY6.js → chunk-WD6YQI5M.js} +1 -1
  175. package/chunks/{chunk-F2NYVASI.js → chunk-WXAWG3JS.js} +30 -13
  176. package/chunks/{chunk-NPKCVSXX.js → chunk-XB5JRCAM.js} +11 -9
  177. package/chunks/{chunk-XSOXPG2L.js → chunk-XE46RQFI.js} +136 -8
  178. package/chunks/{chunk-QTNCGZHQ.js → chunk-XX5HQLCZ.js} +16 -0
  179. package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
  180. package/chunks/chunk-YC6XOB5N.js +691 -0
  181. package/chunks/{chunk-CWVZBIZJ.js → chunk-YDW4ERSS.js} +1 -1
  182. package/chunks/{chunk-TRWQQBVH.js → chunk-YGCTOXUT.js} +10 -24
  183. package/chunks/{chunk-WK7P62DV.js → chunk-YKC67ZEF.js} +6 -6
  184. package/chunks/{chunk-KA5HR3G2.js → chunk-YKM6MITI.js} +5 -5
  185. package/chunks/{chunk-X7LFJF5D.js → chunk-YM6KUQ2S.js} +36 -84
  186. package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
  187. package/chunks/{chunk-G37O7YO6.js → chunk-ZAWM6KRF.js} +3 -3
  188. package/chunks/{chunk-H3Q3RSKZ.js → chunk-ZFIWHBJ3.js} +1 -1
  189. package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
  190. package/chunks/{chunk-YLOHCA6I.js → chunk-ZKWO4CF4.js} +2 -2
  191. package/chunks/{chunk-VJJXG73H.js → chunk-ZMQL5BL5.js} +21 -6
  192. package/chunks/{chunk-FGHPZGOP.js → chunk-ZMUYBOYB.js} +39 -55
  193. package/chunks/{chunk-FV4DM2M4.js → chunk-ZNI3YJHS.js} +26 -6
  194. package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
  195. package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
  196. package/chunks/codex-subagent-executor-26XOHVKH.js +585 -0
  197. package/chunks/{config-utils-GPLIABL2.js → config-utils-JUG3MOYN.js} +68 -57
  198. package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-6K3POZFA.js} +65 -54
  199. package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-XQFZLA2V.js} +66 -55
  200. package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-4UJ6RM6W.js} +5 -2
  201. package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-T4IYIOC7.js} +178 -91
  202. package/chunks/{cron-create-GTPVMJCF.js → cron-create-6466RWSO.js} +2 -2
  203. package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-W4QUWHOA.js} +2 -2
  204. package/chunks/{cron-list-KTFKFDKC.js → cron-list-Q5LJ5PZE.js} +2 -2
  205. package/chunks/{daemon-2CKIAO3I.js → daemon-PHPJUXDZ.js} +4 -2
  206. package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-5WEMZ64U.js} +65 -54
  207. package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-GMD7QD4T.js} +74 -63
  208. package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-IPBZES2Z.js} +71 -60
  209. package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-MHYEN7X7.js} +71 -60
  210. package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
  211. package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-CY43FZNZ.js} +63 -52
  212. package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
  213. package/chunks/{display-image-CTNHJRZC.js → display-image-6AZIHP3J.js} +3 -3
  214. package/chunks/{dist-F34J4FZX.js → dist-2QYIVNS6.js} +2 -5
  215. package/chunks/{dist-6YDUH3BB.js → dist-GIMQXYLI.js} +10 -631
  216. package/chunks/{dist-NP7QKLVG.js → dist-GUB7QRYA.js} +3 -6
  217. package/chunks/{dist-Y5KC3IHW.js → dist-L45UB6DG.js} +233 -35
  218. package/chunks/{dist-XLV33CLY.js → dist-MPUZZOG5.js} +5 -18
  219. package/chunks/{dist-ZDNJK74R.js → dist-PA7WPFVE.js} +6 -37
  220. package/chunks/{dist-F6JLAJLE.js → dist-T6DDPDLQ.js} +16 -36
  221. package/chunks/{dist-BNQVF565.js → dist-TFGETXFN.js} +14 -37
  222. package/chunks/{dist-UFTFGI6I.js → dist-VDLSBCLM.js} +2 -6
  223. package/chunks/{edit-YJD6IETK.js → edit-6NUP5IPX.js} +48 -38
  224. package/chunks/{en-YJNRUQG4.js → en-ZSZW3PZX.js} +4 -1
  225. package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-EETDMJRF.js} +5 -5
  226. package/chunks/{enterPlanMode-EFPVTWIH.js → enterPlanMode-AZHYHEII.js} +48 -38
  227. package/chunks/{environment-HP3AXFTB.js → environment-ON6GIQ4F.js} +66 -55
  228. package/chunks/{errors-22ON46G7.js → errors-DQE63SCC.js} +65 -54
  229. package/chunks/exec-66WQIVYU.js +505 -0
  230. package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-DIPJ6S55.js} +5 -5
  231. package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-NHBV6LAI.js} +48 -38
  232. package/chunks/{fast-path-2X7BPMXX.js → fast-path-EPJSUZZC.js} +7 -7
  233. package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-XDYX7X5Z.js} +2 -2
  234. package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
  235. package/chunks/{glob-Y7ACIB3P.js → glob-MNEXQ2NV.js} +51 -41
  236. package/chunks/{goal-tools-DABMICUC.js → goal-tools-D2A4QBCJ.js} +54 -40
  237. package/chunks/{grep-BLHF2S5D.js → grep-EFWPV3MM.js} +2 -2
  238. package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-2RY3OQA6.js} +67 -56
  239. package/chunks/{i18n-C3GDCALP.js → i18n-HTHDB3I7.js} +64 -53
  240. package/chunks/{image-gen-XP4NNIYG.js → image-gen-2PHED3P4.js} +8 -6
  241. package/chunks/{initializer-4URDQL2G.js → initializer-JEVLJCQA.js} +71 -60
  242. package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-ITRB6J4L.js} +63 -52
  243. package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
  244. package/chunks/list-KOUIMHT5.js +133 -0
  245. package/chunks/{list-agents-2CXPGJUE.js → list-agents-IY4NEWLP.js} +17 -7
  246. package/chunks/{llm-2KPNSAVY.js → llm-F7WHGESY.js} +132 -120
  247. package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-NYQ2NAVA.js} +6 -5
  248. package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-HZUAX5CX.js} +71 -60
  249. package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-WMNU7C5J.js} +70 -59
  250. package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-ANX25YW2.js} +3 -3
  251. package/chunks/{ls-YV7RKLKY.js → ls-4XCMJNZF.js} +4 -4
  252. package/chunks/{lsp-NO3AMRZT.js → lsp-K5E2Y64R.js} +1 -1
  253. package/chunks/{managed-npm-update-VWBKHNIN.js → managed-npm-update-EJJB65QI.js} +63 -52
  254. package/chunks/mcp-I73R6HS3.js +127 -0
  255. package/chunks/{monitor-A255TNZR.js → monitor-T56GJNA4.js} +50 -40
  256. package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-CKHHJ423.js} +120 -109
  257. package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-W5TU3EZ3.js} +48 -38
  258. package/chunks/openai-WX26N5OJ.js +47 -0
  259. package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-TH6YAWAH.js} +33 -25
  260. package/chunks/openaiResponsesContentGenerator-EWLWQPKS.js +1738 -0
  261. package/chunks/{pidfile-B7DZC4TP.js → pidfile-RCC6TCEM.js} +63 -52
  262. package/chunks/process-registry-X6ZCASEN.js +10 -0
  263. package/chunks/{processUtils-BPZ2MCZS.js → processUtils-DQDQBRMC.js} +2 -2
  264. package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-2LXWAGWU.js} +64 -53
  265. package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
  266. package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-LG65Z2YV.js} +61 -49
  267. package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-PJ63CCFD.js} +7 -5
  268. package/chunks/{read-file-A4H4O3VQ.js → read-file-72HMRUT4.js} +12 -9
  269. package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-NPF44YSC.js} +1 -1
  270. package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-MDXCCW2J.js} +3 -3
  271. package/chunks/record-source-VJLKDGGR.js +22 -0
  272. package/chunks/{report-findings-TJ34R7QK.js → report-findings-CZTYMZTC.js} +4 -4
  273. package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-KOZHPVZU.js} +5 -5
  274. package/chunks/{resumeHistoryUtils-YQQ43E4N.js → resumeHistoryUtils-S2Q3M3EH.js} +69 -58
  275. package/chunks/{ripGrep-W32NWFTA.js → ripGrep-B2I3L5CO.js} +17 -13
  276. package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
  277. package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-AOPYFCVP.js} +305 -132
  278. package/chunks/{runtime-VRVBX2E5.js → runtime-TZMHKZAP.js} +77 -66
  279. package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-7RL6ZOYT.js} +72 -60
  280. package/chunks/{scheduler-M2YPN7Z7.js → scheduler-D6RLOFNU.js} +65 -54
  281. package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
  282. package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
  283. package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
  284. package/chunks/{send-message-76BKWKFZ.js → send-message-MMZVSS7P.js} +12 -9
  285. package/chunks/{serve-BE3H2P6P.js → serve-HWWDYI37.js} +72 -61
  286. package/chunks/{server-FLY5JERG.js → server-MD2X5U5L.js} +3156 -564
  287. package/chunks/{session-JVN62R5K.js → session-AFUMFNN7.js} +124 -113
  288. package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-QPN3YWTY.js} +63 -52
  289. package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-4Y2ANMJX.js} +72 -60
  290. package/chunks/{settings-D44YMZFT.js → settings-QQRQ2LR7.js} +74 -63
  291. package/chunks/{shell-3VE6I4V5.js → shell-NUYUYMVI.js} +48 -38
  292. package/chunks/{skill-FHEGRRZU.js → skill-KHLDVOXW.js} +68 -30
  293. package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-INLEGDEZ.js} +70 -59
  294. package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-KBGZHW2G.js} +67 -56
  295. package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-3QP5NDVJ.js} +65 -54
  296. package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-VBT3XDWN.js} +2682 -2153
  297. package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-AZHKCHMR.js} +1562 -2317
  298. package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-KRASPDE3.js} +2 -2
  299. package/chunks/{task-create-MWXJFRRM.js → task-create-TNXNT7ZD.js} +8 -8
  300. package/chunks/{task-list-EYO3FE57.js → task-list-FHNIJDKT.js} +1 -1
  301. package/chunks/{task-stop-BFSKRTGV.js → task-stop-MG4ZMTEI.js} +1 -1
  302. package/chunks/{task-update-2JJJRHMT.js → task-update-4HU62CJT.js} +8 -8
  303. package/chunks/{team-create-GY3VFY47.js → team-create-K5DNSJXR.js} +50 -40
  304. package/chunks/{team-delete-IQZ6XGFI.js → team-delete-2T44GUNN.js} +1 -1
  305. package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-2ZNAQT2A.js} +48 -38
  306. package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-23CW4A6Q.js} +65 -54
  307. package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-G2333AMH.js} +63 -52
  308. package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-BO2GR5MN.js} +4 -4
  309. package/chunks/{tool-search-XI3QWD5I.js → tool-search-MKQCKXN5.js} +22 -15
  310. package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-ENKTM2KX.js} +69 -58
  311. package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-2ETDL7OD.js} +64 -53
  312. package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-FMVNN5KA.js} +5 -5
  313. package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-KWRV5KLJ.js} +66 -55
  314. package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-7AUXAIQF.js} +73 -62
  315. package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NETKLLDV.js} +117 -106
  316. package/chunks/{version-EK7VAGSI.js → version-DACNN2ZM.js} +1 -1
  317. package/chunks/{web-fetch-24KZO763.js → web-fetch-CIVCRET4.js} +16 -12
  318. package/chunks/{web-search-CRNXKZ2X.js → web-search-GOHZRGMM.js} +389 -327
  319. package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-T7UGLVE4.js} +2 -7
  320. package/chunks/workflow-IL2FOALZ.js +1324 -0
  321. package/chunks/workspace-providers-status-YGXL6N5U.js +131 -0
  322. package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-E4IAOFFZ.js} +3 -1
  323. package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-KX6BIBYK.js} +69 -58
  324. package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-2KYYGDDR.js} +72 -59
  325. package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-5Q6LWBYR.js} +76 -65
  326. package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-PJZTFPVV.js} +72 -61
  327. package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-HS6PWNEA.js} +77 -66
  328. package/chunks/{write-file-ERG67ZFX.js → write-file-JB3DRM7O.js} +50 -40
  329. package/chunks/{zh-VBFCRQBL.js → zh-7UJA4ICT.js} +4 -1
  330. package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-RV24PWUI.js} +4 -1
  331. package/chunks/{zoom-image-WQYEC3SR.js → zoom-image-AVHQFOOQ.js} +12 -9
  332. package/cli.js +16 -16
  333. package/codeModeHost.js +4425 -0
  334. package/export-transcript-document.css +1 -0
  335. package/export-transcript-document.js +164 -165
  336. package/locales/ca.js +2 -2
  337. package/locales/de.js +2 -2
  338. package/locales/en.js +5 -2
  339. package/locales/fr.js +2 -2
  340. package/locales/ja.js +2 -2
  341. package/locales/pt.js +2 -2
  342. package/locales/ru.js +2 -2
  343. package/locales/zh-TW.js +5 -2
  344. package/locales/zh.js +5 -2
  345. package/package.json +6 -4
  346. package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-BH2nK5Z_.js} +1 -1
  347. package/web-shell/assets/{arc-qAF9_XsR.js → arc-CUUQ6krv.js} +1 -1
  348. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-CJjiRuGx.js} +1 -1
  349. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-GCDyU9ZX.js} +1 -1
  350. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-C68MiN6h.js} +1 -1
  351. package/web-shell/assets/channel-DauVlmdF.js +1 -0
  352. package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-_8B6frXZ.js} +1 -1
  353. package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CroSinX7.js} +1 -1
  354. package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CGn4Z0Fx.js} +1 -1
  355. package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-BI5nLQcf.js} +1 -1
  356. package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-CYJH0FuH.js} +1 -1
  357. package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-DjWZUqA1.js} +1 -1
  358. package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-DcTkIHm8.js} +1 -1
  359. package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-E8sZT5uK.js} +1 -1
  360. package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.js → chunk-XXDRQBXY-CurjPKw_.js} +1 -1
  361. package/web-shell/assets/classDiagram-DTDB5LWJ-BuIh7bj1.js +1 -0
  362. package/web-shell/assets/classDiagram-v2-JRS7N3AN-BuIh7bj1.js +1 -0
  363. package/web-shell/assets/{cose-bilkent-JH36ORCC-Cv2OunpE.js → cose-bilkent-JH36ORCC-CJEnNhth.js} +1 -1
  364. package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-jwEkm0yw.js} +1 -1
  365. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-B-OVQ6AO.js} +1 -1
  366. package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-CKKK9WNR.js} +1 -1
  367. package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-D486veFQ.js} +1 -1
  368. package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-C3GujqHv.js} +1 -1
  369. package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-BrOTDwuU.js} +1 -1
  370. package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-C4D9kWE3.js} +1 -1
  371. package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-7rAManT0.js} +1 -1
  372. package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-CqVzKOdr.js} +1 -1
  373. package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-D2s08fc_.js} +1 -1
  374. package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-CrKtBxB2.js} +1 -1
  375. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-CD1CKdlt.js} +1 -1
  376. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js → gitGraphDiagram-WWUBYQGX-CHDXdVNn.js} +1 -1
  377. package/web-shell/assets/index-D8tzgUOC.css +36 -0
  378. package/web-shell/assets/{index-DWoFMu5x.js → index-DWz95m74.js} +1 -1
  379. package/web-shell/assets/index-cDFf68Wd.js +2204 -0
  380. package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-Cr1oLCwe.js} +1 -1
  381. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U--RghV1mm.js} +1 -1
  382. package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-MN1ZkGW8.js} +1 -1
  383. package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-DL05VTn0.js} +1 -1
  384. package/web-shell/assets/{layout-Dvdh5jRH.js → layout-D_TvQzvn.js} +1 -1
  385. package/web-shell/assets/{linear-Dvc6KIW2.js → linear-B_0OH6XF.js} +1 -1
  386. package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-B9Nklh9I.js} +6 -6
  387. package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-CevIQ0LR.js} +1 -1
  388. package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-DQ8PIv0d.js} +1 -1
  389. package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-BVTV1pPe.js} +1 -1
  390. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-DHN6nhpe.js} +1 -1
  391. package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
  392. package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-8HOyX0u-.js} +1 -1
  393. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-9W4_14i8.js} +1 -1
  394. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-DSUBB2XP.js} +1 -1
  395. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-DD3jH6Jn.js} +1 -1
  396. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-RAFTU3Cz.js} +1 -1
  397. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-Drk-oZ2x.js} +1 -1
  398. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-QzYteVIm.js +1 -0
  399. package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.js → swimlanes-XN3QIQJK-Cy2nlOGx.js} +1 -1
  400. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-xTr-HG26.js +8 -0
  401. package/web-shell/assets/{timeline-definition-24CTP7MA-CT56K-gV.js → timeline-definition-24CTP7MA-B7outYof.js} +1 -1
  402. package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-Di_u1Ic6.js} +1 -1
  403. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-DYocuCAM.js} +1 -1
  404. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-AADDse54.js} +1 -1
  405. package/web-shell/index.html +29 -5
  406. package/chunks/chunk-V7RNNPGC.js +0 -44
  407. package/chunks/list-JOGBAC2R.js +0 -122
  408. package/chunks/mcp-6YYNSYLK.js +0 -116
  409. package/chunks/workflow-HD5NYMW5.js +0 -2907
  410. package/chunks/workspace-providers-status-MAM42IZS.js +0 -120
  411. package/web-shell/assets/channel-COIuCrVH.js +0 -1
  412. package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +0 -1
  413. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +0 -1
  414. package/web-shell/assets/index-CI1ysIEv.js +0 -2154
  415. package/web-shell/assets/index-CpxXGH-8.css +0 -36
  416. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +0 -1
  417. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +0 -8
  418. package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
  419. package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
@@ -51,7 +51,7 @@ import {
51
51
  prepareManagedScratchRoot,
52
52
  resolveAcpHttpEnabled,
53
53
  toDaemonStatusMemoryLimits
54
- } from "./chunk-VJJXG73H.js";
54
+ } from "./chunk-ZMQL5BL5.js";
55
55
  import {
56
56
  ConversationDirectoryIdentityError,
57
57
  assertExactConversationRootIdentity,
@@ -64,6 +64,11 @@ import {
64
64
  materializeConversationDirectoryIdentity,
65
65
  revalidateConversationRootIdentity
66
66
  } from "./chunk-PB7JBAHF.js";
67
+ import {
68
+ formatHostForAuthority,
69
+ isLoopbackAddress,
70
+ isLoopbackBind
71
+ } from "./chunk-DMEUXLSS.js";
67
72
  import {
68
73
  formatMemoryBudgetStderr,
69
74
  resolveDaemonMemoryBudget,
@@ -72,24 +77,23 @@ import {
72
77
  import {
73
78
  setDeferredRuntimeRequestTiming
74
79
  } from "./chunk-LAUEEBDL.js";
80
+ import {
81
+ normalizeSessionIdForLookup
82
+ } from "./chunk-ZEZKIS2K.js";
75
83
  import {
76
84
  require_express
77
85
  } from "./chunk-SVWWF5TZ.js";
78
86
  import {
79
87
  resolveWebShellDir
80
88
  } from "./chunk-FBX2SDQ4.js";
81
- import {
82
- formatHostForAuthority,
83
- isLoopbackAddress,
84
- isLoopbackBind
85
- } from "./chunk-DMEUXLSS.js";
86
- import {
87
- normalizeSessionIdForLookup
88
- } from "./chunk-ZEZKIS2K.js";
89
89
  import "./chunk-NYWWQ437.js";
90
90
  import {
91
91
  resolveSessionRestoreTimeoutMs
92
92
  } from "./chunk-4JRM2BSM.js";
93
+ import {
94
+ ConversationRuntimeOwnershipError,
95
+ LIVE_HOST_PROTOCOL_VERSION
96
+ } from "./chunk-Y5TM7SBV.js";
93
97
  import {
94
98
  DEFAULT_RING_SIZE
95
99
  } from "./chunk-7U5G6JXI.js";
@@ -102,30 +106,21 @@ import {
102
106
  normalizeMaxJournalBytes,
103
107
  normalizeMaxJournalEvents
104
108
  } from "./chunk-WCCLLK7X.js";
105
- import {
106
- resolveChannelCwd
107
- } from "./chunk-AUTUFD5X.js";
108
- import {
109
- ConversationRuntimeOwnershipError,
110
- LIVE_HOST_PROTOCOL_VERSION
111
- } from "./chunk-2Z3T52OC.js";
112
109
  import "./chunk-ZL4HFSL6.js";
113
- import "./chunk-K6KS3LTN.js";
114
- import "./chunk-OSHQMOBS.js";
115
110
  import {
116
- consumeServeFastPathRejectedLoaderKeys,
117
- loadServeFastPathSettings,
118
- preResolveServeFastPathHomeEnvOverrides
119
- } from "./chunk-FV4DM2M4.js";
111
+ resolveChannelCwd
112
+ } from "./chunk-ABNX6E6K.js";
120
113
  import {
121
- MAX_REGISTERED_WORKSPACES,
114
+ resolveMaxRegisteredWorkspaces,
122
115
  resolveWorkspaceInputs,
123
116
  workspaceRegistrationId
124
- } from "./chunk-LWX4WDFF.js";
125
- import "./chunk-TRQNRP2H.js";
117
+ } from "./chunk-2S5RIGZJ.js";
118
+ import {
119
+ assertChannelControlWorkspaceCapacity
120
+ } from "./chunk-J7LBAKDH.js";
126
121
  import {
127
122
  LOAD_REPLAY_META_KEY
128
- } from "./chunk-PSPAM24S.js";
123
+ } from "./chunk-TBSCTWKF.js";
129
124
  import "./chunk-FAWTMDX7.js";
130
125
  import {
131
126
  canonicalizeWorkspace,
@@ -134,28 +129,31 @@ import {
134
129
  import {
135
130
  ExtraCaInspectionError,
136
131
  loadableCertificates
137
- } from "./chunk-KEPC5BOL.js";
132
+ } from "./chunk-IBRQG2MP.js";
138
133
  import "./chunk-FYJ7W2PI.js";
139
134
  import "./chunk-Z7B6SRPM.js";
140
135
  import {
141
136
  ChannelWebhookEnqueueError
142
137
  } from "./chunk-STUJ7IMZ.js";
143
- import {
144
- normalizeWorkerDiagnostic,
145
- sanitizeWorkerDiagnostic
146
- } from "./chunk-DARWOZY6.js";
147
138
  import {
148
139
  QWEN_SERVER_TOKEN_ENV
149
140
  } from "./chunk-GYTKQYDB.js";
150
141
  import {
151
- channelSelectionNames
152
- } from "./chunk-ALMR3E6Q.js";
142
+ normalizeWorkerDiagnostic,
143
+ sanitizeWorkerDiagnostic
144
+ } from "./chunk-WD6YQI5M.js";
145
+ import {
146
+ channelSelectionNames,
147
+ normalizeServeChannelSelection
148
+ } from "./chunk-GDWE23OR.js";
153
149
  import {
154
150
  ChannelDeliveryError,
155
151
  isChannelDeliveryError
156
152
  } from "./chunk-RKFGE7JH.js";
153
+ import {
154
+ MAX_CHANNEL_CONTROL_WORKSPACES
155
+ } from "./chunk-CJ3DHN5I.js";
157
156
  import "./chunk-UDG5EZJI.js";
158
- import "./chunk-M5GB774H.js";
159
157
  import {
160
158
  EXTERNAL_TOOL_GUARD_PROVIDER_ATTACHED_VALUE,
161
159
  EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
@@ -163,11 +161,20 @@ import {
163
161
  PRIVATE_EXTERNAL_TOOL_GUARD_ENV,
164
162
  PRIVATE_EXTERNAL_TOOL_GUARD_PROVIDER_ENV
165
163
  } from "./chunk-3VUENPWF.js";
166
- import "./chunk-TGNNLRC3.js";
164
+ import {
165
+ redactLogCredentials
166
+ } from "./chunk-M5GB774H.js";
167
+ import "./chunk-K6KS3LTN.js";
168
+ import "./chunk-OSHQMOBS.js";
167
169
  import {
168
170
  sanitizeLogText
169
- } from "./chunk-WDVV3LRM.js";
170
- import "./chunk-IW6RQPQB.js";
171
+ } from "./chunk-EPVEPTI3.js";
172
+ import "./chunk-IJOS26LH.js";
173
+ import {
174
+ consumeServeFastPathRejectedLoaderKeys,
175
+ loadServeFastPathSettings,
176
+ preResolveServeFastPathHomeEnvOverrides
177
+ } from "./chunk-ZNI3YJHS.js";
171
178
  import "./chunk-BW4333PP.js";
172
179
  import {
173
180
  getGlobalQwenDirLite,
@@ -178,10 +185,10 @@ import {
178
185
  clearLoaderKeyRejectionReporterIfCurrent,
179
186
  scrubInheritedLoaderEnv,
180
187
  setLoaderKeyRejectionReporter
181
- } from "./chunk-QTNCGZHQ.js";
188
+ } from "./chunk-XX5HQLCZ.js";
182
189
  import {
183
190
  getCliVersion
184
- } from "./chunk-MV5DTLJV.js";
191
+ } from "./chunk-OHCR4O3U.js";
185
192
  import "./chunk-W3N5XAZ6.js";
186
193
  import "./chunk-NPQ5ZKRP.js";
187
194
  import {
@@ -194,10 +201,10 @@ import {
194
201
  } from "./chunk-32CM56LO.js";
195
202
  import "./chunk-LJZSMWOH.js";
196
203
  import "./chunk-GOFAQQZA.js";
197
- import "./chunk-65I7S4Z3.js";
198
204
  import "./chunk-6HUXPLB5.js";
199
205
  import "./chunk-TWPJO254.js";
200
206
  import "./chunk-CQ35AJ4Z.js";
207
+ import "./chunk-65I7S4Z3.js";
201
208
  import {
202
209
  require_proper_lockfile
203
210
  } from "./chunk-MLXTMF7H.js";
@@ -206,6 +213,12 @@ import "./chunk-5ETULJLP.js";
206
213
  import {
207
214
  MEMORY_PROJECT_SCOPES
208
215
  } from "./chunk-HD7O6WLV.js";
216
+ import {
217
+ TraceFlags,
218
+ init_esm,
219
+ isSpanContextValid,
220
+ trace
221
+ } from "./chunk-TBWQLLFO.js";
209
222
  import {
210
223
  finalizeStartupProfile,
211
224
  profileCheckpoint
@@ -218,12 +231,6 @@ import {
218
231
  } from "./chunk-7FA2II6K.js";
219
232
  import "./chunk-DMTGGOSA.js";
220
233
  import "./chunk-YQ3U5MUC.js";
221
- import {
222
- TraceFlags,
223
- init_esm,
224
- isSpanContextValid,
225
- trace
226
- } from "./chunk-TBWQLLFO.js";
227
234
  import {
228
235
  init_esbuild_shims
229
236
  } from "./chunk-5O2XNYP6.js";
@@ -3098,6 +3105,16 @@ var QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS_ENV = "QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS";
3098
3105
  var SHUTDOWN_FORCE_CLOSE_MS = 5e3;
3099
3106
  var DAEMON_LOG_FORCED_FLUSH_BUDGET_MS = 250;
3100
3107
  var DEFAULT_LIVE_DISCOVERY_RETRY_MS = 5e3;
3108
+ var ENSURE_KEEP_ALIVE_MS = 10 * 6e4;
3109
+ function deepestErrorMessage(err) {
3110
+ if (!(err instanceof Error)) return String(err);
3111
+ let deepest = err;
3112
+ while (deepest.cause instanceof Error) {
3113
+ deepest = deepest.cause;
3114
+ }
3115
+ return deepest.message;
3116
+ }
3117
+ __name(deepestErrorMessage, "deepestErrorMessage");
3101
3118
  function channelDeliveryPublicError(code) {
3102
3119
  switch (code) {
3103
3120
  case "channel_worker_unavailable":
@@ -3246,7 +3263,8 @@ function isNonNegativeIntegerOrInfinity(value) {
3246
3263
  return value === Number.POSITIVE_INFINITY || Number.isFinite(value) && Number.isInteger(value) && value >= 0;
3247
3264
  }
3248
3265
  __name(isNonNegativeIntegerOrInfinity, "isNonNegativeIntegerOrInfinity");
3249
- function deriveDefaultMaxTotalSessions(maxSessionsPerWorkspace, workspaceCount) {
3266
+ function deriveDefaultMaxTotalSessions(maxSessionsPerWorkspace, workspaceCount, maxRegisteredWorkspaces) {
3267
+ if (maxRegisteredWorkspaces > 25) return 800;
3250
3268
  if (workspaceCount <= 1) return void 0;
3251
3269
  const perWorkspace = maxSessionsPerWorkspace ?? DEFAULT_MAX_SESSIONS;
3252
3270
  if (perWorkspace === 0 || perWorkspace === Number.POSITIVE_INFINITY) {
@@ -3924,12 +3942,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
3924
3942
  var channelWorkerRuntimePromise;
3925
3943
  async function loadChannelWorkerRuntime() {
3926
3944
  channelWorkerRuntimePromise ??= Promise.all([
3927
- import("./channel-worker-supervisor-EMITFMCP.js"),
3928
- import("./pidfile-B7DZC4TP.js"),
3929
- import("./runtime-VRVBX2E5.js"),
3945
+ import("./channel-worker-supervisor-OOYY7BAQ.js"),
3946
+ import("./pidfile-RCC6TCEM.js"),
3947
+ import("./runtime-TZMHKZAP.js"),
3930
3948
  import("./cli-entry-path-4VJ3Y6T2.js"),
3931
- import("./channel-worker-group-SQ5FRWOH.js"),
3932
- import("./channel-worker-manager-TU4ZNWOE.js")
3949
+ import("./channel-worker-group-JR6JOELM.js"),
3950
+ import("./channel-worker-manager-AVKJEZFL.js")
3933
3951
  ]).then(
3934
3952
  ([
3935
3953
  supervisor,
@@ -4035,13 +4053,13 @@ function shouldPreheatBridge(deps) {
4035
4053
  __name(shouldPreheatBridge, "shouldPreheatBridge");
4036
4054
  var coreRuntimePromise;
4037
4055
  function loadCoreRuntime() {
4038
- coreRuntimePromise ??= import("./core-runtime-WKYKWVYU.js");
4056
+ coreRuntimePromise ??= import("./core-runtime-XQFZLA2V.js");
4039
4057
  return coreRuntimePromise;
4040
4058
  }
4041
4059
  __name(loadCoreRuntime, "loadCoreRuntime");
4042
4060
  var liveDiscoveryRuntimePromise;
4043
4061
  function loadLiveDiscoveryRuntime() {
4044
- liveDiscoveryRuntimePromise ??= import("./discovery-XP4RMDUM.js");
4062
+ liveDiscoveryRuntimePromise ??= import("./discovery-5KUEPR65.js");
4045
4063
  return liveDiscoveryRuntimePromise;
4046
4064
  }
4047
4065
  __name(loadLiveDiscoveryRuntime, "loadLiveDiscoveryRuntime");
@@ -4071,10 +4089,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
4071
4089
  var settingsRuntimePromise;
4072
4090
  function loadSettingsRuntimeModules() {
4073
4091
  settingsRuntimePromise ??= Promise.all([
4074
- import("./settings-D44YMZFT.js"),
4075
- import("./environment-HP3AXFTB.js"),
4076
- import("./loadedSettingsAdapter-DVKROEJD.js"),
4077
- import("./trustedFolders-OVAQKNV5.js")
4092
+ import("./settings-QQRQ2LR7.js"),
4093
+ import("./environment-ON6GIQ4F.js"),
4094
+ import("./loadedSettingsAdapter-HZUAX5CX.js"),
4095
+ import("./trustedFolders-2ETDL7OD.js")
4078
4096
  ]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
4079
4097
  settings,
4080
4098
  environment,
@@ -4087,8 +4105,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
4087
4105
  var channelWebhookConfigRuntimePromise;
4088
4106
  function loadChannelWebhookConfigRuntime() {
4089
4107
  channelWebhookConfigRuntimePromise ??= Promise.all([
4090
- import("./runtime-VRVBX2E5.js"),
4091
- import("./config-utils-GPLIABL2.js")
4108
+ import("./runtime-TZMHKZAP.js"),
4109
+ import("./config-utils-JUG3MOYN.js")
4092
4110
  ]).then(([channelRuntime, configUtils]) => ({
4093
4111
  loadChannelsConfig: channelRuntime.loadChannelsConfig,
4094
4112
  parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
@@ -4115,19 +4133,19 @@ async function loadServeRuntimeModules() {
4115
4133
  workspaceRuntimeCoordinatorModule,
4116
4134
  promptLedgerModule
4117
4135
  ] = await Promise.all([
4118
- import("./server-FLY5JERG.js"),
4119
- import("./bridge-AOX5IY44.js"),
4120
- import("./spawnChannel-T6MX2ZDN.js"),
4121
- import("./process-registry-OAEG6WGC.js"),
4122
- import("./workspace-service-5IFDCNN3.js"),
4136
+ import("./server-MD2X5U5L.js"),
4137
+ import("./bridge-ID6N4IH5.js"),
4138
+ import("./spawnChannel-KBGZHW2G.js"),
4139
+ import("./process-registry-X6ZCASEN.js"),
4140
+ import("./workspace-service-5Q6LWBYR.js"),
4123
4141
  import("./types-HKLPXZB3.js"),
4124
- import("./daemon-status-provider-OK7VONJG.js"),
4125
- import("./workspace-providers-status-MAM42IZS.js"),
4126
- import("./workspace-skills-status-FJ3HNH4H.js"),
4127
- import("./total-session-admission-3SNSJJ32.js"),
4128
- import("./workspace-registry-7RDDOBLN.js"),
4129
- import("./workspace-runtime-coordinator-LEPDPXJO.js"),
4130
- import("./prompt-terminal-ledger-FYYTAOXS.js")
4142
+ import("./daemon-status-provider-GMD7QD4T.js"),
4143
+ import("./workspace-providers-status-YGXL6N5U.js"),
4144
+ import("./workspace-skills-status-PJZTFPVV.js"),
4145
+ import("./total-session-admission-ENKTM2KX.js"),
4146
+ import("./workspace-registry-KX6BIBYK.js"),
4147
+ import("./workspace-runtime-coordinator-2KYYGDDR.js"),
4148
+ import("./prompt-terminal-ledger-2LXWAGWU.js")
4131
4149
  ]);
4132
4150
  return {
4133
4151
  createServeApp: serverModule.createServeApp,
@@ -4240,6 +4258,14 @@ function createBootstrapCapabilities(input) {
4240
4258
  transports: ["rest"],
4241
4259
  policy: { permission: input.permissionPolicy ?? "first-responder" },
4242
4260
  limits: {
4261
+ maxRegisteredWorkspaces: input.opts.maxRegisteredWorkspaces,
4262
+ maxChannelControlWorkspaces: MAX_CHANNEL_CONTROL_WORKSPACES,
4263
+ ...input.opts.maxTotalSessions !== void 0 ? {
4264
+ maxSessionsPerWorkspace: advertisedMaxSessions(
4265
+ input.opts.maxSessions
4266
+ ),
4267
+ maxTotalSessions: positiveFiniteOrNull(input.opts.maxTotalSessions)
4268
+ } : {},
4243
4269
  maxPendingPromptsPerSession: advertisedMaxPendingPromptsPerSession(
4244
4270
  input.opts.maxPendingPromptsPerSession
4245
4271
  ),
@@ -4500,6 +4526,8 @@ function createBootstrapServeApp(input) {
4500
4526
  sessionShellCommandEnabled
4501
4527
  },
4502
4528
  limits: {
4529
+ maxRegisteredWorkspaces: opts.maxRegisteredWorkspaces,
4530
+ maxChannelControlWorkspaces: MAX_CHANNEL_CONTROL_WORKSPACES,
4503
4531
  maxSessions: advertisedMaxSessions(opts.maxSessions),
4504
4532
  maxTotalSessions: positiveFiniteOrNull(opts.maxTotalSessions),
4505
4533
  maxPendingPromptsPerSession: advertisedMaxPendingPromptsPerSession(
@@ -4941,6 +4969,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4941
4969
  const opts = {
4942
4970
  ...optsIn,
4943
4971
  hostname: bindHostname,
4972
+ maxRegisteredWorkspaces: resolveMaxRegisteredWorkspaces(
4973
+ optsIn.maxRegisteredWorkspaces,
4974
+ daemonRuntimeBaseEnv
4975
+ ),
4944
4976
  token,
4945
4977
  promptDeadlineMs,
4946
4978
  writerIdleTimeoutMs,
@@ -5163,9 +5195,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5163
5195
  }
5164
5196
  }
5165
5197
  }
5166
- if (workspaceInputs.length > MAX_REGISTERED_WORKSPACES) {
5198
+ if (workspaceInputs.length > opts.maxRegisteredWorkspaces) {
5167
5199
  throw new Error(
5168
- `At most ${MAX_REGISTERED_WORKSPACES} --workspace values may be registered.`
5200
+ `At most ${opts.maxRegisteredWorkspaces} --workspace values may be registered.`
5169
5201
  );
5170
5202
  }
5171
5203
  opts.daemonMemoryBudget = resolveDaemonMemoryBudget({
@@ -5205,8 +5237,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5205
5237
  );
5206
5238
  }
5207
5239
  let workspaceRegistrationStore = deps.workspaceRegistrationStore;
5240
+ const explicitWorkspaceCount = workspaceInputs.length;
5208
5241
  if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
5209
- const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-HKLJEDQX.js");
5242
+ const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-E4IAOFFZ.js");
5210
5243
  workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
5211
5244
  }
5212
5245
  if (workspaceRegistrationStore) {
@@ -5261,14 +5294,6 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5261
5294
  );
5262
5295
  continue;
5263
5296
  }
5264
- if (workspaceInputs.length >= MAX_REGISTERED_WORKSPACES) {
5265
- writeStderrLine(
5266
- `qwen serve: skipping persisted workspace registration ${JSON.stringify(
5267
- storedWorkspace
5268
- )}: workspace limit reached`
5269
- );
5270
- continue;
5271
- }
5272
5297
  workspaceInputs.push({
5273
5298
  raw: storedWorkspace,
5274
5299
  cwd,
@@ -5283,6 +5308,11 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5283
5308
  );
5284
5309
  }
5285
5310
  }
5311
+ if (workspaceInputs.length > opts.maxRegisteredWorkspaces) {
5312
+ throw new Error(
5313
+ `${explicitWorkspaceCount} explicit + ${workspaceInputs.length - explicitWorkspaceCount} restored workspaces exceed the configured limit of ${opts.maxRegisteredWorkspaces}. Restart with the previous capacity, forget registrations and reduce explicit --workspace values before lowering the limit. The registration store was not changed.`
5314
+ );
5315
+ }
5286
5316
  if (workspaceInputs.length > 1 && deps.bridge) {
5287
5317
  throw new Error(
5288
5318
  "Injected bridge dependencies are only supported with a single workspace; multiple --workspace values require runQwenServe to construct one bridge per workspace."
@@ -5308,7 +5338,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5308
5338
  throw err;
5309
5339
  }
5310
5340
  writeStderrLine(
5311
- `qwen serve: could not read settings for context.fileName / policy.* (${err instanceof Error ? err.message : String(err)}); falling back to defaults. Restart with a valid settings.json to apply context.fileName / policy.* overrides.`
5341
+ `qwen serve: could not read settings for context.fileName / policy.* / serve.channels (${err instanceof Error ? err.message : String(err)}); falling back to defaults. Restart with a valid settings.json to apply context.fileName / policy.* / serve.channels overrides.`
5312
5342
  );
5313
5343
  }
5314
5344
  const daemonLogBaseDir = await resolveDaemonLogBaseDirForRun({
@@ -5321,6 +5351,54 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5321
5351
  baseDir: daemonLogBaseDir
5322
5352
  });
5323
5353
  loggerLifecycle.initialized(daemonLog);
5354
+ let channelSelectionFromSettings = false;
5355
+ const reportConfiguredChannelStartupFailure = /* @__PURE__ */ __name((error) => {
5356
+ const message = sanitizeLogText(
5357
+ redactLogCredentials(
5358
+ error instanceof Error ? error.message : String(error)
5359
+ ),
5360
+ 512
5361
+ );
5362
+ const detail = /[.!?]$/.test(message) ? message : `${message}.`;
5363
+ writeStderrLine(
5364
+ `qwen serve: workspace serve.channels was not restored: ${detail} Continuing without channels.`
5365
+ );
5366
+ daemonLog.warn(
5367
+ `workspace serve.channels was not restored: ${detail} Continuing without channels`
5368
+ );
5369
+ }, "reportConfiguredChannelStartupFailure");
5370
+ if (!opts.channelSelection && bootSettings?.serve?.channels !== void 0) {
5371
+ try {
5372
+ const rawChannels = bootSettings.serve.channels;
5373
+ if (!Array.isArray(rawChannels) || !rawChannels.every((name) => typeof name === "string")) {
5374
+ throw new Error("serve.channels must be a string array.");
5375
+ }
5376
+ const configuredChannels = rawChannels.filter((name, index) => {
5377
+ if (!name || name !== name.trim() || sanitizeLogText(name, name.length) !== name) {
5378
+ daemonLog.warn(
5379
+ `ignored invalid workspace serve.channels entry at index ${index}`
5380
+ );
5381
+ return false;
5382
+ }
5383
+ return true;
5384
+ });
5385
+ opts.channelSelection = normalizeServeChannelSelection(
5386
+ configuredChannels,
5387
+ "serve.channels"
5388
+ );
5389
+ if (opts.channelSelection) {
5390
+ channelSelectionFromSettings = true;
5391
+ channelRuntime = await ensureChannelRuntime();
5392
+ daemonLog.info("restoring channels from workspace serve.channels", {
5393
+ channels: channelSelectionNames(opts.channelSelection),
5394
+ workspaceCwd: boundWorkspace
5395
+ });
5396
+ }
5397
+ } catch (error) {
5398
+ opts.channelSelection = void 0;
5399
+ reportConfiguredChannelStartupFailure(error);
5400
+ }
5401
+ }
5324
5402
  daemonLog.info("project memory scope resolved", {
5325
5403
  projectMemoryScope: resolvedMemoryProjectScope,
5326
5404
  projectMemoryScopeSource: memoryProjectScopeSource,
@@ -5472,7 +5550,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5472
5550
  }
5473
5551
  opts.maxTotalSessions ??= deriveDefaultMaxTotalSessions(
5474
5552
  opts.maxSessions,
5475
- workspaceInputs.length
5553
+ workspaceInputs.length,
5554
+ opts.maxRegisteredWorkspaces
5476
5555
  );
5477
5556
  const inheritedNoPool = process.env["QWEN_SERVE_NO_MCP_POOL"] === "1";
5478
5557
  if (opts.mcpPoolActive === void 0 && inheritedNoPool) {
@@ -5497,7 +5576,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5497
5576
  "qwen serve: required external tool guard handshake succeeded."
5498
5577
  );
5499
5578
  }
5500
- const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-73ZWOLKL.js");
5579
+ const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-5WEMZ64U.js");
5501
5580
  const daemonToolGuardHandler = createDaemonToolGuard(
5502
5581
  externalToolGuardHandler
5503
5582
  );
@@ -5848,7 +5927,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5848
5927
  loadCoreRuntime(),
5849
5928
  loadSettingsRuntimeModules(),
5850
5929
  cliVersionPromise,
5851
- import("./daemon-trust-policy-CAUCREG2.js")
5930
+ import("./daemon-trust-policy-IPBZES2Z.js")
5852
5931
  ]);
5853
5932
  getWorkspaceRuntimeCoordinatorIfSupported = runtime.getWorkspaceRuntimeCoordinatorIfSupported;
5854
5933
  cliVersion = resolvedCliVersion;
@@ -6256,7 +6335,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6256
6335
  }), "persistDisabledToolsFn");
6257
6336
  const persistDisabledSkillsFn = /* @__PURE__ */ __name((workspace, skillName, enabled, assertGenerationOpen) => withSettingsLock(workspace, async () => {
6258
6337
  assertGenerationOpen?.();
6259
- const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-VHEJMBFL.js");
6338
+ const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-INLEGDEZ.js");
6260
6339
  const fresh = loadSettingsForPersistence(workspace);
6261
6340
  const workspaceDisabled = skillSettingStrings(
6262
6341
  fresh,
@@ -6306,7 +6385,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6306
6385
  }), "persistDisabledSkillsFn");
6307
6386
  const persistDisabledSkillsBatchFn = /* @__PURE__ */ __name((workspace, skillNames, enabled, assertGenerationOpen) => withSettingsLock(workspace, async () => {
6308
6387
  assertGenerationOpen?.();
6309
- const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-VHEJMBFL.js");
6388
+ const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-INLEGDEZ.js");
6310
6389
  const fresh = loadSettingsForPersistence(workspace);
6311
6390
  const initialDisabled = skillSettingStrings(
6312
6391
  fresh,
@@ -6397,10 +6476,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6397
6476
  }
6398
6477
  }), "persistSettingsFn");
6399
6478
  const [{ createSubSessionLauncher }, scheduledTaskRoutes] = await Promise.all([
6400
- import("./create-sub-session-PPLXB3JJ.js"),
6401
- import("./scheduled-tasks-D65KJDA3.js")
6479
+ import("./create-sub-session-T4IYIOC7.js"),
6480
+ import("./scheduled-tasks-7RL6ZOYT.js")
6402
6481
  ]);
6403
- const { sessionAttachmentsRoots } = await import("./session-attachments-root-7ACGLHXA.js");
6482
+ const { sessionAttachmentsRoots } = await import("./session-attachments-root-QPN3YWTY.js");
6404
6483
  const createCurrentSessionScheduledTaskHandler = /* @__PURE__ */ __name((workspaceCwd, runtimeBaseDir, getBridge, assertGenerationOpen) => async ({
6405
6484
  callerSessionId,
6406
6485
  cron,
@@ -6437,6 +6516,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6437
6516
  const subSessionLauncher = createSubSessionLauncher({
6438
6517
  getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
6439
6518
  boundWorkspace,
6519
+ runtimeBaseDir: primarySessionRuntimeBaseDir,
6440
6520
  ...subSessionConcurrencyCapsFromSettings(
6441
6521
  runtimeBootSettings?.merged.serve ?? {}
6442
6522
  )
@@ -6446,6 +6526,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6446
6526
  primarySessionRuntimeBaseDir
6447
6527
  );
6448
6528
  const bridge = deps.bridge ?? runtime.createAcpSessionBridge({
6529
+ artifactSnapshotRuntimeBaseDir: primarySessionRuntimeBaseDir,
6449
6530
  sessionAttachmentsRoot: attachmentsRoots.root,
6450
6531
  sessionAttachmentsFallbackRoot: attachmentsRoots.fallback,
6451
6532
  // Reverse tool channel: let `BridgeClient.extMethod` reach the WS
@@ -6885,6 +6966,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6885
6966
  const secondarySubSessionLauncher = createSubSessionLauncher({
6886
6967
  getBridge: /* @__PURE__ */ __name(() => secondaryBridgeRef, "getBridge"),
6887
6968
  boundWorkspace: workspaceInput.cwd,
6969
+ runtimeBaseDir: secondaryEnv.sessionRuntimeBaseDir,
6888
6970
  ...subSessionConcurrencyCapsFromSettings(
6889
6971
  secondarySettings?.merged.serve ?? {}
6890
6972
  )
@@ -6894,6 +6976,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6894
6976
  secondaryEnv.sessionRuntimeBaseDir
6895
6977
  );
6896
6978
  const secondaryBridge = runtime.createAcpSessionBridge({
6979
+ artifactSnapshotRuntimeBaseDir: secondaryEnv.sessionRuntimeBaseDir,
6897
6980
  sessionAttachmentsRoot: secondaryAttachmentsRoots.root,
6898
6981
  sessionAttachmentsFallbackRoot: secondaryAttachmentsRoots.fallback,
6899
6982
  clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
@@ -7241,7 +7324,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7241
7324
  };
7242
7325
  sessionPrRefreshTimer?.dispose();
7243
7326
  const refreshGeneration = ++sessionPrRefreshGeneration;
7244
- void import("./session-pr-refresh-TQS57SDK.js").then((mod) => {
7327
+ void import("./session-pr-refresh-4Y2ANMJX.js").then((mod) => {
7245
7328
  if (refreshGeneration !== sessionPrRefreshGeneration) return;
7246
7329
  sessionPrRefreshTimer = mod.startSessionPrRefreshTimer({
7247
7330
  workspaceRegistry,
@@ -7325,6 +7408,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7325
7408
  const wsSubSessionLauncher = createSubSessionLauncher({
7326
7409
  getBridge: /* @__PURE__ */ __name(() => wsBridgeRef, "getBridge"),
7327
7410
  boundWorkspace: cwd,
7411
+ runtimeBaseDir: wsEnv.sessionRuntimeBaseDir,
7328
7412
  ...provenance === "live-conversation" ? {
7329
7413
  notifySentCompletion: true,
7330
7414
  getStandaloneSessionService: /* @__PURE__ */ __name(() => (runtimeApp ?? runtimeAppForCleanup)?.locals?.["standaloneSessionService"], "getStandaloneSessionService"),
@@ -7348,6 +7432,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7348
7432
  wsEnv.sessionRuntimeBaseDir
7349
7433
  );
7350
7434
  wsBridge = runtime.createAcpSessionBridge({
7435
+ artifactSnapshotRuntimeBaseDir: wsEnv.sessionRuntimeBaseDir,
7351
7436
  sessionAttachmentsRoot: wsAttachmentsRoots.root,
7352
7437
  sessionAttachmentsFallbackRoot: wsAttachmentsRoots.fallback,
7353
7438
  clientMcpSender: wsClientMcpRegistry.lookup,
@@ -7911,8 +7996,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7911
7996
  { createChannelManagementService },
7912
7997
  { WorkspaceChannelSettingsStore }
7913
7998
  ] = await Promise.all([
7914
- import("./channel-management-service-MWQGHPAS.js"),
7915
- import("./channel-settings-store-XZCGDGHW.js")
7999
+ import("./channel-management-service-ASCXI7FR.js"),
8000
+ import("./channel-settings-store-TPJFQAZY.js")
7916
8001
  ]);
7917
8002
  return createChannelManagementService({
7918
8003
  workspaceCwd: targetRuntime.workspaceCwd,
@@ -7966,6 +8051,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7966
8051
  throw new Error("Workspace runtime publication validation failed.");
7967
8052
  }, "validateWorkspaceRuntimeForPublication");
7968
8053
  const app2 = runtime.createServeApp(opts, () => actualPort, {
8054
+ maxChannelControlWorkspaces: MAX_CHANNEL_CONTROL_WORKSPACES,
7969
8055
  serveAppLifecycle,
7970
8056
  liveDiscoveryStableBaseDir,
7971
8057
  workspaceRegistry,
@@ -8117,8 +8203,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8117
8203
  { createWorkspaceTrustReconciler },
8118
8204
  { createDaemonTrustPolicyMonitor }
8119
8205
  ] = await Promise.all([
8120
- import("./workspace-trust-reconciler-PQFHIWLR.js"),
8121
- import("./daemon-trust-policy-monitor-3Y36OOEQ.js")
8206
+ import("./workspace-trust-reconciler-HS6PWNEA.js"),
8207
+ import("./daemon-trust-policy-monitor-MHYEN7X7.js")
8122
8208
  ]);
8123
8209
  const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
8124
8210
  const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
@@ -8315,7 +8401,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8315
8401
  // through (and start the runtime) exactly like the warm app would.
8316
8402
  // Dynamic import keeps web-shell-static out of the serve fast-path
8317
8403
  // static closure (see the import-boundary guards in fast-path.test.ts).
8318
- isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-BFDESDD4.js").then(
8404
+ isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-T7UGLVE4.js").then(
8319
8405
  (webShellStatic) => webShellStatic.isPreAuthWebShellRequest(req)
8320
8406
  ) : void 0
8321
8407
  });
@@ -8334,11 +8420,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8334
8420
  `Invalid maxConnections: ${opts.maxConnections}. Must be >= 0 (0 / Infinity = unlimited).`
8335
8421
  );
8336
8422
  }
8337
- const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
8338
- const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-CAUCREG2.js") : void 0;
8339
- const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
8423
+ let channelValidationSettingsRuntime;
8424
+ let channelValidationTrustPolicy;
8425
+ let channelValidationTrustSnapshot;
8340
8426
  const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
8341
- if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
8427
+ const validationSettingsRuntime = channelValidationSettingsRuntime;
8428
+ if (!opts.channelSelection || !validationSettingsRuntime || !channelRuntime) {
8342
8429
  return void 0;
8343
8430
  }
8344
8431
  const registry = (runtimeApp ?? runtimeAppForCleanup)?.locals?.["workspaceRegistry"];
@@ -8378,15 +8465,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8378
8465
  { code: "untrusted_workspace" }
8379
8466
  );
8380
8467
  }
8381
- const effectiveEnv = runtime ? workspaceRuntimeEffectiveEnv(runtime, daemonRuntimeBaseEnv) : channelValidationSettingsRuntime.environment.buildRuntimeEnvironment(
8382
- channelValidationSettingsRuntime.settings.loadSettings(
8383
- workspace.cwd,
8384
- {
8385
- skipLoadEnvironment: true,
8386
- skipWorkspaceSettings: false,
8387
- workspaceTrusted: true
8388
- }
8389
- ).merged,
8468
+ const effectiveEnv = runtime ? workspaceRuntimeEffectiveEnv(runtime, daemonRuntimeBaseEnv) : validationSettingsRuntime.environment.buildRuntimeEnvironment(
8469
+ validationSettingsRuntime.settings.loadSettings(workspace.cwd, {
8470
+ skipLoadEnvironment: true,
8471
+ skipWorkspaceSettings: false,
8472
+ workspaceTrusted: true
8473
+ }).merged,
8390
8474
  workspace.cwd,
8391
8475
  daemonRuntimeBaseEnv,
8392
8476
  trusted
@@ -8397,7 +8481,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8397
8481
  const workspaces = workspaceInputs.map((workspace, index) => {
8398
8482
  const runtime = resolveRuntime(workspace.cwd);
8399
8483
  const trusted = resolveTrusted(workspace.cwd, index === 0, runtime);
8400
- const settings = channelValidationSettingsRuntime.settings.loadSettings(
8484
+ const settings = validationSettingsRuntime.settings.loadSettings(
8401
8485
  workspace.cwd,
8402
8486
  {
8403
8487
  skipLoadEnvironment: true,
@@ -8408,7 +8492,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8408
8492
  settingsByWorkspace.set(workspace.cwd, settings);
8409
8493
  channelWebhookEnvByWorkspace.set(
8410
8494
  workspace.cwd,
8411
- runtime ? workspaceRuntimeEffectiveEnv(runtime, daemonRuntimeBaseEnv) : channelValidationSettingsRuntime.environment.buildRuntimeEnvironment(
8495
+ runtime ? workspaceRuntimeEffectiveEnv(runtime, daemonRuntimeBaseEnv) : validationSettingsRuntime.environment.buildRuntimeEnvironment(
8412
8496
  settings.merged,
8413
8497
  workspace.cwd,
8414
8498
  daemonRuntimeBaseEnv,
@@ -8439,7 +8523,23 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8439
8523
  return grouping.groups;
8440
8524
  }, "resolveChannelWorkspaceGroupsAtListen");
8441
8525
  if (opts.channelSelection) {
8442
- reserveChannelServicePidfile(opts.channelSelection);
8526
+ try {
8527
+ channelValidationSettingsRuntime = await loadSettingsRuntimeModules();
8528
+ channelValidationTrustPolicy = await import("./daemon-trust-policy-IPBZES2Z.js");
8529
+ channelValidationTrustSnapshot = await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot();
8530
+ if (opts.channelSelection.mode === "names" && workspaceInputs.length > MAX_CHANNEL_CONTROL_WORKSPACES) {
8531
+ const groups = resolveChannelWorkspaceGroupsAtListen();
8532
+ assertChannelControlWorkspaceCapacity(
8533
+ groups?.map((group) => group.workspaceCwd) ?? []
8534
+ );
8535
+ }
8536
+ reserveChannelServicePidfile(opts.channelSelection);
8537
+ } catch (error) {
8538
+ if (!channelSelectionFromSettings) throw error;
8539
+ removeCurrentServePidfile();
8540
+ opts.channelSelection = void 0;
8541
+ reportConfiguredChannelStartupFailure(error);
8542
+ }
8443
8543
  }
8444
8544
  return await new Promise((resolve3, reject) => {
8445
8545
  let closeHost;
@@ -8806,11 +8906,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8806
8906
  const armRuntimeStartupTimer = /* @__PURE__ */ __name(() => {
8807
8907
  if (runtimeStartupTimeoutMs <= 0 || runtimeStartupTimer) return;
8808
8908
  runtimeStartupTimer = setTimeout(() => {
8809
- void failRuntimeStartup(
8810
- new Error(
8811
- `Daemon runtime startup timed out after ${runtimeStartupTimeoutMs}ms.`
8812
- )
8909
+ const timeoutError = new Error(
8910
+ `Daemon runtime startup timed out after ${runtimeStartupTimeoutMs}ms.`
8813
8911
  );
8912
+ void failRuntimeStartup(timeoutError);
8814
8913
  }, runtimeStartupTimeoutMs);
8815
8914
  runtimeStartupTimer.unref();
8816
8915
  }, "armRuntimeStartupTimer");
@@ -9037,8 +9136,32 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9037
9136
  acpHandle?.attachServer?.(server);
9038
9137
  if (opts.channelSelection) {
9039
9138
  closeServerAfterChannelWorkerStartupFailure = true;
9040
- const manager = await ensureChannelWorkerManager();
9041
- await manager.startInitial(opts.channelSelection);
9139
+ let manager;
9140
+ try {
9141
+ manager = await ensureChannelWorkerManager();
9142
+ await manager.startInitial(opts.channelSelection);
9143
+ } catch (error2) {
9144
+ if (!channelSelectionFromSettings || runtimeStartupSettled) {
9145
+ throw error2;
9146
+ }
9147
+ closeServerAfterChannelWorkerStartupFailure = false;
9148
+ opts.channelSelection = void 0;
9149
+ reportConfiguredChannelStartupFailure(error2);
9150
+ try {
9151
+ if (manager) {
9152
+ await manager.stopSelection();
9153
+ } else {
9154
+ removeCurrentServePidfile();
9155
+ if (channelPidfileReserved) {
9156
+ throw new Error(
9157
+ "Failed to release the channel service lease."
9158
+ );
9159
+ }
9160
+ }
9161
+ } catch (cleanupError) {
9162
+ reportConfiguredChannelStartupFailure(cleanupError);
9163
+ }
9164
+ }
9042
9165
  if (runtimeStartupSettled) return;
9043
9166
  }
9044
9167
  if (runtimeStartupSettled) return;
@@ -9048,7 +9171,45 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9048
9171
  clearRuntimeStartupTimer();
9049
9172
  markRuntimeReady();
9050
9173
  }, "completeRuntimeStartup");
9051
- const startBridgePreheat = /* @__PURE__ */ __name((bridge) => {
9174
+ const scheduleWorkspaceMcpDiscoveryAfterPreheat = /* @__PURE__ */ __name((app2) => {
9175
+ if (runtimeStartupError !== void 0) {
9176
+ daemonLog.info(
9177
+ "workspace runtime ensure after preheat skipped: runtime startup failed"
9178
+ );
9179
+ return;
9180
+ }
9181
+ if (shuttingDown) {
9182
+ daemonLog.info(
9183
+ "workspace runtime ensure after preheat skipped: shutting down"
9184
+ );
9185
+ return;
9186
+ }
9187
+ const registry = app2.locals?.["workspaceRegistry"];
9188
+ const primaryEntry = registry?.primaryEntry;
9189
+ const runtime = primaryEntry?.state === "active" ? primaryEntry.current?.runtime : void 0;
9190
+ if (!runtime) {
9191
+ daemonLog.info(
9192
+ "workspace runtime ensure after preheat skipped: no primary runtime"
9193
+ );
9194
+ return;
9195
+ }
9196
+ const coordinator = getWorkspaceRuntimeCoordinatorIfSupported?.(runtime);
9197
+ if (!coordinator) {
9198
+ daemonLog.info(
9199
+ "workspace runtime ensure after preheat skipped: workspace runtime lifecycle is not supported"
9200
+ );
9201
+ return;
9202
+ }
9203
+ void coordinator.ensure({ keepAliveMs: ENSURE_KEEP_ALIVE_MS }).catch((err) => {
9204
+ if (shuttingDown || runtimeStartupError !== void 0) {
9205
+ return;
9206
+ }
9207
+ daemonLog.warn(
9208
+ `workspace runtime ensure after preheat failed: ${deepestErrorMessage(err)}`
9209
+ );
9210
+ });
9211
+ }, "scheduleWorkspaceMcpDiscoveryAfterPreheat");
9212
+ const startBridgePreheat = /* @__PURE__ */ __name((bridge, app2) => {
9052
9213
  startup.preheat.status = "running";
9053
9214
  const preheatStartedAt = performance2.now();
9054
9215
  bridge.preheat().then(() => {
@@ -9056,6 +9217,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9056
9217
  startup.preheat.durationMs = Math.round(
9057
9218
  performance2.now() - preheatStartedAt
9058
9219
  );
9220
+ scheduleWorkspaceMcpDiscoveryAfterPreheat(app2);
9059
9221
  }).catch((err) => {
9060
9222
  const message = err instanceof Error ? err.message : String(err);
9061
9223
  startup.preheat.status = "failed";
@@ -9089,7 +9251,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9089
9251
  return;
9090
9252
  }
9091
9253
  if (shouldPreheat && runtime.bridge) {
9092
- startBridgePreheat(runtime.bridge);
9254
+ startBridgePreheat(runtime.bridge, runtime.app);
9093
9255
  }
9094
9256
  await completeRuntimeStartup(runtime.app);
9095
9257
  }).catch((err) => failRuntimeStartup(err));
@@ -9406,14 +9568,19 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9406
9568
  } catch (err) {
9407
9569
  removeCurrentServePidfile();
9408
9570
  const error2 = err instanceof Error ? err : new Error(String(err));
9409
- markServeAppStartupFailed(error2);
9410
- void serveAppLifecycle.close().then(
9411
- () => reject(error2),
9412
- (closeError) => reject(
9413
- closeError instanceof Error ? new AggregateError([error2, closeError], error2.message) : error2
9414
- )
9415
- );
9416
- return;
9571
+ if (channelSelectionFromSettings) {
9572
+ opts.channelSelection = void 0;
9573
+ reportConfiguredChannelStartupFailure(error2);
9574
+ } else {
9575
+ markServeAppStartupFailed(error2);
9576
+ void serveAppLifecycle.close().then(
9577
+ () => reject(error2),
9578
+ (closeError) => reject(
9579
+ closeError instanceof Error ? new AggregateError([error2, closeError], error2.message) : error2
9580
+ )
9581
+ );
9582
+ return;
9583
+ }
9417
9584
  }
9418
9585
  if (channelWorkspaceGroups) {
9419
9586
  for (const group of channelWorkspaceGroups) {
@@ -9424,7 +9591,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9424
9591
  }
9425
9592
  if (opts.channelSelection?.mode === "all") {
9426
9593
  writeStderrLine(
9427
- "qwen serve: --channel all is primary-workspace only; non-primary workspace channels are not hosted."
9594
+ channelSelectionFromSettings ? 'qwen serve: workspace serve.channels selection "all" is primary-workspace only; non-primary workspace channels are not hosted.' : "qwen serve: --channel all is primary-workspace only; non-primary workspace channels are not hosted."
9428
9595
  );
9429
9596
  }
9430
9597
  }
@@ -9472,9 +9639,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9472
9639
  });
9473
9640
  const preparedRuntimeApp = runtimeApp ?? runtimeAppForCleanup;
9474
9641
  if (preparedRuntimeApp && bridgeRef && deps.bridge) {
9642
+ runtimeApp ??= preparedRuntimeApp;
9475
9643
  attachLiveDiscoveryControl(preparedRuntimeApp);
9476
9644
  if (shouldPreheat) {
9477
- startBridgePreheat(bridgeRef);
9645
+ startBridgePreheat(bridgeRef, preparedRuntimeApp);
9478
9646
  }
9479
9647
  if (opts.channelSelection && !runtimeStartupSettled) {
9480
9648
  armRuntimeStartupTimer();
@@ -9486,6 +9654,11 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9486
9654
  acpHandle?.attachServer?.(server);
9487
9655
  markServeAppStartupReady();
9488
9656
  void publishLiveDiscovery(preparedRuntimeApp);
9657
+ if (!runtimeStartupSettled) {
9658
+ runtimeStartupSettled = true;
9659
+ clearRuntimeStartupTimer();
9660
+ markRuntimeReady();
9661
+ }
9489
9662
  }
9490
9663
  } else if (deferRuntimeUntilFirstHealth) {
9491
9664
  scheduleRuntimeStartFallback();