@qwen-code/qwen-code 0.19.6-nightly.20260706.47f62a466 → 0.19.6-preview.0

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 (213) hide show
  1. package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  2. package/bundled/qc-helper/docs/features/channels/overview.md +17 -9
  3. package/bundled/qc-helper/docs/features/channels/wecom.md +111 -0
  4. package/bundled/qc-helper/docs/features/code-review.md +16 -6
  5. package/bundled/qc-helper/docs/features/hooks.md +6 -0
  6. package/bundled/qc-helper/docs/integration-github-action.md +1 -1
  7. package/bundled/review/DESIGN.md +27 -18
  8. package/bundled/review/SKILL.md +37 -4
  9. package/chunks/{MaxSizedBox-JCOL4CAA.js → MaxSizedBox-2JOX4MMR.js} +11 -10
  10. package/chunks/{StandaloneSessionPicker-BLFN63BV.js → StandaloneSessionPicker-Z2G37ETA.js} +24 -22
  11. package/chunks/{acpAgent-3KQMM3LN.js → acpAgent-MQJT2H4Y.js} +103 -61
  12. package/chunks/{agent-3SQT4Q6F.js → agent-HEVJ76EO.js} +6 -7
  13. package/chunks/{agent-headless-XMYIIWGF.js → agent-headless-UNB5SWYC.js} +6 -7
  14. package/chunks/{anthropicContentGenerator-L7J7PVYL.js → anthropicContentGenerator-AKYPSZIV.js} +3 -3
  15. package/chunks/{artifact-tool-H2TNPNP5.js → artifact-tool-D233YJFH.js} +25 -6
  16. package/chunks/{bridge-VL53WCNP.js → bridge-GX2LGQDS.js} +11 -10
  17. package/chunks/{channel-worker-supervisor-B7MSMB5K.js → channel-worker-supervisor-CRCVYQIE.js} +1 -1
  18. package/chunks/{chunk-6T6SXQNR.js → chunk-27QGW3BK.js} +5 -5
  19. package/chunks/{chunk-YMVK4LS2.js → chunk-2D5Q33PT.js} +3 -3
  20. package/chunks/{chunk-IKCFWN3Y.js → chunk-2MDHTI6A.js} +2 -2
  21. package/chunks/{chunk-BBKXTYL6.js → chunk-2MJAXDFK.js} +6 -6
  22. package/chunks/{chunk-WSVZFWN4.js → chunk-2NPS2UDH.js} +305 -97
  23. package/chunks/{chunk-HALA655G.js → chunk-2X3ZVAAT.js} +2 -2
  24. package/chunks/chunk-332PWN27.js +19 -0
  25. package/chunks/{chunk-ACD5DFUY.js → chunk-3B26UVCX.js} +130 -24
  26. package/chunks/{chunk-Z7RPIVIC.js → chunk-43W4YSO6.js} +1 -12
  27. package/chunks/{chunk-3QAQS4IM.js → chunk-44NROQYV.js} +4 -2
  28. package/chunks/{chunk-N7K5TYQW.js → chunk-4XV2MRNK.js} +1 -1
  29. package/chunks/{chunk-VCHDUDLM.js → chunk-5HMMLTUD.js} +11 -11
  30. package/chunks/{chunk-JZLDAWNW.js → chunk-5IGNZP2J.js} +1 -1
  31. package/chunks/{chunk-NCFVPWRR.js → chunk-6GHEZDDX.js} +1 -1
  32. package/chunks/{chunk-AQOYX6KA.js → chunk-7O6DD2ES.js} +1 -1
  33. package/chunks/{chunk-SN3W7PFN.js → chunk-7R62CLMI.js} +4 -4
  34. package/chunks/{chunk-FB75L4ZI.js → chunk-7SAH6M3Y.js} +3 -3
  35. package/chunks/{chunk-RMIXI7TN.js → chunk-7VCI24VZ.js} +4 -107
  36. package/chunks/chunk-A2X3KLC3.js +3807 -0
  37. package/chunks/chunk-A3ZQMFO6.js +949 -0
  38. package/chunks/{chunk-B7E6VU5A.js → chunk-A7UKINBT.js} +7 -7
  39. package/chunks/{chunk-VDTH6RD3.js → chunk-ADO6IDOZ.js} +15 -9
  40. package/chunks/{chunk-FDVILPGP.js → chunk-AJ3CEJRJ.js} +10 -5
  41. package/chunks/{chunk-NCFY7PWS.js → chunk-CCGOFQV3.js} +51 -2
  42. package/chunks/{chunk-HSO66R46.js → chunk-DB7CZERZ.js} +1 -1
  43. package/chunks/{chunk-LAW3LHN6.js → chunk-DF74IL3R.js} +67 -42
  44. package/chunks/{chunk-U3RZKQXS.js → chunk-FCEHOKYP.js} +5 -5
  45. package/chunks/{chunk-OQLSVZAA.js → chunk-FRR5I3SQ.js} +1 -1
  46. package/chunks/{chunk-NFE3DQ4R.js → chunk-FV7425LN.js} +36 -1
  47. package/chunks/{chunk-NOAYCIDS.js → chunk-GPLKAQUX.js} +8 -8
  48. package/chunks/{chunk-VS64QG5I.js → chunk-GV2S4F6Q.js} +12 -4
  49. package/chunks/{chunk-ZNUVV3IQ.js → chunk-GW67O5SO.js} +1 -1
  50. package/chunks/{chunk-6QXGBCAH.js → chunk-HW4N45EE.js} +1 -45
  51. package/chunks/{chunk-OGC64RKC.js → chunk-IFDJAMJW.js} +484 -1222
  52. package/chunks/{chunk-7AEMHW7Y.js → chunk-ILFQAFWH.js} +1 -1
  53. package/chunks/chunk-JYFZFWSL.js +167 -0
  54. package/chunks/{chunk-JZGYH2ST.js → chunk-K56RTEBN.js} +1 -1
  55. package/chunks/chunk-LGFAYIKX.js +115 -0
  56. package/chunks/{chunk-QR2KK6CG.js → chunk-LLTFLVFK.js} +4 -4
  57. package/chunks/{chunk-654I2NBH.js → chunk-MZWODTEA.js} +5 -13
  58. package/chunks/{chunk-FCCBH56M.js → chunk-N33JAGJ7.js} +812 -78
  59. package/chunks/{chunk-K2KVPZM5.js → chunk-NVQVIJMO.js} +112 -42
  60. package/chunks/{chunk-LH6D765T.js → chunk-O6T7PBUM.js} +30 -6
  61. package/chunks/{chunk-QOKVIOLW.js → chunk-P452E6XF.js} +2 -2
  62. package/chunks/chunk-PS2NG7KU.js +262 -0
  63. package/chunks/{chunk-RG6ZAMMW.js → chunk-QM4FKX7H.js} +2 -2
  64. package/chunks/chunk-RODQXLGZ.js +28 -0
  65. package/chunks/{chunk-KSPVDFE4.js → chunk-SAIILPQ3.js} +0 -3
  66. package/chunks/{chunk-5QNTAU44.js → chunk-SJ3QRPN2.js} +14 -8
  67. package/chunks/{chunk-FTXYSZOJ.js → chunk-SKO6VJHG.js} +16 -4
  68. package/chunks/{chunk-66KNL43D.js → chunk-TBAZMRW3.js} +1 -1
  69. package/chunks/{chunk-KDCCKYPM.js → chunk-TPTG52XG.js} +1 -1
  70. package/chunks/chunk-UIDXQNMV.js +13 -0
  71. package/chunks/chunk-VP2FB7OC.js +8223 -0
  72. package/chunks/{chunk-QLEBY26M.js → chunk-WKBA74DD.js} +1 -1
  73. package/chunks/{chunk-XRKPKL3R.js → chunk-WKTLDGD6.js} +1 -1
  74. package/chunks/{chunk-O2I6MGPK.js → chunk-WRLMLPWI.js} +3 -3
  75. package/chunks/{chunk-PRO3AHV3.js → chunk-XXICIIS5.js} +5 -5
  76. package/chunks/{chunk-GIXLNFID.js → chunk-Y3QQV7WE.js} +2 -2
  77. package/chunks/{chunk-LTDPXBIJ.js → chunk-ZKX7IBXU.js} +4 -4
  78. package/chunks/{chunk-J7JIBDUN.js → chunk-ZOSL7K3L.js} +221 -42
  79. package/chunks/{chunk-4VVDPKQ6.js → chunk-ZWFS7YCB.js} +4941 -3908
  80. package/chunks/{computer-use-JZO5THQ4.js → computer-use-IQ46C3YP.js} +6 -7
  81. package/chunks/{contextCommand-B3US3GS2.js → contextCommand-TTT6AP2W.js} +10 -10
  82. package/chunks/{cron-create-O6ZHD3JN.js → cron-create-JSXEIPVS.js} +1 -1
  83. package/chunks/{cron-delete-BFD5B2XX.js → cron-delete-OIFVEPGU.js} +1 -1
  84. package/chunks/{cron-list-KI6FV4KN.js → cron-list-D4ZX4IOE.js} +8 -4
  85. package/chunks/{daemon-WQXSK7GF.js → daemon-F3I2RXP6.js} +59 -3
  86. package/chunks/{daemon-status-provider-FYMIAJ74.js → daemon-status-provider-5GAWK65R.js} +13 -13
  87. package/chunks/dist-573HNSVO.js +3217 -0
  88. package/chunks/{dist-VHBP2PIG.js → dist-FQ5WRJPL.js} +2 -2
  89. package/chunks/{dist-LPVU3L2M.js → dist-IMFFBMAT.js} +6 -3792
  90. package/chunks/{dist-7GU63KI5.js → dist-OT7G2WNM.js} +1 -1
  91. package/chunks/{dist-H4HHZYCI.js → dist-PKFTNUHO.js} +2 -2
  92. package/chunks/{dist-3UDX5T4T.js → dist-YTRKAVUB.js} +1 -1
  93. package/chunks/{earlyInputCapture-5GY56LUS.js → earlyInputCapture-LAGZUGGV.js} +6 -7
  94. package/chunks/{edit-A26XF3GQ.js → edit-Q5BUQC2S.js} +6 -7
  95. package/chunks/{en-AXARKOWO.js → en-GA2RMXY5.js} +5 -1
  96. package/chunks/{enter-worktree-LXWZ7LPU.js → enter-worktree-DC4FHMVF.js} +6 -7
  97. package/chunks/{enterPlanMode-OZPTJ4LY.js → enterPlanMode-5BGJBWIY.js} +6 -7
  98. package/chunks/{errors-HC6JMZ7A.js → errors-EGX5DECS.js} +8 -9
  99. package/chunks/{exit-worktree-5SMO7MH5.js → exit-worktree-2EOSZNZI.js} +6 -7
  100. package/chunks/{exitPlanMode-EFPLGAND.js → exitPlanMode-JAQ35ELJ.js} +6 -7
  101. package/chunks/{fast-path-TF2IF5WZ.js → fast-path-QEWDA6O6.js} +5 -2
  102. package/chunks/{fr-MBMNQSQ6.js → fr-GWNQG4XH.js} +4 -0
  103. package/chunks/{gemini-XTISXYIY.js → gemini-TQ5XANRS.js} +64 -188
  104. package/chunks/{geminiContentGenerator-5W62YCSD.js → geminiContentGenerator-DCM2XGDQ.js} +1 -1
  105. package/chunks/{glob-YVWLTWR4.js → glob-7JLTQ4IQ.js} +6 -7
  106. package/chunks/{grep-TMLRZONJ.js → grep-CAUXEO7Q.js} +6 -7
  107. package/chunks/handleAutoUpdate-XKXULZQX.js +65 -0
  108. package/chunks/{initializer-7SJAWILK.js → initializer-3NRWU5JV.js} +12 -11
  109. package/chunks/{ja-HFV5QCHR.js → ja-2HOTA47X.js} +4 -0
  110. package/chunks/{list-JE74WAG2.js → list-NWO6QBDQ.js} +12 -13
  111. package/chunks/{loadedSettingsAdapter-R3DCJQ5W.js → loadedSettingsAdapter-PJ77LGFS.js} +10 -11
  112. package/chunks/{loop-wakeup-CUVIY2JY.js → loop-wakeup-OHWEMFP5.js} +2 -2
  113. package/chunks/{mcp-AJ2ZHF2N.js → mcp-VFEHVF5A.js} +10 -11
  114. package/chunks/{monitor-UH6ORENE.js → monitor-FY2ITVSC.js} +14 -10
  115. package/chunks/{nonInteractiveCli-CCYM24DQ.js → nonInteractiveCli-KPCXTVWY.js} +41 -37
  116. package/chunks/{notebook-edit-VW6QKDC6.js → notebook-edit-BSJMXIWX.js} +6 -7
  117. package/chunks/{openaiContentGenerator-2HIY7ZUY.js → openaiContentGenerator-BA6NWY4S.js} +5 -6
  118. package/chunks/{pidfile-QGNMZ5SP.js → pidfile-WXMRN6QF.js} +6 -7
  119. package/chunks/{qwenContentGenerator-JFQNSKW4.js → qwenContentGenerator-U4ZSLGFN.js} +8 -9
  120. package/chunks/{read-file-LTJRKWK2.js → read-file-VMVHNOMA.js} +2 -2
  121. package/chunks/{ripGrep-X65NYSFJ.js → ripGrep-NC6MUWXN.js} +6 -7
  122. package/chunks/{run-qwen-serve-CLVQV6WU.js → run-qwen-serve-NQH6LQTH.js} +144 -27
  123. package/chunks/{scheduler-NUTJ4FRU.js → scheduler-35T3E2UQ.js} +6 -7
  124. package/chunks/{serve-4DVF5UCI.js → serve-C36LOB5N.js} +10 -11
  125. package/chunks/{server-ZFRDBIFR.js → server-TDFPIDC3.js} +1342 -160
  126. package/chunks/{session-YQPMXZCZ.js → session-STHNQGRJ.js} +42 -38
  127. package/chunks/{settings-2P6SMCR5.js → settings-GIE22AYF.js} +9 -10
  128. package/chunks/{shell-5V6CJVMZ.js → shell-JD52AIMU.js} +6 -7
  129. package/chunks/{skill-YCDQKIQQ.js → skill-L4IFKRQ5.js} +14 -4
  130. package/chunks/{spawnChannel-NEOZMKQL.js → spawnChannel-HGMOEPM7.js} +8 -9
  131. package/chunks/{src-OSBARWA7.js → src-3SNF3G3V.js} +40 -17
  132. package/chunks/{startInteractiveUI-YKNL25BC.js → startInteractiveUI-C7DCDHGF.js} +5011 -13181
  133. package/chunks/{team-create-DWR5UZIT.js → team-create-NYL7KAMA.js} +6 -7
  134. package/chunks/{team-plan-approval-IVROZF6V.js → team-plan-approval-LH65JBEH.js} +6 -7
  135. package/chunks/{theme-manager-C5E2HDJG.js → theme-manager-ANKQO5DR.js} +6 -7
  136. package/chunks/{tool-search-YX2YOBFJ.js → tool-search-WZEGJFO4.js} +4 -21
  137. package/chunks/{trustedFolders-7KI7ETLR.js → trustedFolders-HECAG3S3.js} +7 -8
  138. package/chunks/updateCheck-72BBAE5V.js +65 -0
  139. package/chunks/{validateNonInterActiveAuth-JUTUFRSI.js → validateNonInterActiveAuth-PDQCPSNA.js} +38 -34
  140. package/chunks/{version-4DEOOFHV.js → version-VSEUTPNM.js} +2 -1
  141. package/chunks/{workflow-FSJVAP5Q.js → workflow-DPF2CL7U.js} +7 -8
  142. package/chunks/{workspace-providers-status-YBIB2D77.js → workspace-providers-status-TQ23DQ2D.js} +12 -13
  143. package/chunks/{workspace-service-K27FZHY6.js → workspace-service-D34UDMEY.js} +14 -15
  144. package/chunks/{workspace-skills-status-QKXCNLVT.js → workspace-skills-status-4DR5UNNC.js} +11 -12
  145. package/chunks/{write-file-7XMET6EL.js → write-file-VFNAKGYM.js} +6 -7
  146. package/chunks/{zh-RS3HZHFH.js → zh-7XVVRTDH.js} +5 -1
  147. package/chunks/{zh-TW-L5GRQ4S4.js → zh-TW-DPH554OG.js} +5 -1
  148. package/cli.js +11 -11
  149. package/locales/en.js +8 -2
  150. package/locales/fr.js +6 -0
  151. package/locales/ja.js +6 -0
  152. package/locales/zh-TW.js +8 -2
  153. package/locales/zh.js +8 -2
  154. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  155. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  156. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  157. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  158. package/package.json +3 -3
  159. package/web-shell/assets/{arc-DsvupRmw.js → arc-C7hjaa7g.js} +1 -1
  160. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BwogiDi8.js → architectureDiagram-3BPJPVTR-pm9KtMZY.js} +1 -1
  161. package/web-shell/assets/{blockDiagram-GPEHLZMM-BibxECWL.js → blockDiagram-GPEHLZMM-CApElKsU.js} +1 -1
  162. package/web-shell/assets/{c4Diagram-AAUBKEIU-7cCkrqli.js → c4Diagram-AAUBKEIU-BeDe0-9N.js} +1 -1
  163. package/web-shell/assets/channel-BNf1dW-j.js +1 -0
  164. package/web-shell/assets/{chunk-2J33WTMH-DVJvJrzC.js → chunk-2J33WTMH-DJEkmLdl.js} +1 -1
  165. package/web-shell/assets/{chunk-4BX2VUAB-BFd1gVwi.js → chunk-4BX2VUAB-DXX8gdpe.js} +1 -1
  166. package/web-shell/assets/{chunk-55IACEB6-BW2NnZiy.js → chunk-55IACEB6-DORmk1kQ.js} +1 -1
  167. package/web-shell/assets/{chunk-727SXJPM-FUpKPObH.js → chunk-727SXJPM-DWmO4mCZ.js} +1 -1
  168. package/web-shell/assets/{chunk-AQP2D5EJ-DqoSTkq2.js → chunk-AQP2D5EJ-C7LRaYw2.js} +1 -1
  169. package/web-shell/assets/{chunk-FMBD7UC4-D6Tt9URv.js → chunk-FMBD7UC4-CCdXgyC5.js} +1 -1
  170. package/web-shell/assets/{chunk-ND2GUHAM-B9pTpaYB.js → chunk-ND2GUHAM-SyL_xvWc.js} +1 -1
  171. package/web-shell/assets/{chunk-QZHKN3VN-KJs617M2.js → chunk-QZHKN3VN-BzOuCKxa.js} +1 -1
  172. package/web-shell/assets/classDiagram-4FO5ZUOK-uOIGlzgi.js +1 -0
  173. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-uOIGlzgi.js +1 -0
  174. package/web-shell/assets/{cose-bilkent-S5V4N54A-B-pCB_lI.js → cose-bilkent-S5V4N54A-BMPWyDKc.js} +1 -1
  175. package/web-shell/assets/{dagre-BM42HDAG-pCqrm_dE.js → dagre-BM42HDAG-B_GnPWik.js} +1 -1
  176. package/web-shell/assets/{diagram-2AECGRRQ-CJd4RXQc.js → diagram-2AECGRRQ-fJqMc3S_.js} +1 -1
  177. package/web-shell/assets/{diagram-5GNKFQAL-CP0ntTEt.js → diagram-5GNKFQAL-ximV3O9D.js} +1 -1
  178. package/web-shell/assets/{diagram-KO2AKTUF-HKMjC8U_.js → diagram-KO2AKTUF-2vVyjzqw.js} +1 -1
  179. package/web-shell/assets/{diagram-LMA3HP47-BnUMTzxK.js → diagram-LMA3HP47-Dckcx1sT.js} +1 -1
  180. package/web-shell/assets/{diagram-OG6HWLK6-CY2kjke3.js → diagram-OG6HWLK6-BAVv47ga.js} +1 -1
  181. package/web-shell/assets/{erDiagram-TEJ5UH35-Q-P2C_2c.js → erDiagram-TEJ5UH35-Bn3nf5J0.js} +1 -1
  182. package/web-shell/assets/{flowDiagram-I6XJVG4X-D5dDqv6k.js → flowDiagram-I6XJVG4X-BIbGF9JT.js} +1 -1
  183. package/web-shell/assets/{ganttDiagram-6RSMTGT7-D6e_nLNG.js → ganttDiagram-6RSMTGT7-CDbhb3AH.js} +1 -1
  184. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Cagi_aG2.js → gitGraphDiagram-PVQCEYII-CbKG1a_w.js} +1 -1
  185. package/web-shell/assets/index-CnE2ur2L.js +779 -0
  186. package/web-shell/assets/index-hSKXrlSE.css +5 -0
  187. package/web-shell/assets/{infoDiagram-5YYISTIA-CCRsrfey.js → infoDiagram-5YYISTIA-DUFxTy8m.js} +1 -1
  188. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-o1nEXhOa.js → ishikawaDiagram-YF4QCWOH-D69hrBG8.js} +1 -1
  189. package/web-shell/assets/{journeyDiagram-JHISSGLW-yNY7DUDz.js → journeyDiagram-JHISSGLW-DsvEw51Y.js} +1 -1
  190. package/web-shell/assets/{kanban-definition-UN3LZRKU-C2CG5vmP.js → kanban-definition-UN3LZRKU-lFFjZEYd.js} +1 -1
  191. package/web-shell/assets/{linear-Jsjhveg2.js → linear-Bo5bWzvo.js} +1 -1
  192. package/web-shell/assets/{mermaid.core-CCrKRcoG.js → mermaid.core-C_HKMJx5.js} +5 -5
  193. package/web-shell/assets/{mindmap-definition-RKZ34NQL-C8yHT5I5.js → mindmap-definition-RKZ34NQL-DlV-NUTs.js} +1 -1
  194. package/web-shell/assets/{pieDiagram-4H26LBE5-BnVzUzO5.js → pieDiagram-4H26LBE5-B2e6FH2a.js} +1 -1
  195. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-EP9K_nK2.js → quadrantDiagram-W4KKPZXB-D75kSk-b.js} +1 -1
  196. package/web-shell/assets/{requirementDiagram-4Y6WPE33-D_Q9FvKR.js → requirementDiagram-4Y6WPE33-CQ6xakhM.js} +1 -1
  197. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Bh08id0J.js → sankeyDiagram-5OEKKPKP-J_XTKrcY.js} +1 -1
  198. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Btm9ZGN_.js → sequenceDiagram-3UESZ5HK-D7jTcBtf.js} +1 -1
  199. package/web-shell/assets/{stateDiagram-AJRCARHV-CR9Ym-Fy.js → stateDiagram-AJRCARHV-CrlM_OT3.js} +1 -1
  200. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Bs4TK_84.js +1 -0
  201. package/web-shell/assets/{timeline-definition-PNZ67QCA-TUsY0ZLs.js → timeline-definition-PNZ67QCA-5oZi76Ef.js} +1 -1
  202. package/web-shell/assets/{vennDiagram-CIIHVFJN-DqzVmJAq.js → vennDiagram-CIIHVFJN-DO5YptPK.js} +1 -1
  203. package/web-shell/assets/{wardley-L42UT6IY-DlUQaEG_.js → wardley-L42UT6IY-4t1eJDvM.js} +1 -1
  204. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-mvwPkaJp.js → wardleyDiagram-YWT4CUSO-DKZc661S.js} +1 -1
  205. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CJfXdkkx.js → xychartDiagram-2RQKCTM6-su9hp08G.js} +1 -1
  206. package/web-shell/index.html +2 -2
  207. package/chunks/chunk-QT7XKZT7.js +0 -293
  208. package/web-shell/assets/channel-Bhs5kHEh.js +0 -1
  209. package/web-shell/assets/classDiagram-4FO5ZUOK-BGHJQZmo.js +0 -1
  210. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGHJQZmo.js +0 -1
  211. package/web-shell/assets/index-DoGSgv5C.css +0 -5
  212. package/web-shell/assets/index-lWWJkqt9.js +0 -754
  213. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-6aAMKcly.js +0 -1
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  buildPermissionSettings
5
- } from "./chunk-NCFVPWRR.js";
5
+ } from "./chunk-6GHEZDDX.js";
6
6
  import {
7
7
  resolveVoiceStreamConfig,
8
8
  resolveVoiceTranscriptionConfig,
9
9
  transcribeVoiceAudio
10
- } from "./chunk-XRKPKL3R.js";
10
+ } from "./chunk-WKTLDGD6.js";
11
11
  import {
12
12
  getVoiceSettingsScope,
13
13
  isSelectableVoiceModel,
@@ -16,7 +16,7 @@ import {
16
16
  readVoiceMode,
17
17
  readVoiceModel,
18
18
  resolveVoiceTransport
19
- } from "./chunk-7AEMHW7Y.js";
19
+ } from "./chunk-ILFQAFWH.js";
20
20
  import {
21
21
  WorkspacePermissionRulesSessionRequiredError,
22
22
  WorkspaceSettingsPartialPersistError
@@ -24,7 +24,7 @@ import {
24
24
  import {
25
25
  getPersistScopeForModelSelection,
26
26
  loadSettings
27
- } from "./chunk-LH6D765T.js";
27
+ } from "./chunk-O6T7PBUM.js";
28
28
  import {
29
29
  MCP_RESTART_SERVER_DEADLINE_MS
30
30
  } from "./chunk-P7M4GA57.js";
@@ -49,16 +49,16 @@ import {
49
49
  createIdleWorkspaceProvidersStatus,
50
50
  createIdleWorkspaceSkillsStatus,
51
51
  mapDomainErrorToErrorKind
52
- } from "./chunk-AQOYX6KA.js";
52
+ } from "./chunk-7O6DD2ES.js";
53
53
  import {
54
54
  getWorkspaceTrustStatus
55
- } from "./chunk-QLEBY26M.js";
55
+ } from "./chunk-WKBA74DD.js";
56
56
  import {
57
57
  writeStderrLine
58
58
  } from "./chunk-Y6Z2O3WR.js";
