@qwen-code/qwen-code 0.21.8 → 0.21.9

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 (258) hide show
  1. package/README.md +2 -1
  2. package/bundled/qc-helper/docs/configuration/settings.md +32 -30
  3. package/bundled/qc-helper/docs/extension/introduction.md +15 -1
  4. package/bundled/qc-helper/docs/features/code-review.md +2 -0
  5. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
  6. package/bundled/qc-helper/docs/qwen-serve.md +42 -39
  7. package/bundled/review/SKILL.md +11 -7
  8. package/chunks/{MaxSizedBox-7PM6BGJ5.js → MaxSizedBox-6BZANW7X.js} +9 -9
  9. package/chunks/{StandaloneSessionPicker-3UQHM7GV.js → StandaloneSessionPicker-VDC5KE7T.js} +28 -25
  10. package/chunks/{acpAgent-5UWLFV6V.js → acpAgent-F2NSBCUF.js} +1433 -706
  11. package/chunks/{agent-624T2BLO.js → agent-VOHJOEBB.js} +8 -8
  12. package/chunks/{agent-headless-2EE5J2KX.js → agent-headless-J5NFOPHP.js} +8 -8
  13. package/chunks/{bridge-JENKGFFP.js → bridge-NQIZZLAS.js} +13 -13
  14. package/chunks/{channel-management-service-DDWUPHMU.js → channel-management-service-PHELKOW2.js} +4 -4
  15. package/chunks/{channel-settings-store-SA6JZSPH.js → channel-settings-store-VIY2OENO.js} +17 -15
  16. package/chunks/{channel-worker-group-E67EN3RV.js → channel-worker-group-MSHT6CWR.js} +6 -6
  17. package/chunks/{channel-worker-manager-SW4C45CF.js → channel-worker-manager-XXD3GDSK.js} +6 -6
  18. package/chunks/{channel-worker-supervisor-5SRD24FG.js → channel-worker-supervisor-IVSDIMI4.js} +4 -4
  19. package/chunks/{chunk-S3Y3GBFD.js → chunk-23VQTELM.js} +2 -2
  20. package/chunks/{chunk-XZKQT2B2.js → chunk-3WDYBTTI.js} +5 -5
  21. package/chunks/{chunk-YEF7XEO2.js → chunk-3XVDTHBJ.js} +3 -3
  22. package/chunks/{chunk-IBYULW65.js → chunk-46YJDYCU.js} +145 -10
  23. package/chunks/chunk-4JRM2BSM.js +48 -0
  24. package/chunks/{chunk-L4N6TIP7.js → chunk-4TRQPFDP.js} +4 -2
  25. package/chunks/{chunk-5ZGR6RKJ.js → chunk-4XQNB3KN.js} +3 -3
  26. package/chunks/chunk-5EJZE3FP.js +140 -0
  27. package/chunks/{chunk-XHD7CRP2.js → chunk-5RBDAGC6.js} +2 -2
  28. package/chunks/{chunk-KJZ26VBX.js → chunk-67EWJE77.js} +1 -1
  29. package/chunks/{chunk-TE3ZAJE7.js → chunk-6Q5ABMTU.js} +1 -1
  30. package/chunks/{chunk-U5SLIG7E.js → chunk-7AEPJGL4.js} +1 -1
  31. package/chunks/{chunk-OHKJVAKG.js → chunk-7GOYZQPR.js} +20 -1977
  32. package/chunks/{chunk-3SE7J4DR.js → chunk-7S4JBJLU.js} +3 -3
  33. package/chunks/{chunk-TKSZJ5BV.js → chunk-AKJQSWV4.js} +3 -3
  34. package/chunks/{chunk-E4ZBKMSF.js → chunk-ATMO54WE.js} +6 -6
  35. package/chunks/{chunk-KKDVZLGL.js → chunk-BAMN6XSD.js} +1 -1
  36. package/chunks/{chunk-IUQ52YJK.js → chunk-BIRWP6LU.js} +1 -1
  37. package/chunks/{chunk-AKA24BGO.js → chunk-BT6GQIEJ.js} +1 -1
  38. package/chunks/{chunk-ZCLLJARV.js → chunk-BZP4QPNK.js} +10 -10
  39. package/chunks/{chunk-2M5N3DHY.js → chunk-CMOBWHWW.js} +1 -1
  40. package/chunks/{chunk-WV5J6Q6N.js → chunk-D7BXVKSF.js} +1 -1
  41. package/chunks/{chunk-NLREQJFK.js → chunk-DA4HRSBW.js} +15 -0
  42. package/chunks/{chunk-GOEVOFQI.js → chunk-DH5YXSIF.js} +3 -3
  43. package/chunks/{chunk-DIWZNWZT.js → chunk-DX3RGJMS.js} +13 -2
  44. package/chunks/{chunk-PLFATELK.js → chunk-DZUO626D.js} +1 -1
  45. package/chunks/{chunk-NGYI5EF5.js → chunk-E2FPSSKP.js} +8 -8
  46. package/chunks/{chunk-ZPLALRXZ.js → chunk-FBMCDU63.js} +4 -137
  47. package/chunks/{chunk-2ILAOM2I.js → chunk-FCLHHEUK.js} +17 -16
  48. package/chunks/{chunk-SNRT2TJJ.js → chunk-G2TX5ZXC.js} +3 -3
  49. package/chunks/{chunk-C5VWPTGT.js → chunk-GAKGOXTC.js} +1 -1
  50. package/chunks/{chunk-QQWD7LZV.js → chunk-HADWBW5R.js} +4 -4
  51. package/chunks/{chunk-77QVBFCU.js → chunk-HZGBKOX3.js} +3 -3
  52. package/chunks/{chunk-RPWVIXDB.js → chunk-I5VM3SKY.js} +4 -4
  53. package/chunks/{chunk-7VUERJHS.js → chunk-II6G3EY6.js} +325 -104
  54. package/chunks/{chunk-FN6YXJOP.js → chunk-IOEZE2YT.js} +1 -1
  55. package/chunks/chunk-JUWS2Z5K.js +1995 -0
  56. package/chunks/{chunk-VXZ5HAOV.js → chunk-K4ADGWHU.js} +1 -1
  57. package/chunks/{chunk-YOM7DEGB.js → chunk-KSAFZ5TA.js} +2 -2
  58. package/chunks/{chunk-KAQCJO6Y.js → chunk-KTKYGS2P.js} +35 -9
  59. package/chunks/{chunk-GBDINRIL.js → chunk-KTQGGPGV.js} +3 -3
  60. package/chunks/{chunk-6M26GBKX.js → chunk-L2AFWWJE.js} +42 -3
  61. package/chunks/{chunk-QXVSWG66.js → chunk-LHEC5V6G.js} +2 -2
  62. package/chunks/{chunk-J26HHFI5.js → chunk-LP2QGNSP.js} +32 -2
  63. package/chunks/{chunk-HWX5HPUG.js → chunk-LZZLUCRS.js} +108 -11
  64. package/chunks/{chunk-KTJFU7RT.js → chunk-MFDYOYZZ.js} +2 -2
  65. package/chunks/{chunk-3WNQOYHQ.js → chunk-MHP476D3.js} +74 -31
  66. package/chunks/{chunk-Y4TETC74.js → chunk-MTCYGTWH.js} +4 -4
  67. package/chunks/{chunk-EN2TKTFH.js → chunk-NV3F44FL.js} +6 -2
  68. package/chunks/{chunk-BF52U4XJ.js → chunk-OGDIJKHK.js} +1 -1
  69. package/chunks/{chunk-7DVT4LVV.js → chunk-OGNFHGIG.js} +3 -3
  70. package/chunks/{chunk-IYES5WOT.js → chunk-P2FK2HBV.js} +2 -2
  71. package/chunks/{chunk-2M4K4KYS.js → chunk-P3RBMQ4P.js} +4 -4
  72. package/chunks/{chunk-FYAXKJK7.js → chunk-P4ZEZSJZ.js} +692 -106
  73. package/chunks/{chunk-UFALT4LK.js → chunk-PBRVUF5B.js} +1 -1
  74. package/chunks/{chunk-LKRMNRSN.js → chunk-PDPFQ2FO.js} +2 -0
  75. package/chunks/{chunk-6TR7CFXH.js → chunk-PNBBJOCP.js} +1 -1
  76. package/chunks/{chunk-M3STHEMM.js → chunk-PVOGHGSF.js} +5 -5
  77. package/chunks/{chunk-4WU6NY7F.js → chunk-QSNSL4R4.js} +2 -2
  78. package/chunks/{chunk-DQSDACD2.js → chunk-RBHQXGDK.js} +1 -1
  79. package/chunks/{chunk-ZHA242R4.js → chunk-RVSTTOJ4.js} +2 -2
  80. package/chunks/{chunk-EIVICVHM.js → chunk-SCAZZ3Q4.js} +4 -4
  81. package/chunks/{chunk-BF224XHL.js → chunk-T5RLUXWJ.js} +2 -2
  82. package/chunks/{chunk-B52AWKBB.js → chunk-T6HEQR2Q.js} +16 -5
  83. package/chunks/{chunk-FWBXMANW.js → chunk-THIKWITR.js} +3 -3
  84. package/chunks/{chunk-WG6542MA.js → chunk-TQCYNLNJ.js} +1 -1
  85. package/chunks/chunk-TQOF5KBL.js +71 -0
  86. package/chunks/{chunk-NPUXXRJI.js → chunk-TZ6KJ44L.js} +1 -1
  87. package/chunks/{chunk-YHJFF7KH.js → chunk-UJUM2SRN.js} +147 -47
  88. package/chunks/{chunk-4ALIARFY.js → chunk-UYAUA63Q.js} +1 -1
  89. package/chunks/chunk-VFMASYQA.js +389 -0
  90. package/chunks/chunk-VGHZT6JR.js +51 -0
  91. package/chunks/{chunk-ZWBUH5UP.js → chunk-VKJ4KTPJ.js} +1 -1
  92. package/chunks/{chunk-QGHSP65Z.js → chunk-VNNWAZSI.js} +2 -2
  93. package/chunks/{chunk-757GB46F.js → chunk-W3FSZSF2.js} +1 -1
  94. package/chunks/{chunk-GQCEQPYQ.js → chunk-WGK4TSB7.js} +3 -3
  95. package/chunks/{chunk-PG62DFWD.js → chunk-WP5VOXF7.js} +6 -127
  96. package/chunks/{chunk-NVRDQFCX.js → chunk-XTY5DN4Y.js} +1 -1
  97. package/chunks/{chunk-GXSNGY5M.js → chunk-XX7QFP34.js} +1677 -1307
  98. package/chunks/{chunk-3PY4LPJF.js → chunk-YGT2AUJ7.js} +84 -4
  99. package/chunks/{chunk-4DU3NCHG.js → chunk-YTFDX4PR.js} +8 -3
  100. package/chunks/{chunk-OA4JVLSA.js → chunk-Z7VOMGDC.js} +22 -1
  101. package/chunks/{chunk-DX5W5AON.js → chunk-ZBXGWQ4S.js} +3 -3
  102. package/chunks/chunk-ZLBIFIMV.js +1099 -0
  103. package/chunks/{chunk-HA3SAB64.js → chunk-ZOSTTOUJ.js} +1 -1
  104. package/chunks/{chunk-VWMUDKLC.js → chunk-ZTQSOV56.js} +4 -4
  105. package/chunks/{computer-use-ESQYJ3JY.js → computer-use-PMZ7ICGY.js} +8 -8
  106. package/chunks/{config-utils-XQHBJP7G.js → config-utils-ULCSRMWD.js} +4 -4
  107. package/chunks/{contextCommand-CX3YF4ZE.js → contextCommand-GEZU7YHE.js} +11 -10
  108. package/chunks/{core-runtime-DIAU7JMG.js → core-runtime-HRJI2MN6.js} +8 -8
  109. package/chunks/{create-sub-session-HDPD6HOA.js → create-sub-session-VBNVI4YU.js} +9 -9
  110. package/chunks/{daemon-VZBGJUNL.js → daemon-POSQPD3G.js} +115 -7
  111. package/chunks/{daemon-status-provider-H6O4UQ4F.js → daemon-status-provider-N4CRQKFI.js} +18 -18
  112. package/chunks/{daemon-trust-policy-BNUXG6MT.js → daemon-trust-policy-BHO3JUHM.js} +16 -14
  113. package/chunks/{daemon-trust-policy-monitor-E4EQ7GF4.js → daemon-trust-policy-monitor-YEKJ2726.js} +16 -14
  114. package/chunks/{deferred-core-runtime-CBMSHPAU.js → deferred-core-runtime-SH57E3J3.js} +8 -8
  115. package/chunks/{dist-KVISB2O2.js → dist-3NTTUAHT.js} +1 -1
  116. package/chunks/{dist-RCH3I7SS.js → dist-6BMOAE3Z.js} +2 -2
  117. package/chunks/{dist-IRL7WA5Z.js → dist-B2CGTW6T.js} +1 -1
  118. package/chunks/{dist-TUSWNE2I.js → dist-EWW3J4HQ.js} +1 -1
  119. package/chunks/{dist-HIACTZEK.js → dist-EZE3V3Q7.js} +1 -1
  120. package/chunks/{dist-EEEQGCZA.js → dist-J47AXBZC.js} +1 -1
  121. package/chunks/{dist-MKX5OSFF.js → dist-OTUO3AS2.js} +4 -1088
  122. package/chunks/{dist-MBF3I5MX.js → dist-Z3CS4OVP.js} +1 -1
  123. package/chunks/{earlyInputCapture-UIOP7OIN.js → earlyInputCapture-B2JJ2HME.js} +8 -8
  124. package/chunks/{edit-ITMZYFKA.js → edit-7FTXENAN.js} +10 -8
  125. package/chunks/{enter-worktree-S4PL5UV6.js → enter-worktree-JPHV2PBG.js} +8 -8
  126. package/chunks/{enterPlanMode-YV52NNJT.js → enterPlanMode-CGBJ3AHJ.js} +8 -8
  127. package/chunks/{environment-NGOWPRZV.js → environment-LXASZAHD.js} +11 -11
  128. package/chunks/{errors-BU26DTDX.js → errors-XIGVT2AD.js} +10 -10
  129. package/chunks/{exit-worktree-XRM6LH5F.js → exit-worktree-DKSGXW65.js} +8 -8
  130. package/chunks/{exitPlanMode-ZLI5F7KR.js → exitPlanMode-THFL2HYN.js} +8 -8
  131. package/chunks/{fast-path-UJWORIED.js → fast-path-4NXAT5UL.js} +4 -3
  132. package/chunks/{fast-path-settings-37WQD5B2.js → fast-path-settings-RPAVBD7P.js} +2 -2
  133. package/chunks/{gemini-ZSKNDUMU.js → gemini-B3N6FACU.js} +56 -60
  134. package/chunks/{geminiContentGenerator-YGEXOEKD.js → geminiContentGenerator-YYFE2HIE.js} +1 -1
  135. package/chunks/{glob-7KZG44BR.js → glob-BPHSCFJP.js} +8 -8
  136. package/chunks/{grep-6ZFC7RJ5.js → grep-ROZIRFLU.js} +8 -8
  137. package/chunks/{handleAutoUpdate-KSEL3TQS.js → handleAutoUpdate-WV6SPZQB.js} +13 -12
  138. package/chunks/{i18n-ZIUXBW5V.js → i18n-YWJWPQKD.js} +13 -11
  139. package/chunks/{image-gen-AUIZJJNK.js → image-gen-SISRZ6FS.js} +1 -1
  140. package/chunks/{initializer-7AHY3N6Q.js → initializer-66OAD6GO.js} +16 -14
  141. package/chunks/{installationInfo-VGBXMYLY.js → installationInfo-3YUGIP36.js} +9 -9
  142. package/chunks/{list-PSFKQHLB.js → list-VEYR66XB.js} +19 -17
  143. package/chunks/{loadedSettingsAdapter-FTMRCTOF.js → loadedSettingsAdapter-V2JCPCYD.js} +16 -14
  144. package/chunks/{loggingContentGenerator-MZAN52UV.js → loggingContentGenerator-RBLNDREC.js} +6 -6
  145. package/chunks/main-PXAUXNF2.js +8 -0
  146. package/chunks/{managed-npm-update-O4NHK45X.js → managed-npm-update-C5ID5R4R.js} +9 -9
  147. package/chunks/{mcp-6CFP2AYQ.js → mcp-OZ54NZJQ.js} +16 -14
  148. package/chunks/{monitor-DAKD6OU4.js → monitor-7Y4TVFTK.js} +18 -14
  149. package/chunks/{nonInteractiveCli-RC7VIUZL.js → nonInteractiveCli-QEK4LHAC.js} +51 -49
  150. package/chunks/{notebook-edit-474DPMRL.js → notebook-edit-OG35EBGY.js} +9 -8
  151. package/chunks/{openaiContentGenerator-2NFY2MWO.js → openaiContentGenerator-443BNRPJ.js} +5 -5
  152. package/chunks/{pidfile-KBFVDNQP.js → pidfile-ZK4OLRZA.js} +8 -8
  153. package/chunks/{processUtils-6GRYH4Y3.js → processUtils-4YGB4RUZ.js} +2 -2
  154. package/chunks/{qwenContentGenerator-KAHU6IZY.js → qwenContentGenerator-D5C2LCSZ.js} +9 -9
  155. package/chunks/{qwenOAuth2-RRQTCP4W.js → qwenOAuth2-Z4YQBMYN.js} +1 -1
  156. package/chunks/{read-file-3M6WXDXP.js → read-file-EXTJLWMU.js} +4 -4
  157. package/chunks/{resumeHistoryUtils-D6TAY3HX.js → resumeHistoryUtils-UPCGRJUL.js} +13 -12
  158. package/chunks/{ripGrep-PLPENT3E.js → ripGrep-QBVIRCU4.js} +8 -8
  159. package/chunks/{run-qwen-serve-ZAFIJKJC.js → run-qwen-serve-ZYGJNE3E.js} +169 -68
  160. package/chunks/{runtime-ZED7CYOZ.js → runtime-BZZ4LWCP.js} +21 -19
  161. package/chunks/{scheduler-MD3AL2W5.js → scheduler-YNQNOU2E.js} +135 -15
  162. package/chunks/{sdk-exporters-http-KHAB5JSD.js → sdk-exporters-http-XVTZQRCE.js} +2 -2
  163. package/chunks/{sdk-impl-KD7FSTC3.js → sdk-impl-7W7AKCS4.js} +7 -3
  164. package/chunks/{serve-E3VUDRZN.js → serve-LJHAXDCH.js} +18 -14
  165. package/chunks/{server-OWMEMAKR.js → server-ADMLELR6.js} +1229 -1098
  166. package/chunks/{session-HZ57QK7K.js → session-YKZXFFTM.js} +55 -53
  167. package/chunks/{settings-V7BR3RKP.js → settings-EQBUAQ7Y.js} +15 -13
  168. package/chunks/{shell-23OMNMW6.js → shell-3QZOJGTT.js} +8 -8
  169. package/chunks/{skill-6HBDYZRS.js → skill-UWSSMXE7.js} +5 -5
  170. package/chunks/{skill-settings-HWJLTU7M.js → skill-settings-T6MLB7NU.js} +15 -13
  171. package/chunks/{spawnChannel-N6KKUW5B.js → spawnChannel-VS7ZFUFP.js} +11 -11
  172. package/chunks/{standalone-update-QGIKHATD.js → standalone-update-2W26SRRO.js} +11 -10
  173. package/chunks/{startInteractiveUI-GX2CRL42.js → startInteractiveUI-CVS7K3D6.js} +86 -75
  174. package/chunks/{team-create-CFFKU7KL.js → team-create-4WFTNNUL.js} +8 -8
  175. package/chunks/{team-plan-approval-6EFOKR6A.js → team-plan-approval-DBYI33S3.js} +8 -8
  176. package/chunks/{terminal-image-renderer-TLDNACQY.js → terminal-image-renderer-S5WPPQKH.js} +8 -8
  177. package/chunks/{theme-manager-5LJ3H7VO.js → theme-manager-LI2RIOVR.js} +8 -8
  178. package/chunks/{tool-search-UJV3A24H.js → tool-search-4773EUQ4.js} +4 -4
  179. package/chunks/{total-session-admission-D63QYXGO.js → total-session-admission-PAY5CH2Z.js} +16 -15
  180. package/chunks/{trustedFolders-KZCOB53W.js → trustedFolders-FRSLE674.js} +9 -9
  181. package/chunks/{types-ML3TRJQ5.js → types-WYCFCEHR.js} +5 -3
  182. package/chunks/{update-relaunch-IFILM3SA.js → update-relaunch-ZSFQTU6M.js} +5 -5
  183. package/chunks/{updateCheck-YZ2CRCFC.js → updateCheck-AXWSO7KA.js} +12 -11
  184. package/chunks/{useAutoAcceptIndicator-AXEVNA3Q.js → useAutoAcceptIndicator-VHLXIA7U.js} +18 -16
  185. package/chunks/{validateNonInterActiveAuth-3WTOJFWA.js → validateNonInterActiveAuth-PDJECMFU.js} +48 -46
  186. package/chunks/{version-GXK7OHZY.js → version-RBN764QS.js} +1 -1
  187. package/chunks/{web-fetch-ILB4GAVR.js → web-fetch-7BJK42AF.js} +4 -4
  188. package/chunks/{web-search-HKRPGPZZ.js → web-search-L2CILQXV.js} +4 -3
  189. package/chunks/{workflow-FXIPRQQA.js → workflow-5VH2R74I.js} +170 -137
  190. package/chunks/{workspace-providers-status-NYHC7HSR.js → workspace-providers-status-OZTQ6JFH.js} +19 -17
  191. package/chunks/{workspace-registration-store-AKEB7OMW.js → workspace-registration-store-IX5RJQS5.js} +1 -1
  192. package/chunks/{workspace-registry-CDAS5TVZ.js → workspace-registry-73N4BGG4.js} +16 -15
  193. package/chunks/{workspace-service-PAMUKMAV.js → workspace-service-I5RUPSNV.js} +26 -22
  194. package/chunks/{workspace-skills-status-YQSHCCMS.js → workspace-skills-status-DMK6VYDO.js} +17 -15
  195. package/chunks/{workspace-trust-reconciler-RPTXOIY2.js → workspace-trust-reconciler-QX4RL3TC.js} +24 -21
  196. package/chunks/{write-file-CGS57TS4.js → write-file-UGDD5UTS.js} +8 -8
  197. package/chunks/{zoom-image-E7D72GYV.js → zoom-image-ZAHEO3YP.js} +4 -4
  198. package/cli.js +12 -12
  199. package/package.json +3 -3
  200. package/web-shell/assets/{arc-DybZaz32.js → arc-CHY4saMJ.js} +1 -1
  201. package/web-shell/assets/{architectureDiagram-3BPJPVTR-jN3qBd19.js → architectureDiagram-3BPJPVTR-Bu6CwvHj.js} +1 -1
  202. package/web-shell/assets/{blockDiagram-GPEHLZMM-Ct5DZPrj.js → blockDiagram-GPEHLZMM-XGt6iGf_.js} +1 -1
  203. package/web-shell/assets/{c4Diagram-AAUBKEIU-CUAFMlUG.js → c4Diagram-AAUBKEIU-CBbYl19W.js} +1 -1
  204. package/web-shell/assets/channel-B40srHOa.js +1 -0
  205. package/web-shell/assets/{chunk-2J33WTMH-CuV8n90B.js → chunk-2J33WTMH-BEhmVrdx.js} +1 -1
  206. package/web-shell/assets/{chunk-4BX2VUAB-BUzl_kls.js → chunk-4BX2VUAB-fQLyE0Bg.js} +1 -1
  207. package/web-shell/assets/{chunk-55IACEB6-BnDBLX6A.js → chunk-55IACEB6-yGdtyx4a.js} +1 -1
  208. package/web-shell/assets/{chunk-727SXJPM-B83uTOjm.js → chunk-727SXJPM-DYbX2GLo.js} +1 -1
  209. package/web-shell/assets/{chunk-AQP2D5EJ-DM3HLgpT.js → chunk-AQP2D5EJ-DyKTEsYn.js} +1 -1
  210. package/web-shell/assets/{chunk-FMBD7UC4-CSQ5hgyb.js → chunk-FMBD7UC4-D8Uy_GzX.js} +1 -1
  211. package/web-shell/assets/{chunk-ND2GUHAM-BWOF4SxX.js → chunk-ND2GUHAM-C8wNR2K7.js} +1 -1
  212. package/web-shell/assets/{chunk-QZHKN3VN-BsOH9LMi.js → chunk-QZHKN3VN-BnybNxnt.js} +1 -1
  213. package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +1 -0
  214. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +1 -0
  215. package/web-shell/assets/{cose-bilkent-S5V4N54A-IENqH2iJ.js → cose-bilkent-S5V4N54A-jq4uiFRp.js} +1 -1
  216. package/web-shell/assets/{dagre-BM42HDAG--dyzDTGo.js → dagre-BM42HDAG-Bs7oye1U.js} +1 -1
  217. package/web-shell/assets/{diagram-2AECGRRQ-BE7Dcqof.js → diagram-2AECGRRQ-BHGGJNyM.js} +1 -1
  218. package/web-shell/assets/{diagram-5GNKFQAL-Cr8-5OTj.js → diagram-5GNKFQAL-BJezVLGT.js} +1 -1
  219. package/web-shell/assets/{diagram-KO2AKTUF-Bzey3uAY.js → diagram-KO2AKTUF-5JzQN_rL.js} +1 -1
  220. package/web-shell/assets/{diagram-LMA3HP47-sErl28Xb.js → diagram-LMA3HP47-BlPYOgY9.js} +1 -1
  221. package/web-shell/assets/{diagram-OG6HWLK6-Dq30ATIo.js → diagram-OG6HWLK6-CtMHEaFK.js} +1 -1
  222. package/web-shell/assets/{erDiagram-TEJ5UH35-BkCoEfVW.js → erDiagram-TEJ5UH35-CRNdq2AB.js} +1 -1
  223. package/web-shell/assets/{flowDiagram-I6XJVG4X-DHwO0rrI.js → flowDiagram-I6XJVG4X-De1WwLzu.js} +1 -1
  224. package/web-shell/assets/{ganttDiagram-6RSMTGT7-s7vAPxWq.js → ganttDiagram-6RSMTGT7-YbWfL5Zn.js} +1 -1
  225. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CQxhwPOU.js → gitGraphDiagram-PVQCEYII-DzCN8bmd.js} +1 -1
  226. package/web-shell/assets/index-BDOGGGaN.css +5 -0
  227. package/web-shell/assets/{index-CF4wApWp.js → index-CocPvF9Q.js} +1 -1
  228. package/web-shell/assets/index-DSH2KrMc.js +1771 -0
  229. package/web-shell/assets/{infoDiagram-5YYISTIA-BnFrD0bq.js → infoDiagram-5YYISTIA-DLHoopnE.js} +1 -1
  230. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js → ishikawaDiagram-YF4QCWOH-XnbU04SS.js} +1 -1
  231. package/web-shell/assets/{journeyDiagram-JHISSGLW-CyGAhsxi.js → journeyDiagram-JHISSGLW-CipPyEeJ.js} +1 -1
  232. package/web-shell/assets/{kanban-definition-UN3LZRKU-CbsK5akB.js → kanban-definition-UN3LZRKU-DrSeyE5d.js} +1 -1
  233. package/web-shell/assets/{linear-cQsF4P8D.js → linear-LrBKnAo_.js} +1 -1
  234. package/web-shell/assets/{mermaid.core-Z4HVqrKY.js → mermaid.core-C3U9UVmf.js} +5 -5
  235. package/web-shell/assets/{mindmap-definition-RKZ34NQL-CYnrBo_f.js → mindmap-definition-RKZ34NQL-DqRWgC9H.js} +1 -1
  236. package/web-shell/assets/{pieDiagram-4H26LBE5-CBzOfhrs.js → pieDiagram-4H26LBE5-BNXY5p6H.js} +1 -1
  237. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D4LK1Ebn.js → quadrantDiagram-W4KKPZXB-Ccj9QzE4.js} +1 -1
  238. package/web-shell/assets/{requirementDiagram-4Y6WPE33-Bzti2Lcj.js → requirementDiagram-4Y6WPE33-CjPM2_gx.js} +1 -1
  239. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-yTBw5Z2s.js → sankeyDiagram-5OEKKPKP-C0RsvKbj.js} +1 -1
  240. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D07UVRiZ.js → sequenceDiagram-3UESZ5HK-ClN1P5z7.js} +1 -1
  241. package/web-shell/assets/{stateDiagram-AJRCARHV-UE_lHsTn.js → stateDiagram-AJRCARHV-By0eiB2Y.js} +1 -1
  242. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +1 -0
  243. package/web-shell/assets/{timeline-definition-PNZ67QCA-DRvYdiTs.js → timeline-definition-PNZ67QCA-g_iaSQgv.js} +1 -1
  244. package/web-shell/assets/{vennDiagram-CIIHVFJN-CQLIXs0u.js → vennDiagram-CIIHVFJN-y9ZqJ-TD.js} +1 -1
  245. package/web-shell/assets/{wardley-L42UT6IY-JZz_Xqse.js → wardley-L42UT6IY-BVVfaxpF.js} +1 -1
  246. package/web-shell/assets/{wardleyDiagram-YWT4CUSO--i7BiJwB.js → wardleyDiagram-YWT4CUSO-D3ooZKZT.js} +1 -1
  247. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Bkc-bW0S.js → xychartDiagram-2RQKCTM6-6GXrY6M1.js} +1 -1
  248. package/web-shell/index.html +2 -2
  249. package/chunks/chunk-RXFQM6FQ.js +0 -42
  250. package/chunks/chunk-UA5H3DS2.js +0 -203
  251. package/web-shell/assets/channel-BMwLrwLW.js +0 -1
  252. package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +0 -1
  253. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +0 -1
  254. package/web-shell/assets/index-Bckpjr-I.css +0 -5
  255. package/web-shell/assets/index-DwEr9HEW.js +0 -1768
  256. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +0 -1
  257. /package/chunks/{chunk-VXZBKKQR.js → chunk-NTTBXH7U.js} +0 -0
  258. /package/chunks/{chunk-GRC5HGPI.js → chunk-OIBUG24X.js} +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  toModelVisibleSubagentResult,
