@qwen-code/qwen-code 0.19.9 → 0.19.10-nightly.20260716.506ce0a1a

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 (323) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +14 -6
  2. package/bundled/qc-helper/docs/features/approval-mode.md +2 -2
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +33 -0
  4. package/bundled/qc-helper/docs/features/channels/overview.md +64 -20
  5. package/bundled/qc-helper/docs/features/channels/wecom.md +8 -7
  6. package/bundled/qc-helper/docs/features/code-review.md +88 -44
  7. package/bundled/qc-helper/docs/features/commands.md +6 -6
  8. package/bundled/qc-helper/docs/features/hooks.md +29 -0
  9. package/bundled/qc-helper/docs/features/sandbox.md +2 -0
  10. package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
  11. package/bundled/qc-helper/docs/qwen-serve.md +49 -20
  12. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  13. package/bundled/review/DESIGN.md +219 -33
  14. package/bundled/review/SKILL.md +429 -382
  15. package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-WOC3YDWA.js} +31 -32
  16. package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-H5HZCAFD.js} +49 -48
  17. package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-55YDJDNM.js} +922 -550
  18. package/chunks/{agent-HOLHB3RT.js → agent-H6VE5W3L.js} +26 -27
  19. package/chunks/{agent-headless-SXL6H56A.js → agent-headless-T4XJOCRU.js} +26 -27
  20. package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-HBRXJSP4.js} +78 -16
  21. package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-MIZLXBLF.js} +2 -2
  22. package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-XMJVPNWM.js} +2 -2
  23. package/chunks/{bridge-BCJQ7BBB.js → bridge-FTB6ZP3R.js} +31 -34
  24. package/chunks/{ca-UJ6HC4H2.js → ca-CODEN7TD.js} +9 -1
  25. package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
  26. package/chunks/channel-worker-manager-CUDPU4CN.js +418 -0
  27. package/chunks/channel-worker-supervisor-4XTO2ZD3.js +20 -0
  28. package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
  29. package/chunks/{chunk-VA4KQY6V.js → chunk-2JNR4VP2.js} +3 -3
  30. package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
  31. package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
  32. package/chunks/{chunk-CUMMSHH6.js → chunk-3DWIFU7L.js} +1 -1
  33. package/chunks/chunk-3MX7D6QN.js +516 -0
  34. package/chunks/{chunk-SJHDYNHF.js → chunk-4BJVSIS3.js} +3 -3
  35. package/chunks/{chunk-TO6QE22P.js → chunk-5CNYZ7TN.js} +26 -22
  36. package/chunks/{chunk-N3EMS75V.js → chunk-5DEJ4T6C.js} +1333 -1232
  37. package/chunks/chunk-5HBA2Z7V.js +28 -0
  38. package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
  39. package/chunks/{chunk-SCGXUJBT.js → chunk-6LI3L22E.js} +3 -3
  40. package/chunks/{chunk-K434OPES.js → chunk-6WPJRYLZ.js} +3 -3
  41. package/chunks/{chunk-YAUFFXDS.js → chunk-7GM2RWCR.js} +12 -11
  42. package/chunks/{chunk-OQ4DRIOA.js → chunk-7HWE2W74.js} +2 -2
  43. package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
  44. package/chunks/{chunk-MC23XKFE.js → chunk-A2HWMJVO.js} +37 -3
  45. package/chunks/{chunk-3G7CIHVV.js → chunk-ABNYOMDG.js} +4 -4
  46. package/chunks/{chunk-3AHXV67U.js → chunk-AGZLXLBY.js} +1 -1
  47. package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
  48. package/chunks/{chunk-Q4YQW46J.js → chunk-AMRZVQUY.js} +43 -40
  49. package/chunks/{chunk-W3JHSWRP.js → chunk-AN6C2U46.js} +4 -4
  50. package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
  51. package/chunks/{chunk-5SFOMFG4.js → chunk-AVEOWVOM.js} +36 -2
  52. package/chunks/{chunk-34MW4KTI.js → chunk-BA5JGE5F.js} +2 -2
  53. package/chunks/{chunk-5HOMWMCL.js → chunk-BSJAQUFD.js} +5492 -1336
  54. package/chunks/{chunk-L6P4KPHR.js → chunk-BWJKL5DB.js} +58 -38
  55. package/chunks/{chunk-PVZM22CK.js → chunk-C32JFRGV.js} +5 -5
  56. package/chunks/{chunk-AKIVHSJR.js → chunk-CZIHPO7L.js} +163 -782
  57. package/chunks/chunk-DL7RCO6V.js +493 -0
  58. package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
  59. package/chunks/{chunk-5VXNZWGF.js → chunk-ENUQSKEY.js} +1 -1
  60. package/chunks/{chunk-PDZ7MBDG.js → chunk-EWILX3BM.js} +27 -6
  61. package/chunks/{chunk-BMGVRZN4.js → chunk-EZWX232B.js} +1 -1
  62. package/chunks/{chunk-4GORAUCN.js → chunk-F333XEAU.js} +1 -1
  63. package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
  64. package/chunks/chunk-FEOZBUMT.js +77 -0
  65. package/chunks/{chunk-5U27BZ72.js → chunk-FKEGVMPX.js} +269 -83
  66. package/chunks/chunk-FNX3LGAK.js +34 -0
  67. package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
  68. package/chunks/{chunk-PODM4SZ4.js → chunk-G3BIBPI7.js} +5 -5
  69. package/chunks/{chunk-A3XKDTSH.js → chunk-GA65O2TB.js} +4 -4
  70. package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
  71. package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-GXGIM7QP.js} +67 -35
  72. package/chunks/{chunk-6PESIEKJ.js → chunk-GXUWGPYX.js} +68 -6
  73. package/chunks/chunk-GYTKQYDB.js +23 -0
  74. package/chunks/{chunk-GZRTYZ2R.js → chunk-H3XMJV7T.js} +218 -1
  75. package/chunks/{chunk-WQUQVGTF.js → chunk-HGRXW4HQ.js} +467 -106
  76. package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
  77. package/chunks/{chunk-ECNYL4AA.js → chunk-HUEWOHKV.js} +1 -1
  78. package/chunks/chunk-IDS7MSUP.js +74 -0
  79. package/chunks/{chunk-KHUQZZJ6.js → chunk-IHDRJLLR.js} +382 -36
  80. package/chunks/{chunk-CLFKOZEK.js → chunk-J4SEAF4X.js} +114 -4
  81. package/chunks/{chunk-B5ORX3FG.js → chunk-JGUT3LWZ.js} +6 -1
  82. package/chunks/{chunk-P67PFTUT.js → chunk-KEYEYCHZ.js} +4 -4
  83. package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
  84. package/chunks/{chunk-7PU4FYLG.js → chunk-KOXFAG6P.js} +4 -18
  85. package/chunks/{chunk-EGYZ275M.js → chunk-KWLVWNF5.js} +55 -7
  86. package/chunks/{chunk-XLA62MYB.js → chunk-KXECVZPD.js} +2 -2
  87. package/chunks/{chunk-IAVB3HM3.js → chunk-L4Y55KIS.js} +33 -1
  88. package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
  89. package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
  90. package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
  91. package/chunks/chunk-LXXMOYPL.js +22 -0
  92. package/chunks/{chunk-Q6I5QHMH.js → chunk-MFNKBXYH.js} +1 -1
  93. package/chunks/chunk-MR3PXB6E.js +48 -0
  94. package/chunks/{chunk-JZETEN3Z.js → chunk-N45S36AH.js} +3 -3
  95. package/chunks/{chunk-GWLSNBG4.js → chunk-NA3IG6XG.js} +748 -27
  96. package/chunks/{chunk-D5SKC4YG.js → chunk-O3M25JXE.js} +213 -29
  97. package/chunks/{chunk-EAXLGSFP.js → chunk-O6XGHDS5.js} +11 -11
  98. package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
  99. package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
  100. package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
  101. package/chunks/{chunk-CNEIYWSA.js → chunk-OVIV236K.js} +5 -5
  102. package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
  103. package/chunks/{chunk-E2IY465S.js → chunk-PWNOAWXB.js} +59 -12
  104. package/chunks/{chunk-B4G2WOFA.js → chunk-Q5MKHNIR.js} +28 -5
  105. package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
  106. package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
  107. package/chunks/{chunk-HKMAENAO.js → chunk-QDTGDM2T.js} +14 -9
  108. package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
  109. package/chunks/{chunk-W2UIXQDL.js → chunk-RTV5TUYB.js} +12 -4
  110. package/chunks/chunk-RW7DUKFO.js +91 -0
  111. package/chunks/{chunk-NVYTCB5Z.js → chunk-SA6QVLWI.js} +17325 -16259
  112. package/chunks/chunk-SJSI7PXU.js +59 -0
  113. package/chunks/{chunk-HVY356M2.js → chunk-SMGBWLNU.js} +3 -3
  114. package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
  115. package/chunks/{chunk-CC2ITGCF.js → chunk-STZQCNN3.js} +49 -6
  116. package/chunks/{chunk-HPDUL5MF.js → chunk-T2ZDAER2.js} +1 -1
  117. package/chunks/{chunk-XUOOWUZS.js → chunk-T3TQ3ACP.js} +1 -1
  118. package/chunks/{chunk-4C5BQ2D2.js → chunk-TIKDHS6V.js} +100 -17
  119. package/chunks/chunk-TV6K2FB4.js +224 -0
  120. package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
  121. package/chunks/{chunk-D2GFWEXB.js → chunk-UCUUH2JV.js} +6 -6
  122. package/chunks/{chunk-BAPGSC7U.js → chunk-UZP7K33Y.js} +23 -9
  123. package/chunks/{chunk-77XJ3SWN.js → chunk-VDAR6UO2.js} +8 -6
  124. package/chunks/{chunk-XYQSMABS.js → chunk-VKLVGA2D.js} +4 -4
  125. package/chunks/{chunk-JSG7ZSBC.js → chunk-VRR65QYW.js} +251 -3
  126. package/chunks/{chunk-U2NNEY4R.js → chunk-VT5AWJN4.js} +1 -1
  127. package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
  128. package/chunks/{chunk-X6TJ3YZV.js → chunk-WKEO3GLZ.js} +160 -60
  129. package/chunks/{chunk-J3JA76CF.js → chunk-WTNZ6DXB.js} +1 -1
  130. package/chunks/{chunk-VWPVHAMO.js → chunk-XIWQ5QST.js} +8 -1
  131. package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
  132. package/chunks/{chunk-3VAGG5T5.js → chunk-YYBZUIPL.js} +1015 -100
  133. package/chunks/{chunk-CCDMCZPP.js → chunk-YZ3SBNP7.js} +1 -1
  134. package/chunks/{chunk-ATAKVRIF.js → chunk-Z3XA2TNG.js} +7 -7
  135. package/chunks/{chunk-EMDMPBJ4.js → chunk-Z7SVC7PJ.js} +10 -3
  136. package/chunks/{chunk-AURZZYMD.js → chunk-ZIVSSTUG.js} +4 -4
  137. package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
  138. package/chunks/{chunk-34Z3U5RQ.js → chunk-ZQIYGQCG.js} +765 -168
  139. package/chunks/{computer-use-HM37RX6A.js → computer-use-NADT7ULB.js} +26 -27
  140. package/chunks/{config-utils-NV2SVGPB.js → config-utils-IQQT3GCI.js} +3 -2
  141. package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-U7NEJYJ7.js} +28 -29
  142. package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-EAB2U5XW.js} +2 -2
  143. package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-SUN33INC.js} +26 -27
  144. package/chunks/{cron-create-AMBKGZX6.js → cron-create-GMVKSXZT.js} +4 -4
  145. package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-VDZKUAVK.js} +4 -4
  146. package/chunks/{cron-list-WVP2JXER.js → cron-list-UG7C7RAR.js} +4 -4
  147. package/chunks/{daemon-ARHTSTXP.js → daemon-SJXEKP3H.js} +773 -126
  148. package/chunks/daemon-status-provider-WIIYLGZJ.js +74 -0
  149. package/chunks/{de-EBJN3OVN.js → de-NOXPCSYN.js} +9 -1
  150. package/chunks/{dist-XKU3ABM5.js → dist-4WCQEZIN.js} +4 -51
  151. package/chunks/{dist-QYCAEZIT.js → dist-DOPL5LSQ.js} +5 -1
  152. package/chunks/{dist-WKPOYU7O.js → dist-GXJVCOS7.js} +1 -1
  153. package/chunks/{dist-R7LN5AZE.js → dist-PX2ERZ6I.js} +2 -2
  154. package/chunks/{dist-PNVLTKTL.js → dist-V2YVLYOW.js} +215 -33
  155. package/chunks/{dist-VHV4EVHG.js → dist-VYWUKURL.js} +1 -1
  156. package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-6FRM6UMU.js} +27 -28
  157. package/chunks/{edit-VNI4NJ73.js → edit-7GOIQTCZ.js} +27 -28
  158. package/chunks/{en-5A6LA7RK.js → en-JFVULHTB.js} +11 -1
  159. package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-476E6WIK.js} +26 -27
  160. package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-IRJM6W3C.js} +42 -28
  161. package/chunks/{environment-5HSSRMJ7.js → environment-ROMULS2X.js} +30 -30
  162. package/chunks/{errors-HMFCJJ7P.js → errors-OUIWPUDY.js} +28 -29
  163. package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-PPSFK753.js} +26 -27
  164. package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-YKQMD4D7.js} +26 -27
  165. package/chunks/{fast-path-FRDMDVHG.js → fast-path-CNK2HHKH.js} +3 -3
  166. package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
  167. package/chunks/{fr-YXRABLYZ.js → fr-HVFNU42H.js} +9 -1
  168. package/chunks/{gemini-QYSEGHAX.js → gemini-WQNFT6TR.js} +216 -90
  169. package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-4QJH2JDP.js} +4 -4
  170. package/chunks/{glob-BRCSGFOT.js → glob-36TVLBWW.js} +28 -28
  171. package/chunks/{grep-EE2DUOSY.js → grep-QTYLNO2M.js} +26 -27
  172. package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-36FQFODK.js} +30 -31
  173. package/chunks/{i18n-BASPENNQ.js → i18n-JUGYPVSP.js} +27 -28
  174. package/chunks/initializer-OBBJUS25.js +72 -0
  175. package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-MCKTPX64.js} +27 -28
  176. package/chunks/{ja-7VQOANVG.js → ja-PY5AF544.js} +10 -2
  177. package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
  178. package/chunks/list-VW5QY4VJ.js +75 -0
  179. package/chunks/loadedSettingsAdapter-IELOOXG6.js +69 -0
  180. package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-QXWZSCYM.js} +5 -5
  181. package/chunks/{ls-ZB2BDP6T.js → ls-2OUTG3IZ.js} +4 -4
  182. package/chunks/{lsp-V5DN4YUJ.js → lsp-4VMNXZW6.js} +2 -2
  183. package/chunks/mcp-Q3EC37ZS.js +69 -0
  184. package/chunks/{monitor-X5Z3H4FY.js → monitor-DCZ27AFR.js} +26 -27
  185. package/chunks/nonInteractiveCli-KXD7PFO4.js +128 -0
  186. package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-YU4XF5LI.js} +27 -28
  187. package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-KL5WER2D.js} +13 -13
  188. package/chunks/{pidfile-D4I4FTVA.js → pidfile-WBOD7EJV.js} +27 -28
  189. package/chunks/processUtils-AOV4R34M.js +29 -0
  190. package/chunks/{pt-2C6YCSHL.js → pt-A3PRQXMU.js} +9 -1
  191. package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-YIGBHYE3.js} +28 -29
  192. package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
  193. package/chunks/{read-file-7SZSIZOL.js → read-file-WVL4Y76X.js} +9 -9
  194. package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-JUFHCKSC.js} +2 -2
  195. package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-DWSMBXYY.js} +2 -2
  196. package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-6GSWJERP.js} +26 -27
  197. package/chunks/{ru-6BBHVZZV.js → ru-IBCWUTOC.js} +9 -1
  198. package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-QYUQMEDT.js} +1233 -371
  199. package/chunks/{runtime-57WWRVHN.js → runtime-K2YZCNB3.js} +42 -38
  200. package/chunks/{scheduler-YBLGWSIL.js → scheduler-EQCSN7QV.js} +26 -27
  201. package/chunks/{send-message-F36YD6KQ.js → send-message-JZ752NWD.js} +3 -3
  202. package/chunks/{serve-R63NK3CV.js → serve-DX5UGZD4.js} +36 -35
  203. package/chunks/{server-Z22GCAXP.js → server-T6HJH3DR.js} +5869 -1398
  204. package/chunks/{session-HKAAI7BN.js → session-SNU6ACY6.js} +299 -100
  205. package/chunks/{settings-3EYN66GK.js → settings-AKHZZNEL.js} +34 -33
  206. package/chunks/{shell-6YXINTWJ.js → shell-EY74IEZK.js} +28 -27
  207. package/chunks/{skill-OO57P4X6.js → skill-DPU62O3H.js} +11 -11
  208. package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-RQZRWJ2V.js} +28 -30
  209. package/chunks/{src-G5UPLZSZ.js → src-7FITDSVC.js} +164 -52
  210. package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-XO3RK6DO.js} +28 -29
  211. package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-DVWZRHYQ.js} +728 -382
  212. package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-LELY6HAI.js} +3 -3
  213. package/chunks/{task-create-FRGOEIKY.js → task-create-QY3BIMNM.js} +8 -7
  214. package/chunks/{task-list-OW766BXZ.js → task-list-D2U47WBJ.js} +6 -5
  215. package/chunks/{task-stop-SIR5SNBN.js → task-stop-N6E5IYLH.js} +2 -2
  216. package/chunks/{task-update-YRA532MT.js → task-update-HJCQILLB.js} +8 -7
  217. package/chunks/{team-create-PECAAPXK.js → team-create-FOSRT62K.js} +26 -27
  218. package/chunks/{team-delete-6OSECUZC.js → team-delete-RCWYDRF4.js} +6 -5
  219. package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-6VUDV27J.js} +26 -27
  220. package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-6UT6IO5T.js} +27 -28
  221. package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-FKCGATPJ.js} +4 -4
  222. package/chunks/{tool-search-THVIWAPB.js → tool-search-ASSFMMN5.js} +10 -10
  223. package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-YYWUO23H.js} +32 -35
  224. package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
  225. package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-4BWV2IBK.js} +29 -29
  226. package/chunks/types-ML3TRJQ5.js +16 -0
  227. package/chunks/update-relaunch-74DLGH73.js +87 -0
  228. package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-CRFCGFO5.js} +31 -30
  229. package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-BTTEPBGQ.js} +76 -73
  230. package/chunks/{version-3UEA6ZIR.js → version-Y5JE5Q63.js} +1 -1
  231. package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-CFCWTCAP.js} +5 -6
  232. package/chunks/{workflow-QCCCMYP3.js → workflow-6WC7VPQN.js} +27 -28
  233. package/chunks/workspace-providers-status-RVG2C5ZS.js +72 -0
  234. package/chunks/workspace-registration-store-SLEU3D3X.js +27 -0
  235. package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-QMWGVOTF.js} +32 -35
  236. package/chunks/workspace-service-G572JSEU.js +84 -0
  237. package/chunks/workspace-skills-status-VSSMSMNK.js +71 -0
  238. package/chunks/{write-file-I3MUDRIE.js → write-file-5XVDRORP.js} +27 -28
  239. package/chunks/{zh-RQE7I22T.js → zh-PAUNIMHQ.js} +12 -2
  240. package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-GNEUIUFF.js} +12 -2
  241. package/cli-entry.js +92 -8
  242. package/cli.js +11 -11
  243. package/locales/ca.js +16 -0
  244. package/locales/de.js +16 -0
  245. package/locales/en.js +19 -0
  246. package/locales/fr.js +16 -0
  247. package/locales/ja.js +17 -1
  248. package/locales/pt.js +16 -0
  249. package/locales/ru.js +16 -0
  250. package/locales/zh-TW.js +20 -1
  251. package/locales/zh.js +20 -1
  252. package/package.json +3 -3
  253. package/web-shell/assets/{arc-C15hqnJe.js → arc-vx1tRwnX.js} +1 -1
  254. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-DBi6iUA1.js} +1 -1
  255. package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-Ga9JJ4Ak.js} +1 -1
  256. package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-D8Vi5FYw.js} +1 -1
  257. package/web-shell/assets/channel-B29zQDTL.js +1 -0
  258. package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-CSV6yQpU.js} +1 -1
  259. package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-toYlppdI.js} +1 -1
  260. package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-DbjzuyAr.js} +1 -1
  261. package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-IkkSjSkk.js} +1 -1
  262. package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-D5wUL6Zm.js} +1 -1
  263. package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-C3o2DXG0.js} +1 -1
  264. package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-CutIi14T.js} +1 -1
  265. package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-DZ0NRHH-.js} +1 -1
  266. package/web-shell/assets/classDiagram-4FO5ZUOK-BNGI2SvC.js +1 -0
  267. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BNGI2SvC.js +1 -0
  268. package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-B3Dl88UJ.js} +1 -1
  269. package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-DfTxfF6-.js} +1 -1
  270. package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-CJyH98yO.js} +1 -1
  271. package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-EbOiJNmW.js} +1 -1
  272. package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-AYNqpqqA.js} +1 -1
  273. package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-BY5VPa4H.js} +1 -1
  274. package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-BhMYAKlk.js} +1 -1
  275. package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-Bp8S_F9l.js} +1 -1
  276. package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-az3TE9PU.js} +1 -1
  277. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-CfkAEpCe.js} +3 -3
  278. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-D1QmjMCy.js} +1 -1
  279. package/web-shell/assets/index-C8sDwQUv.js +1130 -0
  280. package/web-shell/assets/index-CaBoc5bb.js +3 -0
  281. package/web-shell/assets/index-Dpg5Wymg.css +5 -0
  282. package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-D3ompLrG.js} +1 -1
  283. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-D3MRWp9I.js} +1 -1
  284. package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-DVkKCa44.js} +1 -1
  285. package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-BLif81wF.js} +1 -1
  286. package/web-shell/assets/{linear-C8wKCbIC.js → linear-BDU96EGS.js} +1 -1
  287. package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-B-CwC26B.js} +5 -5
  288. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-CS1WOJ4G.js} +1 -1
  289. package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-BzgtNXVP.js} +1 -1
  290. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-BRfGC8MA.js} +1 -1
  291. package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-CPBZkC7g.js} +1 -1
  292. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-nqNvinIk.js} +1 -1
  293. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-CM_Wdjh3.js} +1 -1
  294. package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-L0y-48VE.js} +1 -1
  295. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BX1DdF8s.js +1 -0
  296. package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-B_n5rb3A.js} +1 -1
  297. package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-C9NmLV5e.js} +1 -1
  298. package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-CrefK9gt.js} +1 -1
  299. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BUccf-bC.js} +1 -1
  300. package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-DM6ef92l.js} +1 -1
  301. package/web-shell/index.html +2 -2
  302. package/chunks/chunk-524RQP4Q.js +0 -305
  303. package/chunks/chunk-CARU2RR2.js +0 -24
  304. package/chunks/chunk-CU3L64TP.js +0 -93
  305. package/chunks/chunk-OCPBI7J5.js +0 -18
  306. package/chunks/chunk-TEGEBB2I.js +0 -122
  307. package/chunks/chunk-VTU57BWZ.js +0 -30
  308. package/chunks/daemon-status-provider-B2UTZUJ2.js +0 -76
  309. package/chunks/initializer-UTQ7FB7G.js +0 -71
  310. package/chunks/list-DEICDL65.js +0 -74
  311. package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
  312. package/chunks/mcp-L5JXEEIA.js +0 -68
  313. package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
  314. package/chunks/types-JNKGKUJT.js +0 -12
  315. package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
  316. package/chunks/workspace-service-RVLBMSMZ.js +0 -80
  317. package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
  318. package/web-shell/assets/channel-CLiQD50f.js +0 -1
  319. package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
  320. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
  321. package/web-shell/assets/index-D5IWFVk1.css +0 -5
  322. package/web-shell/assets/index-KFJRDhX7.js +0 -783
  323. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +0 -1