59
59
  import {
60
60
  ModelsConfig
61
- } from "./chunk-4VVDPKQ6.js";
61
+ } from "./chunk-ZWFS7YCB.js";
62
62
  import {
63
63
  createDebugLogger
64
64
  } from "./chunk-22MNNNXE.js";
@@ -4,19 +4,19 @@ import {
4
4
  handleAtCommand,
5
5
  resolveAtCommandQuery,
6
6
  sanitizeDisplayText
7
- } from "./chunk-QR2KK6CG.js";
7
+ } from "./chunk-LLTFLVFK.js";
8
8
  import {
9
9
  isAtCommand,
10
10
  isBtwCommand,
11
11
  isSlashCommand,
12
12
  normalizePartList,
13
13
  recordGoalStatusItem
14
- } from "./chunk-OGC64RKC.js";
14
+ } from "./chunk-IFDJAMJW.js";
15
15
  import {
16
16
  SHELL_COMMAND_NAME,
17
17
  fitPendingSlice,
18
18
  useSessionStats
19
- } from "./chunk-SN3W7PFN.js";
19
+ } from "./chunk-7R62CLMI.js";
20
20
  import {
21
21
  require_react
22
22
  } from "./chunk-KYMBIKIW.js";
@@ -28,10 +28,10 @@ import {
28
28
  } from "./chunk-KHDZHZMH.js";