13
13
  writeWorkflowSnapshot,
14
14
  writeWorktreeSessionMarker
15
- } from "./chunk-GXSNGY5M.js";
15
+ } from "./chunk-XX7QFP34.js";
16
16
  import "./chunk-GOFAQQZA.js";
17
17
  import "./chunk-5M6IDOMF.js";
18
18
  import "./chunk-TWPJO254.js";
@@ -24,7 +24,7 @@ import "./chunk-7MH4J33A.js";
24
24
  import {
25
25
  parsePositiveIntegerEnv
26
26
  } from "./chunk-6PVPNMXU.js";
27
- import "./chunk-VXZ5HAOV.js";
27
+ import "./chunk-K4ADGWHU.js";
28
28
  import "./chunk-IRH27ZC2.js";
29
29
  import "./chunk-QHWCP53L.js";
30
30
  import "./chunk-GNPNYXJB.js";
@@ -42,8 +42,8 @@ import "./chunk-67N6HB5H.js";
42
42
  import {
43
43
  SUBAGENT_PLAN_LIFECYCLE_TOOLS
44
44
  } from "./chunk-WAUGQKUU.js";
45
- import "./chunk-PLFATELK.js";
46
- import "./chunk-L4N6TIP7.js";
45
+ import "./chunk-DZUO626D.js";
46
+ import "./chunk-4TRQPFDP.js";
47
47
  import "./chunk-SAH4BD2J.js";
