@qwen-code/qwen-code 0.20.0 → 0.20.1-nightly.20260724.7d17c44a3

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 (388) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +1 -1
  2. package/bundled/qc-helper/docs/features/auto-mode.md +19 -16
  3. package/bundled/qc-helper/docs/features/commands.md +54 -0
  4. package/bundled/qc-helper/docs/features/sub-agents.md +16 -7
  5. package/bundled/qc-helper/docs/integration-github-action.md +1 -1
  6. package/bundled/qc-helper/docs/qwen-serve.md +2 -1
  7. package/bundled/review/DESIGN.md +2 -2
  8. package/bundled/review/SKILL.md +7 -5
  9. package/chunks/MaxSizedBox-LGRTXB47.js +84 -0
  10. package/chunks/{StandaloneSessionPicker-CEGO2AZX.js → StandaloneSessionPicker-H3TBU3C3.js} +68 -56
  11. package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
  12. package/chunks/{acpAgent-YUR43TLG.js → acpAgent-5D7P4BB5.js} +2061 -556
  13. package/chunks/agent-W7UAHCCI.js +80 -0
  14. package/chunks/agent-headless-KTBMPRSC.js +74 -0
  15. package/chunks/{anthropicContentGenerator-HVKLXOOU.js → anthropicContentGenerator-ZLQ3X2HI.js} +112 -45
  16. package/chunks/{artifact-tool-WBCAMD3O.js → artifact-tool-OKMWONT6.js} +3 -3
  17. package/chunks/{askUserQuestion-6DZC4UV5.js → askUserQuestion-V6FUS23G.js} +3 -3
  18. package/chunks/bridge-FFC4C6VD.js +89 -0
  19. package/chunks/{build-SSCNEHZZ.js → build-RV63TIRH.js} +2 -3
  20. package/chunks/{ca-2SL2BXTK.js → ca-GKRQZ7AM.js} +612 -201
  21. package/chunks/{channel-worker-group-53CMOPFT.js → channel-worker-group-MA3WXWYX.js} +7 -6
  22. package/chunks/{channel-worker-manager-UTXILKC2.js → channel-worker-manager-TIYYYBCT.js} +189 -29
  23. package/chunks/{channel-worker-supervisor-ZGO2W2MD.js → channel-worker-supervisor-CXRCDA4Y.js} +6 -5
  24. package/chunks/{chunk-TYQMGACW.js → chunk-22C7BQ6D.js} +508 -10967
  25. package/chunks/{chunk-4EP2PYYL.js → chunk-2G6QIHYL.js} +5 -5
  26. package/chunks/{chunk-H2XVO6NE.js → chunk-2MIN6GRR.js} +1 -1
  27. package/chunks/chunk-2RFKHEXL.js +74 -0
  28. package/chunks/{chunk-7SXZC7ID.js → chunk-2WTVWAKT.js} +7 -6
  29. package/chunks/{chunk-TIH2ZTOC.js → chunk-32A4PI3E.js} +2 -2
  30. package/chunks/chunk-36HSVBBU.js +469 -0
  31. package/chunks/{chunk-IR46U7RB.js → chunk-3FB2Y2OE.js} +3 -3
  32. package/chunks/{chunk-QR6U5QPP.js → chunk-3SJ43L4W.js} +4 -0
  33. package/chunks/chunk-3Z43GZUQ.js +32 -0
  34. package/chunks/chunk-43T5WDQ7.js +127 -0
  35. package/chunks/chunk-46UV252V.js +128 -0
  36. package/chunks/{chunk-JD3MKVKL.js → chunk-4K56OJFJ.js} +1 -1
  37. package/chunks/{chunk-KTUQMDEP.js → chunk-4K7VDKAD.js} +1 -1
  38. package/chunks/{chunk-QKYTTBYW.js → chunk-4LVZNIDO.js} +1 -1
  39. package/chunks/{chunk-OWCALFEG.js → chunk-54R2CV2G.js} +1 -1
  40. package/chunks/{chunk-ZEOZL37W.js → chunk-57FIIFJN.js} +1 -1
  41. package/chunks/chunk-5BS3KLRP.js +6194 -0
  42. package/chunks/{chunk-NEEB7UEN.js → chunk-6GMVPFB2.js} +153 -72
  43. package/chunks/{chunk-GMGDLUC7.js → chunk-6IL7KRLE.js} +1 -1
  44. package/chunks/chunk-6PVPNMXU.js +29 -0
  45. package/chunks/chunk-6QHAUJUE.js +293 -0
  46. package/chunks/chunk-6VK3IRTX.js +10017 -0
  47. package/chunks/{chunk-BDBMYST4.js → chunk-6X4GWOPW.js} +1 -1
  48. package/chunks/{chunk-AYCDXHZB.js → chunk-7Z6JQEL6.js} +1 -1
  49. package/chunks/{chunk-FSL5W5TI.js → chunk-AFFGGOF6.js} +4 -4
  50. package/chunks/chunk-AMDSOFFV.js +10860 -0
  51. package/chunks/chunk-AXUW635Q.js +934 -0
  52. package/chunks/{chunk-A5LYNIW7.js → chunk-BJBUDCM3.js} +8 -8
  53. package/chunks/chunk-BK2UNYWD.js +29 -0
  54. package/chunks/{chunk-6RLROE6G.js → chunk-BLFVGB7D.js} +30 -4
  55. package/chunks/chunk-BPJSQIJX.js +100 -0
  56. package/chunks/{chunk-FLSVD6BS.js → chunk-BRTR7S7O.js} +3 -3
  57. package/chunks/{chunk-KG3XV6FH.js → chunk-BSNWBC33.js} +32 -2
  58. package/chunks/chunk-BULDBTYC.js +153 -0
  59. package/chunks/{chunk-PBWEWI4N.js → chunk-BW5Z5NOG.js} +83 -74
  60. package/chunks/{chunk-EIAK6Q2B.js → chunk-C3VHAXP2.js} +20 -3
  61. package/chunks/{chunk-6AFUCL3D.js → chunk-CEZB3XFD.js} +1 -1
  62. package/chunks/chunk-CHMENNJV.js +1832 -0
  63. package/chunks/{chunk-TMQ6XQCX.js → chunk-CK3IEEHR.js} +416 -291
  64. package/chunks/{chunk-OYZWQNWG.js → chunk-CK6UABV2.js} +2 -2
  65. package/chunks/{chunk-VZQUV7VK.js → chunk-CKTMY3EP.js} +1 -1
  66. package/chunks/{chunk-VDWBQ5AW.js → chunk-CUPAVLRY.js} +5 -2
  67. package/chunks/{chunk-I2PYAYFM.js → chunk-CXUFILV3.js} +3 -3
  68. package/chunks/chunk-DP3IHZGG.js +1498 -0
  69. package/chunks/{chunk-BMWMT5Y2.js → chunk-DP5GT2MW.js} +7 -375
  70. package/chunks/{chunk-D22SX43D.js → chunk-DWNZ6PVQ.js} +1 -1
  71. package/chunks/{chunk-5SCI6E3E.js → chunk-E4IMU4Y5.js} +1 -1
  72. package/chunks/{chunk-DP5GXXNZ.js → chunk-EL2IQ2S5.js} +5 -1
  73. package/chunks/{chunk-EZVDJFZ7.js → chunk-ERLGR7GI.js} +1 -1
  74. package/chunks/{chunk-IVPSS6EL.js → chunk-F5MBYZSU.js} +4 -4
  75. package/chunks/{chunk-AQIEINAY.js → chunk-F6IYL66A.js} +28 -1766
  76. package/chunks/{chunk-FEOZBUMT.js → chunk-FODK6UMO.js} +0 -27
  77. package/chunks/{chunk-PGEPSDJI.js → chunk-FWNZ7CVN.js} +24 -20
  78. package/chunks/{chunk-5JBR5XIK.js → chunk-G7EFBBVF.js} +220 -141
  79. package/chunks/chunk-GLNBDYUX.js +38 -0
  80. package/chunks/{chunk-ANPINBOF.js → chunk-H4YKEV2X.js} +5 -5
  81. package/chunks/{chunk-TDKQP3M6.js → chunk-HIJQF5B5.js} +1 -1
  82. package/chunks/{chunk-FQD7GFSV.js → chunk-HJJDKFL5.js} +3 -3
  83. package/chunks/{chunk-4N3KMAIL.js → chunk-HPWHDJID.js} +152 -35
  84. package/chunks/{chunk-KQNM4EO7.js → chunk-HQCSRJ3P.js} +138 -6
  85. package/chunks/chunk-HTR4WV6U.js +327 -0
  86. package/chunks/{chunk-YWEW33JY.js → chunk-HVO55LUD.js} +7 -7
  87. package/chunks/{chunk-MJ6S23WZ.js → chunk-HZEWYOVI.js} +5 -5
  88. package/chunks/chunk-IFG6TYJ2.js +16577 -0
  89. package/chunks/{chunk-B3KGZCQN.js → chunk-IJTOWOD7.js} +322 -202
  90. package/chunks/{chunk-RS7MT2QG.js → chunk-IPUUTYMV.js} +2 -4
  91. package/chunks/{chunk-4ILMYHEI.js → chunk-IRDZJSCL.js} +3 -3
  92. package/chunks/{chunk-XU457J4V.js → chunk-IRH27ZC2.js} +2 -2
  93. package/chunks/{chunk-33XUAINQ.js → chunk-J5UKQEFG.js} +69 -9
  94. package/chunks/{chunk-G45X5TRN.js → chunk-JCW2R7WC.js} +1 -72
  95. package/chunks/{chunk-S2XVRHDN.js → chunk-JDFBBGRD.js} +1 -1
  96. package/chunks/{chunk-4XNLIGVA.js → chunk-JKCALGYN.js} +1023 -383
  97. package/chunks/{chunk-TJTKSVIV.js → chunk-JLU636DO.js} +5 -1
  98. package/chunks/{chunk-VEXFOTEO.js → chunk-JYUSL2V4.js} +3 -3
  99. package/chunks/{chunk-S2PD3EZD.js → chunk-KJEMJWNH.js} +1 -1
  100. package/chunks/{chunk-E2UVIFI2.js → chunk-KRXPRVGL.js} +0 -1
  101. package/chunks/{chunk-CZF3E5GF.js → chunk-LA5H3LM5.js} +1 -1
  102. package/chunks/{chunk-NDMQLV4Y.js → chunk-LBAO2XRA.js} +4 -4
  103. package/chunks/{chunk-7RMOXZTC.js → chunk-LDPP5VTZ.js} +4 -4
  104. package/chunks/{chunk-KDC6GNQR.js → chunk-LEEWLFHW.js} +4 -4
  105. package/chunks/{chunk-KX6UK4VJ.js → chunk-LI4I37W4.js} +22152 -18007
  106. package/chunks/{chunk-OOCI5VVU.js → chunk-LIZRAKPB.js} +1 -1
  107. package/chunks/{chunk-AJSJ5TTU.js → chunk-LP2E4MQG.js} +1 -1
  108. package/chunks/chunk-LS77BEZP.js +405 -0
  109. package/chunks/{chunk-BRRF37CO.js → chunk-LYTBLSSW.js} +5 -5
  110. package/chunks/{chunk-DBE4QFZS.js → chunk-MB7ENXPR.js} +39 -37
  111. package/chunks/{chunk-GKY2OJ7R.js → chunk-MOHAWVLH.js} +4 -4
  112. package/chunks/chunk-NABLFI57.js +82 -0
  113. package/chunks/chunk-NBQDBANR.js +411 -0
  114. package/chunks/{chunk-EAUYY7SS.js → chunk-NOAAFNTJ.js} +43 -10
  115. package/chunks/chunk-NXS53EA7.js +1462 -0
  116. package/chunks/{chunk-C27BYUX6.js → chunk-OQB4EXO4.js} +14 -11
  117. package/chunks/{chunk-NHDKSOEY.js → chunk-P3QQPMQA.js} +5 -5
  118. package/chunks/{chunk-OP4MOGXF.js → chunk-P5RRUHL7.js} +23 -1
  119. package/chunks/{chunk-KOR3XKCA.js → chunk-PBII2NFX.js} +12 -6
  120. package/chunks/{chunk-O3OCNYY5.js → chunk-PDYB7HG2.js} +2 -2
  121. package/chunks/{chunk-2HOVDT7W.js → chunk-PFSUKTZH.js} +1 -1
  122. package/chunks/chunk-PKL3HGNZ.js +2299 -0
  123. package/chunks/{chunk-5DTTYNB7.js → chunk-PQNHRFJC.js} +16 -3
  124. package/chunks/{chunk-OLMETXLX.js → chunk-PXHK5ONM.js} +41 -9
  125. package/chunks/{chunk-PF4CHQOJ.js → chunk-Q6GU6TKM.js} +11 -10
  126. package/chunks/{chunk-4ODB7WIB.js → chunk-QAFKR7WR.js} +1 -1
  127. package/chunks/{chunk-PBATSWUQ.js → chunk-QBUDF33N.js} +1 -1
  128. package/chunks/{chunk-BVLROR2T.js → chunk-QLJUC7TG.js} +1 -1
  129. package/chunks/{chunk-UEY4AYUL.js → chunk-QNLNLENL.js} +2 -2
  130. package/chunks/{chunk-333CXMNJ.js → chunk-QXZTZJLX.js} +5 -5
  131. package/chunks/chunk-R6D2CTQR.js +289 -0
  132. package/chunks/{chunk-7PZ2ATFZ.js → chunk-R6SKHK3T.js} +54 -29
  133. package/chunks/{chunk-OONJNQ42.js → chunk-RGG6M2WF.js} +4 -4
  134. package/chunks/{chunk-RFIAR4YL.js → chunk-RV4C2ZFG.js} +1 -1
  135. package/chunks/{chunk-O3Z73NBP.js → chunk-RW2NEXYJ.js} +15 -11
  136. package/chunks/{chunk-HZPN55E5.js → chunk-SJEDL7DI.js} +1 -1
  137. package/chunks/{chunk-AKX4WPPP.js → chunk-SWBJRDYC.js} +866 -183
  138. package/chunks/{chunk-NBMIC7DR.js → chunk-SX4PK3FC.js} +145 -5
  139. package/chunks/chunk-T3452DP5.js +246 -0
  140. package/chunks/{chunk-TB6UDU4T.js → chunk-THJNPLI4.js} +16 -16
  141. package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
  142. package/chunks/chunk-U7ZFW55U.js +2098 -0
  143. package/chunks/{chunk-JNWZQ27S.js → chunk-UCOJC6EB.js} +72 -23
  144. package/chunks/{chunk-W7H223ZZ.js → chunk-UGYMA4EI.js} +1 -1
  145. package/chunks/{chunk-X6YQWCIJ.js → chunk-UH3WSE5L.js} +13 -1
  146. package/chunks/{chunk-2LL7TXB4.js → chunk-UH7242DI.js} +3 -3
  147. package/chunks/{chunk-CB2HFGRV.js → chunk-UJV643E2.js} +31 -6
  148. package/chunks/chunk-UO7DCGEV.js +121 -0
  149. package/chunks/{chunk-Y2ENGUD6.js → chunk-UPF7PTBI.js} +79 -2
  150. package/chunks/chunk-UW5EOVUN.js +249 -0
  151. package/chunks/{chunk-SJMV7ZBK.js → chunk-VLVO52KC.js} +8 -8
  152. package/chunks/{chunk-R3VWUU2E.js → chunk-VYPFXUCB.js} +1 -1
  153. package/chunks/{chunk-S2W2LVDU.js → chunk-WHFK6G6U.js} +8 -9
  154. package/chunks/chunk-WI3KCKZ5.js +391 -0
  155. package/chunks/{chunk-NGFEPAE6.js → chunk-WLEFWSSC.js} +8 -6
  156. package/chunks/{chunk-XVVH63JG.js → chunk-WUJXJ34P.js} +3 -3
  157. package/chunks/{chunk-MAQQGNQ5.js → chunk-WYLPWQHJ.js} +56 -717
  158. package/chunks/{chunk-D2VIDMVM.js → chunk-X6N25LXS.js} +2 -2
  159. package/chunks/chunk-XAWJ2526.js +1049 -0
  160. package/chunks/{chunk-CV63PP6U.js → chunk-YCIM6O3I.js} +1 -1
  161. package/chunks/{chunk-OEO2ERWK.js → chunk-Z44CVEUF.js} +54 -33
  162. package/chunks/{chunk-TKLLK6XQ.js → chunk-ZT4POVWC.js} +11 -11
  163. package/chunks/{chunk-NIJEXGV6.js → chunk-ZXYUQXY5.js} +148 -10
  164. package/chunks/{computer-use-NIWQNUZF.js → computer-use-UJ5T34TE.js} +50 -37
  165. package/chunks/{config-utils-AHQ6YZ66.js → config-utils-XQRXHAN3.js} +3 -3
  166. package/chunks/contextCommand-CSCB4E5M.js +79 -0
  167. package/chunks/{create-sub-session-MGNX52P3.js → create-sub-session-55F3GOLK.js} +46 -33
  168. package/chunks/{create-sub-session-P26FE5GG.js → create-sub-session-JPCSYZAJ.js} +3 -3
  169. package/chunks/{cron-create-JWFHBDRQ.js → cron-create-CUMELMPL.js} +6 -6
  170. package/chunks/{cron-delete-GDX4E26G.js → cron-delete-QZFV6U3P.js} +5 -5
  171. package/chunks/{cron-list-USMAIWPT.js → cron-list-IDKO7ZO2.js} +5 -5
  172. package/chunks/{daemon-RG2MAI6T.js → daemon-7LP7R6IU.js} +500 -133
  173. package/chunks/daemon-status-provider-6YNZ3UAE.js +88 -0
  174. package/chunks/{de-I7ZIYXZC.js → de-4IBXM7CN.js} +5 -1
  175. package/chunks/{dist-WGTQO7F2.js → dist-376652EZ.js} +114 -28
  176. package/chunks/{dist-53PZYC5B.js → dist-3YCTE6HD.js} +2 -2
  177. package/chunks/{dist-2BHAYBKP.js → dist-D7Z3HOO7.js} +14 -2
  178. package/chunks/{dist-FUTEXY6A.js → dist-MEGJFGAI.js} +40 -9
  179. package/chunks/{dist-2MIU4UUH.js → dist-NQ436QEX.js} +1 -1
  180. package/chunks/{dist-AU7NQQRP.js → dist-NQNTOIEN.js} +26 -2
  181. package/chunks/earlyInputCapture-HPUVJ2KH.js +81 -0
  182. package/chunks/{edit-3QV3JZJL.js → edit-7CMAN3F4.js} +50 -39
  183. package/chunks/{en-XE34GKAA.js → en-SALLIJS7.js} +6 -1
  184. package/chunks/{enter-worktree-4GMMF7EG.js → enter-worktree-3PH4YTY2.js} +49 -36
  185. package/chunks/{enterPlanMode-L5UWBAUC.js → enterPlanMode-MSXLSWLI.js} +55 -37
  186. package/chunks/{environment-3OV7UQOT.js → environment-KS36ZHBE.js} +48 -35
  187. package/chunks/errors-LCPFS62A.js +87 -0
  188. package/chunks/{exit-worktree-DDP57JLV.js → exit-worktree-ARA4C3CK.js} +49 -36
  189. package/chunks/{exitPlanMode-CJBLGPIP.js → exitPlanMode-GCDIQPB7.js} +49 -36
  190. package/chunks/{fast-path-M6RP2ING.js → fast-path-IDHBVIT6.js} +3 -2
  191. package/chunks/{fr-X7KDVZIY.js → fr-WVHEBDDB.js} +5 -1
  192. package/chunks/{gemini-H4PHBJTL.js → gemini-2AFQJMX5.js} +141 -105
  193. package/chunks/{geminiContentGenerator-VURJYPWP.js → geminiContentGenerator-UDIH3YI6.js} +9 -8
  194. package/chunks/{getMachineId-bsd-EXV7SWPA.js → getMachineId-bsd-QFVLPUPT.js} +1 -1
  195. package/chunks/{getMachineId-darwin-IUOMFXU3.js → getMachineId-darwin-DGMQQE2E.js} +1 -1
  196. package/chunks/{getMachineId-linux-K7XJYFHL.js → getMachineId-linux-R4Z6CSWC.js} +1 -1
  197. package/chunks/{getMachineId-unsupported-EA5FDRJ6.js → getMachineId-unsupported-Z3SBVBUV.js} +1 -1
  198. package/chunks/{getMachineId-win-KBA6RAI5.js → getMachineId-win-SCK5UFDT.js} +1 -1
  199. package/chunks/{glob-2KUSRAVQ.js → glob-HCL7HZ67.js} +49 -36
  200. package/chunks/{grep-B5RXVESV.js → grep-CJLBSCTV.js} +49 -36
  201. package/chunks/handleAutoUpdate-Q572P3FL.js +80 -0
  202. package/chunks/i18n-OBB4R7SR.js +96 -0
  203. package/chunks/initializer-LXEY6V3C.js +85 -0
  204. package/chunks/installationInfo-XUAOVMEE.js +79 -0
  205. package/chunks/{ja-2ICT3KXF.js → ja-KY4ROZTE.js} +5 -1
  206. package/chunks/{keychain-token-storage-DWRJMNH3.js → keychain-token-storage-6ACJDYIB.js} +3 -3
  207. package/chunks/{kittyProtocolDetector-HCNNKJTI.js → kittyProtocolDetector-MBRTDRBK.js} +5 -3
  208. package/chunks/list-WAXY7QOU.js +88 -0
  209. package/chunks/list-agents-AH3P5NB7.js +80 -0
  210. package/chunks/loadedSettingsAdapter-OZFNBRHE.js +82 -0
  211. package/chunks/loggingContentGenerator-7WDTTE6G.js +1068 -0
  212. package/chunks/{loop-wakeup-5GLTUBHA.js → loop-wakeup-IHRW6TNB.js} +7 -7
  213. package/chunks/{ls-FHBY3Y7I.js → ls-ZAXZ2G2W.js} +5 -5
  214. package/chunks/{lsp-B6VMEW6Y.js → lsp-R4ZG3UGQ.js} +3 -3
  215. package/chunks/managed-npm-update-N42DO5QW.js +339 -0
  216. package/chunks/mcp-6SOORKTY.js +82 -0
  217. package/chunks/{monitor-GLJZDNPS.js → monitor-4PSVNVU4.js} +51 -37
  218. package/chunks/node-UUDY34IG.js +305 -0
  219. package/chunks/nonInteractiveCli-FBR5S7IZ.js +140 -0
  220. package/chunks/{notebook-edit-AVCIWS4F.js → notebook-edit-QK26632S.js} +50 -39
  221. package/chunks/{openaiContentGenerator-B7W24G3D.js → openaiContentGenerator-IXJS6C2U.js} +33 -20
  222. package/chunks/pidfile-UCFCJOAP.js +85 -0
  223. package/chunks/{processUtils-XZPY2PBB.js → processUtils-YL2LXON2.js} +2 -2
  224. package/chunks/{pt-JJ4XPIBP.js → pt-OK455PLH.js} +5 -1
  225. package/chunks/{qwenContentGenerator-6GUTWJIC.js → qwenContentGenerator-H6WZPJKC.js} +56 -36
  226. package/chunks/{qwenOAuth2-GASEEWGU.js → qwenOAuth2-HTROHKXO.js} +10 -23
  227. package/chunks/read-file-FOYTMUNL.js +31 -0
  228. package/chunks/{read-mcp-resource-AKCL7I43.js → read-mcp-resource-65BWNF3F.js} +3 -3
  229. package/chunks/{record-artifact-PEUB7727.js → record-artifact-2RLSOP6U.js} +3 -3
  230. package/chunks/resumeHistoryUtils-ZNHTWBXS.js +90 -0
  231. package/chunks/ripGrep-K4K4QLNJ.js +72 -0
  232. package/chunks/{ru-STR4KTW7.js → ru-7SPDGMGD.js} +5 -1
  233. package/chunks/{run-qwen-serve-OZGR3FQA.js → run-qwen-serve-XI4MCAFV.js} +343 -88
  234. package/chunks/runtime-4CTBU5WX.js +115 -0
  235. package/chunks/{scheduler-Z7QLMUWA.js → scheduler-TTEITHBF.js} +46 -33
  236. package/chunks/sdk-exporters-grpc-N3OLDF63.js +23214 -0
  237. package/chunks/sdk-exporters-http-AOHAEOMC.js +563 -0
  238. package/chunks/sdk-impl-TLQOC7P4.js +9193 -0
  239. package/chunks/{send-message-3RHE7HSM.js → send-message-GEY4CNPS.js} +47 -8
  240. package/chunks/serve-W7UKJTQT.js +88 -0
  241. package/chunks/{server-SO64U3X5.js → server-JD5PIE7A.js} +3069 -517
  242. package/chunks/{session-2KL2WQAH.js → session-R4BDHLYR.js} +112 -177
  243. package/chunks/{settings-KITVOUSV.js → settings-BXZHA6TZ.js} +50 -37
  244. package/chunks/shell-XYMFCGN5.js +82 -0
  245. package/chunks/{skill-SOQHY455.js → skill-YKXYEPOF.js} +25 -20
  246. package/chunks/spawnChannel-IO4HQLFS.js +81 -0
  247. package/chunks/{src-43LM7JLB.js → src-LKKTJ4NG.js} +382 -235
  248. package/chunks/standalone-update-76JG7DVN.js +91 -0
  249. package/chunks/{startInteractiveUI-3RGTGEX5.js → startInteractiveUI-BXWQUXAS.js} +1314 -958
  250. package/chunks/{syntheticOutput-FG5PQKIR.js → syntheticOutput-2WNMXEU5.js} +4 -4
  251. package/chunks/task-create-R5H74Y76.js +25 -0
  252. package/chunks/{task-list-QWSY4ZIU.js → task-list-WXAFDSRY.js} +7 -7
  253. package/chunks/{task-stop-GWC6UWAL.js → task-stop-CHFZP23W.js} +4 -4
  254. package/chunks/{task-update-NCTAB73Q.js → task-update-Z44A4GAR.js} +11 -9
  255. package/chunks/{team-create-FXN3PEBP.js → team-create-5Y3MCAIM.js} +49 -36
  256. package/chunks/{team-delete-KK37HTOG.js → team-delete-YDCMRSI4.js} +7 -7
  257. package/chunks/{team-plan-approval-GEIZ356Q.js → team-plan-approval-HYJJZ76T.js} +49 -36
  258. package/chunks/theme-manager-3YF2SUZL.js +76 -0
  259. package/chunks/{todoWrite-ERCAMLFS.js → todoWrite-ED2IVZJL.js} +5 -5
  260. package/chunks/{tool-search-XKK7DNOK.js → tool-search-3ZO2XMEP.js} +21 -17
  261. package/chunks/total-session-admission-NDF7EVG7.js +83 -0
  262. package/chunks/trustedFolders-Q7RALK4T.js +92 -0
  263. package/chunks/{chunk-6EFTQYW7.js → undici-3FJYTMOF.js} +24 -399
  264. package/chunks/{chunk-L573Z2QZ.js → undici-PYHBDDPN.js} +1 -5
  265. package/chunks/{update-relaunch-FMVZK6XF.js → update-relaunch-BTW5XGVT.js} +17 -17
  266. package/chunks/updateCheck-MXIU6DWQ.js +91 -0
  267. package/chunks/useAutoAcceptIndicator-BJXHJW77.js +92 -0
  268. package/chunks/{validateNonInterActiveAuth-PRVEB6GG.js → validateNonInterActiveAuth-FLEPF3QQ.js} +90 -76
  269. package/chunks/{version-AZMG6KWL.js → version-75VRONIL.js} +1 -1
  270. package/chunks/{web-fetch-EPGJ5OQQ.js → web-fetch-5X27LYHB.js} +101 -41
  271. package/chunks/web-search-IDMTBJUP.js +718 -0
  272. package/chunks/{workflow-UTNVPW22.js → workflow-JOD2OPFQ.js} +54 -40
  273. package/chunks/workspace-providers-status-WDLBDLPG.js +85 -0
  274. package/chunks/{workspace-registration-store-F3ZX3YHT.js → workspace-registration-store-26Z6J6P5.js} +9 -3
  275. package/chunks/workspace-registry-IABDATX3.js +87 -0
  276. package/chunks/workspace-service-BI4KDYPD.js +97 -0
  277. package/chunks/workspace-skills-status-OVB4LPHA.js +84 -0
  278. package/chunks/write-file-276AJ7KE.js +72 -0
  279. package/chunks/{zh-6ANG2HTL.js → zh-Q54GA5SV.js} +6 -1
  280. package/chunks/{zh-TW-4RR3YHNN.js → zh-TW-VOBNFOPU.js} +6 -1
  281. package/cli-entry.js +164 -12
  282. package/cli.js +19 -12
  283. package/locales/ca.js +773 -203
  284. package/locales/de.js +8 -2
  285. package/locales/en.js +9 -2
  286. package/locales/fr.js +8 -2
  287. package/locales/ja.js +8 -2
  288. package/locales/pt.js +8 -2
  289. package/locales/ru.js +8 -2
  290. package/locales/zh-TW.js +9 -2
  291. package/locales/zh.js +9 -2
  292. package/package.json +3 -3
  293. package/web-shell/assets/{arc-Buk1besA.js → arc-CMb7lr2P.js} +1 -1
  294. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B1aUKYDC.js → architectureDiagram-3BPJPVTR-D6KQ5Kwm.js} +1 -1
  295. package/web-shell/assets/{blockDiagram-GPEHLZMM-CRTdg3Zx.js → blockDiagram-GPEHLZMM-Ce7YYSf8.js} +1 -1
  296. package/web-shell/assets/{c4Diagram-AAUBKEIU-DFdRMp5g.js → c4Diagram-AAUBKEIU-DaStHfor.js} +1 -1
  297. package/web-shell/assets/channel-Dg4f-Kry.js +1 -0
  298. package/web-shell/assets/{chunk-2J33WTMH-4rYQdkEI.js → chunk-2J33WTMH-CPaqadg9.js} +1 -1
  299. package/web-shell/assets/{chunk-4BX2VUAB-Coi-pQJy.js → chunk-4BX2VUAB-Veh9ZGKg.js} +1 -1
  300. package/web-shell/assets/{chunk-55IACEB6-BtBjz02t.js → chunk-55IACEB6-BPTX5n4q.js} +1 -1
  301. package/web-shell/assets/{chunk-727SXJPM-CGYOWorl.js → chunk-727SXJPM-CtXsE_ca.js} +1 -1
  302. package/web-shell/assets/{chunk-AQP2D5EJ-CH5AKhqx.js → chunk-AQP2D5EJ-D8DDCJ8h.js} +1 -1
  303. package/web-shell/assets/{chunk-FMBD7UC4-Cd50-w85.js → chunk-FMBD7UC4-cjMDGzHz.js} +1 -1
  304. package/web-shell/assets/{chunk-ND2GUHAM-C2wF3KCK.js → chunk-ND2GUHAM-BaZ1hNhV.js} +1 -1
  305. package/web-shell/assets/{chunk-QZHKN3VN-pCeRTaWi.js → chunk-QZHKN3VN-C7w-9w5-.js} +1 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-CT7Fo2aW.js +1 -0
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CT7Fo2aW.js +1 -0
  308. package/web-shell/assets/{cose-bilkent-S5V4N54A-B-_fAB6D.js → cose-bilkent-S5V4N54A-DqvBEEIe.js} +1 -1
  309. package/web-shell/assets/{dagre-BM42HDAG-ChSPNHpL.js → dagre-BM42HDAG-RkPyoMAk.js} +1 -1
  310. package/web-shell/assets/{diagram-2AECGRRQ-BX7cFOF3.js → diagram-2AECGRRQ-D9b6nNyg.js} +1 -1
  311. package/web-shell/assets/{diagram-5GNKFQAL-BQUTW92n.js → diagram-5GNKFQAL-CiiNKUIy.js} +1 -1
  312. package/web-shell/assets/{diagram-KO2AKTUF-BkYPh3e4.js → diagram-KO2AKTUF-CP1qizXd.js} +1 -1
  313. package/web-shell/assets/{diagram-LMA3HP47-Cl6jsNyx.js → diagram-LMA3HP47-BGe30TWx.js} +1 -1
  314. package/web-shell/assets/{diagram-OG6HWLK6-DRWoHz8n.js → diagram-OG6HWLK6-CvoEPARH.js} +1 -1
  315. package/web-shell/assets/{erDiagram-TEJ5UH35-CGvFcZco.js → erDiagram-TEJ5UH35-DWfLzVkV.js} +1 -1
  316. package/web-shell/assets/{flowDiagram-I6XJVG4X-vms6oVdv.js → flowDiagram-I6XJVG4X-D-dTQmo6.js} +1 -1
  317. package/web-shell/assets/{ganttDiagram-6RSMTGT7-ukT_sfmi.js → ganttDiagram-6RSMTGT7-CYPHKaGY.js} +1 -1
  318. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Bn2ZE2Ut.js → gitGraphDiagram-PVQCEYII-DA7_aQYD.js} +1 -1
  319. package/web-shell/assets/index-B0i-TOYM.css +5 -0
  320. package/web-shell/assets/index-CgCHD46L.js +1225 -0
  321. package/web-shell/assets/{index-wFXp7W68.js → index-DqHNAB8C.js} +1 -1
  322. package/web-shell/assets/{infoDiagram-5YYISTIA-DHJdSi7x.js → infoDiagram-5YYISTIA-B87ljDPa.js} +1 -1
  323. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DOvd2Wph.js → ishikawaDiagram-YF4QCWOH-CYSpyjaN.js} +1 -1
  324. package/web-shell/assets/{journeyDiagram-JHISSGLW-CH_urMCT.js → journeyDiagram-JHISSGLW-DAL6Js6f.js} +1 -1
  325. package/web-shell/assets/{kanban-definition-UN3LZRKU-FKiBdgbH.js → kanban-definition-UN3LZRKU-_zufKGJv.js} +1 -1
  326. package/web-shell/assets/{linear-0ZVQFVKf.js → linear-DidhMgku.js} +1 -1
  327. package/web-shell/assets/{mermaid.core-DJ05ZZIK.js → mermaid.core-DAkX3h3a.js} +5 -5
  328. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BPuUhkUm.js → mindmap-definition-RKZ34NQL-DbZxUBEH.js} +1 -1
  329. package/web-shell/assets/{pieDiagram-4H26LBE5-yLFKcXyG.js → pieDiagram-4H26LBE5-Du9uoqrf.js} +1 -1
  330. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-irWqc1pE.js → quadrantDiagram-W4KKPZXB-DwjELuKm.js} +1 -1
  331. package/web-shell/assets/{requirementDiagram-4Y6WPE33-B_4uMoIV.js → requirementDiagram-4Y6WPE33-BAqfVtBL.js} +1 -1
  332. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-ciA4GPwk.js → sankeyDiagram-5OEKKPKP--hm2VpmK.js} +1 -1
  333. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CRdZvy0U.js → sequenceDiagram-3UESZ5HK-R5MUQaIt.js} +1 -1
  334. package/web-shell/assets/{stateDiagram-AJRCARHV-DaYIkCCn.js → stateDiagram-AJRCARHV-VsX032xQ.js} +1 -1
  335. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-uPWLcSfy.js +1 -0
  336. package/web-shell/assets/{timeline-definition-PNZ67QCA-oBUKv6iH.js → timeline-definition-PNZ67QCA-BqjVRXzg.js} +1 -1
  337. package/web-shell/assets/{vennDiagram-CIIHVFJN-CGW9Sdmb.js → vennDiagram-CIIHVFJN-i2tkvlkg.js} +1 -1
  338. package/web-shell/assets/{wardley-L42UT6IY-CvwKJOCm.js → wardley-L42UT6IY-Ch8G49EM.js} +1 -1
  339. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-Ipc260sN.js → wardleyDiagram-YWT4CUSO-bYpWeQNy.js} +1 -1
  340. package/web-shell/assets/{xychartDiagram-2RQKCTM6-D6-CM7pK.js → xychartDiagram-2RQKCTM6-C9NhuBqB.js} +1 -1
  341. package/web-shell/index.html +17 -13
  342. package/chunks/MaxSizedBox-B5YGZSYE.js +0 -72
  343. package/chunks/agent-H4JIDL7S.js +0 -67
  344. package/chunks/agent-headless-TTBEREQV.js +0 -61
  345. package/chunks/bridge-VL7ITBU5.js +0 -75
  346. package/chunks/chunk-542SK7KV.js +0 -8293
  347. package/chunks/chunk-CPCVCKKF.js +0 -358
  348. package/chunks/chunk-SEKHYHMS.js +0 -45
  349. package/chunks/chunk-W7FJ3N32.js +0 -49
  350. package/chunks/chunk-ZFKNWQGQ.js +0 -74639
  351. package/chunks/contextCommand-L2COEUHS.js +0 -66
  352. package/chunks/daemon-status-provider-NL4IAG7B.js +0 -74
  353. package/chunks/earlyInputCapture-L6I2A22T.js +0 -68
  354. package/chunks/errors-LEOF5QG4.js +0 -74
  355. package/chunks/handleAutoUpdate-QQVIWXKT.js +0 -67
  356. package/chunks/i18n-N6OBDORT.js +0 -83
  357. package/chunks/initializer-6WCFNDLL.js +0 -72
  358. package/chunks/installationInfo-6J3WPXNS.js +0 -64
  359. package/chunks/list-HOWQSWP6.js +0 -75
  360. package/chunks/loadedSettingsAdapter-AO4YBRXZ.js +0 -69
  361. package/chunks/mcp-QH7QNXOH.js +0 -69
  362. package/chunks/nonInteractiveCli-TI7EMPXD.js +0 -126
  363. package/chunks/pidfile-UEHAT6DH.js +0 -72
  364. package/chunks/read-file-SQJONF6A.js +0 -29
  365. package/chunks/resumeHistoryUtils-PFQ2A23X.js +0 -78
  366. package/chunks/ripGrep-QCK22GDU.js +0 -59
  367. package/chunks/runtime-SNVAP6EH.js +0 -100
  368. package/chunks/serve-BT7KS6SC.js +0 -75
  369. package/chunks/shell-BITUVH2R.js +0 -69
  370. package/chunks/spawnChannel-2BU3AULL.js +0 -68
  371. package/chunks/standalone-update-YG5JUYCM.js +0 -78
  372. package/chunks/task-create-HX32YXO7.js +0 -23
  373. package/chunks/theme-manager-IAETOI25.js +0 -63
  374. package/chunks/total-session-admission-BJLDHKJN.js +0 -69
  375. package/chunks/trustedFolders-5XCVNEUU.js +0 -79
  376. package/chunks/updateCheck-YZZB7YBU.js +0 -70
  377. package/chunks/useAutoAcceptIndicator-ZSQX4I2H.js +0 -80
  378. package/chunks/workspace-providers-status-EADV364W.js +0 -72
  379. package/chunks/workspace-registry-W6VMFYZU.js +0 -73
  380. package/chunks/workspace-service-F3KIN2UN.js +0 -84
  381. package/chunks/workspace-skills-status-YVICUR5Y.js +0 -71
  382. package/chunks/write-file-CVGF2OKV.js +0 -596
  383. package/web-shell/assets/channel-04R0vLbG.js +0 -1
  384. package/web-shell/assets/classDiagram-4FO5ZUOK-Bw9SOwAV.js +0 -1
  385. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Bw9SOwAV.js +0 -1
  386. package/web-shell/assets/index-DgkKrjw3.js +0 -1187
  387. package/web-shell/assets/index-Rv6mOAN9.css +0 -5
  388. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DWBoO4UY.js +0 -1
