@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.
- package/README.md +2 -1
- package/bundled/qc-helper/docs/configuration/settings.md +32 -30
- package/bundled/qc-helper/docs/extension/introduction.md +15 -1
- package/bundled/qc-helper/docs/features/code-review.md +2 -0
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +42 -39
- package/bundled/review/SKILL.md +11 -7
- package/chunks/{MaxSizedBox-7PM6BGJ5.js → MaxSizedBox-6BZANW7X.js} +9 -9
- package/chunks/{StandaloneSessionPicker-3UQHM7GV.js → StandaloneSessionPicker-VDC5KE7T.js} +28 -25
- package/chunks/{acpAgent-5UWLFV6V.js → acpAgent-F2NSBCUF.js} +1433 -706
- package/chunks/{agent-624T2BLO.js → agent-VOHJOEBB.js} +8 -8
- package/chunks/{agent-headless-2EE5J2KX.js → agent-headless-J5NFOPHP.js} +8 -8
- package/chunks/{bridge-JENKGFFP.js → bridge-NQIZZLAS.js} +13 -13
- package/chunks/{channel-management-service-DDWUPHMU.js → channel-management-service-PHELKOW2.js} +4 -4
- package/chunks/{channel-settings-store-SA6JZSPH.js → channel-settings-store-VIY2OENO.js} +17 -15
- package/chunks/{channel-worker-group-E67EN3RV.js → channel-worker-group-MSHT6CWR.js} +6 -6
- package/chunks/{channel-worker-manager-SW4C45CF.js → channel-worker-manager-XXD3GDSK.js} +6 -6
- package/chunks/{channel-worker-supervisor-5SRD24FG.js → channel-worker-supervisor-IVSDIMI4.js} +4 -4
- package/chunks/{chunk-S3Y3GBFD.js → chunk-23VQTELM.js} +2 -2
- package/chunks/{chunk-XZKQT2B2.js → chunk-3WDYBTTI.js} +5 -5
- package/chunks/{chunk-YEF7XEO2.js → chunk-3XVDTHBJ.js} +3 -3
- package/chunks/{chunk-IBYULW65.js → chunk-46YJDYCU.js} +145 -10
- package/chunks/chunk-4JRM2BSM.js +48 -0
- package/chunks/{chunk-L4N6TIP7.js → chunk-4TRQPFDP.js} +4 -2
- package/chunks/{chunk-5ZGR6RKJ.js → chunk-4XQNB3KN.js} +3 -3
- package/chunks/chunk-5EJZE3FP.js +140 -0
- package/chunks/{chunk-XHD7CRP2.js → chunk-5RBDAGC6.js} +2 -2
- package/chunks/{chunk-KJZ26VBX.js → chunk-67EWJE77.js} +1 -1
- package/chunks/{chunk-TE3ZAJE7.js → chunk-6Q5ABMTU.js} +1 -1
- package/chunks/{chunk-U5SLIG7E.js → chunk-7AEPJGL4.js} +1 -1
- package/chunks/{chunk-OHKJVAKG.js → chunk-7GOYZQPR.js} +20 -1977
- package/chunks/{chunk-3SE7J4DR.js → chunk-7S4JBJLU.js} +3 -3
- package/chunks/{chunk-TKSZJ5BV.js → chunk-AKJQSWV4.js} +3 -3
- package/chunks/{chunk-E4ZBKMSF.js → chunk-ATMO54WE.js} +6 -6
- package/chunks/{chunk-KKDVZLGL.js → chunk-BAMN6XSD.js} +1 -1
- package/chunks/{chunk-IUQ52YJK.js → chunk-BIRWP6LU.js} +1 -1
- package/chunks/{chunk-AKA24BGO.js → chunk-BT6GQIEJ.js} +1 -1
- package/chunks/{chunk-ZCLLJARV.js → chunk-BZP4QPNK.js} +10 -10
- package/chunks/{chunk-2M5N3DHY.js → chunk-CMOBWHWW.js} +1 -1
- package/chunks/{chunk-WV5J6Q6N.js → chunk-D7BXVKSF.js} +1 -1
- package/chunks/{chunk-NLREQJFK.js → chunk-DA4HRSBW.js} +15 -0
- package/chunks/{chunk-GOEVOFQI.js → chunk-DH5YXSIF.js} +3 -3
- package/chunks/{chunk-DIWZNWZT.js → chunk-DX3RGJMS.js} +13 -2
- package/chunks/{chunk-PLFATELK.js → chunk-DZUO626D.js} +1 -1
- package/chunks/{chunk-NGYI5EF5.js → chunk-E2FPSSKP.js} +8 -8
- package/chunks/{chunk-ZPLALRXZ.js → chunk-FBMCDU63.js} +4 -137
- package/chunks/{chunk-2ILAOM2I.js → chunk-FCLHHEUK.js} +17 -16
- package/chunks/{chunk-SNRT2TJJ.js → chunk-G2TX5ZXC.js} +3 -3
- package/chunks/{chunk-C5VWPTGT.js → chunk-GAKGOXTC.js} +1 -1
- package/chunks/{chunk-QQWD7LZV.js → chunk-HADWBW5R.js} +4 -4
- package/chunks/{chunk-77QVBFCU.js → chunk-HZGBKOX3.js} +3 -3
- package/chunks/{chunk-RPWVIXDB.js → chunk-I5VM3SKY.js} +4 -4
- package/chunks/{chunk-7VUERJHS.js → chunk-II6G3EY6.js} +325 -104
- package/chunks/{chunk-FN6YXJOP.js → chunk-IOEZE2YT.js} +1 -1
- package/chunks/chunk-JUWS2Z5K.js +1995 -0
- package/chunks/{chunk-VXZ5HAOV.js → chunk-K4ADGWHU.js} +1 -1
- package/chunks/{chunk-YOM7DEGB.js → chunk-KSAFZ5TA.js} +2 -2
- package/chunks/{chunk-KAQCJO6Y.js → chunk-KTKYGS2P.js} +35 -9
- package/chunks/{chunk-GBDINRIL.js → chunk-KTQGGPGV.js} +3 -3
- package/chunks/{chunk-6M26GBKX.js → chunk-L2AFWWJE.js} +42 -3
- package/chunks/{chunk-QXVSWG66.js → chunk-LHEC5V6G.js} +2 -2
- package/chunks/{chunk-J26HHFI5.js → chunk-LP2QGNSP.js} +32 -2
- package/chunks/{chunk-HWX5HPUG.js → chunk-LZZLUCRS.js} +108 -11
- package/chunks/{chunk-KTJFU7RT.js → chunk-MFDYOYZZ.js} +2 -2
- package/chunks/{chunk-3WNQOYHQ.js → chunk-MHP476D3.js} +74 -31
- package/chunks/{chunk-Y4TETC74.js → chunk-MTCYGTWH.js} +4 -4
- package/chunks/{chunk-EN2TKTFH.js → chunk-NV3F44FL.js} +6 -2
- package/chunks/{chunk-BF52U4XJ.js → chunk-OGDIJKHK.js} +1 -1
- package/chunks/{chunk-7DVT4LVV.js → chunk-OGNFHGIG.js} +3 -3
- package/chunks/{chunk-IYES5WOT.js → chunk-P2FK2HBV.js} +2 -2
- package/chunks/{chunk-2M4K4KYS.js → chunk-P3RBMQ4P.js} +4 -4
- package/chunks/{chunk-FYAXKJK7.js → chunk-P4ZEZSJZ.js} +692 -106
- package/chunks/{chunk-UFALT4LK.js → chunk-PBRVUF5B.js} +1 -1
- package/chunks/{chunk-LKRMNRSN.js → chunk-PDPFQ2FO.js} +2 -0
- package/chunks/{chunk-6TR7CFXH.js → chunk-PNBBJOCP.js} +1 -1
- package/chunks/{chunk-M3STHEMM.js → chunk-PVOGHGSF.js} +5 -5
- package/chunks/{chunk-4WU6NY7F.js → chunk-QSNSL4R4.js} +2 -2
- package/chunks/{chunk-DQSDACD2.js → chunk-RBHQXGDK.js} +1 -1
- package/chunks/{chunk-ZHA242R4.js → chunk-RVSTTOJ4.js} +2 -2
- package/chunks/{chunk-EIVICVHM.js → chunk-SCAZZ3Q4.js} +4 -4
- package/chunks/{chunk-BF224XHL.js → chunk-T5RLUXWJ.js} +2 -2
- package/chunks/{chunk-B52AWKBB.js → chunk-T6HEQR2Q.js} +16 -5
- package/chunks/{chunk-FWBXMANW.js → chunk-THIKWITR.js} +3 -3
- package/chunks/{chunk-WG6542MA.js → chunk-TQCYNLNJ.js} +1 -1
- package/chunks/chunk-TQOF5KBL.js +71 -0
- package/chunks/{chunk-NPUXXRJI.js → chunk-TZ6KJ44L.js} +1 -1
- package/chunks/{chunk-YHJFF7KH.js → chunk-UJUM2SRN.js} +147 -47
- package/chunks/{chunk-4ALIARFY.js → chunk-UYAUA63Q.js} +1 -1
- package/chunks/chunk-VFMASYQA.js +389 -0
- package/chunks/chunk-VGHZT6JR.js +51 -0
- package/chunks/{chunk-ZWBUH5UP.js → chunk-VKJ4KTPJ.js} +1 -1
- package/chunks/{chunk-QGHSP65Z.js → chunk-VNNWAZSI.js} +2 -2
- package/chunks/{chunk-757GB46F.js → chunk-W3FSZSF2.js} +1 -1
- package/chunks/{chunk-GQCEQPYQ.js → chunk-WGK4TSB7.js} +3 -3
- package/chunks/{chunk-PG62DFWD.js → chunk-WP5VOXF7.js} +6 -127
- package/chunks/{chunk-NVRDQFCX.js → chunk-XTY5DN4Y.js} +1 -1
- package/chunks/{chunk-GXSNGY5M.js → chunk-XX7QFP34.js} +1677 -1307
- package/chunks/{chunk-3PY4LPJF.js → chunk-YGT2AUJ7.js} +84 -4
- package/chunks/{chunk-4DU3NCHG.js → chunk-YTFDX4PR.js} +8 -3
- package/chunks/{chunk-OA4JVLSA.js → chunk-Z7VOMGDC.js} +22 -1
- package/chunks/{chunk-DX5W5AON.js → chunk-ZBXGWQ4S.js} +3 -3
- package/chunks/chunk-ZLBIFIMV.js +1099 -0
- package/chunks/{chunk-HA3SAB64.js → chunk-ZOSTTOUJ.js} +1 -1
- package/chunks/{chunk-VWMUDKLC.js → chunk-ZTQSOV56.js} +4 -4
- package/chunks/{computer-use-ESQYJ3JY.js → computer-use-PMZ7ICGY.js} +8 -8
- package/chunks/{config-utils-XQHBJP7G.js → config-utils-ULCSRMWD.js} +4 -4
- package/chunks/{contextCommand-CX3YF4ZE.js → contextCommand-GEZU7YHE.js} +11 -10
- package/chunks/{core-runtime-DIAU7JMG.js → core-runtime-HRJI2MN6.js} +8 -8
- package/chunks/{create-sub-session-HDPD6HOA.js → create-sub-session-VBNVI4YU.js} +9 -9
- package/chunks/{daemon-VZBGJUNL.js → daemon-POSQPD3G.js} +115 -7
- package/chunks/{daemon-status-provider-H6O4UQ4F.js → daemon-status-provider-N4CRQKFI.js} +18 -18
- package/chunks/{daemon-trust-policy-BNUXG6MT.js → daemon-trust-policy-BHO3JUHM.js} +16 -14
- package/chunks/{daemon-trust-policy-monitor-E4EQ7GF4.js → daemon-trust-policy-monitor-YEKJ2726.js} +16 -14
- package/chunks/{deferred-core-runtime-CBMSHPAU.js → deferred-core-runtime-SH57E3J3.js} +8 -8
- package/chunks/{dist-KVISB2O2.js → dist-3NTTUAHT.js} +1 -1
- package/chunks/{dist-RCH3I7SS.js → dist-6BMOAE3Z.js} +2 -2
- package/chunks/{dist-IRL7WA5Z.js → dist-B2CGTW6T.js} +1 -1
- package/chunks/{dist-TUSWNE2I.js → dist-EWW3J4HQ.js} +1 -1
- package/chunks/{dist-HIACTZEK.js → dist-EZE3V3Q7.js} +1 -1
- package/chunks/{dist-EEEQGCZA.js → dist-J47AXBZC.js} +1 -1
- package/chunks/{dist-MKX5OSFF.js → dist-OTUO3AS2.js} +4 -1088
- package/chunks/{dist-MBF3I5MX.js → dist-Z3CS4OVP.js} +1 -1
- package/chunks/{earlyInputCapture-UIOP7OIN.js → earlyInputCapture-B2JJ2HME.js} +8 -8
- package/chunks/{edit-ITMZYFKA.js → edit-7FTXENAN.js} +10 -8
- package/chunks/{enter-worktree-S4PL5UV6.js → enter-worktree-JPHV2PBG.js} +8 -8
- package/chunks/{enterPlanMode-YV52NNJT.js → enterPlanMode-CGBJ3AHJ.js} +8 -8
- package/chunks/{environment-NGOWPRZV.js → environment-LXASZAHD.js} +11 -11
- package/chunks/{errors-BU26DTDX.js → errors-XIGVT2AD.js} +10 -10
- package/chunks/{exit-worktree-XRM6LH5F.js → exit-worktree-DKSGXW65.js} +8 -8
- package/chunks/{exitPlanMode-ZLI5F7KR.js → exitPlanMode-THFL2HYN.js} +8 -8
- package/chunks/{fast-path-UJWORIED.js → fast-path-4NXAT5UL.js} +4 -3
- package/chunks/{fast-path-settings-37WQD5B2.js → fast-path-settings-RPAVBD7P.js} +2 -2
- package/chunks/{gemini-ZSKNDUMU.js → gemini-B3N6FACU.js} +56 -60
- package/chunks/{geminiContentGenerator-YGEXOEKD.js → geminiContentGenerator-YYFE2HIE.js} +1 -1
- package/chunks/{glob-7KZG44BR.js → glob-BPHSCFJP.js} +8 -8
- package/chunks/{grep-6ZFC7RJ5.js → grep-ROZIRFLU.js} +8 -8
- package/chunks/{handleAutoUpdate-KSEL3TQS.js → handleAutoUpdate-WV6SPZQB.js} +13 -12
- package/chunks/{i18n-ZIUXBW5V.js → i18n-YWJWPQKD.js} +13 -11
- package/chunks/{image-gen-AUIZJJNK.js → image-gen-SISRZ6FS.js} +1 -1
- package/chunks/{initializer-7AHY3N6Q.js → initializer-66OAD6GO.js} +16 -14
- package/chunks/{installationInfo-VGBXMYLY.js → installationInfo-3YUGIP36.js} +9 -9
- package/chunks/{list-PSFKQHLB.js → list-VEYR66XB.js} +19 -17
- package/chunks/{loadedSettingsAdapter-FTMRCTOF.js → loadedSettingsAdapter-V2JCPCYD.js} +16 -14
- package/chunks/{loggingContentGenerator-MZAN52UV.js → loggingContentGenerator-RBLNDREC.js} +6 -6
- package/chunks/main-PXAUXNF2.js +8 -0
- package/chunks/{managed-npm-update-O4NHK45X.js → managed-npm-update-C5ID5R4R.js} +9 -9
- package/chunks/{mcp-6CFP2AYQ.js → mcp-OZ54NZJQ.js} +16 -14
- package/chunks/{monitor-DAKD6OU4.js → monitor-7Y4TVFTK.js} +18 -14
- package/chunks/{nonInteractiveCli-RC7VIUZL.js → nonInteractiveCli-QEK4LHAC.js} +51 -49
- package/chunks/{notebook-edit-474DPMRL.js → notebook-edit-OG35EBGY.js} +9 -8
- package/chunks/{openaiContentGenerator-2NFY2MWO.js → openaiContentGenerator-443BNRPJ.js} +5 -5
- package/chunks/{pidfile-KBFVDNQP.js → pidfile-ZK4OLRZA.js} +8 -8
- package/chunks/{processUtils-6GRYH4Y3.js → processUtils-4YGB4RUZ.js} +2 -2
- package/chunks/{qwenContentGenerator-KAHU6IZY.js → qwenContentGenerator-D5C2LCSZ.js} +9 -9
- package/chunks/{qwenOAuth2-RRQTCP4W.js → qwenOAuth2-Z4YQBMYN.js} +1 -1
- package/chunks/{read-file-3M6WXDXP.js → read-file-EXTJLWMU.js} +4 -4
- package/chunks/{resumeHistoryUtils-D6TAY3HX.js → resumeHistoryUtils-UPCGRJUL.js} +13 -12
- package/chunks/{ripGrep-PLPENT3E.js → ripGrep-QBVIRCU4.js} +8 -8
- package/chunks/{run-qwen-serve-ZAFIJKJC.js → run-qwen-serve-ZYGJNE3E.js} +169 -68
- package/chunks/{runtime-ZED7CYOZ.js → runtime-BZZ4LWCP.js} +21 -19
- package/chunks/{scheduler-MD3AL2W5.js → scheduler-YNQNOU2E.js} +135 -15
- package/chunks/{sdk-exporters-http-KHAB5JSD.js → sdk-exporters-http-XVTZQRCE.js} +2 -2
- package/chunks/{sdk-impl-KD7FSTC3.js → sdk-impl-7W7AKCS4.js} +7 -3
- package/chunks/{serve-E3VUDRZN.js → serve-LJHAXDCH.js} +18 -14
- package/chunks/{server-OWMEMAKR.js → server-ADMLELR6.js} +1229 -1098
- package/chunks/{session-HZ57QK7K.js → session-YKZXFFTM.js} +55 -53
- package/chunks/{settings-V7BR3RKP.js → settings-EQBUAQ7Y.js} +15 -13
- package/chunks/{shell-23OMNMW6.js → shell-3QZOJGTT.js} +8 -8
- package/chunks/{skill-6HBDYZRS.js → skill-UWSSMXE7.js} +5 -5
- package/chunks/{skill-settings-HWJLTU7M.js → skill-settings-T6MLB7NU.js} +15 -13
- package/chunks/{spawnChannel-N6KKUW5B.js → spawnChannel-VS7ZFUFP.js} +11 -11
- package/chunks/{standalone-update-QGIKHATD.js → standalone-update-2W26SRRO.js} +11 -10
- package/chunks/{startInteractiveUI-GX2CRL42.js → startInteractiveUI-CVS7K3D6.js} +86 -75
- package/chunks/{team-create-CFFKU7KL.js → team-create-4WFTNNUL.js} +8 -8
- package/chunks/{team-plan-approval-6EFOKR6A.js → team-plan-approval-DBYI33S3.js} +8 -8
- package/chunks/{terminal-image-renderer-TLDNACQY.js → terminal-image-renderer-S5WPPQKH.js} +8 -8
- package/chunks/{theme-manager-5LJ3H7VO.js → theme-manager-LI2RIOVR.js} +8 -8
- package/chunks/{tool-search-UJV3A24H.js → tool-search-4773EUQ4.js} +4 -4
- package/chunks/{total-session-admission-D63QYXGO.js → total-session-admission-PAY5CH2Z.js} +16 -15
- package/chunks/{trustedFolders-KZCOB53W.js → trustedFolders-FRSLE674.js} +9 -9
- package/chunks/{types-ML3TRJQ5.js → types-WYCFCEHR.js} +5 -3
- package/chunks/{update-relaunch-IFILM3SA.js → update-relaunch-ZSFQTU6M.js} +5 -5
- package/chunks/{updateCheck-YZ2CRCFC.js → updateCheck-AXWSO7KA.js} +12 -11
- package/chunks/{useAutoAcceptIndicator-AXEVNA3Q.js → useAutoAcceptIndicator-VHLXIA7U.js} +18 -16
- package/chunks/{validateNonInterActiveAuth-3WTOJFWA.js → validateNonInterActiveAuth-PDJECMFU.js} +48 -46
- package/chunks/{version-GXK7OHZY.js → version-RBN764QS.js} +1 -1
- package/chunks/{web-fetch-ILB4GAVR.js → web-fetch-7BJK42AF.js} +4 -4
- package/chunks/{web-search-HKRPGPZZ.js → web-search-L2CILQXV.js} +4 -3
- package/chunks/{workflow-FXIPRQQA.js → workflow-5VH2R74I.js} +170 -137
- package/chunks/{workspace-providers-status-NYHC7HSR.js → workspace-providers-status-OZTQ6JFH.js} +19 -17
- package/chunks/{workspace-registration-store-AKEB7OMW.js → workspace-registration-store-IX5RJQS5.js} +1 -1
- package/chunks/{workspace-registry-CDAS5TVZ.js → workspace-registry-73N4BGG4.js} +16 -15
- package/chunks/{workspace-service-PAMUKMAV.js → workspace-service-I5RUPSNV.js} +26 -22
- package/chunks/{workspace-skills-status-YQSHCCMS.js → workspace-skills-status-DMK6VYDO.js} +17 -15
- package/chunks/{workspace-trust-reconciler-RPTXOIY2.js → workspace-trust-reconciler-QX4RL3TC.js} +24 -21
- package/chunks/{write-file-CGS57TS4.js → write-file-UGDD5UTS.js} +8 -8
- package/chunks/{zoom-image-E7D72GYV.js → zoom-image-ZAHEO3YP.js} +4 -4
- package/cli.js +12 -12
- package/package.json +3 -3
- package/web-shell/assets/{arc-DybZaz32.js → arc-CHY4saMJ.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-jN3qBd19.js → architectureDiagram-3BPJPVTR-Bu6CwvHj.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-Ct5DZPrj.js → blockDiagram-GPEHLZMM-XGt6iGf_.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CUAFMlUG.js → c4Diagram-AAUBKEIU-CBbYl19W.js} +1 -1
- package/web-shell/assets/channel-B40srHOa.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CuV8n90B.js → chunk-2J33WTMH-BEhmVrdx.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BUzl_kls.js → chunk-4BX2VUAB-fQLyE0Bg.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-BnDBLX6A.js → chunk-55IACEB6-yGdtyx4a.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-B83uTOjm.js → chunk-727SXJPM-DYbX2GLo.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DM3HLgpT.js → chunk-AQP2D5EJ-DyKTEsYn.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CSQ5hgyb.js → chunk-FMBD7UC4-D8Uy_GzX.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BWOF4SxX.js → chunk-ND2GUHAM-C8wNR2K7.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BsOH9LMi.js → chunk-QZHKN3VN-BnybNxnt.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-IENqH2iJ.js → cose-bilkent-S5V4N54A-jq4uiFRp.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG--dyzDTGo.js → dagre-BM42HDAG-Bs7oye1U.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BE7Dcqof.js → diagram-2AECGRRQ-BHGGJNyM.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-Cr8-5OTj.js → diagram-5GNKFQAL-BJezVLGT.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-Bzey3uAY.js → diagram-KO2AKTUF-5JzQN_rL.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-sErl28Xb.js → diagram-LMA3HP47-BlPYOgY9.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-Dq30ATIo.js → diagram-OG6HWLK6-CtMHEaFK.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-BkCoEfVW.js → erDiagram-TEJ5UH35-CRNdq2AB.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-DHwO0rrI.js → flowDiagram-I6XJVG4X-De1WwLzu.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-s7vAPxWq.js → ganttDiagram-6RSMTGT7-YbWfL5Zn.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CQxhwPOU.js → gitGraphDiagram-PVQCEYII-DzCN8bmd.js} +1 -1
- package/web-shell/assets/index-BDOGGGaN.css +5 -0
- package/web-shell/assets/{index-CF4wApWp.js → index-CocPvF9Q.js} +1 -1
- package/web-shell/assets/index-DSH2KrMc.js +1771 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-BnFrD0bq.js → infoDiagram-5YYISTIA-DLHoopnE.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js → ishikawaDiagram-YF4QCWOH-XnbU04SS.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CyGAhsxi.js → journeyDiagram-JHISSGLW-CipPyEeJ.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-CbsK5akB.js → kanban-definition-UN3LZRKU-DrSeyE5d.js} +1 -1
- package/web-shell/assets/{linear-cQsF4P8D.js → linear-LrBKnAo_.js} +1 -1
- package/web-shell/assets/{mermaid.core-Z4HVqrKY.js → mermaid.core-C3U9UVmf.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-CYnrBo_f.js → mindmap-definition-RKZ34NQL-DqRWgC9H.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CBzOfhrs.js → pieDiagram-4H26LBE5-BNXY5p6H.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D4LK1Ebn.js → quadrantDiagram-W4KKPZXB-Ccj9QzE4.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-Bzti2Lcj.js → requirementDiagram-4Y6WPE33-CjPM2_gx.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-yTBw5Z2s.js → sankeyDiagram-5OEKKPKP-C0RsvKbj.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D07UVRiZ.js → sequenceDiagram-3UESZ5HK-ClN1P5z7.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-UE_lHsTn.js → stateDiagram-AJRCARHV-By0eiB2Y.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DRvYdiTs.js → timeline-definition-PNZ67QCA-g_iaSQgv.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-CQLIXs0u.js → vennDiagram-CIIHVFJN-y9ZqJ-TD.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-JZz_Xqse.js → wardley-L42UT6IY-BVVfaxpF.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO--i7BiJwB.js → wardleyDiagram-YWT4CUSO-D3ooZKZT.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Bkc-bW0S.js → xychartDiagram-2RQKCTM6-6GXrY6M1.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-RXFQM6FQ.js +0 -42
- package/chunks/chunk-UA5H3DS2.js +0 -203
- package/web-shell/assets/channel-BMwLrwLW.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +0 -1
- package/web-shell/assets/index-Bckpjr-I.css +0 -5
- package/web-shell/assets/index-DwEr9HEW.js +0 -1768
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +0 -1
- /package/chunks/{chunk-VXZBKKQR.js → chunk-NTTBXH7U.js} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
46
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
101
|
+
import "./chunk-L2AFWWJE.js";
|
|
102
102
|
import "./chunk-W4RQUHY3.js";
|
|
103
|
-
import "./chunk-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2322
|
+
debugLogger.warn("emitter.agentDispatched threw:", e);
|
|
2327
2323
|
}
|
|
2328
2324
|
try {
|
|
2329
2325
|
emitter?.agentCompleted?.(label2);
|
|
2330
2326
|
} catch (e) {
|
|
2331
|
-
|
|
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) =>
|
|
2338
|
+
(e) => debugLogger.warn(`journal started-append failed: ${e}`)
|
|
2343
2339
|
);
|
|
2344
2340
|
}
|
|
2345
2341
|
if (budget && budget.total !== null && budget.remaining() <= 0) {
|
|
2346
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
|
3103
|
+
* Copyright 2025 Qwen
|
|
3071
3104
|
* SPDX-License-Identifier: Apache-2.0
|
|
3072
3105
|
*/
|
|
3073
3106
|
/**
|
|
3074
3107
|
* @license
|
|
3075
|
-
* Copyright
|
|
3108
|
+
* Copyright 2026 Qwen Team
|
|
3076
3109
|
* SPDX-License-Identifier: Apache-2.0
|
|
3077
3110
|
*/
|