@@ -0,0 +1,516 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ ChannelWebhookEnqueueError
5
+ } from "./chunk-OJAMDVF5.js";
6
+ import {
7
+ init_esbuild_shims
8
+ } from "./chunk-5O2XNYP6.js";
9
+ import {
10
+ __name
11
+ } from "./chunk-J2S4EL5Y.js";
12
+
13
+ // packages/cli/src/serve/channel-worker-group.ts
14
+ init_esbuild_shims();
15
+ var ChannelWorkerReconcileError = class extends Error {
16
+ static {
17
+ __name(this, "ChannelWorkerReconcileError");
18
+ }
19
+ rolledBack;
20
+ rollbackError;
21
+ stopFailed;
22
+ constructor(message, options) {
23
+ super(message);
24
+ this.name = "ChannelWorkerReconcileError";
25
+ this.rolledBack = options.rolledBack;
26
+ this.rollbackError = options.rollbackError;
27
+ this.stopFailed = options.stopFailed === true;
28
+ }
29
+ };
30
+ var DISABLED_SNAPSHOT = {
31
+ enabled: false,
32
+ state: "disabled",
33
+ channels: []
34
+ };
35
+ function selectionsEqual(left, right) {
36
+ if (left.mode !== right.mode) return false;
37
+ if (left.mode === "all") return true;
38
+ if (right.mode === "all" || left.names.length !== right.names.length) {
39
+ return false;
40
+ }
41
+ return left.names.every((name, index) => name === right.names[index]);
42
+ }
43
+ __name(selectionsEqual, "selectionsEqual");
44
+ function errorMessage(error) {
45
+ return error instanceof Error ? error.message : String(error);
46
+ }
47
+ __name(errorMessage, "errorMessage");
48
+ function createChannelWorkerGroup(opts) {
49
+ let generation = 0;
50
+ let entries = /* @__PURE__ */ new Map();
51
+ const groupsByWorkspace = new Map(
52
+ opts.groups.map((group2) => [group2.workspaceCwd, group2])
53
+ );
54
+ const pendingEntries = /* @__PURE__ */ new Set();
55
+ const pendingGenerations = /* @__PURE__ */ new Map();
56
+ const drainingWorkspaces = /* @__PURE__ */ new Set();
57
+ const removalPromises = /* @__PURE__ */ new Map();
58
+ let reconciling;
59
+ let stopping = false;
60
+ let groupStarted = false;
61
+ const withMeta = /* @__PURE__ */ __name((entry, snapshot) => ({
62
+ ...snapshot,
63
+ workspaceId: entry.workspaceId,
64
+ workspaceCwd: entry.workspaceCwd,
65
+ primary: entry.primary
66
+ }), "withMeta");
67
+ const createEntry = /* @__PURE__ */ __name((group2) => {
68
+ const runtime = opts.registry.getByWorkspaceCwd(group2.workspaceCwd);
69
+ if (!runtime) {
70
+ throw new Error(
71
+ `Channel worker group references unregistered workspace "${group2.workspaceCwd}".`
72
+ );
73
+ }
74
+ if (!runtime.trusted) {
75
+ throw Object.assign(
76
+ new Error(
77
+ `Channel worker group workspace "${runtime.workspaceCwd}" is not trusted.`
78
+ ),
79
+ { code: "untrusted_workspace" }
80
+ );
81
+ }
82
+ const entryGeneration = ++generation;
83
+ const withRuntimeMeta = /* @__PURE__ */ __name((snapshot) => ({
84
+ ...snapshot,
85
+ workspaceId: runtime.workspaceId,
86
+ workspaceCwd: runtime.workspaceCwd,
87
+ primary: runtime.primary
88
+ }), "withRuntimeMeta");
89
+ const supervisor = opts.createSupervisor({
90
+ cliEntryPath: opts.shared.cliEntryPath,
91
+ daemonUrl: opts.shared.daemonUrl,
92
+ ...opts.shared.daemonToken ? { daemonToken: opts.shared.daemonToken } : {},
93
+ workspace: runtime.workspaceCwd,
94
+ selection: group2.selection,
95
+ // Multi-workspace runtimes expose a per-workspace env overlay; a
96
+ // parent-process runtime leaves it undefined so the supervisor inherits
97
+ // process.env exactly as before.
98
+ ...runtime.env.effectiveEnv ? { workerBaseEnv: runtime.env.effectiveEnv } : {},
99
+ ...opts.shared.restartPolicy ? { restartPolicy: opts.shared.restartPolicy } : {},
100
+ ...opts.shared.startupTimeoutMs !== void 0 ? { startupTimeoutMs: opts.shared.startupTimeoutMs } : {},
101
+ ...opts.shared.heartbeatTimeoutMs !== void 0 ? { heartbeatTimeoutMs: opts.shared.heartbeatTimeoutMs } : {},
102
+ ...opts.onReady ? {
103
+ onReady: /* @__PURE__ */ __name((snapshot) => {
104
+ if (entries.get(runtime.workspaceCwd)?.generation === entryGeneration) {
105
+ opts.onReady(withRuntimeMeta(snapshot));
106
+ } else if (pendingGenerations.get(runtime.workspaceCwd) !== entryGeneration) {
107
+ opts.onLog?.({
108
+ stream: "stderr",
109
+ line: `Ignored stale channel worker ready (generation=${entryGeneration}).`,
110
+ workspaceCwd: runtime.workspaceCwd
111
+ });
112
+ }
113
+ }, "onReady")
114
+ } : {},
115
+ ...opts.onExit ? {
116
+ onExit: /* @__PURE__ */ __name((snapshot) => {
117
+ if (entries.get(runtime.workspaceCwd)?.generation === entryGeneration) {
118
+ opts.onExit(withRuntimeMeta(snapshot));
119
+ } else if (pendingGenerations.get(runtime.workspaceCwd) !== entryGeneration) {
120
+ opts.onLog?.({
121
+ stream: "stderr",
122
+ line: `Ignored stale channel worker exit (generation=${entryGeneration}).`,
123
+ workspaceCwd: runtime.workspaceCwd
124
+ });
125
+ }
126
+ }, "onExit")
127
+ } : {},
128
+ ...opts.onLog ? {
129
+ onLog: /* @__PURE__ */ __name((logEntry) => opts.onLog({
130
+ ...logEntry,
131
+ workspaceCwd: runtime.workspaceCwd
132
+ }), "onLog")
133
+ } : {}
134
+ });
135
+ return {
136
+ workspaceId: runtime.workspaceId,
137
+ workspaceCwd: runtime.workspaceCwd,
138
+ primary: runtime.primary,
139
+ selection: group2.selection,
140
+ generation: entryGeneration,
141
+ supervisor
142
+ };
143
+ }, "createEntry");
144
+ for (const group2 of opts.groups) {
145
+ const entry = createEntry(group2);
146
+ entries.set(entry.workspaceCwd, entry);
147
+ }
148
+ const entrySnapshots = /* @__PURE__ */ __name(() => [...entries.values()].map(
149
+ (entry) => withMeta(entry, entry.supervisor.snapshot())
150
+ ), "entrySnapshots");
151
+ const stopEntry = /* @__PURE__ */ __name((entry) => {
152
+ if (!entry.stopPromise) {
153
+ const stopPromise = entry.supervisor.stop().finally(() => opts.onStateChange?.());
154
+ entry.stopPromise = stopPromise;
155
+ void stopPromise.then(
156
+ () => {
157
+ if (entry.stopPromise === stopPromise) entry.stopPromise = void 0;
158
+ },
159
+ () => {
160
+ if (entry.stopPromise === stopPromise) entry.stopPromise = void 0;
161
+ }
162
+ );
163
+ }
164
+ return entry.stopPromise;
165
+ }, "stopEntry");
166
+ const stopEntriesBestEffort = /* @__PURE__ */ __name(async (entriesToStop) => {
167
+ await Promise.allSettled(entriesToStop.map((entry) => stopEntry(entry)));
168
+ }, "stopEntriesBestEffort");
169
+ const stopAllEntries = /* @__PURE__ */ __name(async (entriesToStop) => {
170
+ const results = await Promise.allSettled(
171
+ entriesToStop.map((entry) => stopEntry(entry))
172
+ );
173
+ const failure = results.find(
174
+ (result) => result.status === "rejected"
175
+ );
176
+ if (failure) throw failure.reason;
177
+ }, "stopAllEntries");
178
+ const stopEntriesForRollback = /* @__PURE__ */ __name(async (entriesToStop) => {
179
+ let firstError;
180
+ const failedEntries = [];
181
+ for (const entry of entriesToStop) {
182
+ try {
183
+ await stopEntry(entry);
184
+ } catch (error) {
185
+ firstError ??= errorMessage(error);
186
+ failedEntries.push(entry);
187
+ }
188
+ }
189
+ return {
190
+ ...firstError ? { error: firstError } : {},
191
+ failedEntries
192
+ };
193
+ }, "stopEntriesForRollback");
194
+ const restoreEntries = /* @__PURE__ */ __name(async (entriesToRestore) => {
195
+ let firstError;
196
+ for (const entry of entriesToRestore) {
197
+ try {
198
+ await entry.supervisor.start();
199
+ } catch (error) {
200
+ firstError ??= errorMessage(error);
201
+ }
202
+ }
203
+ return firstError ? { rolledBack: false, rollbackError: firstError } : { rolledBack: true };
204
+ }, "restoreEntries");
205
+ const routeEntry = /* @__PURE__ */ __name((channelName) => {
206
+ for (const entry of entries.values()) {
207
+ if (entry.selection.mode === "all" || entry.selection.names.includes(channelName)) {
208
+ return entry;
209
+ }
210
+ }
211
+ return void 0;
212
+ }, "routeEntry");
213
+ const detachEntry = /* @__PURE__ */ __name((entry) => {
214
+ if (entries.get(entry.workspaceCwd)?.generation === entry.generation) {
215
+ entries.delete(entry.workspaceCwd);
216
+ }
217
+ pendingEntries.delete(entry);
218
+ if (pendingGenerations.get(entry.workspaceCwd) === entry.generation) {
219
+ pendingGenerations.delete(entry.workspaceCwd);
220
+ }
221
+ }, "detachEntry");
222
+ const group = {
223
+ async start() {
224
+ stopping = false;
225
+ const started = [];
226
+ try {
227
+ for (const entry of entries.values()) {
228
+ if (drainingWorkspaces.has(entry.workspaceCwd)) {
229
+ throw new Error("Workspace drained during channel worker startup.");
230
+ }
231
+ if (stopping) {
232
+ throw new Error("Channel worker group stopped during startup.");
233
+ }
234
+ started.push(entry);
235
+ await entry.supervisor.start();
236
+ if (stopping) {
237
+ throw new Error("Channel worker group stopped during startup.");
238
+ }
239
+ if (entries.get(entry.workspaceCwd)?.generation !== entry.generation || drainingWorkspaces.has(entry.workspaceCwd)) {
240
+ throw new Error("Workspace drained during channel worker startup.");
241
+ }
242
+ }
243
+ groupStarted = true;
244
+ } catch (error) {
245
+ groupStarted = false;
246
+ await stopEntriesBestEffort(started);
247
+ throw error;
248
+ }
249
+ },
250
+ async stop() {
251
+ stopping = true;
252
+ groupStarted = false;
253
+ await reconciling?.catch(() => {
254
+ });
255
+ await stopAllEntries([...entries.values()]);
256
+ },
257
+ reconcile(targetGroups, reconcileOptions) {
258
+ if (stopping) {
259
+ return Promise.reject(
260
+ new ChannelWorkerReconcileError(
261
+ "Channel worker group has not completed stopping.",
262
+ { rolledBack: true, stopFailed: true }
263
+ )
264
+ );
265
+ }
266
+ if (drainingWorkspaces.size > 0) {
267
+ return Promise.reject(
268
+ new ChannelWorkerReconcileError(
269
+ "Channel worker configuration cannot change while a workspace is draining.",
270
+ { rolledBack: true }
271
+ )
272
+ );
273
+ }
274
+ if (reconciling) return reconciling;
275
+ reconciling = (async () => {
276
+ const targets = new Map(
277
+ targetGroups.map((target) => [target.workspaceCwd, target])
278
+ );
279
+ const unchanged = /* @__PURE__ */ new Map();
280
+ const oldAffected = [];
281
+ const newEntries = [];
282
+ for (const [workspaceCwd, entry] of entries) {
283
+ const target = targets.get(workspaceCwd);
284
+ const healthy = entry.supervisor.snapshot().state === "running";
285
+ if (target && !reconcileOptions?.force && healthy && selectionsEqual(entry.selection, target.selection)) {
286
+ unchanged.set(workspaceCwd, entry);
287
+ targets.delete(workspaceCwd);
288
+ } else {
289
+ oldAffected.push(entry);
290
+ }
291
+ }
292
+ for (const target of targets.values()) {
293
+ const entry = createEntry(target);
294
+ newEntries.push(entry);
295
+ pendingEntries.add(entry);
296
+ pendingGenerations.set(entry.workspaceCwd, entry.generation);
297
+ }
298
+ if (oldAffected.length === 0 && newEntries.length === 0) {
299
+ return { changed: false, workers: entrySnapshots() };
300
+ }
301
+ const stoppedOld = [];
302
+ try {
303
+ for (const entry of oldAffected) {
304
+ await stopEntry(entry);
305
+ stoppedOld.push(entry);
306
+ }
307
+ } catch (error) {
308
+ reconcileOptions?.onRollingBack?.();
309
+ const rollback = await restoreEntries(stoppedOld);
310
+ throw new ChannelWorkerReconcileError(errorMessage(error), {
311
+ ...rollback,
312
+ stopFailed: true
313
+ });
314
+ }
315
+ const startedNew = [];
316
+ try {
317
+ for (const entry of newEntries) {
318
+ if (drainingWorkspaces.has(entry.workspaceCwd)) {
319
+ throw new Error(
320
+ "Workspace drained during channel worker reconcile."
321
+ );
322
+ }
323
+ if (stopping) {
324
+ throw new Error("Channel worker group stopped during reconcile.");
325
+ }
326
+ startedNew.push(entry);
327
+ await entry.supervisor.start();
328
+ if (stopping) {
329
+ throw new Error("Channel worker group stopped during reconcile.");
330
+ }
331
+ if (drainingWorkspaces.has(entry.workspaceCwd)) {
332
+ throw new Error(
333
+ "Workspace drained during channel worker reconcile."
334
+ );
335
+ }
336
+ }
337
+ if (drainingWorkspaces.size > 0) {
338
+ throw new Error(
339
+ "Workspace drained during channel worker reconcile."
340
+ );
341
+ }
342
+ } catch (error) {
343
+ reconcileOptions?.onRollingBack?.();
344
+ const cleanup = await stopEntriesForRollback(startedNew);
345
+ if (cleanup.error) {
346
+ for (const entry of cleanup.failedEntries) {
347
+ entries.set(entry.workspaceCwd, entry);
348
+ }
349
+ throw new ChannelWorkerReconcileError(errorMessage(error), {
350
+ rolledBack: false,
351
+ rollbackError: cleanup.error
352
+ });
353
+ }
354
+ if (stopping) {
355
+ throw new ChannelWorkerReconcileError(errorMessage(error), {
356
+ rolledBack: false
357
+ });
358
+ }
359
+ const rollback = await restoreEntries(stoppedOld);
360
+ throw new ChannelWorkerReconcileError(errorMessage(error), rollback);
361
+ }
362
+ const committed = new Map(unchanged);
363
+ for (const entry of newEntries) {
364
+ committed.set(entry.workspaceCwd, entry);
365
+ }
366
+ entries = committed;
367
+ const targetWorkspaceCwds = new Set(
368
+ targetGroups.map((target) => target.workspaceCwd)
369
+ );
370
+ for (const workspaceCwd of groupsByWorkspace.keys()) {
371
+ if (!targetWorkspaceCwds.has(workspaceCwd)) {
372
+ groupsByWorkspace.delete(workspaceCwd);
373
+ }
374
+ }
375
+ for (const target of targetGroups) {
376
+ groupsByWorkspace.set(target.workspaceCwd, target);
377
+ }
378
+ return { changed: true, workers: entrySnapshots() };
379
+ })().finally(() => {
380
+ pendingEntries.clear();
381
+ pendingGenerations.clear();
382
+ reconciling = void 0;
383
+ });
384
+ return reconciling;
385
+ },
386
+ isHealthy() {
387
+ return entries.size > 0 && [...entries.values()].every(
388
+ (entry) => entry.supervisor.snapshot().state === "running"
389
+ );
390
+ },
391
+ killAllSync() {
392
+ stopping = true;
393
+ groupStarted = false;
394
+ for (const entry of entries.values()) {
395
+ entry.supervisor.killAllSync();
396
+ }
397
+ for (const entry of pendingEntries) {
398
+ entry.supervisor.killAllSync();
399
+ }
400
+ },
401
+ snapshots: entrySnapshots,
402
+ primarySnapshot() {
403
+ const primary = [...entries.values()].find((entry) => entry.primary);
404
+ return primary?.supervisor.snapshot() ?? { ...DISABLED_SNAPSHOT };
405
+ },
406
+ beginWorkspaceDrain(workspaceCwd) {
407
+ drainingWorkspaces.add(workspaceCwd);
408
+ },
409
+ cancelWorkspaceDrain(workspaceCwd) {
410
+ drainingWorkspaces.delete(workspaceCwd);
411
+ },
412
+ workspaceActivity(workspaceCwd) {
413
+ if (pendingGenerations.has(workspaceCwd)) return 1;
414
+ const entry = entries.get(workspaceCwd);
415
+ if (!entry) return 0;
416
+ const snapshot = entry.supervisor.snapshot();
417
+ return snapshot.state === "starting" || snapshot.state === "running" || snapshot.nextRestartAt !== void 0 ? 1 : 0;
418
+ },
419
+ removeWorkspace(workspaceCwd) {
420
+ const existing = removalPromises.get(workspaceCwd);
421
+ if (existing) return existing;
422
+ drainingWorkspaces.add(workspaceCwd);
423
+ const removal = (async () => {
424
+ try {
425
+ await reconciling?.catch(() => {
426
+ });
427
+ const entry = entries.get(workspaceCwd);
428
+ if (!entry) return;
429
+ let killError;
430
+ try {
431
+ await stopEntry(entry);
432
+ } catch {
433
+ try {
434
+ entry.supervisor.killAllSync();
435
+ } catch (err) {
436
+ killError = err;
437
+ }
438
+ } finally {
439
+ detachEntry(entry);
440
+ }
441
+ if (killError) throw killError;
442
+ } finally {
443
+ drainingWorkspaces.delete(workspaceCwd);
444
+ }
445
+ })();
446
+ removalPromises.set(workspaceCwd, removal);
447
+ void removal.then(
448
+ () => {
449
+ if (removalPromises.get(workspaceCwd) === removal) {
450
+ removalPromises.delete(workspaceCwd);
451
+ }
452
+ },
453
+ () => {
454
+ if (removalPromises.get(workspaceCwd) === removal) {
455
+ removalPromises.delete(workspaceCwd);
456
+ }
457
+ }
458
+ );
459
+ return removal;
460
+ },
461
+ async restoreWorkspace(workspaceCwd) {
462
+ if (entries.has(workspaceCwd)) return;
463
+ const target = groupsByWorkspace.get(workspaceCwd);
464
+ if (!target) return;
465
+ const entry = createEntry(target);
466
+ entries.set(workspaceCwd, entry);
467
+ if (!groupStarted || stopping) {
468
+ detachEntry(entry);
469
+ return;
470
+ }
471
+ try {
472
+ await entry.supervisor.start();
473
+ if (stopping || !groupStarted) {
474
+ await stopEntry(entry).catch(() => {
475
+ try {
476
+ entry.supervisor.killAllSync();
477
+ } catch {
478
+ }
479
+ });
480
+ detachEntry(entry);
481
+ }
482
+ } catch (err) {
483
+ await stopEntry(entry).catch(() => {
484
+ try {
485
+ entry.supervisor.killAllSync();
486
+ } catch {
487
+ }
488
+ });
489
+ detachEntry(entry);
490
+ throw err;
491
+ }
492
+ },
493
+ async enqueueWebhookTask(task) {
494
+ const entry = routeEntry(task.channelName);
495
+ if (!entry || drainingWorkspaces.has(entry.workspaceCwd)) {
496
+ throw new ChannelWebhookEnqueueError(
497
+ "channel_worker_unavailable",
498
+ `No channel worker owns channel "${task.channelName}".`
499
+ );
500
+ }
501
+ return entry.supervisor.enqueueWebhookTask(task);
502
+ }
503
+ };
504
+ return group;
505
+ }
506
+ __name(createChannelWorkerGroup, "createChannelWorkerGroup");
507
+
508
+ export {
509
+ ChannelWorkerReconcileError,
510
+ createChannelWorkerGroup
511
+ };
512
+ /**
513
+ * @license
514
+ * Copyright 2026 Qwen Team
515
+ * SPDX-License-Identifier: Apache-2.0
516
+ */
@@ -2,13 +2,13 @@
2
2
  "use strict";