@@ -4,6 +4,9 @@ import {
4
4
  DaemonMetricsRing,
5
5
  computeCpuPercent
6
6
  } from "./chunk-HGT6JR3U.js";
7
+ import {
8
+ RUNTIME_STARTUP_CANCELLED_MESSAGE
9
+ } from "./chunk-QUPXZXLV.js";
7
10
  import {
8
11
  ACCESS_LOG_CONTROLLER_LOCAL,
9
12
  CAPABILITIES_SCHEMA_VERSION,
@@ -23,31 +26,31 @@ import {
23
26
  hostAllowlist,
24
27
  isBrowserAutomationMcpAvailable,
25
28
  isDeepHealthQuery,
29
+ isManagedScratchChild,
26
30
  listenerMaxConnections,
27
31
  parseAllowOriginPatterns,
28
32
  parseDaemonStatusDetail,
29
33
  positiveFiniteOrNull,
34
+ prepareManagedScratchRoot,
30
35
  require_express,
31
36
  resolveWebShellDir,
32
37
  setDeferredRuntimeRequestTiming
33
- } from "./chunk-B3KGZCQN.js";
38
+ } from "./chunk-IJTOWOD7.js";
34
39
  import {
35
40
  isLoopbackBind
36
41
  } from "./chunk-RXFQM6FQ.js";