29
29
  import {
30
30
  isInlineModelOverrideAllowed
31
- } from "./chunk-RG6ZAMMW.js";
31
+ } from "./chunk-QM4FKX7H.js";
32
32
  import {
33
33
  t
34
- } from "./chunk-BBKXTYL6.js";
34
+ } from "./chunk-2MJAXDFK.js";
35
35
  import {
36
36
  AutonomousLoopTickResolver,
37
37
  CoreToolScheduler,
@@ -53,7 +53,7 @@ import {
53
53
  setActiveGoal,
54
54
  shouldRunVisionBridge,
55
55
  splitImageParts
56
- } from "./chunk-4VVDPKQ6.js";
56
+ } from "./chunk-ZWFS7YCB.js";
57
57
  import {
58
58
  ApiCancelEvent,
59
59
  ConversationFinishedEvent,
@@ -63,7 +63,7 @@ import {
63
63
  logConversationFinishedEvent,
64
64
  logUserPrompt,
65
65
  logUserRetry
66
- } from "./chunk-FCCBH56M.js";
66
+ } from "./chunk-N33JAGJ7.js";
67
67
  import {
68
68
  isAnyAutoMemPath
69
69
  } from "./chunk-4KJ2BPIT.js";
@@ -73,7 +73,7 @@ import {
73
73
  import {
74
74
  getUnsupportedImageFormatWarning,
75
75
  isSupportedImageMimeType
76
- } from "./chunk-6QXGBCAH.js";
76
+ } from "./chunk-HW4N45EE.js";
77
77
  import {
78
78
  FinishReason
79
79
  } from "./chunk-55ZMG67I.js";
