@qwen-code/qwen-code 0.19.9 → 0.19.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +7 -0
  2. package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -0
  3. package/bundled/qc-helper/docs/features/channels/overview.md +11 -3
  4. package/bundled/qc-helper/docs/features/code-review.md +88 -44
  5. package/bundled/qc-helper/docs/features/commands.md +6 -6
  6. package/bundled/qc-helper/docs/features/hooks.md +29 -0
  7. package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
  8. package/bundled/qc-helper/docs/qwen-serve.md +46 -20
  9. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  10. package/bundled/review/DESIGN.md +219 -33
  11. package/bundled/review/SKILL.md +449 -153
  12. package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-67ODZ4SZ.js} +31 -31
  13. package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-SIPBQT5Z.js} +51 -49
  14. package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-VPZJXLFX.js} +528 -478
  15. package/chunks/{agent-HOLHB3RT.js → agent-Z7NWL6XL.js} +26 -26
  16. package/chunks/{agent-headless-SXL6H56A.js → agent-headless-73HZ6ROQ.js} +26 -26
  17. package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-56U3YCP2.js} +5 -5
  18. package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-BWZZJ42H.js} +2 -2
  19. package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-WU3S5A5T.js} +2 -2
  20. package/chunks/{bridge-BCJQ7BBB.js → bridge-XFKW6S7Q.js} +32 -32
  21. package/chunks/{ca-UJ6HC4H2.js → ca-C2JTT2N5.js} +4 -1
  22. package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
  23. package/chunks/channel-worker-manager-5RWKSGEU.js +418 -0
  24. package/chunks/channel-worker-supervisor-PCDAZN4D.js +20 -0
  25. package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
  26. package/chunks/{chunk-B5ORX3FG.js → chunk-2UUAIFQO.js} +1 -1
  27. package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
  28. package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
  29. package/chunks/chunk-3MX7D6QN.js +516 -0
  30. package/chunks/{chunk-E2IY465S.js → chunk-3XJFUTNM.js} +10 -10
  31. package/chunks/{chunk-JZETEN3Z.js → chunk-422XAKCK.js} +3 -3
  32. package/chunks/{chunk-N3EMS75V.js → chunk-4FMG7EDJ.js} +1268 -1233
  33. package/chunks/{chunk-HKMAENAO.js → chunk-4YWLED2A.js} +8 -6
  34. package/chunks/{chunk-SCGXUJBT.js → chunk-5EBKKSBX.js} +3 -3
  35. package/chunks/chunk-5HBA2Z7V.js +28 -0
  36. package/chunks/{chunk-XYQSMABS.js → chunk-5LROA5W4.js} +4 -4
  37. package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
  38. package/chunks/{chunk-VA4KQY6V.js → chunk-65N2J6V2.js} +3 -3
  39. package/chunks/{chunk-4C5BQ2D2.js → chunk-6GETGQWP.js} +71 -12
  40. package/chunks/{chunk-PVZM22CK.js → chunk-6GKMJPOC.js} +5 -5
  41. package/chunks/{chunk-W2UIXQDL.js → chunk-6OATMEYN.js} +1 -1
  42. package/chunks/{chunk-GZRTYZ2R.js → chunk-6W6DI34P.js} +154 -1
  43. package/chunks/{chunk-EMDMPBJ4.js → chunk-7L4XBYVW.js} +3 -3
  44. package/chunks/{chunk-EAXLGSFP.js → chunk-7MJAZMXK.js} +8 -8
  45. package/chunks/{chunk-K434OPES.js → chunk-7NAWTFVY.js} +3 -3
  46. package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
  47. package/chunks/{chunk-5SFOMFG4.js → chunk-7R4DPSRA.js} +36 -2
  48. package/chunks/{chunk-P67PFTUT.js → chunk-AAR5SGMD.js} +4 -4
  49. package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
  50. package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
  51. package/chunks/{chunk-D2GFWEXB.js → chunk-B5I2IIWY.js} +6 -6
  52. package/chunks/{chunk-524RQP4Q.js → chunk-B7NUUEXC.js} +10 -4
  53. package/chunks/{chunk-CUMMSHH6.js → chunk-BBNVFRGD.js} +1 -1
  54. package/chunks/{chunk-5HOMWMCL.js → chunk-CEW4HDPK.js} +4166 -1338
  55. package/chunks/chunk-CJFNEBYB.js +91 -0
  56. package/chunks/{chunk-VWPVHAMO.js → chunk-CUUXANEQ.js} +5 -1
  57. package/chunks/{chunk-GWLSNBG4.js → chunk-DK33QJ3V.js} +30 -26
  58. package/chunks/{chunk-HPDUL5MF.js → chunk-DPFBNG72.js} +1 -1
  59. package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
  60. package/chunks/{chunk-MC23XKFE.js → chunk-E67NFMF4.js} +3 -3
  61. package/chunks/{chunk-OQ4DRIOA.js → chunk-EQY6POVO.js} +2 -2
  62. package/chunks/{chunk-XUOOWUZS.js → chunk-F7NXQH4Y.js} +1 -1
  63. package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
  64. package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
  65. package/chunks/{chunk-PDZ7MBDG.js → chunk-FXMC7SL2.js} +27 -6
  66. package/chunks/{chunk-SJHDYNHF.js → chunk-GDQQRV43.js} +3 -3
  67. package/chunks/{chunk-34MW4KTI.js → chunk-GGJII3FM.js} +2 -2
  68. package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
  69. package/chunks/chunk-GYTKQYDB.js +23 -0
  70. package/chunks/{chunk-HVY356M2.js → chunk-H3FQOPPS.js} +3 -3
  71. package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
  72. package/chunks/{chunk-WQUQVGTF.js → chunk-HHEFI4RP.js} +183 -96
  73. package/chunks/chunk-IDS7MSUP.js +74 -0
  74. package/chunks/{chunk-6PESIEKJ.js → chunk-JSJFKYWT.js} +68 -6
  75. package/chunks/{chunk-CNEIYWSA.js → chunk-K4PZ5F5T.js} +5 -5
  76. package/chunks/{chunk-NVYTCB5Z.js → chunk-K7CRWKOE.js} +14534 -13980
  77. package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
  78. package/chunks/{chunk-IAVB3HM3.js → chunk-KSO42X3Z.js} +13 -0
  79. package/chunks/chunk-L37RC7MQ.js +493 -0
  80. package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
  81. package/chunks/{chunk-3G7CIHVV.js → chunk-L62SEJWY.js} +4 -4
  82. package/chunks/{chunk-EGYZ275M.js → chunk-LNUXFLLJ.js} +4 -4
  83. package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
  84. package/chunks/{chunk-VTU57BWZ.js → chunk-LQU7EVFA.js} +1 -1
  85. package/chunks/{chunk-B4G2WOFA.js → chunk-LTNI523B.js} +2 -2
  86. package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
  87. package/chunks/{chunk-KHUQZZJ6.js → chunk-MO7O5722.js} +370 -36
  88. package/chunks/chunk-MR3PXB6E.js +48 -0
  89. package/chunks/{chunk-5VXNZWGF.js → chunk-N6FXRR6P.js} +1 -1
  90. package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
  91. package/chunks/{chunk-TO6QE22P.js → chunk-OATTJGPJ.js} +26 -22
  92. package/chunks/{chunk-X6TJ3YZV.js → chunk-OFEVHGVU.js} +159 -57
  93. package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
  94. package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
  95. package/chunks/{chunk-3VAGG5T5.js → chunk-P6LART6G.js} +116 -15
  96. package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
  97. package/chunks/{chunk-BAPGSC7U.js → chunk-Q5GLXH5Q.js} +23 -9
  98. package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
  99. package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
  100. package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
  101. package/chunks/{chunk-YAUFFXDS.js → chunk-RDRVMDWV.js} +12 -11
  102. package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
  103. package/chunks/{chunk-U2NNEY4R.js → chunk-SPUYQB4T.js} +1 -1
  104. package/chunks/{chunk-34Z3U5RQ.js → chunk-SXU3KKNI.js} +514 -114
  105. package/chunks/{chunk-ECNYL4AA.js → chunk-TISZXPAX.js} +1 -1
  106. package/chunks/{chunk-JSG7ZSBC.js → chunk-TQBODCFD.js} +1 -1
  107. package/chunks/{chunk-AKIVHSJR.js → chunk-TTUO4DNG.js} +111 -93
  108. package/chunks/chunk-TV6K2FB4.js +224 -0
  109. package/chunks/{chunk-4GORAUCN.js → chunk-TXY2C3D2.js} +1 -1
  110. package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
  111. package/chunks/{chunk-CLFKOZEK.js → chunk-UFOKA4PR.js} +1 -1
  112. package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-URU5UEK6.js} +67 -35
  113. package/chunks/{chunk-D5SKC4YG.js → chunk-V7EQTZYR.js} +41 -13
  114. package/chunks/{chunk-L6P4KPHR.js → chunk-VBRRNQB7.js} +59 -39
  115. package/chunks/{chunk-BMGVRZN4.js → chunk-W34A5MJH.js} +1 -1
  116. package/chunks/{chunk-PODM4SZ4.js → chunk-WDW64OW3.js} +5 -5
  117. package/chunks/{chunk-W3JHSWRP.js → chunk-WDWJ4OQJ.js} +4 -4
  118. package/chunks/{chunk-Q4YQW46J.js → chunk-WIASPMLX.js} +31 -17
  119. package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
  120. package/chunks/{chunk-A3XKDTSH.js → chunk-WLXYAKV7.js} +4 -4
  121. package/chunks/{chunk-Q6I5QHMH.js → chunk-WTSXKLG5.js} +1 -1
  122. package/chunks/{chunk-J3JA76CF.js → chunk-WX6SD4IQ.js} +1 -1
  123. package/chunks/{chunk-77XJ3SWN.js → chunk-X362TMXZ.js} +5 -5
  124. package/chunks/{chunk-CCDMCZPP.js → chunk-XLIRF7IK.js} +1 -1
  125. package/chunks/{chunk-AURZZYMD.js → chunk-XXJKGHZV.js} +4 -4
  126. package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
  127. package/chunks/{chunk-CC2ITGCF.js → chunk-YHN5SUIJ.js} +49 -6
  128. package/chunks/{chunk-3AHXV67U.js → chunk-YU56QGXX.js} +1 -1
  129. package/chunks/{chunk-5U27BZ72.js → chunk-YX4LLZ3D.js} +187 -75
  130. package/chunks/{chunk-ATAKVRIF.js → chunk-YYPXHMWO.js} +7 -7
  131. package/chunks/{chunk-XLA62MYB.js → chunk-ZKMGAFYV.js} +2 -2
  132. package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
  133. package/chunks/{chunk-7PU4FYLG.js → chunk-ZQTZXVHP.js} +4 -4
  134. package/chunks/chunk-ZRKBI3DP.js +34 -0
  135. package/chunks/{computer-use-HM37RX6A.js → computer-use-IYTX45WA.js} +26 -26
  136. package/chunks/{config-utils-NV2SVGPB.js → config-utils-CFT33LTP.js} +3 -2
  137. package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-272V77WU.js} +28 -28
  138. package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-CBJMQLYP.js} +26 -26
  139. package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-WNX2OQVX.js} +2 -2
  140. package/chunks/{cron-create-AMBKGZX6.js → cron-create-36TIFKRT.js} +4 -4
  141. package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-OQD3WULU.js} +4 -4
  142. package/chunks/{cron-list-WVP2JXER.js → cron-list-4533T2FH.js} +4 -4
  143. package/chunks/{daemon-ARHTSTXP.js → daemon-RNGFPMAB.js} +575 -58
  144. package/chunks/{daemon-status-provider-B2UTZUJ2.js → daemon-status-provider-L4STG5VO.js} +36 -36
  145. package/chunks/{de-EBJN3OVN.js → de-2VCDRDGU.js} +4 -1
  146. package/chunks/{dist-VHV4EVHG.js → dist-3V3ZV6ML.js} +1 -1
  147. package/chunks/{dist-XKU3ABM5.js → dist-ERCPDVA6.js} +1 -1
  148. package/chunks/{dist-PNVLTKTL.js → dist-HNN7DR2L.js} +158 -4
  149. package/chunks/{dist-WKPOYU7O.js → dist-JZE7F6YR.js} +1 -1
  150. package/chunks/{dist-QYCAEZIT.js → dist-MOEC47TR.js} +5 -1
  151. package/chunks/{dist-R7LN5AZE.js → dist-PHEPJLXD.js} +2 -2
  152. package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-EN4BRREQ.js} +27 -27
  153. package/chunks/{edit-VNI4NJ73.js → edit-OMAF2QDR.js} +27 -27
  154. package/chunks/{en-5A6LA7RK.js → en-NJCA3TAA.js} +5 -1
  155. package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-BBZX52HG.js} +26 -26
  156. package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-5NNFMBUY.js} +42 -27
  157. package/chunks/{environment-5HSSRMJ7.js → environment-7TEWMJYN.js} +30 -29
  158. package/chunks/{errors-HMFCJJ7P.js → errors-I4VKVX3F.js} +28 -28
  159. package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-FUWRJI33.js} +26 -26
  160. package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-IHCJ5EEI.js} +26 -26
  161. package/chunks/{fast-path-FRDMDVHG.js → fast-path-ZA57TOH4.js} +3 -3
  162. package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
  163. package/chunks/{fr-YXRABLYZ.js → fr-5F3E7WKD.js} +4 -1
  164. package/chunks/{gemini-QYSEGHAX.js → gemini-UOAKVXBG.js} +139 -76
  165. package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-G6UCE6MW.js} +4 -4
  166. package/chunks/{glob-BRCSGFOT.js → glob-4GJQ2UFF.js} +28 -27
  167. package/chunks/{grep-EE2DUOSY.js → grep-5QSYXF2E.js} +26 -26
  168. package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-ULHNWL6R.js} +30 -30
  169. package/chunks/{i18n-BASPENNQ.js → i18n-CYDUTF6F.js} +27 -27
  170. package/chunks/initializer-NRFKUGIO.js +73 -0
  171. package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-WELKRHHE.js} +27 -27
  172. package/chunks/{ja-7VQOANVG.js → ja-66J6B53L.js} +5 -2
  173. package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
  174. package/chunks/list-JVDXEG2E.js +76 -0
  175. package/chunks/loadedSettingsAdapter-WAM4VUTG.js +70 -0
  176. package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-MVUKDVCP.js} +5 -5
  177. package/chunks/{ls-ZB2BDP6T.js → ls-RXNIAQDE.js} +4 -4
  178. package/chunks/{lsp-V5DN4YUJ.js → lsp-HB5LM5IL.js} +2 -2
  179. package/chunks/mcp-YHOZN3ZM.js +70 -0
  180. package/chunks/{monitor-X5Z3H4FY.js → monitor-R7XZPJHQ.js} +26 -26
  181. package/chunks/nonInteractiveCli-NSOB6D74.js +129 -0
  182. package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-6RNKE2L2.js} +27 -27
  183. package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-XNS5S64I.js} +12 -12
  184. package/chunks/{pidfile-D4I4FTVA.js → pidfile-XE4RRR2P.js} +27 -27
  185. package/chunks/{pt-2C6YCSHL.js → pt-TFZO5Y6T.js} +4 -1
  186. package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-APDPJ3VN.js} +28 -28
  187. package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
  188. package/chunks/{read-file-7SZSIZOL.js → read-file-XSUWXSR7.js} +8 -8
  189. package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-6LRTZKXI.js} +2 -2
  190. package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-PMDTY4OS.js} +2 -2
  191. package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-APB3CDMU.js} +26 -26
  192. package/chunks/{ru-6BBHVZZV.js → ru-4L4LFHIT.js} +4 -1
  193. package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-NWTGPERT.js} +1232 -371
  194. package/chunks/{runtime-57WWRVHN.js → runtime-EIO3NQKR.js} +42 -37
  195. package/chunks/{scheduler-YBLGWSIL.js → scheduler-JJDZBDRN.js} +26 -26
  196. package/chunks/{send-message-F36YD6KQ.js → send-message-SR4WSXP2.js} +3 -3
  197. package/chunks/{serve-R63NK3CV.js → serve-WTIPB3EI.js} +36 -34
  198. package/chunks/{server-Z22GCAXP.js → server-NJPHQHLH.js} +5238 -1328
  199. package/chunks/{session-HKAAI7BN.js → session-O4AO7FTS.js} +298 -98
  200. package/chunks/{settings-3EYN66GK.js → settings-HQNDK7TG.js} +34 -32
  201. package/chunks/{shell-6YXINTWJ.js → shell-UIXM6PWG.js} +26 -26
  202. package/chunks/{skill-OO57P4X6.js → skill-3XMB4ULV.js} +10 -10
  203. package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-3R632QRM.js} +28 -28
  204. package/chunks/{src-G5UPLZSZ.js → src-USZKPUOC.js} +85 -27
  205. package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-L5XW3D7K.js} +28 -28
  206. package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-CPZOL2WB.js} +730 -397
  207. package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-YKFNUQZD.js} +3 -3
  208. package/chunks/{task-create-FRGOEIKY.js → task-create-NUFOHU53.js} +8 -7
  209. package/chunks/{task-list-OW766BXZ.js → task-list-Z2IKQY3S.js} +6 -5
  210. package/chunks/{task-stop-SIR5SNBN.js → task-stop-KQFIVQTJ.js} +2 -2
  211. package/chunks/{task-update-YRA532MT.js → task-update-HKADXSTD.js} +8 -7
  212. package/chunks/{team-create-PECAAPXK.js → team-create-XXPRF3IQ.js} +26 -26
  213. package/chunks/{team-delete-6OSECUZC.js → team-delete-SDNTGZLG.js} +6 -5
  214. package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-EOTTKHDW.js} +26 -26
  215. package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-P6UITO2L.js} +27 -27
  216. package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-YNXB27GB.js} +4 -4
  217. package/chunks/{tool-search-THVIWAPB.js → tool-search-DDNGK2LR.js} +9 -9
  218. package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-PL5N7DNY.js} +33 -33
  219. package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
  220. package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-C5LMF3UR.js} +29 -28
  221. package/chunks/types-ML3TRJQ5.js +16 -0
  222. package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-QTVVISH7.js} +29 -29
  223. package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-RY4RKBQG.js} +75 -71
  224. package/chunks/{version-3UEA6ZIR.js → version-U45RYOSD.js} +1 -1
  225. package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-ZSPR3PRR.js} +5 -5
  226. package/chunks/{workflow-QCCCMYP3.js → workflow-TCIAQYOA.js} +27 -27
  227. package/chunks/workspace-providers-status-I3G2HYLY.js +73 -0
  228. package/chunks/workspace-registration-store-IH5GLZ6Y.js +27 -0
  229. package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-QEKBELIX.js} +33 -33
  230. package/chunks/workspace-service-ORKHGLP3.js +86 -0
  231. package/chunks/workspace-skills-status-D7QCNDYY.js +72 -0
  232. package/chunks/{write-file-I3MUDRIE.js → write-file-JGRQR5VM.js} +27 -27
  233. package/chunks/{zh-RQE7I22T.js → zh-FSAH32JB.js} +6 -2
  234. package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-D2YIE2LO.js} +6 -2
  235. package/cli.js +11 -11
  236. package/locales/ca.js +6 -0
  237. package/locales/de.js +6 -0
  238. package/locales/en.js +8 -0
  239. package/locales/fr.js +6 -0
  240. package/locales/ja.js +7 -1
  241. package/locales/pt.js +6 -0
  242. package/locales/ru.js +6 -0
  243. package/locales/zh-TW.js +9 -1
  244. package/locales/zh.js +9 -1
  245. package/package.json +3 -3
  246. package/web-shell/assets/{arc-C15hqnJe.js → arc-CUeDlxvE.js} +1 -1
  247. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-PiUszkQA.js} +1 -1
  248. package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-s2wYSO7e.js} +1 -1
  249. package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-DyLxZoz9.js} +1 -1
  250. package/web-shell/assets/channel-DkuJJ0qd.js +1 -0
  251. package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-Dsdai7Tk.js} +1 -1
  252. package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-DEosOjV7.js} +1 -1
  253. package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-sNsRLTXf.js} +1 -1
  254. package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-DkRNZzmh.js} +1 -1
  255. package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-BrsRNpzd.js} +1 -1
  256. package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-CI039lpl.js} +1 -1
  257. package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-M-pkeIfu.js} +1 -1
  258. package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-C4ckGNbH.js} +1 -1
  259. package/web-shell/assets/classDiagram-4FO5ZUOK-CwqHc0TB.js +1 -0
  260. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwqHc0TB.js +1 -0
  261. package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-BciKUAFq.js} +1 -1
  262. package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-C1nTSgU6.js} +1 -1
  263. package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-BDPNWr1m.js} +1 -1
  264. package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-CNFhTszL.js} +1 -1
  265. package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-CjPa4p5a.js} +1 -1
  266. package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-ZzPykSyG.js} +1 -1
  267. package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-0UVtZ9A4.js} +1 -1
  268. package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-CajDZCat.js} +1 -1
  269. package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-BRuFBIvL.js} +1 -1
  270. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-BevGmJqG.js} +3 -3
  271. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-DvPMpBMb.js} +1 -1
  272. package/web-shell/assets/index-Cnvv4VcI.css +5 -0
  273. package/web-shell/assets/index-D1Uyklxa.js +1088 -0
  274. package/web-shell/assets/index-DzHwQkQq.js +3 -0
  275. package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-Oixn7tA9.js} +1 -1
  276. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-BgKpeg-j.js} +1 -1
  277. package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-74mwxIaA.js} +1 -1
  278. package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-D4D6cEqA.js} +1 -1
  279. package/web-shell/assets/{linear-C8wKCbIC.js → linear-atZRE_L2.js} +1 -1
  280. package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-KKudX-JC.js} +5 -5
  281. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-CMCej9yG.js} +1 -1
  282. package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-nhx40X7q.js} +1 -1
  283. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-CUmVcN3M.js} +1 -1
  284. package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-C_vyEwyy.js} +1 -1
  285. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-DU6G4VWR.js} +1 -1
  286. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-DdeRR_KJ.js} +1 -1
  287. package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-C6iCI8ps.js} +1 -1
  288. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C0_6nR6C.js +1 -0
  289. package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-B_Ea8Cb7.js} +1 -1
  290. package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-BPUVZEJA.js} +1 -1
  291. package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-BWEj0lKY.js} +1 -1
  292. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BvDsdIQw.js} +1 -1
  293. package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-crz0QhF_.js} +1 -1
  294. package/web-shell/index.html +2 -2
  295. package/chunks/chunk-CU3L64TP.js +0 -93
  296. package/chunks/initializer-UTQ7FB7G.js +0 -71
  297. package/chunks/list-DEICDL65.js +0 -74
  298. package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
  299. package/chunks/mcp-L5JXEEIA.js +0 -68
  300. package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
  301. package/chunks/types-JNKGKUJT.js +0 -12
  302. package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
  303. package/chunks/workspace-service-RVLBMSMZ.js +0 -80
  304. package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
  305. package/web-shell/assets/channel-CLiQD50f.js +0 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
  308. package/web-shell/assets/index-D5IWFVk1.css +0 -5
  309. package/web-shell/assets/index-KFJRDhX7.js +0 -783
  310. 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,25 +2,25 @@