37
42
  import {
38
- RUNTIME_STARTUP_CANCELLED_MESSAGE
39
- } from "./chunk-QUPXZXLV.js";
43
+ LOAD_REPLAY_META_KEY
44
+ } from "./chunk-3SJ43L4W.js";
40
45
  import {
41
46
  DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
42
47
  normalizeCompactedReplayMaxBytes
43
48
  } from "./chunk-COH43MRJ.js";
44
- import {
45
- LOAD_REPLAY_META_KEY
46
- } from "./chunk-QR6U5QPP.js";
47
49
  import "./chunk-WBL3FJEU.js";
50
+ import "./chunk-T2NCM2ET.js";
48
51
  import {
49
52
  resolveChannelCwd
50
- } from "./chunk-4ODB7WIB.js";
53
+ } from "./chunk-QAFKR7WR.js";
51
54
  import {
52
55
  loadServeFastPathSettings,
53
56
  preResolveServeFastPathHomeEnvOverrides
@@ -56,25 +59,30 @@ import {
56
59
  MAX_REGISTERED_WORKSPACES,
57
60
  resolveWorkspaceInputs,
58
61
  workspaceRegistrationId
59
- } from "./chunk-KQNM4EO7.js";
62
+ } from "./chunk-HQCSRJ3P.js";
60
63
  import {
61
- canonicalizeWorkspace
62
- } from "./chunk-W7FJ3N32.js";
63
- import "./chunk-OLMETXLX.js";
64
- import "./chunk-NBMIC7DR.js";
64
+ canonicalizeWorkspace,
65
+ translateAndCheckAbsoluteWorkspacePath
66
+ } from "./chunk-2RFKHEXL.js";
67
+ import "./chunk-PXHK5ONM.js";
68
+ import "./chunk-SX4PK3FC.js";
65
69
  import {
70
+ ChannelDeliveryError,
66
71
  ChannelWebhookEnqueueError,
67
- QWEN_SERVER_TOKEN_ENV
68
- } from "./chunk-Y2ENGUD6.js";
72
+ QWEN_SERVER_TOKEN_ENV,
73
+ isChannelDeliveryError,
74
+ normalizeWorkerDiagnostic,
75
+ sanitizeWorkerDiagnostic
76
+ } from "./chunk-UPF7PTBI.js";
69
77
  import {
70
78
  channelSelectionNames
71
- } from "./chunk-TJTKSVIV.js";
79
+ } from "./chunk-JLU636DO.js";
80
+ import "./chunk-BK2UNYWD.js";
72
81
  import "./chunk-M5GB774H.js";