@@ -2509,7 +2509,13 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2509
2509
  async (newApprovalMode) => {
2510
2510
  if (newApprovalMode === "yolo" /* YOLO */ || newApprovalMode === "auto-edit" /* AUTO_EDIT */) {
2511
2511
  let awaitingApprovalCalls = toolCalls.filter(
2512
- (call) => call.status === "awaiting_approval"
2512
+ (call) => {
2513
+ if (call.status !== "awaiting_approval") {
2514
+ return false;
2515
+ }
2516
+ const { confirmationDetails } = call;
2517
+ return !(confirmationDetails && "hideAlwaysAllow" in confirmationDetails && confirmationDetails.hideAlwaysAllow === true);
2518
+ }
2513
2519
  );
2514
2520
  if (newApprovalMode === "auto-edit" /* AUTO_EDIT */) {
2515
2521
  awaitingApprovalCalls = awaitingApprovalCalls.filter(
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-Y6Z2O3WR.js";
9
9
  import {
10
10
  getActiveGoal
11
- } from "./chunk-4VVDPKQ6.js";
11
+ } from "./chunk-ZWFS7YCB.js";
12
12
  import {
13
13
  ToolNames
14
14
  } from "./chunk-X3YGAX7V.js";
@@ -136,12 +136,16 @@ var MessageEmitter = class extends BaseEmitter {
136
136
  * @param text - The user message text content
137
137
  * @param timestamp - Optional server-side timestamp (ISO string or ms) for message ordering
138
138
  */
139
- async emitUserMessage(text, timestamp) {
139
+ async emitUserMessage(text, timestamp, options = {}) {
140
140
  const epochMs = BaseEmitter.toEpochMs(timestamp);
141
+ const _meta = {
142
+ ...epochMs != null ? { timestamp: epochMs } : {},
143
+ ...options.source ? { source: options.source } : {}
144
+ };
141
145
  await this.sendUpdate({
142
146
  sessionUpdate: "user_message_chunk",
143
147
  content: { type: "text", text },
144
- ...epochMs != null && { _meta: { timestamp: epochMs } }
148
+ ...Object.keys(_meta).length > 0 ? { _meta } : {}
145
149
  });
146
150
  }
147
151
  /**
@@ -734,7 +738,8 @@ var HistoryReplayer = class {
734
738
  if (displayText) {
735
739
  await this.messageEmitter.emitUserMessage(
736
740
  displayText,
737
- record.timestamp
741
+ record.timestamp,
742
+ record.subtype === "cron" ? { source: "cron" } : void 0
738
743
  );
739
744
  }
740
745
  break;
@@ -1598,7 +1603,7 @@ async function extractMetadata(conversation, config) {
1598
1603
  const gitBranch = firstRecord?.gitBranch;
1599
1604
  let gitRepo;
1600
1605
  if (cwd) {
1601
- const { getGitRepoName } = await import("./src-OSBARWA7.js");
1606
+ const { getGitRepoName } = await import("./src-3SNF3G3V.js");
1602
1607
  gitRepo = getGitRepoName(cwd);
1603
1608
  }
1604
1609
  let model;
@@ -10,6 +10,53 @@ import {
10
10
  __name
11
11
  } from "./chunk-J2S4EL5Y.js";
12
12
 
13
+ // packages/core/src/utils/request-tokenizer/textTokenizer.ts
14
+ init_esbuild_shims();
15
+ function estimateTextTokens(text) {
16
+ if (!text || text.length === 0) {
17
+ return 0;
18
+ }
19
+ let asciiChars = 0;
20
+ let nonAsciiChars = 0;
21
+ for (let i = 0; i < text.length; i++) {
22
+ const charCode = text.charCodeAt(i);
23
+ if (charCode < 128) {
24
+ asciiChars++;
25
+ } else {
26
+ nonAsciiChars++;
27
+ }
28
+ }
29
+ const tokens = asciiChars / 4 + nonAsciiChars * 1.1;
30
+ return Math.ceil(tokens);
31
+ }
32
+ __name(estimateTextTokens, "estimateTextTokens");
33
+ var TextTokenizer = class {
34
+ static {
35
+ __name(this, "TextTokenizer");
36
+ }
37
+ /**
38
+ * Calculate tokens for text content
39
+ *
40
+ * @param text - The text to estimate tokens for
41
+ * @returns The estimated token count
42
+ */
43
+ async calculateTokens(text) {
44
+ return this.calculateTokensSync(text);
45
+ }
46
+ /**
47
+ * Calculate tokens for multiple text strings
48
+ *
49
+ * @param texts - Array of text strings to estimate tokens for
50
+ * @returns Array of token counts corresponding to each input text
51
+ */
52
+ async calculateTokensBatch(texts) {
53
+ return texts.map((text) => this.calculateTokensSync(text));
54
+ }
55
+ calculateTokensSync(text) {
56
+ return estimateTextTokens(text);
57
+ }
58
+ };
59
+
13
60
  // packages/core/src/utils/runtimeDiagnostics.ts
14
61
  init_esbuild_shims();
15
62
  var RUNTIME_PROFILE_ENV = "QWEN_CODE_PROFILE_RUNTIME";
@@ -1193,6 +1240,8 @@ function toOpenAPI30(schema) {
1193
1240
  __name(toOpenAPI30, "toOpenAPI30");
1194
1241
 
1195
1242
  export {
1243
+ estimateTextTokens,
1244
+ TextTokenizer,
1196
1245
  safeJsonParse,
1197
1246
  convertSchema,
1198
1247
  isRuntimeDiagnosticsEnabled,
@@ -1203,12 +1252,12 @@ export {
1203
1252
  };
1204
1253
  /**
1205
1254
  * @license
1206
- * Copyright 2026 Qwen
1255
+ * Copyright 2025 Qwen
1207
1256
  * SPDX-License-Identifier: Apache-2.0
1208
1257
  */
1209
1258
  /**
1210
1259
  * @license
1211
- * Copyright 2025 Qwen
1260
+ * Copyright 2026 Qwen
1212
1261
  * SPDX-License-Identifier: Apache-2.0
1213
1262
  */
1214
1263
  /**
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  BaseJsonOutputAdapter
5
- } from "./chunk-IKCFWN3Y.js";
5
+ } from "./chunk-2MDHTI6A.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -1,16 +1,14 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import {
4
- getRateLimitErrorDetails
5
- } from "./chunk-QT7XKZT7.js";
6
3
  import {
7
4
  OpenAIContentConverter,
8
5
  TaggedThinkingParser,
6
+ getRateLimitErrorDetails,
9
7
  openaiRequestCaptureContext
10
- } from "./chunk-FCCBH56M.js";
8
+ } from "./chunk-N33JAGJ7.js";
11
9
  import {
12
10
  RequestTokenizer
13
- } from "./chunk-3QAQS4IM.js";
11
+ } from "./chunk-44NROQYV.js";
14
12
  import {
15
13
  DASHSCOPE_PROXY_BASE_URL,
16
14
  DEFAULT_DASHSCOPE_BASE_URL,
@@ -22,11 +20,11 @@ import {
22
20
  parsePositiveIntegerEnvValue,
23
21
  resolveRequestTimeout,
24
22
  tokenLimit
25
- } from "./chunk-6QXGBCAH.js";
23
+ } from "./chunk-HW4N45EE.js";
26
24
  import {
27
25
  runtimeDiagnostics,
28
26
  safeJsonParse
29
- } from "./chunk-NCFY7PWS.js";
27
+ } from "./chunk-CCGOFQV3.js";
30
28
  import {
31
29
  GenerateContentResponse
32
30
  } from "./chunk-55ZMG67I.js";
@@ -7818,11 +7816,17 @@ var StreamingToolCallParser = class {
7818
7816
  const existingBuffer = this.buffers.get(index);
7819
7817
  const existingDepth = this.depths.get(index);
7820
7818
  const existingMeta = this.toolCallMeta.get(index);
7821
- if (existingBuffer.trim() && existingDepth === 0 && existingMeta?.id && existingMeta.id !== id) {
7822
- try {
7823
- JSON.parse(existingBuffer);
7819
+ if (existingMeta?.name && existingDepth === 0 && existingMeta?.id && existingMeta.id !== id) {
7820
+ let existingComplete = true;
7821
+ if (existingBuffer.trim()) {
7822
+ try {
7823
+ JSON.parse(existingBuffer);
7824
+ } catch {
7825
+ existingComplete = false;
7826
+ }
7827
+ }
7828
+ if (existingComplete) {
7824
7829
  actualIndex = this.findNextAvailableIndex();
7825
- } catch {
7826
7830
  }
7827
7831
  }
7828
7832
  }
@@ -7853,14 +7857,21 @@ var StreamingToolCallParser = class {
7853
7857
  }
7854
7858
  const currentBuffer = this.buffers.get(actualIndex);
7855
7859
  const currentDepth = this.depths.get(actualIndex);
7856
- if (isKnownId && currentBuffer.trim() && currentDepth === 0) {
7857
- try {
7858
- JSON.parse(currentBuffer);
7860
+ if (isKnownId && currentDepth === 0) {
7861
+ if (currentBuffer.trim()) {
7862
+ try {
7863
+ JSON.parse(currentBuffer);
7864
+ debugLogger3.debug(
7865
+ `Ignoring replay chunk for completed toolCall id=${id}`
7866
+ );
7867
+ return { complete: false };
7868
+ } catch {
7869
+ }
7870
+ } else if (this.toolCallMeta.get(actualIndex)?.name && name && !chunk.trim()) {
7859
7871
  debugLogger3.debug(
7860
- `Ignoring replay chunk for completed toolCall id=${id}`
7872
+ `Ignoring replayed opener for no-argument toolCall id=${id}`
7861
7873
  );
7862
7874
  return { complete: false };
7863
- } catch {
7864
7875
  }
7865
7876
  }
7866
7877
  const meta = this.toolCallMeta.get(actualIndex);
@@ -7927,8 +7938,10 @@ var StreamingToolCallParser = class {
7927
7938
  * 2. Auto-close unclosed strings and retry
7928
7939
  * 3. Fallback to safeJsonParse for malformed data
7929
7940
  *
7930
- * Only returns tool calls with both name metadata and non-empty buffers.
7931
- * Should be called when streaming is complete (finish_reason is present).
7941
+ * Only returns tool calls with name metadata. An empty buffer yields
7942
+ * empty arguments ({}), matching the non-streaming path for no-argument
7943
+ * tools. Should be called when streaming is complete (finish_reason is
7944
+ * present).
7932
7945
  *
7933
7946
  * @returns Array of completed tool calls with their metadata and parsed arguments
7934
7947
  */
@@ -7937,7 +7950,7 @@ var StreamingToolCallParser = class {
7937
7950
  const emittedIds = /* @__PURE__ */ new Set();
7938
7951
  for (const [index, buffer] of this.buffers.entries()) {
7939
7952
  const meta = this.toolCallMeta.get(index);
7940
- if (meta?.name && buffer.trim()) {
7953
+ if (meta?.name) {
7941
7954
  if (meta.id) {
7942
7955
  if (emittedIds.has(meta.id)) {
7943
7956
  continue;
@@ -7945,19 +7958,31 @@ var StreamingToolCallParser = class {
7945
7958
  emittedIds.add(meta.id);
7946
7959
  }
7947
7960
  let args = {};
7948
- try {
7949
- args = JSON.parse(buffer);
7950
- } catch {
7951
- const inString = this.inStrings.get(index);
7952
- if (inString) {
7953
- try {
7954
- args = JSON.parse(buffer + '"');
7955
- } catch {
7961
+ if (buffer.trim()) {
7962
+ try {
7963
+ args = JSON.parse(buffer);
7964
+ } catch {
7965
+ const inString = this.inStrings.get(index);
7966
+ if (inString) {
7967
+ try {
7968
+ args = JSON.parse(buffer + '"');
7969
+ } catch {
7970
+ args = safeJsonParse(buffer, {});
7971
+ }
7972
+ } else {
7956
7973
  args = safeJsonParse(buffer, {});
7957
7974
  }
7958
- } else {
7959
- args = safeJsonParse(buffer, {});
7960
7975
  }
7976
+ if (typeof args !== "object" || args === null || Array.isArray(args)) {
7977
+ debugLogger3.debug(
7978
+ `Collapsing non-object arguments for tool call ${meta.name} (id=${meta.id}) at index ${index}; buffer likely polluted by a misrouted fragment`
7979
+ );
7980
+ args = {};
7981
+ }
7982
+ } else {
7983
+ debugLogger3.debug(
7984
+ `Emitting no-argument tool call ${meta.name} (id=${meta.id}) at index ${index} with empty buffer`
7985
+ );
7961
7986
  }
7962
7987
  completed.push({
7963
7988
  id: meta.id,
@@ -7973,8 +7998,9 @@ var StreamingToolCallParser = class {
7973
7998
  * Finds the next available index for a new tool call
7974
7999
  *
7975
8000
  * Scans indices starting from nextAvailableIndex to find one that's safe to use.
7976
- * Reuses indices with empty buffers or incomplete parsing states.
7977
- * Skips indices with complete, parseable tool call data to prevent overwriting.
8001
+ * Reuses indices never claimed by a named tool call or with incomplete
8002
+ * parsing states. Skips indices with complete tool call data including
8003
+ * no-argument calls with empty buffers — to prevent overwriting.
7978
8004
  *
7979
8005
  * @returns The next available index safe for storing a new tool call
7980
8006
  */
@@ -7983,17 +8009,15 @@ var StreamingToolCallParser = class {
7983
8009
  const buffer = this.buffers.get(this.nextAvailableIndex);
7984
8010
  const depth = this.depths.get(this.nextAvailableIndex);
7985
8011
  const meta = this.toolCallMeta.get(this.nextAvailableIndex);
7986
- if (!buffer.trim() || depth > 0 || !meta?.id) {
8012
+ if (!meta?.name || depth > 0 || !meta?.id) {
7987
8013
  return this.nextAvailableIndex;
7988
8014
  }
7989
- try {
7990
- JSON.parse(buffer);
7991
- if (depth === 0) {
7992
- this.nextAvailableIndex++;
7993
- continue;
8015
+ if (buffer.trim()) {
8016
+ try {
8017
+ JSON.parse(buffer);
8018
+ } catch {
8019
+ return this.nextAvailableIndex;
7994
8020
  }
7995
- } catch {
7996
- return this.nextAvailableIndex;
7997
8021
  }
7998
8022
  this.nextAvailableIndex++;
7999
8023
  }
@@ -8003,8 +8027,9 @@ var StreamingToolCallParser = class {
8003
8027
  * Finds the most recent incomplete tool call index
8004
8028
  *
8005
8029
  * Used when continuation chunks arrive without IDs. Scans existing tool calls
8006
- * to find the highest index with incomplete parsing state (depth > 0, empty buffer,
8007
- * or unparseable JSON). Falls back to creating a new index if none found.
8030
+ * to find the highest index with incomplete parsing state (depth > 0, empty
8031
+ * buffer with no name metadata yet, or unparseable JSON). Falls back to
8032
+ * creating a new index if none found.
8008
8033
  *
8009
8034
  * @returns The index of the most recent incomplete tool call, or a new available index
8010
8035
  */
@@ -8013,7 +8038,7 @@ var StreamingToolCallParser = class {
8013
8038
  for (const [index, buffer] of this.buffers.entries()) {
8014
8039
  const depth = this.depths.get(index);
8015
8040
  const meta = this.toolCallMeta.get(index);
8016
- if (meta?.id && (depth > 0 || !buffer.trim())) {
8041
+ if (meta?.id && (depth > 0 || !buffer.trim() && !meta?.name)) {
8017
8042
  maxIndex = Math.max(maxIndex, index);
8018
8043
  } else if (buffer.trim()) {
8019
8044
  try {
@@ -2,24 +2,24 @@
2
2
  "use strict";
3
3
  import {
4
4
  t
5
- } from "./chunk-BBKXTYL6.js";
5
+ } from "./chunk-2MJAXDFK.js";
6
6
  import {
7
7
  computeThresholds,
8
8
  getCoreSystemPrompt
9
- } from "./chunk-4VVDPKQ6.js";
9
+ } from "./chunk-ZWFS7YCB.js";
10
10
  import {
11
11
  buildSkillLlmContent
12
12
  } from "./chunk-NQKLOAVJ.js";
13
13
  import {
14
14
  DiscoveredMCPTool,
15
15
  uiTelemetryService
16
- } from "./chunk-FCCBH56M.js";
16
+ } from "./chunk-N33JAGJ7.js";
17
17
  import {
18
18
  ToolNames
19
19
  } from "./chunk-X3YGAX7V.js";
20
20
  import {
21
21
  DEFAULT_TOKEN_LIMIT
22
- } from "./chunk-6QXGBCAH.js";
22
+ } from "./chunk-HW4N45EE.js";
23
23
  import {
24
24
  init_esbuild_shims
25
25
  } from "./chunk-A4BMJM77.js";
@@ -90,7 +90,7 @@ async function collectContextData(config, showDetails) {
90
90
  const builtinTools = [];
91
91
  const mcpTools = [];
92
92
  for (const tool of allTools) {
93
- if (tool.shouldDefer && !tool.alwaysLoad && !toolRegistry?.isDeferredToolRevealed(tool.name)) {
93
+ if (toolRegistry?.isDeferredAndHidden(tool.name)) {
94
94
  continue;
95
95
  }
96
96
  const toolJsonStr = JSON.stringify(tool.schema);
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  runExitCleanup
5
- } from "./chunk-JZLDAWNW.js";
5
+ } from "./chunk-5IGNZP2J.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -21,6 +21,22 @@ import {
21
21
  init_esbuild_shims();
22
22
  import * as fs from "node:fs/promises";
23
23
  import * as path from "node:path";
24
+ var MAX_TASK_RUNS = 20;
25
+ function appendCronRun(runs, entry) {
26
+ const base = Array.isArray(runs) ? runs : [];
27
+ const next = [...base, entry];
28
+ return next.length > MAX_TASK_RUNS ? next.slice(next.length - MAX_TASK_RUNS) : next;
29
+ }
30
+ __name(appendCronRun, "appendCronRun");
31
+ function generateCronTaskId() {
32
+ const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
33
+ let id = "";
34
+ for (let i = 0; i < 8; i++) {
35
+ id += chars[Math.floor(Math.random() * chars.length)];
36
+ }
37
+ return id;
38
+ }
39
+ __name(generateCronTaskId, "generateCronTaskId");
24
40
  var TASKS_FILENAME = "scheduled_tasks.json";
25
41
  var CRON_TASKS_DISPLAY_PATH = `~/.qwen/tmp/<project-hash>/${TASKS_FILENAME}`;
26
42
  var UPDATE_LOCK_RETRY_MS = 15;
@@ -164,14 +180,33 @@ function isFiniteTimestamp(value) {
164
180
  return typeof value === "number" && Number.isFinite(value);
165
181
  }
166
182
  __name(isFiniteTimestamp, "isFiniteTimestamp");
183
+ function isValidRuns(value) {
184
+ if (!Array.isArray(value)) return false;
185
+ return value.every((entry) => {
186
+ if (typeof entry !== "object" || entry === null) return false;
187
+ const run = entry;
188
+ return isFiniteTimestamp(run["at"]) && (run["kind"] === void 0 || typeof run["kind"] === "string") && (run["sessionId"] === void 0 || typeof run["sessionId"] === "string");
189
+ });
190
+ }
191
+ __name(isValidRuns, "isValidRuns");
167
192
  function isValidTask(value) {
168
193
  if (typeof value !== "object" || value === null) return false;
169
194
  const obj = value;
170
- return typeof obj["id"] === "string" && typeof obj["cron"] === "string" && typeof obj["prompt"] === "string" && typeof obj["recurring"] === "boolean" && isFiniteTimestamp(obj["createdAt"]) && (obj["lastFiredAt"] === null || isFiniteTimestamp(obj["lastFiredAt"]));
195
+ return typeof obj["id"] === "string" && typeof obj["cron"] === "string" && typeof obj["prompt"] === "string" && typeof obj["recurring"] === "boolean" && isFiniteTimestamp(obj["createdAt"]) && (obj["lastFiredAt"] === null || isFiniteTimestamp(obj["lastFiredAt"])) && // Optional fields (added for the management UI): absent is valid and
196
+ // means "unnamed" / "enabled". Present-but-wrong-type routes through
197
+ // the same fix-or-delete contract as any other corrupt field rather
198
+ // than being silently coerced or dropped.
199
+ (obj["name"] === void 0 || typeof obj["name"] === "string") && (obj["enabled"] === void 0 || typeof obj["enabled"] === "boolean") && (obj["disabledByArchive"] === void 0 || typeof obj["disabledByArchive"] === "boolean") && // A bound sessionId must be a NON-EMPTY string: an empty string would pass
200
+ // a bare `typeof` check but the scheduler's truthy `task.sessionId` guard
201
+ // would treat it as unbound, so a "bound" task would silently run unbound.
202
+ (obj["sessionId"] === void 0 || typeof obj["sessionId"] === "string" && obj["sessionId"].length > 0) && (obj["runs"] === void 0 || isValidRuns(obj["runs"]));
171
203
  }
172
204
  __name(isValidTask, "isValidTask");
173
205
 
174
206
  export {
207
+ MAX_TASK_RUNS,
208
+ appendCronRun,
209
+ generateCronTaskId,
175
210
  CRON_TASKS_DISPLAY_PATH,
176
211
  getCronFilePath,
177
212
  readCronTasks,
@@ -1,31 +1,31 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import {
4
- noteInteraction
5
- } from "./chunk-MRO43B25.js";
6
3
  import {
7
4
  require_jsx_runtime,
8
5
  use_stdin_default,
9
6
  use_stdout_default
10
- } from "./chunk-654I2NBH.js";
7
+ } from "./chunk-MZWODTEA.js";
11
8
  import {
12
9
  require_react
13
10
  } from "./chunk-KYMBIKIW.js";
11
+ import {
12
+ noteInteraction
13
+ } from "./chunk-MRO43B25.js";
14
14
  import {
15
15
  sanitizeFilenameForDisplay
16
- } from "./chunk-RMIXI7TN.js";
16
+ } from "./chunk-7VCI24VZ.js";
17
17
  import {
18
18
  t
19
- } from "./chunk-BBKXTYL6.js";
19
+ } from "./chunk-2MJAXDFK.js";
20
20
  import {
21
21
  fetchGitDiff,
22
22
  findProviderByCredentials,
23
23
  resolveMetadataKey
24
- } from "./chunk-4VVDPKQ6.js";
24
+ } from "./chunk-ZWFS7YCB.js";
25
25
  import {
26
26
  KittySequenceOverflowEvent,
27
27
  logKittySequenceOverflow
28
- } from "./chunk-FCCBH56M.js";
28
+ } from "./chunk-N33JAGJ7.js";
29
29
  import {
30
30
  createDebugLogger
31
31
  } from "./chunk-22MNNNXE.js";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-MX2YXRER.js";
9
9
  import {
10
10
  loadSettings
11
- } from "./chunk-LH6D765T.js";
11
+ } from "./chunk-O6T7PBUM.js";
12
12
  import {
13
13
  DEFAULT_RING_SIZE
14
14
  } from "./chunk-G7ZG7CA6.js";
@@ -18,7 +18,7 @@ import {
18
18
  import {
19
19
  MCP_BUDGET_WARN_FRACTION,
20
20
  parsePositiveIntegerEnv
21
- } from "./chunk-4VVDPKQ6.js";
21
+ } from "./chunk-ZWFS7YCB.js";
22
22
  import {
23
23
  openBrowserSecurely,
24
24
  shouldLaunchBrowser
@@ -66,6 +66,10 @@ async function maybeOpenWebShellBrowser(handle, open) {
66
66
  }
67
67
  }
68
68
  __name(maybeOpenWebShellBrowser, "maybeOpenWebShellBrowser");
69
+ function primaryWorkspaceArg(workspace) {
70
+ return Array.isArray(workspace) ? workspace[0] : workspace;
71
+ }
72
+ __name(primaryWorkspaceArg, "primaryWorkspaceArg");
69
73
  var serveCommand = {
70
74
  command: "serve",
71
75
  describe: "Run Qwen Code as a local HTTP daemon (Stage 1 experimental: --http-bridge)",
@@ -90,6 +94,8 @@ var serveCommand = {
90
94
  description: "Per-session cap on accepted prompts waiting or running. New prompts beyond this return 503. Set to 0 to disable."
91
95
  }).option("workspace", {
92
96
  type: "string",
97
+ array: true,
98
+ requiresArg: true,
93
99
  description: "Absolute workspace path this daemon binds to. POST /session requests with a mismatched cwd return 400 workspace_mismatch. Defaults to process.cwd() when omitted. For multi-workspace deployments, run one `qwen serve` per workspace on separate ports (or behind an external orchestrator)."
94
100
  }).option("max-connections", {
95
101
  type: "number",
@@ -235,7 +241,9 @@ var serveCommand = {
235
241
  );
236
242
  }
237
243
  try {
238
- const loaded = loadSettings(argv.workspace ?? process.cwd());
244
+ const loaded = loadSettings(
245
+ primaryWorkspaceArg(argv.workspace) ?? process.cwd()
246
+ );
239
247
  const merged = loaded.merged;
240
248
  const approvalMode = merged.tools?.approvalMode;
241
249
  const sandbox = merged.tools?.sandbox;
@@ -279,7 +287,7 @@ var serveCommand = {
279
287
  process.exit(1);
280
288
  }
281
289
  }
282
- const { runQwenServe } = await import("./run-qwen-serve-CLVQV6WU.js");
290
+ const { runQwenServe } = await import("./run-qwen-serve-NQH6LQTH.js");
283
291
  try {
284
292
  const handle = await runQwenServe({
285
293
  port: argv.port,
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-EXPMGZZV.js";
6
6
  import {
7
7
  MissingCliEntryError
8
- } from "./chunk-AQOYX6KA.js";
8
+ } from "./chunk-7O6DD2ES.js";
9
9
  import {
10
10
  redactLogCredentials
11
11
  } from "./chunk-HLKG6CZN.js";