48
48
  import {
49
49
  runWithAgentContext
@@ -77,7 +77,7 @@ import {
77
77
  logWorkflowRun,
78
78
  read,
79
79
  writeLine
80
- } from "./chunk-3PY4LPJF.js";
80
+ } from "./chunk-YGT2AUJ7.js";
81
81
  import "./chunk-WOJZWRAZ.js";
82
82
  import "./chunk-VGC4I5JJ.js";
83
83
  import "./chunk-FVKHVJZQ.js";
@@ -91,16 +91,16 @@ import {
91
91
  ToolDisplayNames,
92
92
  ToolNames
93
93
  } from "./chunk-PYQADEFD.js";
94
- import "./chunk-M3STHEMM.js";
94
+ import "./chunk-PVOGHGSF.js";
95
95
  import "./chunk-F6WFNA7U.js";
96
96
  import "./chunk-46UV252V.js";
97
97
  import "./chunk-ZBVS26BY.js";
98
98
  import "./chunk-KKBPOU75.js";
99
99
  import "./chunk-EUNWC2VS.js";
100
100
  import "./chunk-FOGU3LJX.js";
101
- import "./chunk-6M26GBKX.js";
101
+ import "./chunk-L2AFWWJE.js";
102
102
  import "./chunk-W4RQUHY3.js";