73
82
  import "./chunk-5HBA2Z7V.js";
74
- import "./chunk-T2NCM2ET.js";
75
83
  import {
76
84
  sanitizeLogText
77
- } from "./chunk-NIJEXGV6.js";
85
+ } from "./chunk-ZXYUQXY5.js";
78
86
  import "./chunk-UDXSXLER.js";
79
87
  import "./chunk-GOXKNSDZ.js";
80
88
  import {
@@ -84,7 +92,7 @@ import {
84
92
  import "./chunk-QRUIS3DN.js";
85
93
  import {
86
94
  getCliVersion
87
- } from "./chunk-OWCALFEG.js";
95
+ } from "./chunk-54R2CV2G.js";
88
96
  import "./chunk-VJNBRRZG.js";
89
97
  import "./chunk-ALGGS7UH.js";
90
98
  import {
@@ -95,11 +103,11 @@ import {
95
103
  writeStdoutLine
96
104
  } from "./chunk-OWAK7LMW.js";
97
105
  import "./chunk-5M6IDOMF.js";
98
- import "./chunk-T4TZQJ7W.js";
106
+ import "./chunk-TWPJO254.js";
99
107
  import "./chunk-H6XPXXMH.js";
100
108
  import {
101
109
  require_proper_lockfile
102
- } from "./chunk-E2UVIFI2.js";
110
+ } from "./chunk-KRXPRVGL.js";
103
111
  import "./chunk-CR3C7WXL.js";
104
112
  import "./chunk-XWRJCPHC.js";
105
113
  import {
@@ -2015,6 +2023,89 @@ function asRecord(value) {
2015
2023
  }
2016
2024
  __name(asRecord, "asRecord");
2017
2025
 
2026
+ // packages/cli/src/serve/channel-delivery-authorization.ts
2027
+ init_esbuild_shims();
2028
+ function authorizationKey(workspaceCwd, sessionId, id) {
2029
+ return JSON.stringify([workspaceCwd, sessionId, id]);
2030
+ }
2031
+ __name(authorizationKey, "authorizationKey");
2032
+ function targetsEqual(left, right) {
2033
+ return left.channelName === right.channelName && left.type === right.type && left.id === right.id;
2034
+ }
2035
+ __name(targetsEqual, "targetsEqual");
2036
+ var ChannelDeliveryAuthorizationStore = class {
2037
+ static {
2038
+ __name(this, "ChannelDeliveryAuthorizationStore");
2039
+ }
2040
+ #prompts = /* @__PURE__ */ new Map();
2041
+ #scheduledTasks = /* @__PURE__ */ new Map();
2042
+ authorizePrompt(workspaceCwd, authorization) {
2043
+ this.#prompts.set(
2044
+ authorizationKey(
2045
+ workspaceCwd,
2046
+ authorization.sessionId,
2047
+ authorization.deliveryId
2048
+ ),
2049
+ authorization.target
2050
+ );
2051
+ }
2052
+ revokePrompt(workspaceCwd, sessionId, deliveryId) {
2053
+ this.#prompts.delete(authorizationKey(workspaceCwd, sessionId, deliveryId));
2054
+ }
2055
+ registerScheduledTask(workspaceCwd, authorization) {
2056
+ const key = authorizationKey(
2057
+ workspaceCwd,
2058
+ authorization.sessionId,
2059
+ authorization.taskId
2060
+ );
2061
+ const current = this.#scheduledTasks.get(key);
2062
+ this.#scheduledTasks.set(key, {
2063
+ sessionId: authorization.sessionId,
2064
+ taskId: authorization.taskId,
2065
+ target: authorization.target,
2066
+ recurring: authorization.recurring,
2067
+ lastConsumedAt: current?.lastConsumedAt ?? authorization.lastFiredAt ?? 0
2068
+ });
2069
+ }
2070
+ revokeScheduledTask(workspaceCwd, sessionId, taskId) {
2071
+ this.#scheduledTasks.delete(
2072
+ authorizationKey(workspaceCwd, sessionId, taskId)
2073
+ );
2074
+ }
2075
+ consume(workspaceCwd, request) {
2076
+ if (request.source === "prompt") {
2077
+ if (request.promptId !== request.deliveryId) return false;
2078
+ const key2 = authorizationKey(
2079
+ workspaceCwd,
2080
+ request.sessionId,
2081
+ request.deliveryId
2082
+ );
2083
+ const target = this.#prompts.get(key2);
2084
+ if (!target || !targetsEqual(target, request.target)) return false;
2085
+ this.#prompts.delete(key2);
2086
+ return true;
2087
+ }
2088
+ if (typeof request.taskId !== "string" || typeof request.firedAt !== "number" || request.deliveryId !== `${request.taskId}:${request.firedAt}`) {
2089
+ return false;
2090
+ }
2091
+ const key = authorizationKey(
2092
+ workspaceCwd,
2093
+ request.sessionId,
2094
+ request.taskId
2095
+ );
2096
+ const authorization = this.#scheduledTasks.get(key);
2097
+ if (!authorization || request.firedAt <= authorization.lastConsumedAt || !targetsEqual(authorization.target, request.target)) {
2098
+ return false;
2099
+ }
2100
+ if (authorization.recurring) {
2101
+ authorization.lastConsumedAt = request.firedAt;
2102
+ } else {
2103
+ this.#scheduledTasks.delete(key);
2104
+ }
2105
+ return true;
2106
+ }
2107
+ };
2108
+
2018
2109
  // packages/cli/src/serve/channel-workspace-grouping.ts