3
3
  import {
4
4
  isSupportedImageMimeType
5
- } from "./chunk-524RQP4Q.js";
5
+ } from "./chunk-FEOZBUMT.js";
6
6
  import {
7
7
  TextTokenizer
8
- } from "./chunk-JSG7ZSBC.js";
8
+ } from "./chunk-VRR65QYW.js";
9
9
  import {
10
10
  createDebugLogger
11
- } from "./chunk-J4TSQ5EQ.js";
11
+ } from "./chunk-7NFB7LBQ.js";
12
12
  import {
13
13
  init_esbuild_shims
14
14
  } from "./chunk-5O2XNYP6.js";
@@ -1,8 +1,8 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
3
  import {
4
- resolvePath
5
- } from "./chunk-34Z3U5RQ.js";
4
+ resolveChannelCwd
5
+ } from "./chunk-FNX3LGAK.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -21,12 +21,12 @@ function ensureBuiltins() {
21
21
  if (!builtinsPromise) {
22
22
  builtinsPromise = (async () => {
23
23
  const labelled = [
24
- { name: "telegram", promise: import("./dist-WKPOYU7O.js") },
25
- { name: "weixin", promise: import("./dist-R7LN5AZE.js") },
26
- { name: "dingtalk", promise: import("./dist-PNVLTKTL.js") },
27
- { name: "wecom", promise: import("./dist-XKU3ABM5.js") },
28
- { name: "feishu", promise: import("./dist-QYCAEZIT.js") },
29
- { name: "qqbot", promise: import("./dist-VHV4EVHG.js") }
24
+ { name: "telegram", promise: import("./dist-GXJVCOS7.js") },
25
+ { name: "weixin", promise: import("./dist-PX2ERZ6I.js") },
26
+ { name: "dingtalk", promise: import("./dist-V2YVLYOW.js") },
27
+ { name: "wecom", promise: import("./dist-4WCQEZIN.js") },
28
+ { name: "feishu", promise: import("./dist-DOPL5LSQ.js") },
29
+ { name: "qqbot", promise: import("./dist-VYWUKURL.js") }
30
30
  ];
31
31
  const results = await Promise.allSettled(labelled.map((l) => l.promise));
32
32
  for (let i = 0; i < results.length; i++) {
@@ -74,13 +74,13 @@ var CHANNEL_APPROVAL_MODES = /* @__PURE__ */ new Set([
74
74
  "auto",
75
75
  "yolo"
76
76
  ]);
77
- function resolveEnvVars(value) {
77
+ function resolveEnvVars(value, env = process.env) {
78
78
  if (value.startsWith("$$")) {
79
79
  return value.substring(1);
80
80
  }
81
81
  if (value.startsWith("$")) {
82
82
  const envName = value.substring(1);
83
- const envValue = process.env[envName];
83
+ const envValue = env[envName];
84
84
  if (envValue === void 0) {
85
85
  throw new Error(
86
86
  `Environment variable ${envName} is not set (referenced as ${value})`
@@ -231,7 +231,7 @@ function parseWebhookTarget(channelName, path, raw) {
231
231
  return target;
232
232
  }
233
233
  __name(parseWebhookTarget, "parseWebhookTarget");
234
- function parseWebhookSource(channelName, path, raw) {
234
+ function parseWebhookSource(channelName, path, raw, env) {
235
235
  const record = requireObjectField(channelName, path, raw);
236
236
  const rawTargets = requireObjectField(
237
237
  channelName,
@@ -254,7 +254,8 @@ function parseWebhookSource(channelName, path, raw) {
254
254
  );
255
255
  }
256
256
  const secret = hasSecret ? resolveEnvVars(
257
- requireStringField(channelName, `${path}.secret`, record["secret"])
257
+ requireStringField(channelName, `${path}.secret`, record["secret"]),
258
+ env
258
259
  ) : resolveWebhookSecretEnv(
259
260
  channelName,
260
261
  path,
@@ -262,7 +263,8 @@ function parseWebhookSource(channelName, path, raw) {
262
263
  channelName,
263
264
  `${path}.secretEnv`,
264
265
  record["secretEnv"]
265
- )
266
+ ),
267
+ env
266
268
  );
267
269
  if (secret.length === 0) {
268
270
  throw new Error(
@@ -272,14 +274,14 @@ function parseWebhookSource(channelName, path, raw) {
272
274
  return { secret, targets };
273
275
  }
274
276
  __name(parseWebhookSource, "parseWebhookSource");
275
- function resolveWebhookSecretEnv(channelName, path, secretEnv) {
277
+ function resolveWebhookSecretEnv(channelName, path, secretEnv, env) {
276
278
  const envName = secretEnv.startsWith("$") ? secretEnv.substring(1) : secretEnv;
277
279
  if (!ENV_VAR_NAME_PATTERN.test(envName)) {
278
280
  throw new Error(
279
281
  `Channel "${channelName}" field "${path}.secretEnv" must be an environment variable name or $-prefixed reference.`
280
282
  );
281
283
  }
282
- const envValue = process.env[envName];
284
+ const envValue = env[envName];
283
285
  if (envValue === void 0) {
284
286
  throw new Error(
285
287
  `Channel "${channelName}" field "${path}.secretEnv" references an unset environment variable.`
@@ -293,7 +295,7 @@ function resolveWebhookSecretEnv(channelName, path, secretEnv) {
293
295
  return envValue;
294
296
  }
295
297
  __name(resolveWebhookSecretEnv, "resolveWebhookSecretEnv");
296
- function parseWebhookConfig(channelName, rawConfig) {
298
+ function parseWebhookConfig(channelName, rawConfig, env = process.env) {
297
299
  const raw = rawConfig["webhooks"];
298
300
  if (raw === void 0 || raw === null) {
299
301
  return void 0;
@@ -309,7 +311,8 @@ function parseWebhookConfig(channelName, rawConfig) {
309
311
  sources[source] = parseWebhookSource(
310
312
  channelName,
311
313
  `webhooks.sources.${source}`,
312
- sourceConfig
314
+ sourceConfig,
315
+ env
313
316
  );
314
317
  }
315
318
  return { sources };
@@ -330,11 +333,11 @@ function parseApprovalModeConfig(channelName, rawConfig) {
330
333
  return approvalMode;
331
334
  }
332
335
  __name(parseApprovalModeConfig, "parseApprovalModeConfig");
333
- function parseChannelWebhookConfig(channelName, rawConfig) {
334
- return parseWebhookConfig(channelName, rawConfig);
336
+ function parseChannelWebhookConfig(channelName, rawConfig, env = process.env) {
337
+ return parseWebhookConfig(channelName, rawConfig, env);
335
338
  }
336
339
  __name(parseChannelWebhookConfig, "parseChannelWebhookConfig");
337
- function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError) {
340
+ function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError, env = process.env) {
338
341
  const raw = rawConfig["webhooks"];
339
342
  if (raw === void 0 || raw === null) {
340
343
  return void 0;
@@ -351,7 +354,8 @@ function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError)
351
354
  sources[source] = parseWebhookSource(
352
355
  channelName,
353
356
  `webhooks.sources.${source}`,
354
- sourceConfig
357
+ sourceConfig,
358
+ env
355
359
  );
356
360
  } catch (error) {
357
361
  onSourceError?.(source, error);
@@ -416,7 +420,7 @@ async function parseChannelConfig(name, rawConfig, defaultCwd = process.cwd(), o
416
420
  senderPolicy: rawConfig["senderPolicy"] || "allowlist",
417
421
  allowedUsers: rawConfig["allowedUsers"] || [],
418
422
  sessionScope: rawConfig["sessionScope"] || "user",
419
- cwd: resolvePath(rawConfig["cwd"] || defaultCwd),
423
+ cwd: resolveChannelCwd(rawConfig["cwd"], defaultCwd),
420
424
  approvalMode: parseApprovalModeConfig(name, rawConfig),
421
425
  instructions: rawConfig["instructions"],
422
426
  identity: parseObjectStringFields(name, rawConfig, "identity", [