103
- import "./chunk-LKRMNRSN.js";
103
+ import "./chunk-PDPFQ2FO.js";
104
104
  import {
105
105
  createDebugLogger
106
106
  } from "./chunk-OIVKILPI.js";
@@ -120,95 +120,6 @@ import {
120
120
  // packages/core/src/tools/workflow/workflow.ts
121
121
  init_esbuild_shims();
122
122
 
123
- // packages/core/src/agents/runtime/workflow-budget.ts
124
- init_esbuild_shims();
125
- var debugLogger = createDebugLogger("WORKFLOW_BUDGET");
126
- var MAX_TOKENS_PER_WORKFLOW_ENV = "QWEN_CODE_MAX_TOKENS_PER_WORKFLOW";
127
- var HARD_MAX_TOKENS_CEILING = 1e8;
128
- function resolveMaxTokensPerWorkflow(env = process.env) {
129
- const raw = env[MAX_TOKENS_PER_WORKFLOW_ENV];
130
- if (raw === void 0 || raw.trim() === "") {
131
- return null;
132
- }
133
- const parsed = parsePositiveIntegerEnv(raw, 0);
134
- if (parsed < 1) {
135
- debugLogger.warn(
136
- `Invalid ${MAX_TOKENS_PER_WORKFLOW_ENV}=${JSON.stringify(raw)}, treating as unset (no cap)`
137
- );
138
- return null;
139
- }
140
- if (parsed > HARD_MAX_TOKENS_CEILING) {
141
- debugLogger.warn(
142
- `${MAX_TOKENS_PER_WORKFLOW_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_TOKENS_CEILING}); clamping.`
143
- );
144
- return HARD_MAX_TOKENS_CEILING;
145
- }
146
- return parsed;
147
- }
148
- __name(resolveMaxTokensPerWorkflow, "resolveMaxTokensPerWorkflow");
149
- var WorkflowBudgetImpl = class _WorkflowBudgetImpl {
150
- static {
151
- __name(this, "WorkflowBudgetImpl");
152
- }
153
- total;
154
- _spent;
155
- constructor(total) {
156
- this.total = total;
157
- this._spent = 0;
158
- }
159
- spent() {
160
- return this._spent;
161
- }
162
- remaining() {
163
- if (this.total === null) return Infinity;
164
- return Math.max(0, this.total - this._spent);
165
- }
166
- /**
167
- * Host-side increment. NOT exposed to the script — the
168
- * `WorkflowBudget` interface deliberately omits any setter so a
169
- * malicious workflow cannot inflate / deflate the budget. Only the
170
- * orchestrator (in `countedDispatch`) calls this after a dispatch
171
- * resolves with the agent's output token count.
172
- *
173
- * Non-positive deltas are silently dropped (some dispatches return
174
- * `output_tokens: 0` on early failures); negative deltas would be a
175
- * caller bug and are also dropped rather than silently rewinding
176
- * the counter.
177
- */
178
- recordSpent(deltaTokens) {
179
- if (!Number.isFinite(deltaTokens) || deltaTokens <= 0) return;
180
- this._spent += deltaTokens;
181
- }
182
- /**
183
- * Factory: build a budget from the current environment. Convenience
184
- * over `new WorkflowBudgetImpl(resolveMaxTokensPerWorkflow(env))`.
185
- */
186
- static fromEnv(env = process.env) {
187
- return new _WorkflowBudgetImpl(resolveMaxTokensPerWorkflow(env));
188
- }
189
- };
190
- var WorkflowBudgetExceededError = class extends Error {
191
- static {
192
- __name(this, "WorkflowBudgetExceededError");
193
- }
194
- name = "WorkflowBudgetExceededError";
195
- runId;
196
- budgetTotal;
197
- spent;
198
- constructor(runId, budgetTotal, spent) {
199
- super(
200
- `Workflow ${runId} exceeded the token budget (${spent} / ${budgetTotal} output tokens spent).`
201
- );
202
- this.runId = runId;
203
- this.budgetTotal = budgetTotal;
204
- this.spent = spent;
205
- }
206
- };
207
-
208
- // packages/core/src/agents/runtime/workflow-runner.ts
209
- init_esbuild_shims();
210
- import { randomBytes as randomBytes2 } from "node:crypto";
211
-
212
123
  // packages/core/src/agents/runtime/workflow-orchestrator.ts
213
124
  init_esbuild_shims();
214
125
  import { randomBytes } from "node:crypto";
@@ -394,7 +305,7 @@ function isRegexContext(source, i) {
394
305
  return /[{[(,;:=!&|?+\-*/%^~<>]/.test(prev);
395
306
  }
396
307
  __name(isRegexContext, "isRegexContext");
397
- var debugLogger2 = createDebugLogger("WORKFLOW");
308
+ var debugLogger = createDebugLogger("WORKFLOW");
398
309
  var MAX_LOG_LINES = 1e4;
399
310
  var MAX_PHASE_ENTRIES = 1e4;
400
311
  var ARGS_MAX_DEPTH = 64;
@@ -497,7 +408,7 @@ function createWorkflowSandbox(opts) {
497
408
  try {
498
409
  opts.emitter?.logAppended?.(line);
499
410
  } catch (e) {
500
- debugLogger2.warn("emitter.logAppended threw:", e);
411
+ debugLogger.warn("emitter.logAppended threw:", e);
501
412
  }
502
413
  } else if (logs.length === MAX_LOG_LINES) {
503
414
  logs.push(`[workflow log truncated at ${MAX_LOG_LINES} lines]`);
@@ -511,7 +422,7 @@ function createWorkflowSandbox(opts) {
511
422
  try {
512
423
  opts.emitter?.phaseStarted?.(t);
513
424
  } catch (e) {
514
- debugLogger2.warn("emitter.phaseStarted threw:", e);
425
+ debugLogger.warn("emitter.phaseStarted threw:", e);
515
426
  }
516
427
  } else if (phases.length === MAX_PHASE_ENTRIES) {
517
428
  phases.push(
@@ -545,7 +456,7 @@ function createWorkflowSandbox(opts) {
545
456
  // value" (this warn). Receives only primitive strings/numbers — the bridge
546
457
  // contract forbids host objects crossing back to the script.
547
458
  logRevivalFailure: /* @__PURE__ */ __name((idx, reason) => {
548
- debugLogger2.warn(
459
+ debugLogger.warn(
549
460
  `Workflow result revival failed at index ${idx}: ${reason}; slot set to null (non-JSON-serializable thunk return).`
550
461
  );
551
462
  }, "logRevivalFailure"),
@@ -1314,7 +1225,7 @@ function createWorkflowSandbox(opts) {
1314
1225
  mirroredEscapeKeys.add(key);
1315
1226
  safeLog("dispatch failed (rejection not handled): " + msg);
1316
1227
  } catch (e) {
1317
- debugLogger2.warn("adoptionEscapeHook failed:", e);
1228
+ debugLogger.warn("adoptionEscapeHook failed:", e);
1318
1229
  }
1319
1230
  }, "adoptionEscapeHook");
1320
1231
  let extractedMeta = null;
@@ -1388,6 +1299,91 @@ ${stripped}
1388
1299
  }
1389
1300
  __name(createWorkflowSandbox, "createWorkflowSandbox");
1390
1301
 
1302
+ // packages/core/src/agents/runtime/workflow-budget.ts
1303
+ init_esbuild_shims();
1304
+ var debugLogger2 = createDebugLogger("WORKFLOW_BUDGET");
1305
+ var MAX_TOKENS_PER_WORKFLOW_ENV = "QWEN_CODE_MAX_TOKENS_PER_WORKFLOW";
1306
+ var HARD_MAX_TOKENS_CEILING = 1e8;
1307
+ function resolveMaxTokensPerWorkflow(env = process.env) {
1308
+ const raw = env[MAX_TOKENS_PER_WORKFLOW_ENV];
1309
+ if (raw === void 0 || raw.trim() === "") {
1310
+ return null;
1311
+ }
1312
+ const parsed = parsePositiveIntegerEnv(raw, 0);
1313
+ if (parsed < 1) {
1314
+ debugLogger2.warn(
1315
+ `Invalid ${MAX_TOKENS_PER_WORKFLOW_ENV}=${JSON.stringify(raw)}, treating as unset (no cap)`
1316
+ );
1317
+ return null;
1318
+ }
1319
+ if (parsed > HARD_MAX_TOKENS_CEILING) {
1320
+ debugLogger2.warn(
1321
+ `${MAX_TOKENS_PER_WORKFLOW_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_TOKENS_CEILING}); clamping.`
1322
+ );
1323
+ return HARD_MAX_TOKENS_CEILING;
1324
+ }
1325
+ return parsed;
1326
+ }
1327
+ __name(resolveMaxTokensPerWorkflow, "resolveMaxTokensPerWorkflow");
1328
+ var WorkflowBudgetImpl = class _WorkflowBudgetImpl {
1329
+ static {
1330
+ __name(this, "WorkflowBudgetImpl");
1331
+ }
1332
+ total;
1333
+ _spent;
1334
+ constructor(total) {
1335
+ this.total = total;
1336
+ this._spent = 0;
1337
+ }
1338
+ spent() {
1339
+ return this._spent;
1340
+ }
1341
+ remaining() {
1342
+ if (this.total === null) return Infinity;
1343
+ return Math.max(0, this.total - this._spent);
1344
+ }
1345
+ /**
1346
+ * Host-side increment. NOT exposed to the script — the
1347
+ * `WorkflowBudget` interface deliberately omits any setter so a
1348
+ * malicious workflow cannot inflate / deflate the budget. Only the
1349
+ * orchestrator (in `countedDispatch`) calls this after a dispatch
1350
+ * resolves with the agent's output token count.
1351
+ *
1352
+ * Non-positive deltas are silently dropped (some dispatches return
1353
+ * `output_tokens: 0` on early failures); negative deltas would be a
1354
+ * caller bug and are also dropped rather than silently rewinding
1355
+ * the counter.
1356
+ */
1357
+ recordSpent(deltaTokens) {
1358
+ if (!Number.isFinite(deltaTokens) || deltaTokens <= 0) return;
1359
+ this._spent += deltaTokens;
1360
+ }
1361
+ /**
1362
+ * Factory: build a budget from the current environment. Convenience
1363
+ * over `new WorkflowBudgetImpl(resolveMaxTokensPerWorkflow(env))`.
1364
+ */
1365
+ static fromEnv(env = process.env) {
1366
+ return new _WorkflowBudgetImpl(resolveMaxTokensPerWorkflow(env));
1367
+ }
1368
+ };
1369
+ var WorkflowBudgetExceededError = class extends Error {
1370
+ static {
1371
+ __name(this, "WorkflowBudgetExceededError");
1372
+ }
1373
+ name = "WorkflowBudgetExceededError";
1374
+ runId;
1375
+ budgetTotal;
1376
+ spent;
1377
+ constructor(runId, budgetTotal, spent) {
1378
+ super(
1379
+ `Workflow ${runId} exceeded the token budget (${spent} / ${budgetTotal} output tokens spent).`
1380
+ );
1381
+ this.runId = runId;
1382
+ this.budgetTotal = budgetTotal;
1383
+ this.spent = spent;
1384
+ }
1385
+ };
1386
+
1391
1387
  // packages/core/src/agents/runtime/workflow-stall.ts
1392
1388
  init_esbuild_shims();
1393
1389
  var DEFAULT_STALL_MS = 6e4;
@@ -1747,13 +1743,13 @@ function resolveMaxAgentsPerRun(env = process.env) {
1747
1743
  }
1748
1744
  const parsed = parsePositiveIntegerEnv(raw, 0);
1749
1745
  if (parsed < 1) {
1750
- debugLogger2.warn(
1746
+ debugLogger.warn(
1751
1747
  `Invalid ${MAX_WORKFLOW_AGENTS_ENV}=${JSON.stringify(raw)}, using default (${DEFAULT_MAX_AGENTS_PER_RUN})`
1752
1748
  );
1753
1749
  return DEFAULT_MAX_AGENTS_PER_RUN;
1754
1750
  }
1755
1751
  if (parsed > HARD_MAX_AGENTS_PER_RUN_CEILING) {
1756
- debugLogger2.warn(
1752
+ debugLogger.warn(
1757
1753
  `${MAX_WORKFLOW_AGENTS_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_AGENTS_PER_RUN_CEILING}); clamping.`
1758
1754
  );
1759
1755
  return HARD_MAX_AGENTS_PER_RUN_CEILING;
@@ -1769,14 +1765,14 @@ function resolveConcurrencyLimit(env = process.env) {
1769
1765
  const parsed = parsePositiveIntegerEnv(raw, 0);
1770
1766
  if (parsed >= 1) {
1771
1767
  if (parsed > HARD_MAX_CONCURRENCY_CEILING) {
1772
- debugLogger2.warn(
1768
+ debugLogger.warn(
1773
1769
  `${MAX_WORKFLOW_CONCURRENCY_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_CONCURRENCY_CEILING}); clamping.`
1774
1770
  );
1775
1771
  return HARD_MAX_CONCURRENCY_CEILING;
1776
1772
  }
1777
1773
  return parsed;
1778
1774
  }
1779
- debugLogger2.warn(
1775
+ debugLogger.warn(
1780
1776
  `Invalid ${MAX_WORKFLOW_CONCURRENCY_ENV}=${JSON.stringify(raw)}, using cpu-derived default`
1781
1777
  );
1782
1778
  }
@@ -1849,11 +1845,11 @@ function createProductionDispatch(config, signal, onTokens, bridgeApprovalEvents
1849
1845
  }
1850
1846
  __name(createProductionDispatch, "createProductionDispatch");
1851
1847
  async function runSingleDispatch(config, prompt, opts, attemptSignal, emitter, onTokens) {
1852
- const { AgentHeadless, ContextState } = await import("./agent-headless-2EE5J2KX.js");
1848
+ const { AgentHeadless, ContextState } = await import("./agent-headless-J5NFOPHP.js");
1853
1849
  const ctx = new ContextState();
1854
1850
  ctx.set("task_prompt", prompt);
1855
1851
  const workflowAgentId = `workflow-agent-${randomBytes(8).toString("hex")}`;
1856
- debugLogger2.debug(`[workflow] Dispatch ${workflowAgentId}`);
1852
+ debugLogger.debug(`[workflow] Dispatch ${workflowAgentId}`);
1857
1853
  if (opts.agentType === void 0 && opts.model === void 0 && opts.isolation === void 0 && opts.schema === void 0) {
1858
1854
  const subagent = await AgentHeadless.create(
1859
1855
  opts.label ?? "workflow-agent",
@@ -1911,7 +1907,7 @@ function reportTokens(subagent, opts, onTokens) {
1911
1907
  const summary = subagent.getExecutionSummary();
1912
1908
  onTokens(summary.outputTokens, opts);
1913
1909
  } catch (e) {
1914
- debugLogger2.warn("onTokens callback threw:", e);
1910
+ debugLogger.warn("onTokens callback threw:", e);
1915
1911
  }
1916
1912
  }
1917
1913
  __name(reportTokens, "reportTokens");
@@ -2030,7 +2026,7 @@ ${WORKFLOW_SUBAGENT_SYSTEM_PROMPT_WITH_SCHEMA}` : WORKFLOW_SUBAGENT_SYSTEM_PROMP
2030
2026
  worktreeIsolation = null;
2031
2027
  const preserved = await cleanupWorkflowWorktree(isolation);
2032
2028
  if (preserved) {
2033
- debugLogger2.info(
2029
+ debugLogger.info(
2034
2030
  `[Workflow] Schema-mode subagent preserved worktree at ${preserved.path ?? "(directory removed)"} on branch ${preserved.branch}. The structured payload is returned verbatim; recover the work from the preserved path / branch.`
2035
2031
  );
2036
2032
  }
@@ -2085,7 +2081,7 @@ ${WORKFLOW_SUBAGENT_SYSTEM_PROMPT_WITH_SCHEMA}` : WORKFLOW_SUBAGENT_SYSTEM_PROMP
2085
2081
  try {
2086
2082
  await cleanupWorkflowWorktree(worktreeIsolation);
2087
2083
  } catch (error) {
2088
- debugLogger2.warn(
2084
+ debugLogger.warn(
2089
2085
  `Workflow worktree cleanup in fallback finally failed for ${worktreeIsolation.path}: ${error instanceof Error ? error.message : String(error)}`
2090
2086
  );
2091
2087
  }
@@ -2118,7 +2114,7 @@ async function provisionWorkflowWorktree(config) {
2118
2114
  try {
2119
2115
  parentDirty = await wtService.hasWorktreeChanges(projectRoot);
2120
2116
  } catch (error) {
2121
- debugLogger2.warn(
2117
+ debugLogger.warn(
2122
2118
  `[Workflow] hasWorktreeChanges failed at ${projectRoot}: ${error}`
2123
2119
  );
2124
2120
  parentDirty = true;
@@ -2133,7 +2129,7 @@ async function provisionWorkflowWorktree(config) {
2133
2129
  try {
2134
2130
  parentBranch = await wtService.getCurrentBranch();
2135
2131
  } catch (error) {
2136
- debugLogger2.warn(
2132
+ debugLogger.warn(
2137
2133
  `[Workflow] getCurrentBranch failed at ${projectRoot}: ${error}`
2138
2134
  );
2139
2135
  }
@@ -2151,7 +2147,7 @@ async function provisionWorkflowWorktree(config) {
2151
2147
  config.getSessionId()
2152
2148
  );
2153
2149
  } catch (error) {
2154
- debugLogger2.warn(
2150
+ debugLogger.warn(
2155
2151
  `[Workflow] failed to write session marker at ${created.worktree.path}: ${error}`
2156
2152
  );
2157
2153
  }
@@ -2184,20 +2180,20 @@ async function cleanupWorkflowWorktree(isolation) {
2184
2180
  const wtService = new GitWorktreeService(isolation.repoRoot);
2185
2181
  const [hasChanges, hasUnmerged] = await Promise.all([
2186
2182
  wtService.hasWorktreeChanges(isolation.path).catch((error) => {
2187
- debugLogger2.warn(
2183
+ debugLogger.warn(
2188
2184
  `[Workflow] hasWorktreeChanges failed for ${isolation.path}: ${error}`
2189
2185
  );
2190
2186
  return true;
2191
2187
  }),
2192
2188
  wtService.hasUnmergedWorktreeCommits(isolation.slug).catch((error) => {
2193
- debugLogger2.warn(
2189
+ debugLogger.warn(
2194
2190
  `[Workflow] hasUnmergedWorktreeCommits failed for ${isolation.slug}: ${error}`
2195
2191
  );
2196
2192
  return true;
2197
2193
  })
2198
2194
  ]);
2199
2195
  if (hasChanges || hasUnmerged) {
2200
- debugLogger2.info(
2196
+ debugLogger.info(
2201
2197
  `[Workflow] Preserving isolation worktree ${isolation.path} (branch ${isolation.branch}, hasChanges=${hasChanges}, hasUnmerged=${hasUnmerged})`
2202
2198
  );
2203
2199
  return { path: isolation.path, branch: isolation.branch };
@@ -2207,19 +2203,19 @@ async function cleanupWorkflowWorktree(isolation) {
2207
2203
  deleteBranch: true
2208
2204
  });
2209
2205
  if (!result.success) {
2210
- debugLogger2.warn(
2206
+ debugLogger.warn(
2211
2207
  `[Workflow] Failed to remove ephemeral worktree ${isolation.path}: ${result.error}`
2212
2208
  );
2213
2209
  return { path: isolation.path, branch: isolation.branch };
2214
2210
  }
2215
2211
  if (result.branchPreserved) {
2216
- debugLogger2.warn(
2212
+ debugLogger.warn(
2217
2213
  `[Workflow] Removed worktree directory ${isolation.path} but kept branch ${isolation.branch} (unmerged commits at delete time)`
2218
2214
  );
2219
2215
  return { branch: isolation.branch };
2220
2216
  }
2221
2217
  } catch (error) {
2222
- debugLogger2.warn(
2218
+ debugLogger.warn(
2223
2219
  `[Workflow] Failed to remove ephemeral worktree ${isolation.path}: ${error}`
2224
2220
  );
2225
2221
  return { path: isolation.path, branch: isolation.branch };
@@ -2315,7 +2311,7 @@ var WorkflowOrchestrator = class {
2315
2311
  if (cached !== void 0) {
2316
2312
  const respawns = replay.started.get(journalKey);
2317
2313
  if (respawns && respawns.length > 0) {
2318
- debugLogger2.info(
2314
+ debugLogger.info(
2319
2315
  `[Workflow] resume cache hit after ${respawns.length} prior respawn(s) for runId=${runId}.`
2320
2316
  );
2321
2317
  }
@@ -2323,12 +2319,12 @@ var WorkflowOrchestrator = class {
2323
2319
  try {
2324
2320
  emitter?.agentDispatched?.(label2);
2325
2321
  } catch (e) {
2326
- debugLogger2.warn("emitter.agentDispatched threw:", e);
2322
+ debugLogger.warn("emitter.agentDispatched threw:", e);
2327
2323
  }
2328
2324
  try {
2329
2325
  emitter?.agentCompleted?.(label2);
2330
2326
  } catch (e) {
2331
- debugLogger2.warn("emitter.agentCompleted threw:", e);
2327
+ debugLogger.warn("emitter.agentCompleted threw:", e);
2332
2328
  }
2333
2329
  return scheduler.waitUntilRunning().then(
2334
2330
  () => cached.result,
@@ -2339,11 +2335,11 @@ var WorkflowOrchestrator = class {
2339
2335
  hadMiss = true;
2340
2336
  journalEntryId = String(journalAgentId += 1);
2341
2337
  journal.append({ type: "started", key: journalKey, agentId: journalEntryId }).catch(
2342
- (e) => debugLogger2.warn(`journal started-append failed: ${e}`)
2338
+ (e) => debugLogger.warn(`journal started-append failed: ${e}`)
2343
2339
  );
2344
2340
  }
2345
2341
  if (budget && budget.total !== null && budget.remaining() <= 0) {
2346
- debugLogger2.warn(
2342
+ debugLogger.warn(
2347
2343
  `[Workflow] budget gate refused dispatch at entry: runId=${runId} spent=${budget.spent()} total=${budget.total}`
2348
2344
  );
2349
2345
  return rejectThroughPauseGate(
@@ -2362,7 +2358,7 @@ var WorkflowOrchestrator = class {
2362
2358
  try {
2363
2359
  emitter?.agentDispatched?.(label);
2364
2360
  } catch (e) {
2365
- debugLogger2.warn("emitter.agentDispatched threw:", e);
2361
+ debugLogger.warn("emitter.agentDispatched threw:", e);
2366
2362
  }
2367
2363
  let completionEmitted = false;
2368
2364
  const emitCompletion = /* @__PURE__ */ __name((error) => {
@@ -2372,13 +2368,13 @@ var WorkflowOrchestrator = class {
2372
2368
  try {
2373
2369
  emitter?.agentCompleted?.(label, message);
2374
2370
  } catch (e) {
2375
- debugLogger2.warn("emitter.agentCompleted threw:", e);
2371
+ debugLogger.warn("emitter.agentCompleted threw:", e);
2376
2372
  }
2377
2373
  }, "emitCompletion");
2378
2374
  return scheduler.run(async () => {
2379
2375
  try {
2380
2376
  if (budget && budget.total !== null && budget.remaining() <= 0) {
2381
- debugLogger2.warn(
2377
+ debugLogger.warn(
2382
2378
  `[Workflow] budget gate refused dispatch at slot-acquire: runId=${runId} spent=${budget.spent()} total=${budget.total}`
2383
2379
  );
2384
2380
  throw new WorkflowBudgetExceededError(
@@ -2396,14 +2392,14 @@ var WorkflowOrchestrator = class {
2396
2392
  agentId: journalEntryId ?? "",
2397
2393
  result
2398
2394
  }).catch(
2399
- (e) => debugLogger2.warn(`journal result-append failed: ${e}`)
2395
+ (e) => debugLogger.warn(`journal result-append failed: ${e}`)
2400
2396
  );
2401
2397
  }
2402
2398
  if (budget) {
2403
2399
  try {
2404
2400
  emitter?.budgetUpdated?.(budget.spent(), budget.total);
2405
2401
  } catch (e) {
2406
- debugLogger2.warn("emitter.budgetUpdated threw:", e);
2402
+ debugLogger.warn("emitter.budgetUpdated threw:", e);
2407
2403
  }
2408
2404
  }
2409
2405
  return result;
@@ -2413,7 +2409,7 @@ var WorkflowOrchestrator = class {
2413
2409
  try {
2414
2410
  emitter?.budgetUpdated?.(budget.spent(), budget.total);
2415
2411
  } catch (e) {
2416
- debugLogger2.warn("emitter.budgetUpdated threw:", e);
2412
+ debugLogger.warn("emitter.budgetUpdated threw:", e);
2417
2413
  }
2418
2414
  }
2419
2415
  throw err;
@@ -2514,14 +2510,14 @@ async function settleToNullArray(thunks, signal, kind = "parallel") {
2514
2510
  if (reason?.name === "WorkflowBudgetExceededError") {
2515
2511
  budgetDropped += 1;
2516
2512
  } else {
2517
- debugLogger2.warn(
2513
+ debugLogger.warn(
2518
2514
  `Workflow thunk at index ${i} rejected: ${String(reason?.message ?? r.reason)}`
2519
2515
  );
2520
2516
  }
2521
2517
  return null;
2522
2518
  });
2523
2519
  if (budgetDropped > 0) {
2524
- debugLogger2.warn(
2520
+ debugLogger.warn(
2525
2521
  `${kind}: ${budgetDropped} slot${budgetDropped === 1 ? "" : "s"} dropped \u2014 token budget exceeded.`
2526
2522
  );
2527
2523
  }
@@ -2595,6 +2591,8 @@ function extractErrorMessage(err) {
2595
2591
  __name(extractErrorMessage, "extractErrorMessage");
2596
2592
 
2597
2593
  // packages/core/src/agents/runtime/workflow-runner.ts
2594
+ init_esbuild_shims();
2595
+ import { randomBytes as randomBytes2 } from "node:crypto";
2598
2596
  var WorkflowRunHandle = class {
2599
2597
  constructor(runId, budget, registry, controller, scheduler, start) {
2600
2598
  this.runId = runId;
@@ -2788,7 +2786,7 @@ var WORKFLOW_PARAM_SCHEMA = {
2788
2786
  properties: {
2789
2787
  script: {
2790
2788
  type: "string",
2791
- description: "JavaScript source of the workflow. Wrapped as an async IIFE. May call the injected globals `phase(title)`, `log(msg)`, `agent(prompt, opts?)`, and read `args`. agent() opts: `{ label?, phase?, schema?, model?, agentType?, isolation? }`. `schema` (JSON Schema object): the subagent must deliver its result by calling `structured_output` with arguments matching the schema; agent() resolves to the validated object. Two failed attempts produce a terminal error \"subagent completed without calling StructuredOutput (after 2 in-conversation nudges)\". `agentType` (string): resolves against the declarative-agents registry (`.qwen/agents/<name>.md`, project then user then built-in). Unresolved names throw \"agent({agentType}): agent type 'X' not found\". `model` (string): per-call model override; routes provider correctly via the subagent runtime view. `isolation`: `'worktree'` provisions a fresh git worktree under `<projectRoot>/.qwen/worktrees/agent-<7hex>`; the worktree is auto-removed if no changes, otherwise the path and branch are returned alongside the result. `'remote'` throws \"agent({isolation:'remote'}) is not available in this build\" (parity with upstream). isolation=worktree refuses to run when the parent working tree has uncommitted changes (the subagent would see a stale HEAD). Workflow subagents always have SendMessage / Monitor / EnterPlanMode / ExitPlanMode in their disallowed-tool floor regardless of agentType. Concurrency: `parallel([() => agent(...), ...])` runs thunks through a shared per-run window (default `max(1, min(16, cpus-2))` agents in flight; override via `QWEN_CODE_MAX_WORKFLOW_CONCURRENCY`) and resolves to a position-aligned array \u2014 a thunk that throws, or resolves to a non-JSON-serializable value, becomes `null` at its index (errors-as-data); parallel() itself rejects only on invalid arguments or abort. `pipeline(items, ...stages)` runs each item through the stages (staggered, no inter-stage barrier); a stage that throws, returns `null`, or returns a non-JSON-serializable value drops that item to `null`. Pass THUNKS to parallel, not eager calls: `parallel([() => agent(...)])`, not `parallel([agent(...)])`. At most 1000 agent() calls per run (override via `QWEN_CODE_MAX_WORKFLOW_AGENTS`). `Date.now()` and `Math.random()` both throw \u2014 workflow scripts must be deterministic for resume. `export const meta = {...}` declarations are stripped before execution."
2789
+ description: `JavaScript source of the workflow. Wrapped as an async IIFE. May call the injected globals \`phase(title)\`, \`log(msg)\`, \`agent(prompt, opts?)\`, and read \`args\`. agent() opts: \`{ label?, phase?, schema?, model?, agentType?, isolation? }\`. \`schema\` (JSON Schema object): the subagent must deliver its result by calling \`structured_output\` with arguments matching the schema; agent() resolves to the validated object. Two failed attempts produce a terminal error "subagent completed without calling StructuredOutput (after 2 in-conversation nudges)". \`agentType\` (string): resolves against the declarative-agents registry (\`.qwen/agents/<name>.md\`, project then user then built-in). Unresolved names throw "agent({agentType}): agent type 'X' not found". \`model\` (string): per-call model override; routes provider correctly via the subagent runtime view. \`isolation\`: \`'worktree'\` provisions a fresh git worktree under \`<projectRoot>/.qwen/worktrees/agent-<7hex>\`; the worktree is auto-removed if no changes, otherwise the path and branch are returned alongside the result. \`'remote'\` throws "agent({isolation:'remote'}) is not available in this build" (parity with upstream). isolation=worktree refuses to run when the parent working tree has uncommitted changes (the subagent would see a stale HEAD). Workflow subagents always have SendMessage / Monitor / EnterPlanMode / ExitPlanMode in their disallowed-tool floor regardless of agentType. Concurrency: \`parallel([() => agent(...), ...])\` runs thunks through a shared per-run window (default \`max(1, min(16, cpus-2))\` agents in flight; override via \`${MAX_WORKFLOW_CONCURRENCY_ENV}\`) and resolves to a position-aligned array \u2014 a thunk that throws, or resolves to a non-JSON-serializable value, becomes \`null\` at its index (errors-as-data); parallel() itself rejects only on invalid arguments or abort. \`pipeline(items, ...stages)\` runs each item through the stages (staggered, no inter-stage barrier); a stage that throws, returns \`null\`, or returns a non-JSON-serializable value drops that item to \`null\`. Pass THUNKS to parallel, not eager calls: \`parallel([() => agent(...)])\`, not \`parallel([agent(...)])\`. At most ${DEFAULT_MAX_AGENTS_PER_RUN} agent() calls per run (override via \`${MAX_WORKFLOW_AGENTS_ENV}\`). \`Date.now()\` and \`Math.random()\` both throw \u2014 workflow scripts must be deterministic for resume. \`export const meta = {...}\` declarations are stripped before execution.`
2792
2790
  },
2793
2791
  scriptPath: {
2794
2792
  type: "string",
@@ -3017,12 +3015,47 @@ function safeStringifyDisplayPayload(payload) {
3017
3015
  }
3018
3016
  }
3019
3017
  __name(safeStringifyDisplayPayload, "safeStringifyDisplayPayload");
3018
+ var WORKFLOW_TOOL_DESCRIPTION = `Execute a workflow script that orchestrates subagents deterministically.
3019
+
3020
+ **What a workflow is for**
3021
+
3022
+ Reach for one to be comprehensive (decompose the work and cover every part in parallel), to be confident (independent perspectives and adversarial checks before an answer is committed to), or to take on scale a single context cannot hold \u2014 migrations, audits, broad sweeps. The script is where that structure is encoded: what fans out, what verifies, what synthesizes. Parallelism on its own is not a reason; work that is already one short sequence of edits belongs in the main loop.
3023
+
3024
+ **Runtime** \u2014 see the \`script\` parameter for the detailed authoring contract.
3025
+
3026
+ \`phase(title)\`, \`log(msg)\`, \`agent(prompt, opts?)\`, \`parallel(thunks)\`, \`pipeline(items, ...stages)\`, \`workflow(nameOrRef, args?)\`, plus the \`args\` and \`budget\` globals. \`workflow()\` runs a saved workflow inline under this run's caps and nests one level only \u2014 a workflow reached through \`workflow()\` cannot call \`workflow()\` itself, and doing so throws. Saved workflows are \`<name>.js\` files under \`<projectRoot>/.qwen/workflows\` (project scope, also surfaced as \`/<name>\` slash commands) or \`~/.qwen/workflows\` (user scope, lower precedence when both define the same name); \`workflow('<name>')\` resolves against those two directories, while \`scriptPath\` takes an absolute path to a script anywhere. Default \`max(1, min(16, cpus-2))\` agents in flight per run (\`${MAX_WORKFLOW_CONCURRENCY_ENV}\`), up to ${DEFAULT_MAX_AGENTS_PER_RUN} agents total (\`${MAX_WORKFLOW_AGENTS_ENV}\`), under a 30-minute wall-clock cap per run (\`QWEN_CODE_MAX_WORKFLOW_SECONDS\`) \u2014 a fan-out near the agent cap will not fit inside the default cap. A per-run output-token cap may also be in effect: read \`budget.total\` (\`null\` = uncapped) before committing to a large fan-out, because once the cap is reached every further \`agent()\` call is refused \u2014 a bare sequential \`await agent()\` sees the rejection, while inside \`parallel()\`/\`pipeline()\` the refused slot becomes \`null\` and the script keeps running on partial results. Per-call \`agent({ schema, agentType, model, isolation: 'worktree' })\` covers structured-output contracts, declarative-agent selection, model override, and git-worktree-isolated subagents. \`resumeFromRunId\` resumes a prior run \u2014 agent() calls whose rolling prefix-hash matches the journal are served from cache for the longest unchanged prefix. Runs appear in the background-tasks view and the \`/workflows\` dialog (live phase tree, token usage, cooperative pause/resume, cancel); \`run_in_background: true\` returns a run handle immediately in the interactive TUI and delivers completion through the conversation. Scripts run in a node:vm sandbox with no filesystem or shell access \u2014 all I/O happens through the spawned agents.
3027
+
3028
+ **Scout first, then orchestrate**
3029
+
3030
+ The strongest pattern is hybrid: discover the work list in the main loop (list the files, scope the diff, read the failing test), then hand that list to a workflow. You do not need to know the shape of the work before the task \u2014 only before the orchestration step. When the work has distinct phases, run several small workflows across turns and read each result before choosing the next, rather than authoring one large script that runs unattended.
3031
+
3032
+ Common single-phase shapes: understand (parallel readers over subsystems, merged into one map), design (independent approaches, judged, then synthesized), review (dimensions, find, verify each finding), research (broad sweep, deep read, synthesis), migrate (discover sites, transform each under \`isolation: 'worktree'\`, verify).
3033
+
3034
+ **Default to \`pipeline()\`**
3035
+
3036
+ \`pipeline()\` runs each item through every stage independently \u2014 item A can be in stage 3 while item B is still in stage 1 \u2014 so wall-clock is the slowest single chain. \`parallel()\` is a barrier: it waits for every thunk before anything moves on, so it costs the slowest item of every stage.
3037
+
3038
+ A barrier is right only when a stage genuinely needs cross-item context: deduplicating or merging across the full result set before expensive downstream work, exiting early when the total count is zero, or a prompt that compares one finding against all the others. It is not justified by needing to flatten, map, or filter between stages (do that inside a pipeline stage), by two stages being conceptually separate, or by the code reading more tidily. Smell test: \`parallel()\` \u2192 a pure transform \u2192 \`parallel()\` is a pipeline someone wrote with an unnecessary barrier. When in doubt, \`pipeline()\`.
3039
+
3040
+ **Verify before believing**
3041
+
3042
+ A subagent's answer is a claim, not a result. For findings that matter, spawn independent verifiers prompted to *refute*, and drop what a majority refutes. When a claim can be wrong in several different ways, give each verifier a distinct lens (correctness, security, performance, does it actually reproduce) \u2014 diversity catches what repetition cannot. For a wide solution space, generate several independent attempts, judge them in parallel, and synthesize from the winner while grafting the best ideas from the rest.
3043
+
3044
+ **Converge deliberately**
3045
+
3046
+ For discovery of unknown size, keep running finders until some number of consecutive rounds turn up nothing new; a fixed round count stops partway into the tail. Deduplicate each round against everything already seen, never against only what survived judging \u2014 otherwise rejected findings reappear every round and the loop never terminates. A closing pass that asks what is still missing (a search angle never run, a claim never verified, a file never read) usually produces the next round of real work.
3047
+
3048
+ **Report honestly**
3049
+
3050
+ Scale the fleet to what was actually asked: a quick check gets a few agents and one verification pass; an explicit request to be thorough or exhaustive earns a larger pool and a multi-vote adversarial round. Whenever a run bounds its own coverage \u2014 top-N, sampling, no retry \u2014 \`log()\` what was dropped. Silent truncation reads as full coverage, which is worse than a smaller honest result.
3051
+
3052
+ These shapes are a starting point, not a menu; compose the harness the task actually needs.`;
3020
3053
  var WorkflowTool = class extends BaseDeclarativeTool {
3021
3054
  constructor(config, toolOptions = {}) {
3022
3055
  super(
3023
3056
  ToolNames.WORKFLOW,
3024
3057
  ToolDisplayNames.WORKFLOW,
3025
- "Execute a workflow script that orchestrates subagents. Supports `phase`, `log`, sequential `agent`, concurrent fan-out via `parallel(thunks)` / `pipeline(items, ...stages)` (default `max(1, min(16, cpus-2))` agents in flight per run, up to 1000 agents total; both env-overridable), per-call `agent({ schema, agentType, model, isolation: 'worktree' })` for structured-output contracts, declarative-agent selection, model override, and git-worktree-isolated subagents. Pass `resumeFromRunId` to resume a prior run \u2014 agent() calls whose rolling prefix-hash matches the journal are served from cache for the longest unchanged prefix. Runs are tracked in the background-tasks view and the `/workflows` dialog (live phase tree, token usage, cooperative pause/resume, cancel). Set `run_in_background: true` to return a run handle immediately in the interactive TUI and receive completion through the conversation. Scripts run in a node:vm sandbox without access to the filesystem or shell; all I/O happens through the spawned agents.",
3058
+ WORKFLOW_TOOL_DESCRIPTION,
3026
3059
  "other" /* Other */,
3027
3060
  WORKFLOW_PARAM_SCHEMA,
3028
3061
  /* isOutputMarkdown */
@@ -3067,11 +3100,11 @@ export {
3067
3100
  };
3068
3101
  /**
3069
3102
  * @license
3070
- * Copyright 2026 Qwen Team
3103
+ * Copyright 2025 Qwen
3071
3104
  * SPDX-License-Identifier: Apache-2.0
3072
3105
  */
3073
3106
  /**
3074
3107
  * @license
3075
- * Copyright 2025 Qwen
3108
+ * Copyright 2026 Qwen Team
3076
3109
  * SPDX-License-Identifier: Apache-2.0
3077
3110
  */