2019
2110
  init_esbuild_shims();
2020
2111
  function resolveChannelOwnerCwd(rawCwd, workspaceCwd) {
@@ -2136,6 +2227,90 @@ var QWEN_SERVE_PROMPT_DEADLINE_MS_ENV = "QWEN_SERVE_PROMPT_DEADLINE_MS";
2136
2227
  var QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS_ENV = "QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS";
2137
2228
  var SHUTDOWN_FORCE_CLOSE_MS = 5e3;
2138
2229
  var DAEMON_LOG_FORCED_FLUSH_BUDGET_MS = 250;
2230
+ function channelDeliveryPublicError(code) {
2231
+ switch (code) {
2232
+ case "channel_worker_unavailable":
2233
+ return "Channel worker is unavailable.";
2234
+ case "channel_delivery_timeout":
2235
+ return "Channel delivery timed out.";
2236
+ case "channel_delivery_invalid":
2237
+ return "Channel delivery is invalid.";
2238
+ case "channel_delivery_rejected":
2239
+ return "Channel delivery was rejected.";
2240
+ case "channel_delivery_queue_full":
2241
+ return "Channel delivery queue is full.";
2242
+ case "channel_delivery_failed":
2243
+ return "Channel delivery failed.";
2244
+ default:
2245
+ return "Channel delivery failed.";
2246
+ }
2247
+ }
2248
+ __name(channelDeliveryPublicError, "channelDeliveryPublicError");
2249
+ function createBoundChannelDeliveryHandler(boundWorkspace, getManager, authorizations, daemonLog, diagnosticRedaction = {
2250
+ workerEnv: {}
2251
+ }) {
2252
+ return async (info) => {
2253
+ const failed = /* @__PURE__ */ __name((code, error, diagnostic) => {
2254
+ writeDaemonLifecycleBestEffort(() => {
2255
+ if (!daemonLog) return;
2256
+ let diagnosticText;
2257
+ if (diagnostic !== void 0) {
2258
+ const message = diagnostic instanceof Error ? diagnostic.message : String(diagnostic);
2259
+ const sanitized = sanitizeWorkerDiagnostic(
2260
+ message,
2261
+ 512,
2262
+ diagnosticRedaction
2263
+ );
2264
+ const targetId = normalizeWorkerDiagnostic(info.target.id);
2265
+ diagnosticText = sanitizeLogText(
2266
+ targetId.length > 0 ? sanitized.replaceAll(targetId, "<redacted>") : sanitized,
2267
+ 512
2268
+ );
2269
+ }
2270
+ daemonLog.warn("channel delivery failed", {
2271
+ sessionId: info.sessionId,
2272
+ deliveryId: info.deliveryId,
2273
+ source: info.source,
2274
+ channelName: info.target.channelName,
2275
+ code,
2276
+ ...diagnosticText ? { diagnostic: diagnosticText } : {}
2277
+ });
2278
+ });
2279
+ return { status: "failed", code, error };
2280
+ }, "failed");
2281
+ if (!authorizations.consume(boundWorkspace, info)) {
2282
+ return failed(
2283
+ "channel_delivery_invalid",
2284
+ "Channel delivery is not authorized."
2285
+ );
2286
+ }
2287
+ if (info.text.trim().length === 0) {
2288
+ return { status: "skipped" };
2289
+ }
2290
+ const manager = getManager();
2291
+ if (!manager) {
2292
+ return failed(
2293
+ "channel_worker_unavailable",
2294
+ "Channel worker is not running."
2295
+ );
2296
+ }
2297
+ try {
2298
+ await manager.deliverChannelMessage(boundWorkspace, {
2299
+ deliveryId: info.deliveryId,
2300
+ channelName: info.target.channelName,
2301
+ target: { type: info.target.type, id: info.target.id },
2302
+ text: info.text
2303
+ });
2304
+ return { status: "delivered" };
2305
+ } catch (err) {
2306
+ if (isChannelDeliveryError(err)) {
2307
+ return failed(err.code, channelDeliveryPublicError(err.code), err);
2308
+ }
2309
+ return failed("channel_delivery_failed", "Channel delivery failed.", err);
2310
+ }
2311
+ };
2312
+ }
2313
+ __name(createBoundChannelDeliveryHandler, "createBoundChannelDeliveryHandler");
2139
2314
  async function flushDaemonLogBounded(daemonLog, budgetMs) {
2140
2315
  let timer;
2141
2316
  try {
@@ -2357,12 +2532,12 @@ __name(withSettingsLock, "withSettingsLock");
2357
2532
  var channelWorkerRuntimePromise;
2358
2533
  async function loadChannelWorkerRuntime() {
2359
2534
  channelWorkerRuntimePromise ??= Promise.all([
2360
- import("./channel-worker-supervisor-ZGO2W2MD.js"),
2361
- import("./pidfile-UEHAT6DH.js"),
2362
- import("./runtime-SNVAP6EH.js"),
2535
+ import("./channel-worker-supervisor-CXRCDA4Y.js"),
2536
+ import("./pidfile-UCFCJOAP.js"),
2537
+ import("./runtime-4CTBU5WX.js"),
2363
2538
  import("./cli-entry-path-4VJ3Y6T2.js"),
2364
- import("./channel-worker-group-53CMOPFT.js"),
2365
- import("./channel-worker-manager-UTXILKC2.js")
2539
+ import("./channel-worker-group-MA3WXWYX.js"),
2540
+ import("./channel-worker-manager-TIYYYBCT.js")
2366
2541
  ]).then(
2367
2542
  ([
2368
2543
  supervisor,
@@ -2467,7 +2642,7 @@ function shouldPreheatBridge(deps) {
2467
2642
  __name(shouldPreheatBridge, "shouldPreheatBridge");
2468
2643
  var coreRuntimePromise;
2469
2644
  function loadCoreRuntime() {
2470
- coreRuntimePromise ??= import("./src-43LM7JLB.js");
2645
+ coreRuntimePromise ??= import("./src-LKKTJ4NG.js");
2471
2646
  return coreRuntimePromise;
2472
2647
  }
2473
2648
  __name(loadCoreRuntime, "loadCoreRuntime");
@@ -2497,10 +2672,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
2497
2672
  var settingsRuntimePromise;
2498
2673
  function loadSettingsRuntimeModules() {
2499
2674
  settingsRuntimePromise ??= Promise.all([
2500
- import("./settings-KITVOUSV.js"),
2501
- import("./environment-3OV7UQOT.js"),
2502
- import("./loadedSettingsAdapter-AO4YBRXZ.js"),
2503
- import("./trustedFolders-5XCVNEUU.js")
2675
+ import("./settings-BXZHA6TZ.js"),
2676
+ import("./environment-KS36ZHBE.js"),
2677
+ import("./loadedSettingsAdapter-OZFNBRHE.js"),
2678
+ import("./trustedFolders-Q7RALK4T.js")
2504
2679
  ]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
2505
2680
  settings,
2506
2681
  environment,
@@ -2513,8 +2688,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
2513
2688
  var channelWebhookConfigRuntimePromise;
2514
2689
  function loadChannelWebhookConfigRuntime() {
2515
2690
  channelWebhookConfigRuntimePromise ??= Promise.all([
2516
- import("./runtime-SNVAP6EH.js"),
2517
- import("./config-utils-AHQ6YZ66.js")
2691
+ import("./runtime-4CTBU5WX.js"),
2692
+ import("./config-utils-XQRXHAN3.js")
2518
2693
  ]).then(([channelRuntime, configUtils]) => ({
2519
2694
  loadChannelsConfig: channelRuntime.loadChannelsConfig,
2520
2695
  parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
@@ -2538,16 +2713,16 @@ async function loadServeRuntimeModules() {
2538
2713
  totalSessionAdmissionModule,
2539
2714
  workspaceRegistryModule
2540
2715
  ] = await Promise.all([
2541
- import("./server-SO64U3X5.js"),
2542
- import("./bridge-VL7ITBU5.js"),
2543
- import("./spawnChannel-2BU3AULL.js"),
2544
- import("./workspace-service-F3KIN2UN.js"),
2716
+ import("./server-JD5PIE7A.js"),
2717
+ import("./bridge-FFC4C6VD.js"),
2718
+ import("./spawnChannel-IO4HQLFS.js"),
2719
+ import("./workspace-service-BI4KDYPD.js"),
2545
2720
  import("./types-ML3TRJQ5.js"),
2546
- import("./daemon-status-provider-NL4IAG7B.js"),
2547
- import("./workspace-providers-status-EADV364W.js"),
2548
- import("./workspace-skills-status-YVICUR5Y.js"),
2549
- import("./total-session-admission-BJLDHKJN.js"),
2550
- import("./workspace-registry-W6VMFYZU.js")
2721
+ import("./daemon-status-provider-6YNZ3UAE.js"),
2722
+ import("./workspace-providers-status-WDLBDLPG.js"),
2723
+ import("./workspace-skills-status-OVB4LPHA.js"),
2724
+ import("./total-session-admission-NDF7EVG7.js"),
2725
+ import("./workspace-registry-IABDATX3.js")
2551
2726
  ]);
2552
2727
  return {
2553
2728
  createServeApp: serverModule.createServeApp,
@@ -2599,6 +2774,7 @@ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, s
2599
2774
  sessionShellCommandEnabled,
2600
2775
  sessionArtifactsPersistenceAvailable,
2601
2776
  sessionGenerationAvailable: true,
2777
+ workspaceGenerationAvailable: true,
2602
2778
  rateLimit: opts.rateLimit === true,
2603
2779
  reloadAvailable: true,
2604
2780
  channelReloadAvailable: opts.channelSelection !== void 0,
@@ -3128,6 +3304,39 @@ function runSynchronousRequestGate(handler, req, res, next) {
3128
3304
  return passed;
3129
3305
  }
3130
3306
  __name(runSynchronousRequestGate, "runSynchronousRequestGate");
3307
+ function validateAndCanonicalizeWorkspaceInput(rawWorkspace) {
3308
+ const workspace = translateAndCheckAbsoluteWorkspacePath(rawWorkspace);
3309
+ if (workspace === null) {
3310
+ throw new Error(
3311
+ `Invalid --workspace "${rawWorkspace}": must be an absolute path.`
3312
+ );
3313
+ }
3314
+ try {
3315
+ const stats = fs.statSync(workspace);
3316
+ if (!stats.isDirectory()) {
3317
+ throw new Error(
3318
+ `Invalid --workspace "${workspace}": exists but is not a directory.`
3319
+ );
3320
+ }
3321
+ } catch (err) {
3322
+ if (err && typeof err === "object" && "code" in err) {
3323
+ const code = err.code;
3324
+ if (code === "ENOENT") {
3325
+ throw new Error(
3326
+ `Invalid --workspace "${workspace}": directory does not exist.`
3327
+ );
3328
+ }
3329
+ if (code === "EACCES" || code === "EPERM") {
3330
+ throw new Error(
3331
+ `Invalid --workspace "${workspace}": permission denied (${String(code)}). The path exists but cannot be stat'd by the current user.`
3332
+ );
3333
+ }
3334
+ }
3335
+ throw err;
3336
+ }
3337
+ return canonicalizeWorkspace(workspace);
3338
+ }
3339
+ __name(validateAndCanonicalizeWorkspaceInput, "validateAndCanonicalizeWorkspaceInput");
3131
3340
  async function runQwenServe(optsIn, deps = {}) {
3132
3341
  let daemonLog;
3133
3342
  let owner = "startup";
@@ -3160,6 +3369,7 @@ async function runQwenServe(optsIn, deps = {}) {
3160
3369
  __name(runQwenServe, "runQwenServe");
3161
3370
  async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3162
3371
  const runStartedAt = performance2.now();
3372
+ const channelDeliveryAuthorizations = new ChannelDeliveryAuthorizationStore();
3163
3373
  const shouldPreheat = !deps.bridge && shouldPreheatBridge(deps);
3164
3374
  const startup = {
3165
3375
  processStartedAt: new Date(
@@ -3175,6 +3385,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3175
3385
  });
3176
3386
  const rawToken = optsIn.token ?? process.env[QWEN_SERVER_TOKEN_ENV];
3177
3387
  const token = typeof rawToken === "string" && rawToken.trim().length > 0 ? rawToken.trim() : void 0;
3388
+ const channelDeliveryDiagnosticRedaction = {
3389
+ workerEnv: daemonRuntimeBaseEnv,
3390
+ ...token ? { daemonToken: token } : {}
3391
+ };
3178
3392
  const sessionShellCommandEnabled = optsIn.enableSessionShell === true && token !== void 0;
3179
3393
  if (optsIn.enableSessionShell === true && token === void 0) {
3180
3394
  writeStderrLine(
@@ -3351,40 +3565,11 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3351
3565
  "qwen serve: --allow-private-auth-base-url enabled; /workspace/auth/provider may install localhost/private-network model endpoints. Use only for local development with trusted clients."
3352
3566
  );
3353
3567
  }
3354
- const validateAndCanonicalizeWorkspace = /* @__PURE__ */ __name((workspace) => {
3355
- if (!path.isAbsolute(workspace)) {
3356
- throw new Error(
3357
- `Invalid --workspace "${workspace}": must be an absolute path.`
3358
- );
3359
- }
3360
- try {
3361
- const stats = fs.statSync(workspace);
3362
- if (!stats.isDirectory()) {
3363
- throw new Error(
3364
- `Invalid --workspace "${workspace}": exists but is not a directory.`
3365
- );
3366
- }
3367
- } catch (err) {
3368
- if (err && typeof err === "object" && "code" in err) {
3369
- const code = err.code;
3370
- if (code === "ENOENT") {
3371
- throw new Error(
3372
- `Invalid --workspace "${workspace}": directory does not exist.`
3373
- );
3374
- }
3375
- if (code === "EACCES" || code === "EPERM") {
3376
- throw new Error(
3377
- `Invalid --workspace "${workspace}": permission denied (${String(code)}). The path exists but cannot be stat'd by the current user.`
3378
- );
3379
- }
3380
- }
3381
- throw err;
3382
- }
3383
- return canonicalizeWorkspace(workspace);
3384
- }, "validateAndCanonicalizeWorkspace");
3568
+ const validateAndCanonicalizeWorkspace = validateAndCanonicalizeWorkspaceInput;
3385
3569
  const workspaceInputs = rawWorkspaces.map((workspace) => ({
3386
3570
  raw: workspace,
3387
3571
  cwd: validateAndCanonicalizeWorkspace(workspace),
3572
+ displayName: void 0,
3388
3573
  removable: false,
3389
3574
  registrationIds: []
3390
3575
  }));
@@ -3425,7 +3610,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3425
3610
  }
3426
3611
  let workspaceRegistrationStore = deps.workspaceRegistrationStore;
3427
3612
  if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
3428
- const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-F3ZX3YHT.js");
3613
+ const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-26Z6J6P5.js");
3429
3614
  workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
3430
3615
  }
3431
3616
  if (workspaceRegistrationStore) {
@@ -3433,6 +3618,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3433
3618
  const stored = await workspaceRegistrationStore.read();
3434
3619
  for (const storedWorkspace of stored.workspaces) {
3435
3620
  const registrationId = workspaceRegistrationId(storedWorkspace);
3621
+ const displayName = stored.displayNames?.[registrationId];
3436
3622
  let cwd;
3437
3623
  try {
3438
3624
  cwd = validateAndCanonicalizeWorkspace(storedWorkspace);
@@ -3449,6 +3635,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3449
3635
  );
3450
3636
  if (existingInput) {
3451
3637
  existingInput.registrationIds.push(registrationId);
3638
+ existingInput.displayName ??= displayName;
3452
3639
  continue;
3453
3640
  }
3454
3641
  const nested = workspaceInputs.some(
@@ -3473,6 +3660,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3473
3660
  workspaceInputs.push({
3474
3661
  raw: storedWorkspace,
3475
3662
  cwd,
3663
+ displayName,
3476
3664
  removable: true,
3477
3665
  registrationIds: [registrationId]
3478
3666
  });
@@ -3605,6 +3793,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3605
3793
  );
3606
3794
  }
3607
3795
  }
3796
+ if (opts.initializeTimeoutMs !== void 0) {
3797
+ if (!isPositiveIntegerMs(opts.initializeTimeoutMs)) {
3798
+ throw new TypeError(
3799
+ `Invalid initializeTimeoutMs: ${opts.initializeTimeoutMs}. Must be a positive integer (milliseconds).`
3800
+ );
3801
+ }
3802
+ assertTimerDelayInRange("initializeTimeoutMs", opts.initializeTimeoutMs);
3803
+ }
3608
3804
  if (opts.permissionResponseTimeoutMs !== void 0) {
3609
3805
  if (!Number.isFinite(opts.permissionResponseTimeoutMs) || !Number.isInteger(opts.permissionResponseTimeoutMs) || opts.permissionResponseTimeoutMs < 0) {
3610
3806
  throw new TypeError(
@@ -3906,6 +4102,17 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3906
4102
  cliVersionPromise
3907
4103
  ]);
3908
4104
  cliVersion = resolvedCliVersion;
4105
+ let managedScratchRoot;
4106
+ try {
4107
+ managedScratchRoot = prepareManagedScratchRoot(
4108
+ path.join(core.Storage.getGlobalQwenDir(), "scratch-workspaces"),
4109
+ workspaceInputs.map((workspace) => workspace.cwd)
4110
+ );
4111
+ } catch (err) {
4112
+ writeStderrLine(
4113
+ `qwen serve: managed scratch workspaces are unavailable: ${err instanceof Error ? err.message : String(err)}`
4114
+ );
4115
+ }
3909
4116
  let runtimeBootSettings;
3910
4117
  try {
3911
4118
  runtimeBootSettings = settingsRuntime.settings.loadSettings(boundWorkspace);
@@ -3976,7 +4183,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
3976
4183
  }
3977
4184
  throw err;
3978
4185
  }
3979
- core.initializeTelemetry(
4186
+ await core.initializeTelemetry(
3980
4187
  createDaemonTelemetryRuntimeConfig(
3981
4188
  daemonTelemetrySettings,
3982
4189
  resolvedCliVersion,
@@ -4276,7 +4483,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4276
4483
  );
4277
4484
  }
4278
4485
  }), "persistSettingsFn");
4279
- const { createSubSessionLauncher } = await import("./create-sub-session-MGNX52P3.js");
4486
+ const { createSubSessionLauncher } = await import("./create-sub-session-55F3GOLK.js");
4280
4487
  const subSessionLauncher = createSubSessionLauncher({
4281
4488
  getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
4282
4489
  boundWorkspace
@@ -4286,6 +4493,13 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4286
4493
  // connection that hosts a named client MCP server (#5626).
4287
4494
  clientMcpSender: clientMcpSenderRegistry.lookup,
4288
4495
  onCreateSubSession: subSessionLauncher.launch,
4496
+ onChannelDelivery: createBoundChannelDeliveryHandler(
4497
+ boundWorkspace,
4498
+ () => channelWorkerManager,
4499
+ channelDeliveryAuthorizations,
4500
+ daemonLog,
4501
+ channelDeliveryDiagnosticRedaction
4502
+ ),
4289
4503
  maxSessions: opts.maxSessions,
4290
4504
  freshSessionAdmission: totalSessionAdmission.admit,
4291
4505
  sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
@@ -4293,6 +4507,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4293
4507
  ...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
4294
4508
  ...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
4295
4509
  ...opts.channelIdleTimeoutMs !== void 0 ? { channelIdleTimeoutMs: opts.channelIdleTimeoutMs } : {},
4510
+ ...opts.initializeTimeoutMs !== void 0 ? { initializeTimeoutMs: opts.initializeTimeoutMs } : {},
4296
4511
  ...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
4297
4512
  ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
4298
4513
  ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
@@ -4406,6 +4621,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4406
4621
  {
4407
4622
  workspaceId: daemonWorkspaceHash,
4408
4623
  workspaceCwd: boundWorkspace,
4624
+ ...workspaceInputs[0]?.displayName ? { displayName: workspaceInputs[0].displayName } : {},
4409
4625
  primary: true,
4410
4626
  trusted: trustedWorkspace,
4411
4627
  removable: false,
@@ -4518,6 +4734,13 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4518
4734
  const secondaryBridge = runtime.createAcpSessionBridge({
4519
4735
  clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
4520
4736
  onCreateSubSession: secondarySubSessionLauncher.launch,
4737
+ onChannelDelivery: createBoundChannelDeliveryHandler(
4738
+ workspaceInput.cwd,
4739
+ () => channelWorkerManager,
4740
+ channelDeliveryAuthorizations,
4741
+ daemonLog,
4742
+ channelDeliveryDiagnosticRedaction
4743
+ ),
4521
4744
  maxSessions: opts.maxSessions,
4522
4745
  freshSessionAdmission: totalSessionAdmission.admit,
4523
4746
  sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
@@ -4525,6 +4748,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4525
4748
  ...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
4526
4749
  ...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
4527
4750
  ...opts.channelIdleTimeoutMs !== void 0 ? { channelIdleTimeoutMs: opts.channelIdleTimeoutMs } : {},
4751
+ ...opts.initializeTimeoutMs !== void 0 ? { initializeTimeoutMs: opts.initializeTimeoutMs } : {},
4528
4752
  ...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
4529
4753
  ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
4530
4754
  ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
@@ -4624,6 +4848,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4624
4848
  workspaceRuntimes.push({
4625
4849
  workspaceId: secondaryWorkspaceHash,
4626
4850
  workspaceCwd: workspaceInput.cwd,
4851
+ ...workspaceInput.displayName ? { displayName: workspaceInput.displayName } : {},
4627
4852
  primary: false,
4628
4853
  trusted: secondaryTrusted,
4629
4854
  removable: workspaceInput.removable,
@@ -4730,7 +4955,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4730
4955
  metricsLoopDelay.disable();
4731
4956
  }
4732
4957
  };
4733
- const createDynamicWorkspaceRuntime = /* @__PURE__ */ __name(async (cwd) => {
4958
+ const createDynamicWorkspaceRuntime = /* @__PURE__ */ __name(async (cwd, options) => {
4959
+ if (options.provenance === "managed-scratch" && (!managedScratchRoot || !isManagedScratchChild(cwd, managedScratchRoot.canonicalRoot))) {
4960
+ throw new Error(
4961
+ "Managed scratch runtime must use an accepted direct child directory"
4962
+ );
4963
+ }
4734
4964
  let wsSettings;
4735
4965
  try {
4736
4966
  wsSettings = settingsRuntime.settings.loadSettings(cwd);
@@ -4739,10 +4969,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4739
4969
  `qwen serve: could not read full settings for dynamic workspace ${cwd} (${err instanceof Error ? err.message : String(err)}); falling back to defaults.`
4740
4970
  );
4741
4971
  }
4742
- const trusted = wsSettings ? settingsRuntime.trustedFolders.getWorkspaceTrustStatus(
4972
+ const trusted = options.provenance === "managed-scratch" || (wsSettings ? settingsRuntime.trustedFolders.getWorkspaceTrustStatus(
4743
4973
  wsSettings.merged,
4744
4974
  cwd
4745
- ).effective.state === "trusted" : false;
4975
+ ).effective.state === "trusted" : false);
4746
4976
  const wsEnv = createRuntimeEnvMetadata(cwd, wsSettings);
4747
4977
  const wsHash = core.hashDaemonWorkspace(cwd);
4748
4978
  const wsFsFactory = runtime.resolveBridgeFsFactory({
@@ -4777,6 +5007,13 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4777
5007
  wsBridge = runtime.createAcpSessionBridge({
4778
5008
  clientMcpSender: wsClientMcpRegistry.lookup,
4779
5009
  onCreateSubSession: wsSubSessionLauncher.launch,
5010
+ onChannelDelivery: createBoundChannelDeliveryHandler(
5011
+ cwd,
5012
+ () => channelWorkerManager,
5013
+ channelDeliveryAuthorizations,
5014
+ daemonLog,
5015
+ channelDeliveryDiagnosticRedaction
5016
+ ),
4780
5017
  maxSessions: opts.maxSessions,
4781
5018
  freshSessionAdmission: totalSessionAdmission.admit,
4782
5019
  sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
@@ -4784,6 +5021,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4784
5021
  ...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
4785
5022
  ...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
4786
5023
  ...opts.channelIdleTimeoutMs !== void 0 ? { channelIdleTimeoutMs: opts.channelIdleTimeoutMs } : {},
5024
+ ...opts.initializeTimeoutMs !== void 0 ? { initializeTimeoutMs: opts.initializeTimeoutMs } : {},
4787
5025
  ...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
4788
5026
  ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
4789
5027
  ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
@@ -5039,6 +5277,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5039
5277
  const app2 = runtime.createServeApp(opts, () => actualPort, {
5040
5278
  workspaceRegistry,
5041
5279
  createWorkspaceRuntime: createDynamicWorkspaceRuntime,
5280
+ managedScratchRoot,
5042
5281
  workspaceRegistrationStore,
5043
5282
  workspaceRuntimeRemoval,
5044
5283
  voiceCoordinator: workspaceVoiceCoordinator,
@@ -5077,6 +5316,19 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5077
5316
  }
5078
5317
  return channelWorkerManager.enqueueWebhookTask(task);
5079
5318
  }, "enqueueChannelWebhookTask"),
5319
+ deliverChannelMessage: /* @__PURE__ */ __name(async (workspaceCwd, request) => {
5320
+ if (!channelWorkerManager) {
5321
+ throw new ChannelDeliveryError(
5322
+ "channel_worker_unavailable",
5323
+ "Channel worker is not running."
5324
+ );
5325
+ }
5326
+ return channelWorkerManager.deliverChannelMessage(
5327
+ workspaceCwd,
5328
+ request
5329
+ );
5330
+ }, "deliverChannelMessage"),
5331
+ channelDeliveryAuthorizations,
5080
5332
  reloadChannelWorker,
5081
5333
  getPerfSnapshot: /* @__PURE__ */ __name(() => ({
5082
5334
  eventLoop: currentDaemonEventLoopMonitor.snapshot(),
@@ -5268,7 +5520,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5268
5520
  reserveChannelServicePidfile(opts.channelSelection);
5269
5521
  }
5270
5522
  return await new Promise((resolve, reject) => {
5271
- const onListening = /* @__PURE__ */ __name(() => {
5523
+ const onListening = /* @__PURE__ */ __name((error) => {
5524
+ if (error) return;
5272
5525
  startup.listenerReadyAt = (/* @__PURE__ */ new Date()).toISOString();
5273
5526
  startup.processToListenMs = Math.round(process.uptime() * 1e3);
5274
5527
  startup.runQwenServeToListenMs = Math.round(
@@ -5288,7 +5541,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5288
5541
  channelWorkspaceGroups = resolveChannelWorkspaceGroupsAtListen();
5289
5542
  } catch (err) {
5290
5543
  removeCurrentServePidfile();
5291
- const error = err instanceof Error ? err : new Error(String(err));
5544
+ const error2 = err instanceof Error ? err : new Error(String(err));
5292
5545
  server.close((closeErr) => {
5293
5546
  if (closeErr) {
5294
5547
  daemonLog.error(
@@ -5296,7 +5549,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5296
5549
  closeErr
5297
5550
  );
5298
5551
  }
5299
- reject(error);
5552
+ reject(error2);
5300
5553
  });
5301
5554
  return;
5302
5555
  }
@@ -5366,9 +5619,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5366
5619
  "deferred runtime: cancelled, server closed before startup"
5367
5620
  );
5368
5621
  runtimeStartupSettled = true;
5369
- const error = new Error(RUNTIME_STARTUP_CANCELLED_MESSAGE);
5370
- runtimeStartupError = error.message;
5371
- markRuntimeFailed(error);
5622
+ const error2 = new Error(RUNTIME_STARTUP_CANCELLED_MESSAGE);
5623
+ runtimeStartupError = error2.message;
5624
+ markRuntimeFailed(error2);
5372
5625
  }, "cancelDeferredRuntimeStartup");
5373
5626
  const shutdownBridgeAfterFailedStartup = /* @__PURE__ */ __name(async (bridge) => {
5374
5627
  if (!bridge || deps.bridge) return;
@@ -5401,7 +5654,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5401
5654
  }
5402
5655
  }, "stopChannelWorkerAfterFailedStartup");
5403
5656
  const failRuntimeStartup = /* @__PURE__ */ __name(async (err, bridgeForCleanup) => {
5404
- const error = err instanceof Error ? err : new Error(String(err));
5657
+ const error2 = err instanceof Error ? err : new Error(String(err));
5405
5658
  if (runtimeStartupSettled) {
5406
5659
  disposeRuntimeAppResources(runtimeApp ?? runtimeAppForCleanup);
5407
5660
  await shutdownBridgeAfterFailedStartup(bridgeForCleanup);
@@ -5411,15 +5664,15 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5411
5664
  disposeRuntimeAppResources(runtimeApp ?? runtimeAppForCleanup);
5412
5665
  runtimeApp = void 0;
5413
5666
  clearRuntimeStartupTimer();
5414
- const message = error.message;
5667
+ const message = error2.message;
5415
5668
  runtimeStartupError = message;
5416
5669
  if (startup.preheat.status === "scheduled" || startup.preheat.status === "running") {
5417
5670
  startup.preheat.status = "failed";
5418
5671
  startup.preheat.error = message;
5419
5672
  }
5420
5673
  writeStderrLine(`qwen serve: runtime startup failed: ${message}`);
5421
- daemonLog.error("runtime startup failed", error);
5422
- markRuntimeFailed(error);
5674
+ daemonLog.error("runtime startup failed", error2);
5675
+ markRuntimeFailed(error2);
5423
5676
  if (closeServerAfterChannelWorkerStartupFailure && server.listening) {
5424
5677
  runtimeFailureListenerClose = new Promise((resolve2) => {
5425
5678
  server.close((closeErr) => {
@@ -6011,12 +6264,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6011
6264
  __name(runQwenServeImpl, "runQwenServeImpl");
6012
6265
  export {
6013
6266
  InvalidPolicyConfigError,
6267
+ createBoundChannelDeliveryHandler,
6014
6268
  createDisabledChannelWorkerSupervisor,
6015
6269
  createLazyBridgeProxy,
6016
6270
  extractContextFilename,
6017
6271
  formatChannelWorkerDaemonUrl,
6018
6272
  resolveRuntimeStartupTimeoutMs,
6019
6273
  runQwenServe,
6274
+ validateAndCanonicalizeWorkspaceInput,
6020
6275
  validatePolicyConfig,
6021
6276
  waitForRuntimeStartingForShutdown
6022
6277
  };