2
2
  "use strict";
3
3
  import {
4
4
  appEvents
5
- } from "./chunk-5HOMWMCL.js";
5
+ } from "./chunk-CEW4HDPK.js";
6
6
  import {
7
7
  require_undici
8
8
  } from "./chunk-L573Z2QZ.js";
9
9
  import {
10
10
  IdeClient,
11
11
  getAllProviderBaseUrls
12
- } from "./chunk-NVYTCB5Z.js";
12
+ } from "./chunk-K7CRWKOE.js";
13
13
  import {
14
14
  initializeTelemetry
15
- } from "./chunk-3VAGG5T5.js";
15
+ } from "./chunk-P6LART6G.js";
16
16
  import {
17
17
  detectRuntime,
18
18
  getOrCreateSharedDispatcher,
19
19
  redactProxyCredentials
20
- } from "./chunk-4ZVWQHEQ.js";
20
+ } from "./chunk-LQIDP6K5.js";
21
21
  import {
22
22
  createDebugLogger
23
- } from "./chunk-J4TSQ5EQ.js";
23
+ } from "./chunk-7NFB7LBQ.js";
24
24
  import {
25
25
  recordStartupEvent
26
26
  } from "./chunk-QSWDGAIC.js";
@@ -226,10 +226,10 @@ function startPostRenderPrefetches(config, settings, options = {}) {
226
226
  { updateEventEmitter },
227
227
  { t }
228
228
  ] = await Promise.all([
229
- import("./updateCheck-2KYEYVSB.js"),
230
- import("./handleAutoUpdate-5NWTLR67.js"),
229
+ import("./updateCheck-QTVVISH7.js"),
230
+ import("./handleAutoUpdate-ULHNWL6R.js"),
231
231
  import("./updateEventEmitter-5MKC7BLQ.js"),
232
- import("./i18n-BASPENNQ.js")
232
+ import("./i18n-CYDUTF6F.js")
233
233
  ]);
234
234
  const updateFailedMessage = t(
235
235
  "Failed to check for updates. Please check your network or registry configuration."
@@ -257,7 +257,7 @@ function startPostRenderPrefetches(config, settings, options = {}) {
257
257
  state: "connecting"
258
258
  });
259
259
  try {
260
- const { connectIdeForStartup } = await import("./initializer-UTQ7FB7G.js");
260
+ const { connectIdeForStartup } = await import("./initializer-NRFKUGIO.js");
261
261
  await withTimeout(
262
262
  connectIdeForStartup(config),
263
263
  "ide_connect",
@@ -283,7 +283,7 @@ function startPostRenderPrefetches(config, settings, options = {}) {
283
283
  }
284
284
  if (config.isInteractive()) {
285
285
  runDeferredTask("background_housekeeping", async () => {
286
- const { startBackgroundHousekeeping } = await import("./scheduler-YBLGWSIL.js");
286
+ const { startBackgroundHousekeeping } = await import("./scheduler-JJDZBDRN.js");
287
287
  startBackgroundHousekeeping(config, settings);
288
288
  });
289
289
  }
@@ -4,17 +4,17 @@ import {
4
4
  disableMouseEvents,
5
5
  enableMouseEvents,
6
6
  useKeypressContext
7
- } from "./chunk-GWLSNBG4.js";
7
+ } from "./chunk-DK33QJ3V.js";
8
8
  import {
9
9
  use_stdin_default,
10
10
  use_stdout_default
11
- } from "./chunk-CNEIYWSA.js";
11
+ } from "./chunk-K4PZ5F5T.js";
12
12
  import {
13
13
  require_react
14
14
  } from "./chunk-HTHUX2T5.js";
15
15
  import {
16
16
  themeManager
17
- } from "./chunk-MXL5UP4X.js";
17
+ } from "./chunk-Q6TUALBE.js";
18
18
  import {
19
19
  init_esbuild_shims
20
20
  } from "./chunk-5O2XNYP6.js";