@qwen-code/qwen-code 0.25.4-preview.0 → 0.25.4-preview.1
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/bundled/browser-use/runtime/native-host.js +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/cli.js +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
- package/bundled/browser-use/runtime/node_modules/playwright-core/lib/xdg-open +0 -0
- package/bundled/browser-use/runtime/scripts/native-host-setup.js +0 -0
- package/chunks/{MaxSizedBox-M27H235V.js → MaxSizedBox-E4RKSA7W.js} +1 -1
- package/chunks/{StandaloneSessionPicker-LWWDDYOW.js → StandaloneSessionPicker-2D3UKLVS.js} +1 -1
- package/chunks/{acp-subagent-executor-NUV52JVS.js → acp-subagent-executor-UQYUN6AB.js} +1 -1
- package/chunks/{acpAgent-IUJDXLZM.js → acpAgent-P7WGK2BP.js} +3 -3
- package/chunks/{advisor-MSOUBMJ6.js → advisor-GCH2MBXT.js} +1 -1
- package/chunks/{agent-H7XIWYWQ.js → agent-57T4YAYP.js} +1 -1
- package/chunks/{agent-headless-XDN3D3S3.js → agent-headless-IBON3A7N.js} +1 -1
- package/chunks/{agent-host-client-AZP3PZXS.js → agent-host-client-LE7P72FR.js} +1 -1
- package/chunks/{agent-host-connections-JRVX7I6I.js → agent-host-connections-4DM57L26.js} +1 -1
- package/chunks/{anthropicContentGenerator-N7TV53LD.js → anthropicContentGenerator-C4TPFXUK.js} +1 -1
- package/chunks/{batch-MKSJFJUH.js → batch-YJJGMJWO.js} +1 -1
- package/chunks/{bridge-GNMKKHQ4.js → bridge-FIO2ENBG.js} +1 -1
- package/chunks/{channel-settings-store-Y4YCS7JX.js → channel-settings-store-TEBCLK2B.js} +1 -1
- package/chunks/{chunk-GPOUP5OK.js → chunk-27MTSS3T.js} +1 -1
- package/chunks/{chunk-C4ANA47H.js → chunk-2MGCRPM3.js} +1 -1
- package/chunks/{chunk-6DQNNRRC.js → chunk-2WBKWPSO.js} +1 -1
- package/chunks/{chunk-CATL2PQS.js → chunk-34WLYVDK.js} +5 -5
- package/chunks/{chunk-B7CXPNCV.js → chunk-3J2YNEHG.js} +1 -1
- package/chunks/{chunk-VTNHPXNL.js → chunk-3TBFTELA.js} +1 -1
- package/chunks/{chunk-7JT34VGK.js → chunk-46I6JBVL.js} +1 -1
- package/chunks/{chunk-FEMWELCV.js → chunk-4ZKFLOEH.js} +1 -1
- package/chunks/{chunk-7AYXAVTZ.js → chunk-5DUJIOOX.js} +3 -3
- package/chunks/{chunk-6QLHJSVW.js → chunk-6PWOLWTH.js} +1 -1
- package/chunks/{chunk-OW4QBRSR.js → chunk-6UZ65Z2P.js} +1 -1
- package/chunks/{chunk-V2JZO5MS.js → chunk-7DSJE3CL.js} +1 -1
- package/chunks/{chunk-TJMHIEYI.js → chunk-7LCY7GGX.js} +1 -1
- package/chunks/{chunk-TLJHBK3A.js → chunk-7RNTXEWH.js} +1 -1
- package/chunks/{chunk-YZ7OO4AQ.js → chunk-A3IF6IOB.js} +1 -1
- package/chunks/{chunk-VTF6AVZB.js → chunk-A6OQSOUO.js} +1 -1
- package/chunks/{chunk-Y7YDHCON.js → chunk-AJ6JUUP7.js} +1 -1
- package/chunks/{chunk-QTMHQGWQ.js → chunk-AOMEBVFW.js} +1 -1
- package/chunks/{chunk-KVTG2ZNH.js → chunk-AUNAS7AS.js} +1 -1
- package/chunks/{chunk-BOFD4CN3.js → chunk-AVIDPC5K.js} +1 -1
- package/chunks/{chunk-ETYTRKB2.js → chunk-BOLPBPWC.js} +1 -1
- package/chunks/{chunk-OAPA66DR.js → chunk-BQQBFDBY.js} +1 -1
- package/chunks/{chunk-NOS2CNOI.js → chunk-CN22ATWU.js} +1 -1
- package/chunks/{chunk-XYBEQRSZ.js → chunk-DIHJELGW.js} +1 -1
- package/chunks/{chunk-XCEL3EDX.js → chunk-DJFCI7TU.js} +1 -1
- package/chunks/{chunk-VKEL2XTM.js → chunk-DQPDMFS3.js} +1 -1
- package/chunks/{chunk-DJRFEZBY.js → chunk-DSYKB77N.js} +1 -1
- package/chunks/{chunk-UEW7Q26E.js → chunk-EDNOGHMN.js} +2 -2
- package/chunks/{chunk-RXNGYG64.js → chunk-EE36D2EV.js} +1 -1
- package/chunks/{chunk-NZKX7HYL.js → chunk-EGQDN3FJ.js} +1 -1
- package/chunks/{chunk-DFRSQK5Q.js → chunk-FHFBCG6N.js} +1 -1
- package/chunks/{chunk-PECV2VVZ.js → chunk-GI6T3RBV.js} +1 -1
- package/chunks/{chunk-37BNHIUB.js → chunk-GOLT5JXA.js} +1 -1
- package/chunks/{chunk-KITFF4GL.js → chunk-IDGXHMNL.js} +1 -1
- package/chunks/{chunk-6HIOSLUM.js → chunk-IIZWK7ZP.js} +1 -1
- package/chunks/{chunk-MPGEAX4K.js → chunk-IJC6ZH2S.js} +1 -1
- package/chunks/{chunk-TLYJVB5H.js → chunk-IO6LSEPV.js} +1 -1
- package/chunks/{chunk-QIJKEZZR.js → chunk-IYVNCBMS.js} +1 -1
- package/chunks/{chunk-S4GOHFRN.js → chunk-JHGOWK7M.js} +1 -1
- package/chunks/{chunk-GHRD2MMC.js → chunk-JRJY343T.js} +1 -1
- package/chunks/{chunk-WCYZSCG7.js → chunk-JVUXQU3W.js} +1 -1
- package/chunks/{chunk-DMCTJUIJ.js → chunk-K2K2YYWO.js} +1 -1
- package/chunks/{chunk-37OHWQHB.js → chunk-KF6HU732.js} +2 -2
- package/chunks/{chunk-5LSV73BG.js → chunk-KVWUOBH7.js} +1 -1
- package/chunks/{chunk-7V4BAHFT.js → chunk-LBWBGFHD.js} +1 -1
- package/chunks/{chunk-RKPHDO42.js → chunk-LDXZT3SG.js} +5 -5
- package/chunks/{chunk-BGFA2SAQ.js → chunk-LFOZ6AIH.js} +1 -1
- package/chunks/{chunk-4322TZID.js → chunk-LGQHT42X.js} +2 -2
- package/chunks/{chunk-PDXZ2CUO.js → chunk-M3O2XDHA.js} +1 -1
- package/chunks/{chunk-47K2NMP6.js → chunk-M3UC46LS.js} +1 -1
- package/chunks/{chunk-UFRY7WND.js → chunk-M7JLPTQI.js} +1 -1
- package/chunks/{chunk-SATEKHQP.js → chunk-MBUXP3IS.js} +1 -1
- package/chunks/{chunk-RN6JS263.js → chunk-MEZA3VVH.js} +1 -1
- package/chunks/{chunk-OBFKP7RI.js → chunk-MWN6TR36.js} +1 -1
- package/chunks/{chunk-VHJ43ZYJ.js → chunk-O7XRQWCG.js} +1 -1
- package/chunks/{chunk-H224LNV3.js → chunk-OYFRLT5E.js} +1 -1
- package/chunks/{chunk-3NWFV2YF.js → chunk-PMBGV76N.js} +1 -1
- package/chunks/{chunk-YFAPACDE.js → chunk-PVM4IVFL.js} +6 -6
- package/chunks/{chunk-7WS2EYMQ.js → chunk-PWHD4NK3.js} +1 -1
- package/chunks/{chunk-JZIQSEFO.js → chunk-Q54NROBX.js} +1 -1
- package/chunks/{chunk-FCLAPJ22.js → chunk-QE7R4DPT.js} +1 -1
- package/chunks/{chunk-J6TW7GNF.js → chunk-QIUTQICH.js} +1 -1
- package/chunks/{chunk-TWDCN5H2.js → chunk-QK63EULE.js} +1 -1
- package/chunks/{chunk-HZZT75LI.js → chunk-QTAC4W7J.js} +1 -1
- package/chunks/{chunk-P7DIAJNX.js → chunk-R7HBR4QQ.js} +1 -1
- package/chunks/{chunk-U2FJSKS3.js → chunk-RHEMFKMX.js} +1 -1
- package/chunks/{chunk-TRRY3QMM.js → chunk-RL57IU47.js} +1 -1
- package/chunks/{chunk-SPWDYRDH.js → chunk-S2OOQRLJ.js} +1 -1
- package/chunks/{chunk-QBRADQ7L.js → chunk-SWTMWNTZ.js} +1 -1
- package/chunks/{chunk-AZUDF52L.js → chunk-SXTKQHFZ.js} +1 -1
- package/chunks/{chunk-5RQRSPPD.js → chunk-T5S3MJIK.js} +1 -1
- package/chunks/{chunk-I3ORWQ2U.js → chunk-UDGDEIBB.js} +1 -1
- package/chunks/{chunk-EMDEBV33.js → chunk-UIFBF3E7.js} +1 -1
- package/chunks/{chunk-BGEMWNES.js → chunk-UQDPWI7D.js} +1 -1
- package/chunks/{chunk-I5LKOTZT.js → chunk-VON4MVIM.js} +1 -1
- package/chunks/{chunk-HJPO6MEW.js → chunk-W5D2T2JK.js} +1 -1
- package/chunks/{chunk-F6YYDRMH.js → chunk-WNGYYU67.js} +1 -1
- package/chunks/{chunk-S2GKUZZZ.js → chunk-WO3F62ZD.js} +1 -1
- package/chunks/{chunk-K7KW3ZJQ.js → chunk-WVY5Q6YY.js} +1 -1
- package/chunks/{chunk-GH6DPLWU.js → chunk-Y4Q667BW.js} +1 -1
- package/chunks/{chunk-FH74N7Y7.js → chunk-YJLMFUCS.js} +2 -2
- package/chunks/{chunk-C3Y2S5AM.js → chunk-YKHRCSKP.js} +1 -1
- package/chunks/{chunk-P4UJ7CXJ.js → chunk-YLIS36QA.js} +1 -1
- package/chunks/{chunk-4QIFOIBS.js → chunk-YVZ4XZRB.js} +1 -1
- package/chunks/{chunk-KGRD6G5J.js → chunk-Z27JJPKN.js} +1 -1
- package/chunks/{chunk-KOHHDB2L.js → chunk-ZCIS6MJZ.js} +1 -1
- package/chunks/{chunk-QNNDZYVW.js → chunk-ZHLQ222N.js} +1 -1
- package/chunks/{chunk-KWRZ3WJO.js → chunk-ZP7MTWMR.js} +1 -1
- package/chunks/{codex-subagent-executor-H44VDB5E.js → codex-subagent-executor-6OJVGF2S.js} +1 -1
- package/chunks/{config-utils-4X4SV4RL.js → config-utils-FI3A4QAN.js} +1 -1
- package/chunks/{contextCommand-4KVOHTAJ.js → contextCommand-YEBZQHG4.js} +1 -1
- package/chunks/{core-runtime-4RARI4NX.js → core-runtime-CFMHUAS7.js} +1 -1
- package/chunks/{create-sub-session-CNSRJFYG.js → create-sub-session-G26337FT.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-6XQQPP2H.js → daemon-git-worktree-guard-ITU6NQIV.js} +1 -1
- package/chunks/{daemon-status-provider-PRTEQT5T.js → daemon-status-provider-CSWRGMRX.js} +1 -1
- package/chunks/{daemon-trust-policy-GXKJVZDU.js → daemon-trust-policy-IYD7NOGK.js} +1 -1
- package/chunks/{daemon-trust-policy-monitor-L2ORKHMM.js → daemon-trust-policy-monitor-OWUP5SYB.js} +1 -1
- package/chunks/{deferred-core-runtime-RZQFUSPX.js → deferred-core-runtime-CVCQU7O4.js} +1 -1
- package/chunks/{edit-W44XQCIS.js → edit-7YBQLILC.js} +1 -1
- package/chunks/{enterPlanMode-B456A2XO.js → enterPlanMode-L3PVSD2P.js} +1 -1
- package/chunks/{environment-DSGQSQFS.js → environment-BVEOYQHO.js} +1 -1
- package/chunks/{errors-KL725247.js → errors-VQWBGR6D.js} +1 -1
- package/chunks/{execution-tool-KT3EBWHG.js → execution-tool-P7CBXSGZ.js} +1 -1
- package/chunks/{execution-worker-LPQ4HMN4.js → execution-worker-RZXNYK4B.js} +1 -1
- package/chunks/{exitPlanMode-JLKS76IA.js → exitPlanMode-MBUTM3NW.js} +1 -1
- package/chunks/{fast-path-5UD52IHH.js → fast-path-T2FDUSHV.js} +1 -1
- package/chunks/{glob-LYA2H6X3.js → glob-RH7XXSYE.js} +1 -1
- package/chunks/{goal-tools-SHSIDLZX.js → goal-tools-K6XBCE5E.js} +1 -1
- package/chunks/{handleAutoUpdate-T4RE6CZN.js → handleAutoUpdate-PG7R3KPH.js} +1 -1
- package/chunks/{i18n-5DK327WA.js → i18n-EGTBMA3N.js} +1 -1
- package/chunks/{initializer-TJGE4OJA.js → initializer-RIKH4PCP.js} +1 -1
- package/chunks/{installationInfo-MZ62GDIC.js → installationInfo-BBADHZLD.js} +1 -1
- package/chunks/{interactive-mod-session-YCUBQ6RM.js → interactive-mod-session-7RDKAHZ4.js} +1 -1
- package/chunks/{list-4L3LYDQM.js → list-YEGWEHJX.js} +1 -1
- package/chunks/{llm-3JQWBZXV.js → llm-D3LHPY27.js} +4 -4
- package/chunks/{llm-content-generator-6UPJWPOM.js → llm-content-generator-BLTBMV66.js} +1 -1
- package/chunks/{loadedSettingsAdapter-STPKAFJG.js → loadedSettingsAdapter-PLGMKMFO.js} +1 -1
- package/chunks/{local-execution-environment-IE5BOI7Y.js → local-execution-environment-4LDKFNC4.js} +1 -1
- package/chunks/{loggingContentGenerator-4KKWPZJA.js → loggingContentGenerator-376R7DRI.js} +1 -1
- package/chunks/{manage-memory-CRV5SXZZ.js → manage-memory-2ZTIVKNU.js} +1 -1
- package/chunks/{managed-execution-engine-FHLEWVND.js → managed-execution-engine-5LOM3MXG.js} +1 -1
- package/chunks/{managed-npm-update-BRHPOKDU.js → managed-npm-update-2C5JYEXW.js} +1 -1
- package/chunks/{managed-runtime-attestation-worker-GIQKZ5BH.js → managed-runtime-attestation-worker-R2FECMZK.js} +1 -1
- package/chunks/{managed-runtime-bootstrap-P72BT46H.js → managed-runtime-bootstrap-KPLGH4UE.js} +1 -1
- package/chunks/{managed-runtime-session-worker-IYCJDB5K.js → managed-runtime-session-worker-EVKNPK3V.js} +1 -1
- package/chunks/{managed-runtime-ssh-worker-ONT4V5ZG.js → managed-runtime-ssh-worker-IA4HZ3PD.js} +1 -1
- package/chunks/{mcp-NXCQVE2Y.js → mcp-S67IJLI6.js} +1 -1
- package/chunks/{model-call-collection-3DNL45M5.js → model-call-collection-6OGPDTPG.js} +1 -1
- package/chunks/{model-configuration-6HRNYBWV.js → model-configuration-6RWVBOQS.js} +1 -1
- package/chunks/{modelConfigUtils-SKBN64ZW.js → modelConfigUtils-M3TVVYAO.js} +1 -1
- package/chunks/{monitor-7I7Q73UR.js → monitor-ZHOFTN7N.js} +1 -1
- package/chunks/{nonInteractiveCli-YLYRJUBE.js → nonInteractiveCli-6SUGPTJ4.js} +1 -1
- package/chunks/{nonInteractiveToolExecutor-U2ASWT63.js → nonInteractiveToolExecutor-SAHBGO3A.js} +1 -1
- package/chunks/{notebook-edit-WAD7IQCF.js → notebook-edit-ETUOQH6G.js} +1 -1
- package/chunks/{omni-POUUDVU3.js → omni-HV2UBGMZ.js} +1 -1
- package/chunks/{openaiContentGenerator-L7X6IVPL.js → openaiContentGenerator-RZCG7E4M.js} +1 -1
- package/chunks/{openaiResponsesContentGenerator-7XCMFI6P.js → openaiResponsesContentGenerator-X23L5JV3.js} +1 -1
- package/chunks/{pidfile-MQQT2ZDA.js → pidfile-26WXQCHG.js} +1 -1
- package/chunks/{processUtils-OZLF72NC.js → processUtils-WXLFGNBT.js} +1 -1
- package/chunks/{prompt-terminal-ledger-IYUF6SUU.js → prompt-terminal-ledger-EIZZHF4A.js} +1 -1
- package/chunks/{qwenContentGenerator-DKH3ILUO.js → qwenContentGenerator-GOY7Y6KH.js} +1 -1
- package/chunks/{reactive-degrade-KSNGHMBN.js → reactive-degrade-MNMTTHO5.js} +1 -1
- package/chunks/{read-file-VEELW4OQ.js → read-file-OJNGPNTQ.js} +1 -1
- package/chunks/{resumeHistoryUtils-4SFDTBXU.js → resumeHistoryUtils-QWOWF4VY.js} +1 -1
- package/chunks/{review-QA6HRLVU.js → review-5S24HP2V.js} +1 -1
- package/chunks/{ripGrep-4J6ASSE3.js → ripGrep-Y4PY2MQF.js} +1 -1
- package/chunks/{run-qwen-serve-EJ67LA5O.js → run-qwen-serve-EOUUDZUK.js} +2 -2
- package/chunks/{runtime-6E2FSB5U.js → runtime-ZBPOQX6E.js} +1 -1
- package/chunks/{sandboxConfig-4VE4LNRI.js → sandboxConfig-R7KDS3P5.js} +1 -1
- package/chunks/{scheduled-tasks-GM5EJMK7.js → scheduled-tasks-Q6V7D6K6.js} +1 -1
- package/chunks/{scheduler-HOSVIIOE.js → scheduler-EBQY6BOK.js} +1 -1
- package/chunks/{search-memory-HEAQCHIK.js → search-memory-HX6E23JC.js} +1 -1
- package/chunks/{send-message-FAQ7XEZ5.js → send-message-OZCCCH2F.js} +1 -1
- package/chunks/{serve-VNKPOWSW.js → serve-CMGCI4BK.js} +1 -1
- package/chunks/{server-U2XBJLOV.js → server-7LOAKPDN.js} +3 -3
- package/chunks/{session-AZGROSFX.js → session-LVQYZSJE.js} +1 -1
- package/chunks/{session-attachments-root-6M2ECUNK.js → session-attachments-root-NWG7JOMN.js} +1 -1
- package/chunks/{session-execution-engine-selector-PYDVOSJF.js → session-execution-engine-selector-PHH47ZMA.js} +1 -1
- package/chunks/{session-pr-refresh-3IS7DLEV.js → session-pr-refresh-5IACZPCY.js} +1 -1
- package/chunks/{sessionService-3FWNA4ZB.js → sessionService-7PFAWLHC.js} +1 -1
- package/chunks/{settings-VHKT7JJC.js → settings-CPZBOHN5.js} +1 -1
- package/chunks/{shell-TYOPVB7H.js → shell-A7NLPS2W.js} +1 -1
- package/chunks/{skill-GJQIE5AX.js → skill-VGANGVOD.js} +1 -1
- package/chunks/{skill-settings-76NI6SF3.js → skill-settings-TSZO3X6N.js} +1 -1
- package/chunks/{spawnChannel-FMSYLDKB.js → spawnChannel-2JQYNQKT.js} +1 -1
- package/chunks/{standalone-update-BPZQDQHD.js → standalone-update-QXC3RM6I.js} +1 -1
- package/chunks/{start-opentui-ui-X7XYV5N3.js → start-opentui-ui-BKJ4JHVK.js} +1 -1
- package/chunks/{startInteractiveUI-UZDF4JUB.js → startInteractiveUI-4QIPR7ZY.js} +1 -1
- package/chunks/{team-create-RFZNEF76.js → team-create-5MU6BGXX.js} +1 -1
- package/chunks/{team-plan-approval-MGW3JGSC.js → team-plan-approval-NZUJ6FSA.js} +1 -1
- package/chunks/{terminal-image-renderer-3UED5GZV.js → terminal-image-renderer-CTMJULJ2.js} +1 -1
- package/chunks/{theme-manager-SF6FSSZW.js → theme-manager-6H7GA6QR.js} +1 -1
- package/chunks/{tool-call-W2CJR74U.js → tool-call-XG4CAD5X.js} +1 -1
- package/chunks/{tool-result-media-XSFON2ZQ.js → tool-result-media-RJ5ONO7R.js} +1 -1
- package/chunks/{tool-search-7GY5YTOU.js → tool-search-KBINGEWV.js} +1 -1
- package/chunks/{total-session-admission-OATGW6M5.js → total-session-admission-XNWYCO7G.js} +1 -1
- package/chunks/{trustedFolders-AM4PSGUB.js → trustedFolders-JT5MOB3A.js} +1 -1
- package/chunks/{update-relaunch-YKY52XUT.js → update-relaunch-HXMQI3HO.js} +1 -1
- package/chunks/{updateCheck-RKQ5CPZM.js → updateCheck-XWE3TWL5.js} +1 -1
- package/chunks/{upload-config-CBT7ARZY.js → upload-config-ET7NRHU7.js} +1 -1
- package/chunks/{useAutoAcceptIndicator-Z3YWPUNO.js → useAutoAcceptIndicator-TPMYKNJX.js} +1 -1
- package/chunks/{validateNonInterActiveAuth-7CQHU2RF.js → validateNonInterActiveAuth-U52KMEDS.js} +1 -1
- package/chunks/{version-N2OB6KWP.js → version-CW4RTJ3H.js} +1 -1
- package/chunks/{web-fetch-L5XCBCBA.js → web-fetch-UPMJ3XIZ.js} +1 -1
- package/chunks/{web-search-4EHUA3LJ.js → web-search-PXABWQVC.js} +1 -1
- package/chunks/{workflow-FGAUAYIP.js → workflow-UQ4V3NBZ.js} +1 -1
- package/chunks/{workflow-ancestor-trust-F7RRN6I3.js → workflow-ancestor-trust-QII5KTUJ.js} +1 -1
- package/chunks/{workspace-agents-QW4TKC52.js → workspace-agents-Q3KKMDX2.js} +1 -1
- package/chunks/{workspace-providers-status-MFSZT3YA.js → workspace-providers-status-3ASB64FB.js} +1 -1
- package/chunks/{workspace-registration-store-WQRDSIEI.js → workspace-registration-store-2NPD6U3B.js} +1 -1
- package/chunks/{workspace-registry-FXZFRSCH.js → workspace-registry-6QJKRCDR.js} +1 -1
- package/chunks/{workspace-runtime-coordinator-LJ5YAT3A.js → workspace-runtime-coordinator-ZXUWDQIB.js} +1 -1
- package/chunks/{workspace-service-U632SUWU.js → workspace-service-YPYTYYUN.js} +1 -1
- package/chunks/{workspace-skills-status-M7YXM3LF.js → workspace-skills-status-VTFHQ6R7.js} +1 -1
- package/chunks/{workspace-trust-reconciler-NLJGGI4K.js → workspace-trust-reconciler-52CZVPKH.js} +1 -1
- package/chunks/{write-file-BJCKSXX7.js → write-file-FDBR76G5.js} +1 -1
- package/chunks/{zoom-image-TLJPD4DB.js → zoom-image-MYKWCCXO.js} +1 -1
- package/cli.js +2 -2
- package/execution-worker.js +1 -1
- package/export-transcript-document.js +1 -1
- package/package.json +4 -4
- package/vendor/landlock-run/arm64-linux/qwen-landlock-run +0 -0
- package/vendor/landlock-run/x64-linux/qwen-landlock-run +0 -0
- package/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/vendor/ripgrep/arm64-linux/rg +0 -0
- package/vendor/ripgrep/x64-darwin/rg +0 -0
- package/vendor/ripgrep/x64-linux/rg +0 -0
- package/vendor/tree-sitter/tree-sitter-bash.wasm +0 -0
- package/vendor/tree-sitter/tree-sitter.wasm +0 -0
- package/web-shell/assets/{PierreFilePreview-D9tbdFw8.js → PierreFilePreview-DGTp45Z4.js} +1 -1
- package/web-shell/assets/{SpreadsheetPreview-CeFAk2s-.js → SpreadsheetPreview-DVC_YVei.js} +1 -1
- package/web-shell/assets/{WorkspaceFileBrowser-iaURw8SR.js → WorkspaceFileBrowser-DaQNpS06.js} +1 -1
- package/web-shell/assets/{abnfDiagram-VCTEODGH-Z4CT1NCF.js → abnfDiagram-VCTEODGH-wJbiOoPK.js} +1 -1
- package/web-shell/assets/{agents-route-B7o2Rq-a.js → agents-route-DUhhA1KI.js} +1 -1
- package/web-shell/assets/{arc-DcHBdUJQ.js → arc-CvpNMy1d.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-DRDhEC81.js → architectureDiagram-5GKGNRK7-DIhi3dIz.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-CYRE6WIc.js → blockDiagram-NRAW4CY4-CoeyTlVJ.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-CIM8N_Sj.js → c4Diagram-UCG6FXSJ-BYoK_I9M.js} +1 -1
- package/web-shell/assets/channel-DvtGOCg6.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-Bbfka9Fe.js → chunk-2Q5K7J3B-BeD4GwPg.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-C02zF3RY.js → chunk-5VM5RSS4-BpkJsB_y.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-Dn0wRD2F.js → chunk-F27PBJKO-BROEWQ1J.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-Dwpl3l0W.js → chunk-G27WJ6UU-DA8Wtppt.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-sQbzSoTR.js → chunk-JWPE2WC7-GqB-QFh5.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-DNlNDtfr.js → chunk-LCL6LL3I-DIPUwYsX.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-BOgf1Dl3.js → chunk-POPQ4Y6H-DbnU-jxX.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-DOofWP00.js → chunk-SVP7TREG-DvH7bQ-w.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-Bj9FxhWU.js → chunk-XXDRQBXY-DdVWVo3U.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-9NR5W1rE.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-9NR5W1rE.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CUlPjyww.js → cose-bilkent-JH36ORCC-JgMKxP9H.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-5noArzI7.js → cynefin-OW5HDTMX-BVUpNgVm.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DELvTqmf.js → cynefinDiagram-5FMLGOSQ-CxAdk-iS.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-CAL6Z3hL.js → dagre-3AP2YEHR-CvXWkM86.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-DQC2gaIi.js → diagram-S7CK7UJ4-DD_PS4nm.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-CkU6M-3R.js → diagram-UQ7AKVKN-EVZkTODD.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-CvHpHwVx.js → diagram-VSXAHHWV-CGZc1pZU.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-D9l5F9iB.js → diagram-VX7I27RA-DjNql499.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-DW-VFvYx.js → diagram-Z3DM3KII-CCa0WtmR.js} +1 -1
- package/web-shell/assets/{docx-preview-8MQfOGQh.js → docx-preview-DpVElxvj.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-C0Q71wC_.js → ebnfDiagram-PWID7BFC-W2hoOJZF.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-DWDLRh1S.js → erDiagram-SSCWMZ5O-Dz5NxxEb.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CVzJnl1P.js → flowDiagram-A5DVABFB-BTMAn8b5.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-B320pcgR.js → ganttDiagram-EL5Y4UJY-BaFrd5ZY.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Di4uZh-J.js → gitGraphDiagram-WWUBYQGX-IlmdUqRk.js} +1 -1
- package/web-shell/assets/{index-Csr8Hx_O.js → index-C2ez0ZjE.js} +1 -1
- package/web-shell/assets/{index-C9BecA_H.js → index-Cs-XBNmB.js} +101 -101
- package/web-shell/assets/{infoDiagram-RXCK75RN-CbafhxET.js → infoDiagram-RXCK75RN-BHs9kpar.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DrQuIDeR.js → ishikawaDiagram-5VMMS53U-DWCEQ85v.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-BschmjBj.js → journeyDiagram-EYS64GPL-RTDAw9yc.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-B7x9BU9N.js → kanban-definition-3QL26DDD-B7Nl9bq6.js} +1 -1
- package/web-shell/assets/{layout-BewPaOyO.js → layout-BabjFEb1.js} +1 -1
- package/web-shell/assets/{linear-CnLILCVp.js → linear-CZuGjuQd.js} +1 -1
- package/web-shell/assets/{mermaid.core-Csj9KPfJ.js → mermaid.core-CK78bIGt.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-CIGTi5gg.js → mindmap-definition-FBJOCRG2-BbcCi_jP.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-CuWBRQzb.js → pegDiagram-XKGWAZYB-DpLQ7u8i.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-Co5ukXCE.js → pieDiagram-E7YTZNPT-BpWFVtM0.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-B0hzjh6o.js → quadrantDiagram-AXDQQJYC-CGzYlaN1.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-nhkJB0xD.js → railroadDiagram-O6MQD6OU-BNQYW-Zi.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-C7NpxjVR.js → requirementDiagram-EFPCY7ZU-C4fCdIDW.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CUWlnhZC.js → sankeyDiagram-P5KCCOFB-BvbbAnMA.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BoykH0_J.js → sequenceDiagram-WJ2MYXX4-DGXNc6E1.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-aF-PkSe5.js → sizeCapture-X5ZJPWSS-C4W45Xf5.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-g5q0b922.js → stateDiagram-HBIQ2CUA-D3q0fen-.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-XKoYIi05.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-BbASszfe.js → swimlanes-XN3QIQJK-D8n-ResR.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C7qJMSzs.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-AXIV0TJJ.js → timeline-definition-24CTP7MA-Cio4y1mM.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-B-E0rj1h.js → vennDiagram-4TSXK5OY-DVlg0xnc.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-DiOOYJ2D.js → wardleyDiagram-VM6X3IG4-CgeIsimQ.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-De_z7HkS.js → xychartDiagram-S5SC5T6Z-UXjyTLnU.js} +1 -1
- package/web-shell/index.html +1 -1
- package/web-shell/sw.js +1 -1
- package/web-shell/assets/channel-Bwr9aS_E.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-BmY8Mmyo.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-BmY8Mmyo.js +0 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CTOjUMow.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Bz6ia3oL.js +0 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{AgentEventEmitter,MAX_FAILURE_LINE_CHARS,MAX_TURN_BUDGET_TOKENS,MAX_WORKFLOW_CALL_TRACES,REPORTED_FAILURE_KEYS,WORKFLOW_BATCH_LIMIT,attachJsonlTranscriptWriter,buildAgentTranscriptAttach,canonicalAgentToolName,createWorkflowSandbox,debugLogger,deleteInlineWorkflowScript,deriveApprovalModeConfig,deriveConfig,deriveWorktreeConfig,describeAgentToolAllowEntryProblem,describeOversizedBatch,evaluateWorkflowSize,getAgentMetaPath,getWorkflowTaskMutationKey,installSessionWorkflowRevisionWriteThrough,isActiveWorkflowStatus,isSymlinkedRoot,isTerminalWorkflowStatus,isWorkflowRunId,isWorkflowRunPersistenceActive,isWorkflowSizeWarning,isWorkflowSourceRef,listAgentToolNames,markWorkflowRunPersistenceActive,narrowAgentTools,persistInlineWorkflowScript,readAgentMeta,readWorkflowSourceRef,readWorkflowStepId,rebuildToolRegistryOnOverride,reportedFailureLines,resolveAgentExecutionBackend,resolveExternalWorktreeDir,resolveSavedWorkflowScript,resolveWorkflowSizeCaps,resolveWorkflowSizeGuidelineSetting,sanitizeWorkflowText,stringifyWorkflowResult,toModelVisibleSubagentResult,truncateWorkflowText,tryWithWorkflowTaskMutation,workflowPreLaunchGate,writeAgentMeta}from"./chunk-RKPHDO42.js";import{GitWorktreeService,generateAgentWorktreeSlug,writeWorktreeSessionMarker}from"./chunk-LLX4BCWK.js";import{readBundledReference,resolveBundledReferenceSurface}from"./chunk-GWYQTKSR.js";import{parsePositiveIntegerEnv}from"./chunk-BG67XABA.js";import{SUBAGENT_PLAN_LIFECYCLE_TOOLS}from"./chunk-FQQMMFT6.js";import{getCurrentAgentId,runWithAgentContext}from"./chunk-7J2TOJMG.js";import{createAbortController,createChildAbortController}from"./chunk-476F6QIM.js";import{WorkflowRunEvent,WorkflowSizeWarningEvent,logWorkflowRun,logWorkflowSizeWarning,uiTelemetryService}from"./chunk-DR3HLUJ5.js";import{parseLineTolerantWithIntegrity,writeLine}from"./chunk-UQFTXKEB.js";import{REASONING_EFFORT_TIERS,normalizeReasoningEffort}from"./chunk-TAAJ7TDB.js";import{SyntheticOutputTool}from"./chunk-BWU6AH5O.js";import{atomicWriteFile,renameWithRetry}from"./chunk-BMHYEQTI.js";import{stripAnsiAndControl}from"./chunk-4YLXNRRH.js";import{SchemaValidator}from"./chunk-SVAPAMMG.js";import{ToolNames,resolveBuiltinToolName}from"./chunk-2UNFJQ2D.js";import{createDebugLogger}from"./chunk-JAUJI56S.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var debugLogger2=createDebugLogger("WORKFLOW_BUDGET");var MAX_TOKENS_PER_WORKFLOW_ENV="QWEN_CODE_MAX_TOKENS_PER_WORKFLOW";var HARD_MAX_TOKENS_CEILING=MAX_TURN_BUDGET_TOKENS;function resolveMaxTokensPerWorkflow(env=process.env){const raw=env[MAX_TOKENS_PER_WORKFLOW_ENV];if(raw===void 0||raw.trim()===""){return null}const parsed=parsePositiveIntegerEnv(raw,0);if(parsed<1){debugLogger2.warn(`Invalid ${MAX_TOKENS_PER_WORKFLOW_ENV}=${JSON.stringify(raw)}, treating as unset (no cap)`);return null}if(parsed>HARD_MAX_TOKENS_CEILING){debugLogger2.warn(`${MAX_TOKENS_PER_WORKFLOW_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_TOKENS_CEILING}); clamping.`);return HARD_MAX_TOKENS_CEILING}return parsed}__name(resolveMaxTokensPerWorkflow,"resolveMaxTokensPerWorkflow");var WorkflowBudgetImpl=class _WorkflowBudgetImpl{static{__name(this,"WorkflowBudgetImpl")}total;source;directiveText;turnSpent;_runSpent;constructor(total,options={}){this.total=total;this.source=total===null?void 0:options.source??"env";this.directiveText=this.source==="directive"?options.directiveText:void 0;this.turnSpent=options.turnSpent;this._runSpent=0}spent(){if(this.source!=="env"&&this.turnSpent)return this.turnSpent();return this._runSpent}runSpent(){return this._runSpent}runCap(){return this.source==="env"?this.total:null}remaining(){if(this.total===null)return Infinity;return Math.max(0,this.total-this.spent())}recordSpent(deltaTokens){if(!Number.isFinite(deltaTokens)||deltaTokens<=0)return;this._runSpent+=deltaTokens}static fromEnv(env=process.env){return new _WorkflowBudgetImpl(resolveMaxTokensPerWorkflow(env))}static fromConfig(config,env=process.env){const sessionId=config.getSessionId?.();const turn=sessionId===void 0?null:config.getTurnBudget?.()?.current(sessionId)??null;const turnSpent=turn?()=>Math.max(0,uiTelemetryService.getTotalOutputTokens(turn.sessionId)-turn.outputTokensAtTurnStart):void 0;if(turn&&turn.budget!==null){return new _WorkflowBudgetImpl(turn.budget,{source:"directive",turnSpent,directiveText:turn.directiveText})}const envCap=resolveMaxTokensPerWorkflow(env);if(envCap!==null){return new _WorkflowBudgetImpl(envCap,{source:"env"})}return new _WorkflowBudgetImpl(null,{turnSpent})}};var WorkflowBudgetExceededError=class extends Error{static{__name(this,"WorkflowBudgetExceededError")}name="WorkflowBudgetExceededError";runId;budgetTotal;spent;constructor(runId,budgetTotal,spent){super(`Workflow ${runId}: token budget exceeded (${spent} / ${budgetTotal} output tokens). Stopping further agent() calls.`);this.runId=runId;this.budgetTotal=budgetTotal;this.spent=spent}};init_esbuild_shims();import{randomBytes}from"node:crypto";import{AsyncLocalStorage}from"node:async_hooks";import*as os from"node:os";init_esbuild_shims();var WorkflowAgentFailedError=class extends Error{static{__name(this,"WorkflowAgentFailedError")}name="WorkflowAgentFailedError";kind;terminateMode;constructor(message,kind,terminateMode){super(message);this.kind=kind;this.terminateMode=terminateMode}};function isWorkflowAgentFailedError(error){return typeof error==="object"&&error!==null&&error.name==="WorkflowAgentFailedError"}__name(isWorkflowAgentFailedError,"isWorkflowAgentFailedError");var WorkflowAgentCapExceededError=class extends Error{static{__name(this,"WorkflowAgentCapExceededError")}name="WorkflowAgentCapExceededError";constructor(maxAgents){super(`Workflow exceeded the maximum of ${maxAgents} agent() calls per run. This usually means a loop using budget.remaining() never terminates because no token budget was set \u2014 remaining() returns Infinity when budget.total is null. Add a hard iteration cap to the loop, or pass a token budget.`)}};function isWorkflowRunLevelError(error){if(typeof error!=="object"||error===null)return false;const name=error.name;return error.__wfRunFailure===true||name==="WorkflowBudgetExceededError"||name==="WorkflowAgentCapExceededError"}__name(isWorkflowRunLevelError,"isWorkflowRunLevelError");var WORKFLOW_ABORT_REASON_STALLED="stalled";init_esbuild_shims();var DEFAULT_STALL_MS=18e4;var MAX_TIMER_DELAY_MS=2147483647;var MAX_STALL_ATTEMPTS=3;var MAX_WORKFLOW_STALL_MS_ENV="QWEN_CODE_WORKFLOW_STALL_SECONDS";function resolveStallMs(perCall,env=process.env){if(typeof perCall==="number"&&Number.isFinite(perCall)){if(perCall===0)return 0;if(perCall>0)return perCall}const raw=env[MAX_WORKFLOW_STALL_MS_ENV];const trimmed=raw?.trim();if(trimmed){if(trimmed==="0")return 0;const sec=parsePositiveIntegerEnv(trimmed,0);if(sec>0)return sec*1e3}return DEFAULT_STALL_MS}__name(resolveStallMs,"resolveStallMs");var debugLogger3=createDebugLogger("WORKFLOW_STALL");function attachStallWatchdog(emitter,controller,stallMs){if(stallMs<=0){return{stalled:__name(()=>false,"stalled"),dispose:__name(()=>{},"dispose")}}let inFlightTools=0;let fired=false;let timer;let disposed=false;let lastActivity;const waits=new Map;const startedWaitIds=new Set;const clear=__name(()=>{if(timer){clearTimeout(timer);timer=void 0}},"clear");const markActivity=__name(()=>{lastActivity=Math.max(lastActivity??0,performance.now())},"markActivity");const arm=__name(()=>{clear();if(disposed||fired)return;if(inFlightTools>0)return;if(lastActivity===void 0&&waits.size===0)return;const now=performance.now();let base=lastActivity??now;for(const[waitId,until]of waits){if(until<=now){waits.delete(waitId);lastActivity=Math.max(lastActivity??until,until)}base=Math.max(base,until)}const due=base+stallMs;if(due>now){timer=setTimeout(arm,Math.min(due-now,MAX_TIMER_DELAY_MS));timer.unref?.();return}fired=true;debugLogger3.warn(`[Workflow] agent dispatch stalled \u2014 no progress for ${stallMs}ms; aborting.`);try{controller.abort(WORKFLOW_ABORT_REASON_STALLED)}catch(e){debugLogger3.warn("stall watchdog abort threw:",e)}},"arm");const onActivity=__name(()=>{markActivity();arm()},"onActivity");const onToolCall=__name(()=>{inFlightTools+=1;clear()},"onToolCall");const onToolResult=__name(()=>{inFlightTools=Math.max(0,inFlightTools-1);markActivity();arm()},"onToolResult");const onRetryWait=__name(event=>{if(event.phase==="start"){if(startedWaitIds.has(event.waitId))return;if(!Number.isFinite(event.delayMs)||event.delayMs<=0)return;startedWaitIds.add(event.waitId);const now=performance.now();waits.set(event.waitId,now+event.delayMs);lastActivity??=now}else{if(!waits.delete(event.waitId))return;markActivity()}arm()},"onRetryWait");emitter.on("round_start",onActivity);emitter.on("round_end",onActivity);emitter.on("stream_text",onActivity);emitter.on("usage_metadata",onActivity);emitter.on("tool_call",onToolCall);emitter.on("tool_result",onToolResult);emitter.on("retry_wait",onRetryWait);return{stalled:__name(()=>fired,"stalled"),dispose:__name(()=>{if(disposed)return;disposed=true;clear();waits.clear();emitter.off("round_start",onActivity);emitter.off("round_end",onActivity);emitter.off("stream_text",onActivity);emitter.off("usage_metadata",onActivity);emitter.off("tool_call",onToolCall);emitter.off("tool_result",onToolResult);emitter.off("retry_wait",onRetryWait)},"dispose")}}__name(attachStallWatchdog,"attachStallWatchdog");async function runStallResilient(attemptFn,opts){const{stallMs,signal,label}=opts;if(stallMs<=0){const emitter=new AgentEventEmitter;return attemptFn(signal??new AbortController().signal,emitter)}let attempt=0;for(;;){attempt+=1;const controller=new AbortController;let onParentAbort;if(signal){if(signal.aborted){controller.abort(signal.reason)}else{onParentAbort=__name(()=>controller.abort(signal.reason),"onParentAbort");signal.addEventListener("abort",onParentAbort)}}const emitter=new AgentEventEmitter;const watchdog=attachStallWatchdog(emitter,controller,stallMs);try{return await attemptFn(controller.signal,emitter)}catch(err){if(signal?.aborted)throw err;if(watchdog.stalled()&&attempt<MAX_STALL_ATTEMPTS){debugLogger3.warn(`[Workflow] agent "${label??"workflow-agent"}" stalled (attempt ${attempt}/${MAX_STALL_ATTEMPTS}) \u2014 retrying.`);continue}if(watchdog.stalled()){throw new WorkflowAgentFailedError(`agent "${label??"workflow-agent"}" stalled on all ${MAX_STALL_ATTEMPTS} attempts (no progress for ${stallMs}ms each).`,"stalled")}throw err}finally{watchdog.dispose();if(onParentAbort&&signal){signal.removeEventListener("abort",onParentAbort)}}}}__name(runStallResilient,"runStallResilient");init_esbuild_shims();var MAX_ERROR_DETAIL_LENGTH=500;var MAX_KEY_LENGTH=120;var MAX_WALK_DEPTH=32;var MAX_WALK_NODES=1e3;var COMPOUND_KEYWORDS=["$ref","$dynamicRef","$recursiveRef","allOf","anyOf","oneOf","not","if","then","else","dependencies","dependentSchemas","dependentRequired","unevaluatedProperties","propertyNames"];function prepareWorkflowSchema(schema){const shape=describeNonObject(schema);if(shape!==void 0){return fail(`must be a JSON Schema object, got ${shape}.`)}let copy;try{copy=JSON.parse(JSON.stringify(schema))}catch(error){return fail(`is not JSON: ${errorText(error)}`)}const strictError=SchemaValidator.compileStrict(copy,{allowMatchingProperties:true});if(strictError!==null){return fail(`is not a valid JSON Schema: ${strictError}`)}if(copy["$async"]===true){return fail("uses $async, which structured output does not support. Remove $async.")}const contradiction=findContradiction(copy);if(contradiction!==void 0){return fail(contradiction)}const compiled=SchemaValidator.compileIsolated(copy);if(compiled.error!==void 0){return fail(`could not be compiled: ${compiled.error}`)}return{ok:true,validate:compiled.validate}}__name(prepareWorkflowSchema,"prepareWorkflowSchema");function validateStructuredResult(value,validate){if(typeof value!=="object"||value===null||Array.isArray(value)){return{error:"the result is not a JSON object"}}let copy;try{copy=JSON.parse(JSON.stringify(value))}catch(error){return{error:`the result is not JSON: ${errorText(error)}`}}try{const error=validate(copy);return error===null?{value:copy}:{error}}catch(error){return{error:errorText(error)}}}__name(validateStructuredResult,"validateStructuredResult");function fail(detail){return{ok:false,error:`agent({schema}): ${boundedDetail(detail)}`}}__name(fail,"fail");function boundedDetail(detail){const clean=stripAnsiAndControl(detail);return clean.length>MAX_ERROR_DETAIL_LENGTH?`${clean.slice(0,MAX_ERROR_DETAIL_LENGTH)}\u2026`:clean}__name(boundedDetail,"boundedDetail");function errorText(error){return error instanceof Error?error.message:String(error)}__name(errorText,"errorText");function describeNonObject(value){if(value===null)return"null";if(Array.isArray(value))return"an array";if(typeof value!=="object")return`a ${typeof value}`;return void 0}__name(describeNonObject,"describeNonObject");function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}__name(isRecord,"isRecord");function pointerToken(key){return key.replace(/~/g,"~0").replace(/\//g,"~1")}__name(pointerToken,"pointerToken");function quoteKey(key){const quoted=JSON.stringify(key);return quoted.length>MAX_KEY_LENGTH?`${quoted.slice(0,MAX_KEY_LENGTH)}\u2026"`:quoted}__name(quoteKey,"quoteKey");function typeAllowsObject(type){if(typeof type==="string")return type==="object";if(Array.isArray(type))return type.includes("object");return void 0}__name(typeAllowsObject,"typeAllowsObject");function isObjectOnly(node){const type=node["type"];const onlyObject=type==="object"||Array.isArray(type)&&type.length===1&&type[0]==="object";return onlyObject&&node["nullable"]!==true}__name(isObjectOnly,"isObjectOnly");function rootExcludesObject(root){if(typeAllowsObject(root["type"])===false){return`# does not accept an object (type ${stripAnsiAndControl(JSON.stringify(root["type"]))}); structured output is always a JSON object.`}if("const"in root&&!isRecord(root["const"])){return"# does not accept an object (its const is not an object); structured output is always a JSON object."}if(Array.isArray(root["enum"])&&!root["enum"].some(isRecord)){return"# does not accept an object (its enum has no object member); structured output is always a JSON object."}return void 0}__name(rootExcludesObject,"rootExcludesObject");function findContradiction(root){const rootProblem=rootExcludesObject(root);if(rootProblem!==void 0)return rootProblem;let visited=0;const visit=__name((node,pointer,depth)=>{visited+=1;if(depth>MAX_WALK_DEPTH||visited>MAX_WALK_NODES)return void 0;if(COMPOUND_KEYWORDS.some(keyword=>keyword in node))return void 0;const required=node["required"];if(!Array.isArray(required)||required.length===0)return void 0;if(!required.every(key=>typeof key==="string")){return void 0}const properties=isRecord(node["properties"])?node["properties"]:{};const patterns=compilePatterns(node["patternProperties"]);if(patterns===void 0)return void 0;const maxProperties=node["maxProperties"];const distinct=new Set(required);if(typeof maxProperties==="number"&&distinct.size>maxProperties){return`${pointer}/required lists ${distinct.size} distinct properties, but ${pointer}/maxProperties allows at most ${maxProperties}.`}for(let index=0;index<required.length;index++){const key=required[index];const requiredAt=`${pointer}/required/${index}`;const declared=Object.hasOwn(properties,key);const matching=patterns.filter(entry=>entry.regex.test(key));if(declared&&properties[key]===false){return`${requiredAt} requires ${quoteKey(key)}, but ${pointer}/properties/${pointerToken(key)} is false, which forbids it.`}const forbiddingPattern=matching.find(entry=>entry.schema===false);if(forbiddingPattern!==void 0){return`${requiredAt} requires ${quoteKey(key)}, but ${pointer}/patternProperties/${pointerToken(forbiddingPattern.source)} is false, which forbids it.`}if(!declared&&matching.length===0&&node["additionalProperties"]===false){return`${requiredAt} requires ${quoteKey(key)}, but this object forbids it via additionalProperties:false (it is not in properties and matches no patternProperties).`}}for(const key of distinct){if(!Object.hasOwn(properties,key))continue;const child=properties[key];if(!isRecord(child)||!isObjectOnly(child))continue;const problem=visit(child,`${pointer}/properties/${pointerToken(key)}`,depth+1);if(problem!==void 0)return problem}return void 0},"visit");return visit(root,"#",0)}__name(findContradiction,"findContradiction");function compilePatterns(value){if(value===void 0)return[];if(!isRecord(value))return void 0;const entries=[];for(const[source,schema]of Object.entries(value)){try{entries.push({source,regex:new RegExp(source,"u"),schema})}catch{return void 0}}return entries}__name(compilePatterns,"compilePatterns");init_esbuild_shims();import{createHash,randomUUID}from"node:crypto";import{constants,promises as fs}from"node:fs";import path from"node:path";var debugLogger4=createDebugLogger("WORKFLOW_JOURNAL");var JOURNAL_KEY_VERSION="v2";var DISPATCH_AFFECTING_AGENT_OPTS=["schema","model","effort","isolation","agentType","workingDir","disallowedTools","tools"];function canonicalizeAgentOpts(opts){const projected={};for(const k of DISPATCH_AFFECTING_AGENT_OPTS){const v=opts[k];if(v===void 0||typeof v==="function")continue;projected[k]=v}const sortDeep=__name(val=>{if(typeof val==="function")return void 0;if(Array.isArray(val))return val.map(sortDeep);if(val&&typeof val==="object"){const out={};for(const key of Object.keys(val).sort()){if(key==="__proto__")continue;out[key]=sortDeep(val[key])}return out}return val},"sortDeep");try{return JSON.stringify(sortDeep(projected))}catch{return"{}"}}__name(canonicalizeAgentOpts,"canonicalizeAgentOpts");function deriveAgentKey(prefixHash,prompt,opts){const hash=createHash("sha256");hash.update(prefixHash);hash.update("\0");hash.update(prompt);hash.update("\0");hash.update(canonicalizeAgentOpts(opts));return`${JOURNAL_KEY_VERSION}:${hash.digest("hex")}`}__name(deriveAgentKey,"deriveAgentKey");function deriveArgsSeed(args){const hash=createHash("sha256");let serialized;try{serialized=JSON.stringify(args??null)??"null"}catch{serialized="non-serializable-args"}hash.update(serialized);return`${JOURNAL_KEY_VERSION}:${hash.digest("hex")}`}__name(deriveArgsSeed,"deriveArgsSeed");function buildReplay(entries){let sourceRef;let sourceError;const results=new Map;const started=new Map;const failed=new Set;for(const e of entries){if(e.type==="result"){results.set(e.key,e);failed.delete(e.key)}else if(e.type==="started"){results.delete(e.key);failed.delete(e.key);const list=started.get(e.key);if(list)list.push(e);else started.set(e.key,[e])}else if(e.type==="failed"){results.delete(e.key);failed.add(e.key)}else if(e.type==="source"){try{const ref=readWorkflowSourceRef(e.sourceRef);if(e.version!==1||!ref||sourceRef&&(sourceRef.id!==ref.id||sourceRef.revision!==ref.revision)){throw new Error("Conflicting or unsupported workflow source record.")}sourceRef=ref}catch{sourceError="Workflow journal contains invalid source metadata."}}}return{results,started,failed,...sourceRef?{sourceRef}:{},...sourceError?{sourceError}:{}}}__name(buildReplay,"buildReplay");function describeError(error){return error instanceof Error?error.message:String(error)}__name(describeError,"describeError");var WorkflowJournalWriteError=class extends Error{static{__name(this,"WorkflowJournalWriteError")}__wfRunFailure=true;constructor(cause){super("Could not persist workflow replay invalidation; subsequent agents were not started. Check storage and retry.",{cause});this.name="WorkflowJournalWriteError"}};async function readEntries(journalPath){const contents=await fs.readFile(journalPath,"utf8");const entries=[];for(const line of contents.split("\n")){if(!line.trim())continue;const parsed=parseLineTolerantWithIntegrity(line,journalPath);if(!parsed.complete)throw new Error("Workflow journal contains incomplete records.");for(const entry of parsed.records){if(typeof entry["type"]!=="string"||["started","failed","result"].includes(entry["type"])&&(typeof entry["key"]!=="string"||typeof entry["agentId"]!=="string"||entry["type"]==="result"&&!Object.hasOwn(entry,"result"))||entry["type"]==="launched"&&entry["version"]!==1){throw new Error("Workflow journal contains invalid records.")}entries.push(entry)}}return entries}__name(readEntries,"readEntries");var WorkflowJournal=class{constructor(journalPath,root=path.dirname(path.dirname(journalPath))){this.root=root;this.path=journalPath}static{__name(this,"WorkflowJournal")}pending=Promise.resolve();writeError;path;async hasSymlinkedPath(){if(await isSymlinkedRoot(this.root)||await isSymlinkedRoot(path.dirname(this.path))){return true}return fs.lstat(this.path).then(stat=>stat.isSymbolicLink()).catch(()=>false)}async ensureExists(){try{if(await this.hasSymlinkedPath())return false;await fs.mkdir(path.dirname(this.path),{recursive:true});if(await this.hasSymlinkedPath())return false;const noFollow=process.platform==="win32"?0:constants.O_NOFOLLOW;const file=await fs.open(this.path,constants.O_APPEND|constants.O_CREAT|constants.O_WRONLY|noFollow,384);try{await file.chmod(384)}finally{await file.close()}return true}catch(error){debugLogger4.warn(`WorkflowJournal.ensureExists failed for ${this.path}: ${error}`);return false}}async remove(){await this.drain();try{if(await this.hasSymlinkedPath())return;await fs.rm(this.path,{force:true});await fs.rmdir(path.dirname(this.path)).catch(error=>{const code=error.code;if(code!=="ENOENT"&&code!=="ENOTEMPTY")throw error})}catch(error){debugLogger4.warn(`WorkflowJournal.remove failed for ${this.path}: ${error}`)}}async load(){try{if(await this.hasSymlinkedPath())throw new Error("Workflow journal path is symlinked.");await fs.stat(this.path)}catch(e){if(e.code==="ENOENT"){return{kind:"missing"}}debugLogger4.warn(`WorkflowJournal.load failed for ${this.path}: ${e}`);return{kind:"unreadable",reason:describeError(e)}}try{const entries=await readEntries(this.path);return{kind:"loaded",replay:buildReplay(entries)}}catch(e){debugLogger4.warn(`WorkflowJournal.load failed for ${this.path}: ${e}`);return{kind:"unreadable",reason:describeError(e)}}}async markLaunched(){await this.append({type:"launched",version:1}).catch(error=>debugLogger4.warn(`WorkflowJournal.markLaunched failed for ${this.path}: ${error}`))}retainReplayPrefix(keys){const prefix=new Set(keys);const operation=this.pending.then(async()=>{if(this.writeError)throw this.writeError;let temporaryPath;try{if(await this.hasSymlinkedPath())throw new Error("Workflow journal path is symlinked.");const stat=await fs.stat(this.path);if(process.geteuid&&stat.uid!==process.geteuid()){throw new Error("Workflow journal is owned by another user.")}const entries=await readEntries(this.path);const replay=buildReplay(entries);if(replay.sourceError)throw new Error(replay.sourceError);const retained=entries.filter(entry=>entry.type!=="result"||prefix.has(entry.key));const candidate=`${this.path}.${randomUUID()}.tmp`;const file=await fs.open(candidate,"wx",384);temporaryPath=candidate;try{await file.writeFile(retained.map(entry=>JSON.stringify(entry)+"\n").join(""),"utf8");await file.sync()}finally{await file.close()}if(await this.hasSymlinkedPath())throw new Error("Workflow journal path is symlinked.");await renameWithRetry(temporaryPath,this.path,3,10,fs.rename);temporaryPath=void 0}catch(cause){this.writeError=new WorkflowJournalWriteError(cause);throw this.writeError}finally{if(temporaryPath){await fs.unlink(temporaryPath).catch(error=>debugLogger4.warn(`Workflow journal temporary file cleanup failed: ${error}`))}}});this.pending=operation.catch(()=>void 0);return operation}append(entry){const operation=this.pending.then(()=>{if(this.writeError)throw this.writeError;return writeLine(this.path,entry)});this.pending=operation.catch(()=>void 0);return operation}drain(){return this.pending}};init_esbuild_shims();var WORKFLOW_SUBAGENT_SYSTEM_PROMPT='You are a subagent spawned by a workflow orchestration script. Use the tools available to complete the task.\nCRITICAL: Your final text response is returned **verbatim** as a string to the calling script \u2014 it is your return value, not a message to a human.\n- Output the literal result (data, JSON, text). Do NOT output confirmations like "Done." or "Sent."\n- If asked for JSON, return ONLY the raw JSON \u2014 no code fences, no prose, no markdown.\n- Do NOT use SendUserMessage to deliver your answer. Put your answer in your final text response.\n- Be concise. The script will parse your output.';var WORKFLOW_SUBAGENT_SYSTEM_PROMPT_WITH_SCHEMA="You are a subagent spawned by a workflow orchestration script. Use the tools available to complete the task.\nCRITICAL: You MUST deliver your final answer by calling the `structured_output` tool with arguments that conform to its parameter schema. Plain-text final answers are DISCARDED \u2014 only a valid `structured_output` call returns a result to the calling script.\n- Use other tools (Read, Grep, etc.) to gather information first.\n- When ready, call `structured_output` ONCE with the conforming JSON object.\n- If validation fails, the error tells you what to fix. Try again with corrected fields.\n- The third failed attempt ends the run \u2014 get the arguments right.\n- Do NOT use SendUserMessage to deliver your answer.\n- Be concise; the script reads only the structured payload, not your prose.";init_esbuild_shims();function abortError(){return new DOMException("Workflow dispatch scheduler aborted.","AbortError")}__name(abortError,"abortError");var WorkflowDispatchScheduler=class{constructor(limit,signal,onStateChange){this.limit=limit;this.signal=signal;if(!Number.isInteger(limit)||limit<1){throw new Error(`Workflow dispatch limit must be a positive integer, got ${String(limit)}.`)}if(onStateChange)this.stateListeners.add(onStateChange);if(signal&&!signal.aborted){signal.addEventListener("abort",()=>this.abortPending(),{once:true})}}static{__name(this,"WorkflowDispatchScheduler")}state="running";inFlight=0;queue=[];gateWaiters=[];stateListeners=new Set;onStateChange(listener){this.stateListeners.add(listener);return()=>{this.stateListeners.delete(listener)}}run(thunk){return new Promise((resolve2,reject)=>{if(this.signal?.aborted){reject(abortError());return}this.queue.push({thunk,resolve:resolve2,reject});this.pump()})}pause(){if(this.state!=="running"||this.signal?.aborted)return false;this.setState("pausing");if(this.inFlight===0)this.setState("paused");return true}resume(){if(this.state!=="paused"||this.signal?.aborted)return false;this.setState("running");while(this.gateWaiters.length>0){this.gateWaiters.shift().resolve()}this.pump();return true}waitUntilRunning(){if(this.signal?.aborted)return Promise.reject(abortError());if(this.state==="running")return Promise.resolve();return new Promise((resolve2,reject)=>{this.gateWaiters.push({resolve:resolve2,reject})})}snapshot(){return{state:this.state,queued:this.queue.length,inFlight:this.inFlight}}pump(){while(this.state==="running"&&this.inFlight<this.limit&&this.queue.length>0){const job=this.queue.shift();if(this.signal?.aborted){job.reject(abortError());continue}this.inFlight++;Promise.resolve().then(job.thunk).then(job.resolve,job.reject).finally(()=>{this.inFlight--;if(this.state==="pausing"&&this.inFlight===0){this.setState("paused")}this.pump()})}}setState(state){if(this.state===state)return;this.state=state;const snapshot=this.snapshot();for(const listener of[...this.stateListeners])listener(snapshot)}abortPending(){const error=abortError();while(this.queue.length>0)this.queue.shift().reject(error);while(this.gateWaiters.length>0){this.gateWaiters.shift().reject(error)}}};var DEFAULT_MAX_AGENTS_PER_RUN=1e3;var MAX_WORKFLOW_AGENTS_ENV="QWEN_CODE_MAX_WORKFLOW_AGENTS";var HARD_MAX_AGENTS_PER_RUN_CEILING=1e4;function resolveMaxAgentsPerRun(env=process.env){const raw=env[MAX_WORKFLOW_AGENTS_ENV];if(raw===void 0||raw.trim()===""){return DEFAULT_MAX_AGENTS_PER_RUN}const parsed=parsePositiveIntegerEnv(raw,0);if(parsed<1){debugLogger.warn(`Invalid ${MAX_WORKFLOW_AGENTS_ENV}=${JSON.stringify(raw)}, using default (${DEFAULT_MAX_AGENTS_PER_RUN})`);return DEFAULT_MAX_AGENTS_PER_RUN}if(parsed>HARD_MAX_AGENTS_PER_RUN_CEILING){debugLogger.warn(`${MAX_WORKFLOW_AGENTS_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_AGENTS_PER_RUN_CEILING}); clamping.`);return HARD_MAX_AGENTS_PER_RUN_CEILING}return parsed}__name(resolveMaxAgentsPerRun,"resolveMaxAgentsPerRun");var MAX_WORKFLOW_CONCURRENCY_ENV="QWEN_CODE_MAX_WORKFLOW_CONCURRENCY";var HARD_MAX_CONCURRENCY_CEILING=64;function resolveConcurrencyLimit(env=process.env,availableParallelism2=os.availableParallelism){const raw=env[MAX_WORKFLOW_CONCURRENCY_ENV];if(raw!==void 0&&raw.trim()!==""){const parsed=parsePositiveIntegerEnv(raw,0);if(parsed>=1){if(parsed>HARD_MAX_CONCURRENCY_CEILING){debugLogger.warn(`${MAX_WORKFLOW_CONCURRENCY_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_CONCURRENCY_CEILING}); clamping.`);return HARD_MAX_CONCURRENCY_CEILING}return parsed}debugLogger.warn(`Invalid ${MAX_WORKFLOW_CONCURRENCY_ENV}=${JSON.stringify(raw)}, using cpu-derived default`)}return Math.max(2,Math.min(16,availableParallelism2()-2))}__name(resolveConcurrencyLimit,"resolveConcurrencyLimit");var DEFAULT_WORKFLOW_SUBAGENT_MAX_TURNS=50;var DEFAULT_WORKFLOW_SUBAGENT_MAX_TIME_MINUTES=10;var WORKFLOW_SUBAGENT_MAX_TURNS_ENV="QWEN_CODE_WORKFLOW_AGENT_MAX_TURNS";var WORKFLOW_SUBAGENT_MAX_MINUTES_ENV="QWEN_CODE_WORKFLOW_AGENT_MAX_MINUTES";var HARD_WORKFLOW_SUBAGENT_MAX_TURNS_CEILING=500;var HARD_WORKFLOW_SUBAGENT_MAX_MINUTES_CEILING=100;function resolveSubagentBound(envName,defaultValue,ceiling,env){const raw=env[envName];if(raw===void 0||raw.trim()==="")return defaultValue;const parsed=parsePositiveIntegerEnv(raw,0);if(parsed<1){debugLogger.warn(`Invalid ${envName}=${JSON.stringify(raw)}, using default (${defaultValue})`);return defaultValue}if(parsed>ceiling){debugLogger.warn(`${envName}=${parsed} exceeds hard ceiling (${ceiling}); clamping.`);return ceiling}return parsed}__name(resolveSubagentBound,"resolveSubagentBound");function resolveSubagentMaxTurns(env=process.env,defaultValue=DEFAULT_WORKFLOW_SUBAGENT_MAX_TURNS){return resolveSubagentBound(WORKFLOW_SUBAGENT_MAX_TURNS_ENV,defaultValue,HARD_WORKFLOW_SUBAGENT_MAX_TURNS_CEILING,env)}__name(resolveSubagentMaxTurns,"resolveSubagentMaxTurns");function resolveSubagentMaxTimeMinutes(env=process.env,defaultValue=DEFAULT_WORKFLOW_SUBAGENT_MAX_TIME_MINUTES){return resolveSubagentBound(WORKFLOW_SUBAGENT_MAX_MINUTES_ENV,defaultValue,HARD_WORKFLOW_SUBAGENT_MAX_MINUTES_CEILING,env)}__name(resolveSubagentMaxTimeMinutes,"resolveSubagentMaxTimeMinutes");var WORKFLOW_SUBAGENT_DISALLOWED_TOOLS=[ToolNames.ASK_USER_QUESTION,ToolNames.SEND_MESSAGE,ToolNames.MONITOR,...SUBAGENT_PLAN_LIFECYCLE_TOOLS,ToolNames.AGENT];var WorkflowExecutionError=class extends Error{constructor(message,phases,logs,meta=null){super(message);this.phases=phases;this.logs=logs;this.meta=meta}static{__name(this,"WorkflowExecutionError")}name="WorkflowExecutionError"};function runBudgetFigures(budget){return[budget.runSpent?budget.runSpent():budget.spent(),budget.runCap?budget.runCap():budget.total]}__name(runBudgetFigures,"runBudgetFigures");function generateRunId(){return`wf_${randomBytes(8).toString("hex")}`}__name(generateRunId,"generateRunId");function sanitizeForErrorMessage(value){return stripAnsiAndControl(value)}__name(sanitizeForErrorMessage,"sanitizeForErrorMessage");function createProductionDispatch(config,signal,onTokens,bridgeApprovalEvents,subagentBounds,refuseSubagentTools){return async(prompt,opts,dispatchId)=>{if(typeof prompt!=="string"||prompt.length===0){throw new Error("agent() requires a non-empty string prompt.")}if(refuseSubagentTools===true){const hostBound=HOST_BOUND_AGENT_OPTS.filter(key=>opts[key]!==void 0);if(hostBound.length>0){throw new Error(`agent({${hostBound.join(", ")}}): unavailable in this workflow \u2014 its agents carry no tools and use nothing on this host, so only text-only agent() calls (optionally with model, effort or schema) can run.`)}}const stallMs=resolveStallMs(typeof opts.stallMs==="number"?opts.stallMs:void 0);const workflowAgentId=`workflow-agent-${randomBytes(8).toString("hex")}`;const agentIdentity=await resolveWorkflowAgentIdentity(config,opts);if(resolveAgentExecutionBackend(config,agentIdentity.resolvedAgentType)==="container"){throw Object.assign(new Error("Container execution is required; workflow agents are unsupported. Start a regular subagent instead."),{__wfRunFailure:true})}if(agentIdentity.resolvedAgentType?.executor!==void 0){throw new Error("Workflow agent() does not support external-executor agents: token budgets, schema output, and workflow tool restrictions cannot be enforced. Use an in-process agent definition instead.")}let attempt=0;let finishTranscript=__name(()=>{},"finishTranscript");let status="failed";try{const result=await runStallResilient(async(attemptSignal,emitter)=>{attempt+=1;const cleanupApprovalBridge=bridgeApprovalEvents?.(emitter,dispatchId);const cleanupTranscript=attachDispatchTranscript(config,workflowAgentId,prompt,agentIdentity.name,emitter,attempt);finishTranscript=cleanupTranscript;try{return await runSingleDispatch(config,prompt,opts,attemptSignal,emitter,workflowAgentId,agentIdentity,onTokens,subagentBounds,refuseSubagentTools)}finally{cleanupTranscript("running");cleanupApprovalBridge?.()}},{stallMs,signal,label:sanitizeForErrorMessage(agentIdentity.name)});status="completed";return result}finally{finishTranscript(status==="failed"&&signal?.aborted?"cancelled":status)}}}__name(createProductionDispatch,"createProductionDispatch");var HOST_BOUND_AGENT_OPTS=["agentType","isolation","workingDir"];async function resolveWorkflowAgentIdentity(config,opts){if(opts.agentType){const resolved=await config.getSubagentManager().findSubagentByName(opts.agentType);if(resolved){return{name:resolved.name,resolvedAgentType:resolved}}}if(typeof opts.label==="string"&&opts.label){return{name:opts.label}}return{name:opts.agentType||"workflow-agent"}}__name(resolveWorkflowAgentIdentity,"resolveWorkflowAgentIdentity");function attachDispatchTranscript(config,agentId,prompt,agentName,emitter,attempt){const append=attempt>1;try{const{jsonlPath,options}=buildAgentTranscriptAttach(config,agentId,{agentName,initialUserPrompt:append?void 0:prompt,appendToExisting:append,retryAttempt:append?attempt:void 0});const writer=attachJsonlTranscriptWriter(emitter,jsonlPath,options);const metaPath=getAgentMetaPath(config.storage.getProjectDir(),options.sessionId,agentId);const now=new Date().toISOString();const meta={agentId,agentType:stripAnsiAndControl(agentName).slice(0,200)||"workflow-agent",description:stripAnsiAndControl(prompt).slice(0,4096),parentSessionId:options.sessionId,parentAgentId:getCurrentAgentId()??null,createdAt:(append?readAgentMeta(metaPath)?.createdAt:void 0)??now,lastUpdatedAt:now,status:"running",isBackgrounded:false,workflowOwner:{pid:process.pid,hostname:os.hostname()}};writeAgentMeta(metaPath,meta);return status=>{writer.cleanup();writeAgentMeta(metaPath,{...meta,status,lastUpdatedAt:new Date().toISOString()})}}catch(error){debugLogger.warn(`[Workflow] failed to attach transcript for ${agentId}: ${error}`);return()=>{}}}__name(attachDispatchTranscript,"attachDispatchTranscript");function terminalDispatchError(workflowAgentId,mode){const message=`Workflow subagent ${workflowAgentId} did not complete (terminate mode: ${mode}).`;switch(mode){case"MAX_TURNS":return new WorkflowAgentFailedError(message,"max_turns",mode);case"TIMEOUT":return new WorkflowAgentFailedError(message,"timeout",mode);case"ERROR":return new WorkflowAgentFailedError(message,"error",mode);default:return new Error(message)}}__name(terminalDispatchError,"terminalDispatchError");async function runSingleDispatch(config,prompt,opts,attemptSignal,emitter,workflowAgentId,agentIdentity,onTokens,subagentBounds,refuseSubagentTools){const{AgentHeadless,ContextState}=await import("./agent-headless-XDN3D3S3.js");const ctx=new ContextState;ctx.set("task_prompt",prompt);debugLogger.debug(`[workflow] Dispatch ${workflowAgentId}`);if(DISPATCH_AFFECTING_AGENT_OPTS.every(key=>opts[key]===void 0)){const subagent=await AgentHeadless.create(agentIdentity.name,config,{systemPrompt:WORKFLOW_SUBAGENT_SYSTEM_PROMPT},{},subagentBounds??{max_turns:resolveSubagentMaxTurns(),max_time_minutes:resolveSubagentMaxTimeMinutes()},refuseSubagentTools===true?{tools:[],disallowedTools:[]}:{tools:["*"],disallowedTools:WORKFLOW_SUBAGENT_DISALLOWED_TOOLS},emitter,void 0,void 0,prompt,workflowAgentId);try{await runWithAgentContext(workflowAgentId,()=>subagent.execute(ctx,attemptSignal,{enforceTimeLimitDuringRetryWait:true}))}finally{reportTokens(subagent,opts,onTokens)}const mode=subagent.getTerminateMode();if(mode!=="GOAL"){throw terminalDispatchError(workflowAgentId,mode)}return toModelVisibleSubagentResult(subagent.getFinalText(),mode)}return runOverridePath(config,ctx,opts,attemptSignal,workflowAgentId,agentIdentity,onTokens,emitter,subagentBounds,refuseSubagentTools)}__name(runSingleDispatch,"runSingleDispatch");function reportTokens(subagent,opts,onTokens){if(!onTokens)return;try{const summary=subagent.getExecutionSummary();onTokens(summary.outputTokens,opts)}catch(e){debugLogger.warn("onTokens callback threw:",e)}}__name(reportTokens,"reportTokens");function resolveDispatchEffort(raw){if(raw===void 0)return void 0;const tier=typeof raw==="string"?normalizeReasoningEffort(raw):void 0;if(tier===void 0){throw new Error(`agent({effort}): unknown effort tier ${sanitizeForErrorMessage(JSON.stringify(raw)??String(raw))}. Known tiers are: ${REASONING_EFFORT_TIERS.join(", ")}.`)}return tier}__name(resolveDispatchEffort,"resolveDispatchEffort");function resolveDispatchDenies(raw){if(raw===void 0)return[];if(!Array.isArray(raw)||raw.some(name=>typeof name!=="string"||name.length===0||name!==name.trim())){throw new Error("agent({disallowedTools}): must be an array of non-empty tool-name strings without surrounding whitespace, e.g. ['run_shell_command', 'write_file'].")}return raw.map(name=>resolveBuiltinToolName(name)??name)}__name(resolveDispatchDenies,"resolveDispatchDenies");function resolveDispatchAllows(raw){if(raw===void 0)return void 0;if(!Array.isArray(raw)||raw.length===0||raw.some(name=>typeof name!=="string"||name.length===0||name!==name.trim())){throw new Error("agent({tools}): must be a non-empty array of tool-name strings without surrounding whitespace, e.g. ['run_shell_command', 'read_file']. Omit tools to keep every tool.")}for(const name of raw){const problem=describeAgentToolAllowEntryProblem(name);if(problem!==null){throw new Error(`agent({tools}): ${sanitizeForErrorMessage(problem)}`)}}return[...new Set(raw.map(canonicalAgentToolName))]}__name(resolveDispatchAllows,"resolveDispatchAllows");async function runOverridePath(config,ctx,opts,signal,workflowAgentId,agentIdentity,onTokens,emitter,subagentBounds,refuseSubagentTools){if(opts.isolation==="remote"){throw new Error("agent({isolation:'remote'}) is not available in this build.")}let schemaValidate;if(opts.schema!==void 0){const prepared=prepareWorkflowSchema(opts.schema);if(!prepared.ok){throw new Error(prepared.error)}schemaValidate=prepared.validate}const effort=resolveDispatchEffort(opts.effort);const requestedDenies=resolveDispatchDenies(opts.disallowedTools);const requestedAllows=resolveDispatchAllows(opts.tools);const subagentMgr=config.getSubagentManager();let baseConfig;if(opts.agentType!==void 0){const resolved=agentIdentity.resolvedAgentType;if(!resolved){const safeAgentType=sanitizeForErrorMessage(opts.agentType);throw new Error(`agent({agentType}): agent type '${safeAgentType}' not found.`)}baseConfig=resolved}else{baseConfig={name:agentIdentity.name,description:"Default workflow subagent (per-call overrides).",systemPrompt:WORKFLOW_SUBAGENT_SYSTEM_PROMPT,level:"session",isBuiltin:false}}let schemaSystemPrompt;if(opts.schema!==void 0){schemaSystemPrompt=opts.agentType!==void 0&&baseConfig.systemPrompt?`${baseConfig.systemPrompt}
|
|
3
|
+
import{AgentEventEmitter,MAX_FAILURE_LINE_CHARS,MAX_TURN_BUDGET_TOKENS,MAX_WORKFLOW_CALL_TRACES,REPORTED_FAILURE_KEYS,WORKFLOW_BATCH_LIMIT,attachJsonlTranscriptWriter,buildAgentTranscriptAttach,canonicalAgentToolName,createWorkflowSandbox,debugLogger,deleteInlineWorkflowScript,deriveApprovalModeConfig,deriveConfig,deriveWorktreeConfig,describeAgentToolAllowEntryProblem,describeOversizedBatch,evaluateWorkflowSize,getAgentMetaPath,getWorkflowTaskMutationKey,installSessionWorkflowRevisionWriteThrough,isActiveWorkflowStatus,isSymlinkedRoot,isTerminalWorkflowStatus,isWorkflowRunId,isWorkflowRunPersistenceActive,isWorkflowSizeWarning,isWorkflowSourceRef,listAgentToolNames,markWorkflowRunPersistenceActive,narrowAgentTools,persistInlineWorkflowScript,readAgentMeta,readWorkflowSourceRef,readWorkflowStepId,rebuildToolRegistryOnOverride,reportedFailureLines,resolveAgentExecutionBackend,resolveExternalWorktreeDir,resolveSavedWorkflowScript,resolveWorkflowSizeCaps,resolveWorkflowSizeGuidelineSetting,sanitizeWorkflowText,stringifyWorkflowResult,toModelVisibleSubagentResult,truncateWorkflowText,tryWithWorkflowTaskMutation,workflowPreLaunchGate,writeAgentMeta}from"./chunk-LDXZT3SG.js";import{GitWorktreeService,generateAgentWorktreeSlug,writeWorktreeSessionMarker}from"./chunk-LLX4BCWK.js";import{readBundledReference,resolveBundledReferenceSurface}from"./chunk-GWYQTKSR.js";import{parsePositiveIntegerEnv}from"./chunk-BG67XABA.js";import{SUBAGENT_PLAN_LIFECYCLE_TOOLS}from"./chunk-FQQMMFT6.js";import{getCurrentAgentId,runWithAgentContext}from"./chunk-7J2TOJMG.js";import{createAbortController,createChildAbortController}from"./chunk-476F6QIM.js";import{WorkflowRunEvent,WorkflowSizeWarningEvent,logWorkflowRun,logWorkflowSizeWarning,uiTelemetryService}from"./chunk-DR3HLUJ5.js";import{parseLineTolerantWithIntegrity,writeLine}from"./chunk-UQFTXKEB.js";import{REASONING_EFFORT_TIERS,normalizeReasoningEffort}from"./chunk-TAAJ7TDB.js";import{SyntheticOutputTool}from"./chunk-BWU6AH5O.js";import{atomicWriteFile,renameWithRetry}from"./chunk-BMHYEQTI.js";import{stripAnsiAndControl}from"./chunk-4YLXNRRH.js";import{SchemaValidator}from"./chunk-SVAPAMMG.js";import{ToolNames,resolveBuiltinToolName}from"./chunk-2UNFJQ2D.js";import{createDebugLogger}from"./chunk-JAUJI56S.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var debugLogger2=createDebugLogger("WORKFLOW_BUDGET");var MAX_TOKENS_PER_WORKFLOW_ENV="QWEN_CODE_MAX_TOKENS_PER_WORKFLOW";var HARD_MAX_TOKENS_CEILING=MAX_TURN_BUDGET_TOKENS;function resolveMaxTokensPerWorkflow(env=process.env){const raw=env[MAX_TOKENS_PER_WORKFLOW_ENV];if(raw===void 0||raw.trim()===""){return null}const parsed=parsePositiveIntegerEnv(raw,0);if(parsed<1){debugLogger2.warn(`Invalid ${MAX_TOKENS_PER_WORKFLOW_ENV}=${JSON.stringify(raw)}, treating as unset (no cap)`);return null}if(parsed>HARD_MAX_TOKENS_CEILING){debugLogger2.warn(`${MAX_TOKENS_PER_WORKFLOW_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_TOKENS_CEILING}); clamping.`);return HARD_MAX_TOKENS_CEILING}return parsed}__name(resolveMaxTokensPerWorkflow,"resolveMaxTokensPerWorkflow");var WorkflowBudgetImpl=class _WorkflowBudgetImpl{static{__name(this,"WorkflowBudgetImpl")}total;source;directiveText;turnSpent;_runSpent;constructor(total,options={}){this.total=total;this.source=total===null?void 0:options.source??"env";this.directiveText=this.source==="directive"?options.directiveText:void 0;this.turnSpent=options.turnSpent;this._runSpent=0}spent(){if(this.source!=="env"&&this.turnSpent)return this.turnSpent();return this._runSpent}runSpent(){return this._runSpent}runCap(){return this.source==="env"?this.total:null}remaining(){if(this.total===null)return Infinity;return Math.max(0,this.total-this.spent())}recordSpent(deltaTokens){if(!Number.isFinite(deltaTokens)||deltaTokens<=0)return;this._runSpent+=deltaTokens}static fromEnv(env=process.env){return new _WorkflowBudgetImpl(resolveMaxTokensPerWorkflow(env))}static fromConfig(config,env=process.env){const sessionId=config.getSessionId?.();const turn=sessionId===void 0?null:config.getTurnBudget?.()?.current(sessionId)??null;const turnSpent=turn?()=>Math.max(0,uiTelemetryService.getTotalOutputTokens(turn.sessionId)-turn.outputTokensAtTurnStart):void 0;if(turn&&turn.budget!==null){return new _WorkflowBudgetImpl(turn.budget,{source:"directive",turnSpent,directiveText:turn.directiveText})}const envCap=resolveMaxTokensPerWorkflow(env);if(envCap!==null){return new _WorkflowBudgetImpl(envCap,{source:"env"})}return new _WorkflowBudgetImpl(null,{turnSpent})}};var WorkflowBudgetExceededError=class extends Error{static{__name(this,"WorkflowBudgetExceededError")}name="WorkflowBudgetExceededError";runId;budgetTotal;spent;constructor(runId,budgetTotal,spent){super(`Workflow ${runId}: token budget exceeded (${spent} / ${budgetTotal} output tokens). Stopping further agent() calls.`);this.runId=runId;this.budgetTotal=budgetTotal;this.spent=spent}};init_esbuild_shims();import{randomBytes}from"node:crypto";import{AsyncLocalStorage}from"node:async_hooks";import*as os from"node:os";init_esbuild_shims();var WorkflowAgentFailedError=class extends Error{static{__name(this,"WorkflowAgentFailedError")}name="WorkflowAgentFailedError";kind;terminateMode;constructor(message,kind,terminateMode){super(message);this.kind=kind;this.terminateMode=terminateMode}};function isWorkflowAgentFailedError(error){return typeof error==="object"&&error!==null&&error.name==="WorkflowAgentFailedError"}__name(isWorkflowAgentFailedError,"isWorkflowAgentFailedError");var WorkflowAgentCapExceededError=class extends Error{static{__name(this,"WorkflowAgentCapExceededError")}name="WorkflowAgentCapExceededError";constructor(maxAgents){super(`Workflow exceeded the maximum of ${maxAgents} agent() calls per run. This usually means a loop using budget.remaining() never terminates because no token budget was set \u2014 remaining() returns Infinity when budget.total is null. Add a hard iteration cap to the loop, or pass a token budget.`)}};function isWorkflowRunLevelError(error){if(typeof error!=="object"||error===null)return false;const name=error.name;return error.__wfRunFailure===true||name==="WorkflowBudgetExceededError"||name==="WorkflowAgentCapExceededError"}__name(isWorkflowRunLevelError,"isWorkflowRunLevelError");var WORKFLOW_ABORT_REASON_STALLED="stalled";init_esbuild_shims();var DEFAULT_STALL_MS=18e4;var MAX_TIMER_DELAY_MS=2147483647;var MAX_STALL_ATTEMPTS=3;var MAX_WORKFLOW_STALL_MS_ENV="QWEN_CODE_WORKFLOW_STALL_SECONDS";function resolveStallMs(perCall,env=process.env){if(typeof perCall==="number"&&Number.isFinite(perCall)){if(perCall===0)return 0;if(perCall>0)return perCall}const raw=env[MAX_WORKFLOW_STALL_MS_ENV];const trimmed=raw?.trim();if(trimmed){if(trimmed==="0")return 0;const sec=parsePositiveIntegerEnv(trimmed,0);if(sec>0)return sec*1e3}return DEFAULT_STALL_MS}__name(resolveStallMs,"resolveStallMs");var debugLogger3=createDebugLogger("WORKFLOW_STALL");function attachStallWatchdog(emitter,controller,stallMs){if(stallMs<=0){return{stalled:__name(()=>false,"stalled"),dispose:__name(()=>{},"dispose")}}let inFlightTools=0;let fired=false;let timer;let disposed=false;let lastActivity;const waits=new Map;const startedWaitIds=new Set;const clear=__name(()=>{if(timer){clearTimeout(timer);timer=void 0}},"clear");const markActivity=__name(()=>{lastActivity=Math.max(lastActivity??0,performance.now())},"markActivity");const arm=__name(()=>{clear();if(disposed||fired)return;if(inFlightTools>0)return;if(lastActivity===void 0&&waits.size===0)return;const now=performance.now();let base=lastActivity??now;for(const[waitId,until]of waits){if(until<=now){waits.delete(waitId);lastActivity=Math.max(lastActivity??until,until)}base=Math.max(base,until)}const due=base+stallMs;if(due>now){timer=setTimeout(arm,Math.min(due-now,MAX_TIMER_DELAY_MS));timer.unref?.();return}fired=true;debugLogger3.warn(`[Workflow] agent dispatch stalled \u2014 no progress for ${stallMs}ms; aborting.`);try{controller.abort(WORKFLOW_ABORT_REASON_STALLED)}catch(e){debugLogger3.warn("stall watchdog abort threw:",e)}},"arm");const onActivity=__name(()=>{markActivity();arm()},"onActivity");const onToolCall=__name(()=>{inFlightTools+=1;clear()},"onToolCall");const onToolResult=__name(()=>{inFlightTools=Math.max(0,inFlightTools-1);markActivity();arm()},"onToolResult");const onRetryWait=__name(event=>{if(event.phase==="start"){if(startedWaitIds.has(event.waitId))return;if(!Number.isFinite(event.delayMs)||event.delayMs<=0)return;startedWaitIds.add(event.waitId);const now=performance.now();waits.set(event.waitId,now+event.delayMs);lastActivity??=now}else{if(!waits.delete(event.waitId))return;markActivity()}arm()},"onRetryWait");emitter.on("round_start",onActivity);emitter.on("round_end",onActivity);emitter.on("stream_text",onActivity);emitter.on("usage_metadata",onActivity);emitter.on("tool_call",onToolCall);emitter.on("tool_result",onToolResult);emitter.on("retry_wait",onRetryWait);return{stalled:__name(()=>fired,"stalled"),dispose:__name(()=>{if(disposed)return;disposed=true;clear();waits.clear();emitter.off("round_start",onActivity);emitter.off("round_end",onActivity);emitter.off("stream_text",onActivity);emitter.off("usage_metadata",onActivity);emitter.off("tool_call",onToolCall);emitter.off("tool_result",onToolResult);emitter.off("retry_wait",onRetryWait)},"dispose")}}__name(attachStallWatchdog,"attachStallWatchdog");async function runStallResilient(attemptFn,opts){const{stallMs,signal,label}=opts;if(stallMs<=0){const emitter=new AgentEventEmitter;return attemptFn(signal??new AbortController().signal,emitter)}let attempt=0;for(;;){attempt+=1;const controller=new AbortController;let onParentAbort;if(signal){if(signal.aborted){controller.abort(signal.reason)}else{onParentAbort=__name(()=>controller.abort(signal.reason),"onParentAbort");signal.addEventListener("abort",onParentAbort)}}const emitter=new AgentEventEmitter;const watchdog=attachStallWatchdog(emitter,controller,stallMs);try{return await attemptFn(controller.signal,emitter)}catch(err){if(signal?.aborted)throw err;if(watchdog.stalled()&&attempt<MAX_STALL_ATTEMPTS){debugLogger3.warn(`[Workflow] agent "${label??"workflow-agent"}" stalled (attempt ${attempt}/${MAX_STALL_ATTEMPTS}) \u2014 retrying.`);continue}if(watchdog.stalled()){throw new WorkflowAgentFailedError(`agent "${label??"workflow-agent"}" stalled on all ${MAX_STALL_ATTEMPTS} attempts (no progress for ${stallMs}ms each).`,"stalled")}throw err}finally{watchdog.dispose();if(onParentAbort&&signal){signal.removeEventListener("abort",onParentAbort)}}}}__name(runStallResilient,"runStallResilient");init_esbuild_shims();var MAX_ERROR_DETAIL_LENGTH=500;var MAX_KEY_LENGTH=120;var MAX_WALK_DEPTH=32;var MAX_WALK_NODES=1e3;var COMPOUND_KEYWORDS=["$ref","$dynamicRef","$recursiveRef","allOf","anyOf","oneOf","not","if","then","else","dependencies","dependentSchemas","dependentRequired","unevaluatedProperties","propertyNames"];function prepareWorkflowSchema(schema){const shape=describeNonObject(schema);if(shape!==void 0){return fail(`must be a JSON Schema object, got ${shape}.`)}let copy;try{copy=JSON.parse(JSON.stringify(schema))}catch(error){return fail(`is not JSON: ${errorText(error)}`)}const strictError=SchemaValidator.compileStrict(copy,{allowMatchingProperties:true});if(strictError!==null){return fail(`is not a valid JSON Schema: ${strictError}`)}if(copy["$async"]===true){return fail("uses $async, which structured output does not support. Remove $async.")}const contradiction=findContradiction(copy);if(contradiction!==void 0){return fail(contradiction)}const compiled=SchemaValidator.compileIsolated(copy);if(compiled.error!==void 0){return fail(`could not be compiled: ${compiled.error}`)}return{ok:true,validate:compiled.validate}}__name(prepareWorkflowSchema,"prepareWorkflowSchema");function validateStructuredResult(value,validate){if(typeof value!=="object"||value===null||Array.isArray(value)){return{error:"the result is not a JSON object"}}let copy;try{copy=JSON.parse(JSON.stringify(value))}catch(error){return{error:`the result is not JSON: ${errorText(error)}`}}try{const error=validate(copy);return error===null?{value:copy}:{error}}catch(error){return{error:errorText(error)}}}__name(validateStructuredResult,"validateStructuredResult");function fail(detail){return{ok:false,error:`agent({schema}): ${boundedDetail(detail)}`}}__name(fail,"fail");function boundedDetail(detail){const clean=stripAnsiAndControl(detail);return clean.length>MAX_ERROR_DETAIL_LENGTH?`${clean.slice(0,MAX_ERROR_DETAIL_LENGTH)}\u2026`:clean}__name(boundedDetail,"boundedDetail");function errorText(error){return error instanceof Error?error.message:String(error)}__name(errorText,"errorText");function describeNonObject(value){if(value===null)return"null";if(Array.isArray(value))return"an array";if(typeof value!=="object")return`a ${typeof value}`;return void 0}__name(describeNonObject,"describeNonObject");function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}__name(isRecord,"isRecord");function pointerToken(key){return key.replace(/~/g,"~0").replace(/\//g,"~1")}__name(pointerToken,"pointerToken");function quoteKey(key){const quoted=JSON.stringify(key);return quoted.length>MAX_KEY_LENGTH?`${quoted.slice(0,MAX_KEY_LENGTH)}\u2026"`:quoted}__name(quoteKey,"quoteKey");function typeAllowsObject(type){if(typeof type==="string")return type==="object";if(Array.isArray(type))return type.includes("object");return void 0}__name(typeAllowsObject,"typeAllowsObject");function isObjectOnly(node){const type=node["type"];const onlyObject=type==="object"||Array.isArray(type)&&type.length===1&&type[0]==="object";return onlyObject&&node["nullable"]!==true}__name(isObjectOnly,"isObjectOnly");function rootExcludesObject(root){if(typeAllowsObject(root["type"])===false){return`# does not accept an object (type ${stripAnsiAndControl(JSON.stringify(root["type"]))}); structured output is always a JSON object.`}if("const"in root&&!isRecord(root["const"])){return"# does not accept an object (its const is not an object); structured output is always a JSON object."}if(Array.isArray(root["enum"])&&!root["enum"].some(isRecord)){return"# does not accept an object (its enum has no object member); structured output is always a JSON object."}return void 0}__name(rootExcludesObject,"rootExcludesObject");function findContradiction(root){const rootProblem=rootExcludesObject(root);if(rootProblem!==void 0)return rootProblem;let visited=0;const visit=__name((node,pointer,depth)=>{visited+=1;if(depth>MAX_WALK_DEPTH||visited>MAX_WALK_NODES)return void 0;if(COMPOUND_KEYWORDS.some(keyword=>keyword in node))return void 0;const required=node["required"];if(!Array.isArray(required)||required.length===0)return void 0;if(!required.every(key=>typeof key==="string")){return void 0}const properties=isRecord(node["properties"])?node["properties"]:{};const patterns=compilePatterns(node["patternProperties"]);if(patterns===void 0)return void 0;const maxProperties=node["maxProperties"];const distinct=new Set(required);if(typeof maxProperties==="number"&&distinct.size>maxProperties){return`${pointer}/required lists ${distinct.size} distinct properties, but ${pointer}/maxProperties allows at most ${maxProperties}.`}for(let index=0;index<required.length;index++){const key=required[index];const requiredAt=`${pointer}/required/${index}`;const declared=Object.hasOwn(properties,key);const matching=patterns.filter(entry=>entry.regex.test(key));if(declared&&properties[key]===false){return`${requiredAt} requires ${quoteKey(key)}, but ${pointer}/properties/${pointerToken(key)} is false, which forbids it.`}const forbiddingPattern=matching.find(entry=>entry.schema===false);if(forbiddingPattern!==void 0){return`${requiredAt} requires ${quoteKey(key)}, but ${pointer}/patternProperties/${pointerToken(forbiddingPattern.source)} is false, which forbids it.`}if(!declared&&matching.length===0&&node["additionalProperties"]===false){return`${requiredAt} requires ${quoteKey(key)}, but this object forbids it via additionalProperties:false (it is not in properties and matches no patternProperties).`}}for(const key of distinct){if(!Object.hasOwn(properties,key))continue;const child=properties[key];if(!isRecord(child)||!isObjectOnly(child))continue;const problem=visit(child,`${pointer}/properties/${pointerToken(key)}`,depth+1);if(problem!==void 0)return problem}return void 0},"visit");return visit(root,"#",0)}__name(findContradiction,"findContradiction");function compilePatterns(value){if(value===void 0)return[];if(!isRecord(value))return void 0;const entries=[];for(const[source,schema]of Object.entries(value)){try{entries.push({source,regex:new RegExp(source,"u"),schema})}catch{return void 0}}return entries}__name(compilePatterns,"compilePatterns");init_esbuild_shims();import{createHash,randomUUID}from"node:crypto";import{constants,promises as fs}from"node:fs";import path from"node:path";var debugLogger4=createDebugLogger("WORKFLOW_JOURNAL");var JOURNAL_KEY_VERSION="v2";var DISPATCH_AFFECTING_AGENT_OPTS=["schema","model","effort","isolation","agentType","workingDir","disallowedTools","tools"];function canonicalizeAgentOpts(opts){const projected={};for(const k of DISPATCH_AFFECTING_AGENT_OPTS){const v=opts[k];if(v===void 0||typeof v==="function")continue;projected[k]=v}const sortDeep=__name(val=>{if(typeof val==="function")return void 0;if(Array.isArray(val))return val.map(sortDeep);if(val&&typeof val==="object"){const out={};for(const key of Object.keys(val).sort()){if(key==="__proto__")continue;out[key]=sortDeep(val[key])}return out}return val},"sortDeep");try{return JSON.stringify(sortDeep(projected))}catch{return"{}"}}__name(canonicalizeAgentOpts,"canonicalizeAgentOpts");function deriveAgentKey(prefixHash,prompt,opts){const hash=createHash("sha256");hash.update(prefixHash);hash.update("\0");hash.update(prompt);hash.update("\0");hash.update(canonicalizeAgentOpts(opts));return`${JOURNAL_KEY_VERSION}:${hash.digest("hex")}`}__name(deriveAgentKey,"deriveAgentKey");function deriveArgsSeed(args){const hash=createHash("sha256");let serialized;try{serialized=JSON.stringify(args??null)??"null"}catch{serialized="non-serializable-args"}hash.update(serialized);return`${JOURNAL_KEY_VERSION}:${hash.digest("hex")}`}__name(deriveArgsSeed,"deriveArgsSeed");function buildReplay(entries){let sourceRef;let sourceError;const results=new Map;const started=new Map;const failed=new Set;for(const e of entries){if(e.type==="result"){results.set(e.key,e);failed.delete(e.key)}else if(e.type==="started"){results.delete(e.key);failed.delete(e.key);const list=started.get(e.key);if(list)list.push(e);else started.set(e.key,[e])}else if(e.type==="failed"){results.delete(e.key);failed.add(e.key)}else if(e.type==="source"){try{const ref=readWorkflowSourceRef(e.sourceRef);if(e.version!==1||!ref||sourceRef&&(sourceRef.id!==ref.id||sourceRef.revision!==ref.revision)){throw new Error("Conflicting or unsupported workflow source record.")}sourceRef=ref}catch{sourceError="Workflow journal contains invalid source metadata."}}}return{results,started,failed,...sourceRef?{sourceRef}:{},...sourceError?{sourceError}:{}}}__name(buildReplay,"buildReplay");function describeError(error){return error instanceof Error?error.message:String(error)}__name(describeError,"describeError");var WorkflowJournalWriteError=class extends Error{static{__name(this,"WorkflowJournalWriteError")}__wfRunFailure=true;constructor(cause){super("Could not persist workflow replay invalidation; subsequent agents were not started. Check storage and retry.",{cause});this.name="WorkflowJournalWriteError"}};async function readEntries(journalPath){const contents=await fs.readFile(journalPath,"utf8");const entries=[];for(const line of contents.split("\n")){if(!line.trim())continue;const parsed=parseLineTolerantWithIntegrity(line,journalPath);if(!parsed.complete)throw new Error("Workflow journal contains incomplete records.");for(const entry of parsed.records){if(typeof entry["type"]!=="string"||["started","failed","result"].includes(entry["type"])&&(typeof entry["key"]!=="string"||typeof entry["agentId"]!=="string"||entry["type"]==="result"&&!Object.hasOwn(entry,"result"))||entry["type"]==="launched"&&entry["version"]!==1){throw new Error("Workflow journal contains invalid records.")}entries.push(entry)}}return entries}__name(readEntries,"readEntries");var WorkflowJournal=class{constructor(journalPath,root=path.dirname(path.dirname(journalPath))){this.root=root;this.path=journalPath}static{__name(this,"WorkflowJournal")}pending=Promise.resolve();writeError;path;async hasSymlinkedPath(){if(await isSymlinkedRoot(this.root)||await isSymlinkedRoot(path.dirname(this.path))){return true}return fs.lstat(this.path).then(stat=>stat.isSymbolicLink()).catch(()=>false)}async ensureExists(){try{if(await this.hasSymlinkedPath())return false;await fs.mkdir(path.dirname(this.path),{recursive:true});if(await this.hasSymlinkedPath())return false;const noFollow=process.platform==="win32"?0:constants.O_NOFOLLOW;const file=await fs.open(this.path,constants.O_APPEND|constants.O_CREAT|constants.O_WRONLY|noFollow,384);try{await file.chmod(384)}finally{await file.close()}return true}catch(error){debugLogger4.warn(`WorkflowJournal.ensureExists failed for ${this.path}: ${error}`);return false}}async remove(){await this.drain();try{if(await this.hasSymlinkedPath())return;await fs.rm(this.path,{force:true});await fs.rmdir(path.dirname(this.path)).catch(error=>{const code=error.code;if(code!=="ENOENT"&&code!=="ENOTEMPTY")throw error})}catch(error){debugLogger4.warn(`WorkflowJournal.remove failed for ${this.path}: ${error}`)}}async load(){try{if(await this.hasSymlinkedPath())throw new Error("Workflow journal path is symlinked.");await fs.stat(this.path)}catch(e){if(e.code==="ENOENT"){return{kind:"missing"}}debugLogger4.warn(`WorkflowJournal.load failed for ${this.path}: ${e}`);return{kind:"unreadable",reason:describeError(e)}}try{const entries=await readEntries(this.path);return{kind:"loaded",replay:buildReplay(entries)}}catch(e){debugLogger4.warn(`WorkflowJournal.load failed for ${this.path}: ${e}`);return{kind:"unreadable",reason:describeError(e)}}}async markLaunched(){await this.append({type:"launched",version:1}).catch(error=>debugLogger4.warn(`WorkflowJournal.markLaunched failed for ${this.path}: ${error}`))}retainReplayPrefix(keys){const prefix=new Set(keys);const operation=this.pending.then(async()=>{if(this.writeError)throw this.writeError;let temporaryPath;try{if(await this.hasSymlinkedPath())throw new Error("Workflow journal path is symlinked.");const stat=await fs.stat(this.path);if(process.geteuid&&stat.uid!==process.geteuid()){throw new Error("Workflow journal is owned by another user.")}const entries=await readEntries(this.path);const replay=buildReplay(entries);if(replay.sourceError)throw new Error(replay.sourceError);const retained=entries.filter(entry=>entry.type!=="result"||prefix.has(entry.key));const candidate=`${this.path}.${randomUUID()}.tmp`;const file=await fs.open(candidate,"wx",384);temporaryPath=candidate;try{await file.writeFile(retained.map(entry=>JSON.stringify(entry)+"\n").join(""),"utf8");await file.sync()}finally{await file.close()}if(await this.hasSymlinkedPath())throw new Error("Workflow journal path is symlinked.");await renameWithRetry(temporaryPath,this.path,3,10,fs.rename);temporaryPath=void 0}catch(cause){this.writeError=new WorkflowJournalWriteError(cause);throw this.writeError}finally{if(temporaryPath){await fs.unlink(temporaryPath).catch(error=>debugLogger4.warn(`Workflow journal temporary file cleanup failed: ${error}`))}}});this.pending=operation.catch(()=>void 0);return operation}append(entry){const operation=this.pending.then(()=>{if(this.writeError)throw this.writeError;return writeLine(this.path,entry)});this.pending=operation.catch(()=>void 0);return operation}drain(){return this.pending}};init_esbuild_shims();var WORKFLOW_SUBAGENT_SYSTEM_PROMPT='You are a subagent spawned by a workflow orchestration script. Use the tools available to complete the task.\nCRITICAL: Your final text response is returned **verbatim** as a string to the calling script \u2014 it is your return value, not a message to a human.\n- Output the literal result (data, JSON, text). Do NOT output confirmations like "Done." or "Sent."\n- If asked for JSON, return ONLY the raw JSON \u2014 no code fences, no prose, no markdown.\n- Do NOT use SendUserMessage to deliver your answer. Put your answer in your final text response.\n- Be concise. The script will parse your output.';var WORKFLOW_SUBAGENT_SYSTEM_PROMPT_WITH_SCHEMA="You are a subagent spawned by a workflow orchestration script. Use the tools available to complete the task.\nCRITICAL: You MUST deliver your final answer by calling the `structured_output` tool with arguments that conform to its parameter schema. Plain-text final answers are DISCARDED \u2014 only a valid `structured_output` call returns a result to the calling script.\n- Use other tools (Read, Grep, etc.) to gather information first.\n- When ready, call `structured_output` ONCE with the conforming JSON object.\n- If validation fails, the error tells you what to fix. Try again with corrected fields.\n- The third failed attempt ends the run \u2014 get the arguments right.\n- Do NOT use SendUserMessage to deliver your answer.\n- Be concise; the script reads only the structured payload, not your prose.";init_esbuild_shims();function abortError(){return new DOMException("Workflow dispatch scheduler aborted.","AbortError")}__name(abortError,"abortError");var WorkflowDispatchScheduler=class{constructor(limit,signal,onStateChange){this.limit=limit;this.signal=signal;if(!Number.isInteger(limit)||limit<1){throw new Error(`Workflow dispatch limit must be a positive integer, got ${String(limit)}.`)}if(onStateChange)this.stateListeners.add(onStateChange);if(signal&&!signal.aborted){signal.addEventListener("abort",()=>this.abortPending(),{once:true})}}static{__name(this,"WorkflowDispatchScheduler")}state="running";inFlight=0;queue=[];gateWaiters=[];stateListeners=new Set;onStateChange(listener){this.stateListeners.add(listener);return()=>{this.stateListeners.delete(listener)}}run(thunk){return new Promise((resolve2,reject)=>{if(this.signal?.aborted){reject(abortError());return}this.queue.push({thunk,resolve:resolve2,reject});this.pump()})}pause(){if(this.state!=="running"||this.signal?.aborted)return false;this.setState("pausing");if(this.inFlight===0)this.setState("paused");return true}resume(){if(this.state!=="paused"||this.signal?.aborted)return false;this.setState("running");while(this.gateWaiters.length>0){this.gateWaiters.shift().resolve()}this.pump();return true}waitUntilRunning(){if(this.signal?.aborted)return Promise.reject(abortError());if(this.state==="running")return Promise.resolve();return new Promise((resolve2,reject)=>{this.gateWaiters.push({resolve:resolve2,reject})})}snapshot(){return{state:this.state,queued:this.queue.length,inFlight:this.inFlight}}pump(){while(this.state==="running"&&this.inFlight<this.limit&&this.queue.length>0){const job=this.queue.shift();if(this.signal?.aborted){job.reject(abortError());continue}this.inFlight++;Promise.resolve().then(job.thunk).then(job.resolve,job.reject).finally(()=>{this.inFlight--;if(this.state==="pausing"&&this.inFlight===0){this.setState("paused")}this.pump()})}}setState(state){if(this.state===state)return;this.state=state;const snapshot=this.snapshot();for(const listener of[...this.stateListeners])listener(snapshot)}abortPending(){const error=abortError();while(this.queue.length>0)this.queue.shift().reject(error);while(this.gateWaiters.length>0){this.gateWaiters.shift().reject(error)}}};var DEFAULT_MAX_AGENTS_PER_RUN=1e3;var MAX_WORKFLOW_AGENTS_ENV="QWEN_CODE_MAX_WORKFLOW_AGENTS";var HARD_MAX_AGENTS_PER_RUN_CEILING=1e4;function resolveMaxAgentsPerRun(env=process.env){const raw=env[MAX_WORKFLOW_AGENTS_ENV];if(raw===void 0||raw.trim()===""){return DEFAULT_MAX_AGENTS_PER_RUN}const parsed=parsePositiveIntegerEnv(raw,0);if(parsed<1){debugLogger.warn(`Invalid ${MAX_WORKFLOW_AGENTS_ENV}=${JSON.stringify(raw)}, using default (${DEFAULT_MAX_AGENTS_PER_RUN})`);return DEFAULT_MAX_AGENTS_PER_RUN}if(parsed>HARD_MAX_AGENTS_PER_RUN_CEILING){debugLogger.warn(`${MAX_WORKFLOW_AGENTS_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_AGENTS_PER_RUN_CEILING}); clamping.`);return HARD_MAX_AGENTS_PER_RUN_CEILING}return parsed}__name(resolveMaxAgentsPerRun,"resolveMaxAgentsPerRun");var MAX_WORKFLOW_CONCURRENCY_ENV="QWEN_CODE_MAX_WORKFLOW_CONCURRENCY";var HARD_MAX_CONCURRENCY_CEILING=64;function resolveConcurrencyLimit(env=process.env,availableParallelism2=os.availableParallelism){const raw=env[MAX_WORKFLOW_CONCURRENCY_ENV];if(raw!==void 0&&raw.trim()!==""){const parsed=parsePositiveIntegerEnv(raw,0);if(parsed>=1){if(parsed>HARD_MAX_CONCURRENCY_CEILING){debugLogger.warn(`${MAX_WORKFLOW_CONCURRENCY_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_CONCURRENCY_CEILING}); clamping.`);return HARD_MAX_CONCURRENCY_CEILING}return parsed}debugLogger.warn(`Invalid ${MAX_WORKFLOW_CONCURRENCY_ENV}=${JSON.stringify(raw)}, using cpu-derived default`)}return Math.max(2,Math.min(16,availableParallelism2()-2))}__name(resolveConcurrencyLimit,"resolveConcurrencyLimit");var DEFAULT_WORKFLOW_SUBAGENT_MAX_TURNS=50;var DEFAULT_WORKFLOW_SUBAGENT_MAX_TIME_MINUTES=10;var WORKFLOW_SUBAGENT_MAX_TURNS_ENV="QWEN_CODE_WORKFLOW_AGENT_MAX_TURNS";var WORKFLOW_SUBAGENT_MAX_MINUTES_ENV="QWEN_CODE_WORKFLOW_AGENT_MAX_MINUTES";var HARD_WORKFLOW_SUBAGENT_MAX_TURNS_CEILING=500;var HARD_WORKFLOW_SUBAGENT_MAX_MINUTES_CEILING=100;function resolveSubagentBound(envName,defaultValue,ceiling,env){const raw=env[envName];if(raw===void 0||raw.trim()==="")return defaultValue;const parsed=parsePositiveIntegerEnv(raw,0);if(parsed<1){debugLogger.warn(`Invalid ${envName}=${JSON.stringify(raw)}, using default (${defaultValue})`);return defaultValue}if(parsed>ceiling){debugLogger.warn(`${envName}=${parsed} exceeds hard ceiling (${ceiling}); clamping.`);return ceiling}return parsed}__name(resolveSubagentBound,"resolveSubagentBound");function resolveSubagentMaxTurns(env=process.env,defaultValue=DEFAULT_WORKFLOW_SUBAGENT_MAX_TURNS){return resolveSubagentBound(WORKFLOW_SUBAGENT_MAX_TURNS_ENV,defaultValue,HARD_WORKFLOW_SUBAGENT_MAX_TURNS_CEILING,env)}__name(resolveSubagentMaxTurns,"resolveSubagentMaxTurns");function resolveSubagentMaxTimeMinutes(env=process.env,defaultValue=DEFAULT_WORKFLOW_SUBAGENT_MAX_TIME_MINUTES){return resolveSubagentBound(WORKFLOW_SUBAGENT_MAX_MINUTES_ENV,defaultValue,HARD_WORKFLOW_SUBAGENT_MAX_MINUTES_CEILING,env)}__name(resolveSubagentMaxTimeMinutes,"resolveSubagentMaxTimeMinutes");var WORKFLOW_SUBAGENT_DISALLOWED_TOOLS=[ToolNames.ASK_USER_QUESTION,ToolNames.SEND_MESSAGE,ToolNames.MONITOR,...SUBAGENT_PLAN_LIFECYCLE_TOOLS,ToolNames.AGENT];var WorkflowExecutionError=class extends Error{constructor(message,phases,logs,meta=null){super(message);this.phases=phases;this.logs=logs;this.meta=meta}static{__name(this,"WorkflowExecutionError")}name="WorkflowExecutionError"};function runBudgetFigures(budget){return[budget.runSpent?budget.runSpent():budget.spent(),budget.runCap?budget.runCap():budget.total]}__name(runBudgetFigures,"runBudgetFigures");function generateRunId(){return`wf_${randomBytes(8).toString("hex")}`}__name(generateRunId,"generateRunId");function sanitizeForErrorMessage(value){return stripAnsiAndControl(value)}__name(sanitizeForErrorMessage,"sanitizeForErrorMessage");function createProductionDispatch(config,signal,onTokens,bridgeApprovalEvents,subagentBounds,refuseSubagentTools){return async(prompt,opts,dispatchId)=>{if(typeof prompt!=="string"||prompt.length===0){throw new Error("agent() requires a non-empty string prompt.")}if(refuseSubagentTools===true){const hostBound=HOST_BOUND_AGENT_OPTS.filter(key=>opts[key]!==void 0);if(hostBound.length>0){throw new Error(`agent({${hostBound.join(", ")}}): unavailable in this workflow \u2014 its agents carry no tools and use nothing on this host, so only text-only agent() calls (optionally with model, effort or schema) can run.`)}}const stallMs=resolveStallMs(typeof opts.stallMs==="number"?opts.stallMs:void 0);const workflowAgentId=`workflow-agent-${randomBytes(8).toString("hex")}`;const agentIdentity=await resolveWorkflowAgentIdentity(config,opts);if(resolveAgentExecutionBackend(config,agentIdentity.resolvedAgentType)==="container"){throw Object.assign(new Error("Container execution is required; workflow agents are unsupported. Start a regular subagent instead."),{__wfRunFailure:true})}if(agentIdentity.resolvedAgentType?.executor!==void 0){throw new Error("Workflow agent() does not support external-executor agents: token budgets, schema output, and workflow tool restrictions cannot be enforced. Use an in-process agent definition instead.")}let attempt=0;let finishTranscript=__name(()=>{},"finishTranscript");let status="failed";try{const result=await runStallResilient(async(attemptSignal,emitter)=>{attempt+=1;const cleanupApprovalBridge=bridgeApprovalEvents?.(emitter,dispatchId);const cleanupTranscript=attachDispatchTranscript(config,workflowAgentId,prompt,agentIdentity.name,emitter,attempt);finishTranscript=cleanupTranscript;try{return await runSingleDispatch(config,prompt,opts,attemptSignal,emitter,workflowAgentId,agentIdentity,onTokens,subagentBounds,refuseSubagentTools)}finally{cleanupTranscript("running");cleanupApprovalBridge?.()}},{stallMs,signal,label:sanitizeForErrorMessage(agentIdentity.name)});status="completed";return result}finally{finishTranscript(status==="failed"&&signal?.aborted?"cancelled":status)}}}__name(createProductionDispatch,"createProductionDispatch");var HOST_BOUND_AGENT_OPTS=["agentType","isolation","workingDir"];async function resolveWorkflowAgentIdentity(config,opts){if(opts.agentType){const resolved=await config.getSubagentManager().findSubagentByName(opts.agentType);if(resolved){return{name:resolved.name,resolvedAgentType:resolved}}}if(typeof opts.label==="string"&&opts.label){return{name:opts.label}}return{name:opts.agentType||"workflow-agent"}}__name(resolveWorkflowAgentIdentity,"resolveWorkflowAgentIdentity");function attachDispatchTranscript(config,agentId,prompt,agentName,emitter,attempt){const append=attempt>1;try{const{jsonlPath,options}=buildAgentTranscriptAttach(config,agentId,{agentName,initialUserPrompt:append?void 0:prompt,appendToExisting:append,retryAttempt:append?attempt:void 0});const writer=attachJsonlTranscriptWriter(emitter,jsonlPath,options);const metaPath=getAgentMetaPath(config.storage.getProjectDir(),options.sessionId,agentId);const now=new Date().toISOString();const meta={agentId,agentType:stripAnsiAndControl(agentName).slice(0,200)||"workflow-agent",description:stripAnsiAndControl(prompt).slice(0,4096),parentSessionId:options.sessionId,parentAgentId:getCurrentAgentId()??null,createdAt:(append?readAgentMeta(metaPath)?.createdAt:void 0)??now,lastUpdatedAt:now,status:"running",isBackgrounded:false,workflowOwner:{pid:process.pid,hostname:os.hostname()}};writeAgentMeta(metaPath,meta);return status=>{writer.cleanup();writeAgentMeta(metaPath,{...meta,status,lastUpdatedAt:new Date().toISOString()})}}catch(error){debugLogger.warn(`[Workflow] failed to attach transcript for ${agentId}: ${error}`);return()=>{}}}__name(attachDispatchTranscript,"attachDispatchTranscript");function terminalDispatchError(workflowAgentId,mode){const message=`Workflow subagent ${workflowAgentId} did not complete (terminate mode: ${mode}).`;switch(mode){case"MAX_TURNS":return new WorkflowAgentFailedError(message,"max_turns",mode);case"TIMEOUT":return new WorkflowAgentFailedError(message,"timeout",mode);case"ERROR":return new WorkflowAgentFailedError(message,"error",mode);default:return new Error(message)}}__name(terminalDispatchError,"terminalDispatchError");async function runSingleDispatch(config,prompt,opts,attemptSignal,emitter,workflowAgentId,agentIdentity,onTokens,subagentBounds,refuseSubagentTools){const{AgentHeadless,ContextState}=await import("./agent-headless-IBON3A7N.js");const ctx=new ContextState;ctx.set("task_prompt",prompt);debugLogger.debug(`[workflow] Dispatch ${workflowAgentId}`);if(DISPATCH_AFFECTING_AGENT_OPTS.every(key=>opts[key]===void 0)){const subagent=await AgentHeadless.create(agentIdentity.name,config,{systemPrompt:WORKFLOW_SUBAGENT_SYSTEM_PROMPT},{},subagentBounds??{max_turns:resolveSubagentMaxTurns(),max_time_minutes:resolveSubagentMaxTimeMinutes()},refuseSubagentTools===true?{tools:[],disallowedTools:[]}:{tools:["*"],disallowedTools:WORKFLOW_SUBAGENT_DISALLOWED_TOOLS},emitter,void 0,void 0,prompt,workflowAgentId);try{await runWithAgentContext(workflowAgentId,()=>subagent.execute(ctx,attemptSignal,{enforceTimeLimitDuringRetryWait:true}))}finally{reportTokens(subagent,opts,onTokens)}const mode=subagent.getTerminateMode();if(mode!=="GOAL"){throw terminalDispatchError(workflowAgentId,mode)}return toModelVisibleSubagentResult(subagent.getFinalText(),mode)}return runOverridePath(config,ctx,opts,attemptSignal,workflowAgentId,agentIdentity,onTokens,emitter,subagentBounds,refuseSubagentTools)}__name(runSingleDispatch,"runSingleDispatch");function reportTokens(subagent,opts,onTokens){if(!onTokens)return;try{const summary=subagent.getExecutionSummary();onTokens(summary.outputTokens,opts)}catch(e){debugLogger.warn("onTokens callback threw:",e)}}__name(reportTokens,"reportTokens");function resolveDispatchEffort(raw){if(raw===void 0)return void 0;const tier=typeof raw==="string"?normalizeReasoningEffort(raw):void 0;if(tier===void 0){throw new Error(`agent({effort}): unknown effort tier ${sanitizeForErrorMessage(JSON.stringify(raw)??String(raw))}. Known tiers are: ${REASONING_EFFORT_TIERS.join(", ")}.`)}return tier}__name(resolveDispatchEffort,"resolveDispatchEffort");function resolveDispatchDenies(raw){if(raw===void 0)return[];if(!Array.isArray(raw)||raw.some(name=>typeof name!=="string"||name.length===0||name!==name.trim())){throw new Error("agent({disallowedTools}): must be an array of non-empty tool-name strings without surrounding whitespace, e.g. ['run_shell_command', 'write_file'].")}return raw.map(name=>resolveBuiltinToolName(name)??name)}__name(resolveDispatchDenies,"resolveDispatchDenies");function resolveDispatchAllows(raw){if(raw===void 0)return void 0;if(!Array.isArray(raw)||raw.length===0||raw.some(name=>typeof name!=="string"||name.length===0||name!==name.trim())){throw new Error("agent({tools}): must be a non-empty array of tool-name strings without surrounding whitespace, e.g. ['run_shell_command', 'read_file']. Omit tools to keep every tool.")}for(const name of raw){const problem=describeAgentToolAllowEntryProblem(name);if(problem!==null){throw new Error(`agent({tools}): ${sanitizeForErrorMessage(problem)}`)}}return[...new Set(raw.map(canonicalAgentToolName))]}__name(resolveDispatchAllows,"resolveDispatchAllows");async function runOverridePath(config,ctx,opts,signal,workflowAgentId,agentIdentity,onTokens,emitter,subagentBounds,refuseSubagentTools){if(opts.isolation==="remote"){throw new Error("agent({isolation:'remote'}) is not available in this build.")}let schemaValidate;if(opts.schema!==void 0){const prepared=prepareWorkflowSchema(opts.schema);if(!prepared.ok){throw new Error(prepared.error)}schemaValidate=prepared.validate}const effort=resolveDispatchEffort(opts.effort);const requestedDenies=resolveDispatchDenies(opts.disallowedTools);const requestedAllows=resolveDispatchAllows(opts.tools);const subagentMgr=config.getSubagentManager();let baseConfig;if(opts.agentType!==void 0){const resolved=agentIdentity.resolvedAgentType;if(!resolved){const safeAgentType=sanitizeForErrorMessage(opts.agentType);throw new Error(`agent({agentType}): agent type '${safeAgentType}' not found.`)}baseConfig=resolved}else{baseConfig={name:agentIdentity.name,description:"Default workflow subagent (per-call overrides).",systemPrompt:WORKFLOW_SUBAGENT_SYSTEM_PROMPT,level:"session",isBuiltin:false}}let schemaSystemPrompt;if(opts.schema!==void 0){schemaSystemPrompt=opts.agentType!==void 0&&baseConfig.systemPrompt?`${baseConfig.systemPrompt}
|
|
4
4
|
|
|
5
5
|
${WORKFLOW_SUBAGENT_SYSTEM_PROMPT_WITH_SCHEMA}`:WORKFLOW_SUBAGENT_SYSTEM_PROMPT_WITH_SCHEMA}let schemaTools;if(opts.schema!==void 0&&baseConfig.tools&&baseConfig.tools.length>0&&!baseConfig.tools.includes("*")&&!baseConfig.tools.includes(ToolNames.STRUCTURED_OUTPUT)){schemaTools=[...baseConfig.tools,ToolNames.STRUCTURED_OUTPUT]}const augmented={...baseConfig,...opts.model!==void 0?{model:opts.model}:{},...schemaSystemPrompt!==void 0?{systemPrompt:schemaSystemPrompt}:{},...schemaTools!==void 0?{tools:schemaTools}:{},disallowedTools:Array.from(new Set([...baseConfig.disallowedTools??[],...WORKFLOW_SUBAGENT_DISALLOWED_TOOLS,...requestedDenies,...refuseSubagentTools===true?requestedAllows??[]:[]]))};if(requestedDenies.length>0){const unmatched=await subagentMgr.findUnmatchedToolNames(requestedDenies);if(unmatched.length>0){throw new Error(`agent({disallowedTools}): ${sanitizeForErrorMessage(unmatched.map(name=>JSON.stringify(name)).join(", "))} ${unmatched.length===1?"matches":"match"} no tool. Use a tool name (run_shell_command, write_file, edit), a display name (Shell, WriteFile, Edit), or an MCP pattern (mcp__<server>, mcp__<server>__*, mcp__<server>__<tool>).`)}}if(opts.schema!==void 0&&[...baseConfig.disallowedTools??[],...requestedDenies].some(name=>(resolveBuiltinToolName(name)??name)===ToolNames.STRUCTURED_OUTPUT)){throw new Error("agent({schema, disallowedTools}): schema mode needs the structured_output tool, but disallowedTools deny it (from this call or from the agent type).")}if(requestedAllows!==void 0){const agentHasOwnMcpServers=baseConfig.mcpServers!==void 0&&Object.keys(baseConfig.mcpServers).length>0;const checkMcpNames=!agentHasOwnMcpServers;if(requestedAllows.some(name=>resolveBuiltinToolName(name)===void 0&&(checkMcpNames||!name.startsWith("mcp__")))){await config.waitForMcpReady()}const unmatchedAllows=await subagentMgr.findUnmatchedToolNames(requestedAllows,{checkMcpNames});if(unmatchedAllows.length>0){throw new Error(`agent({tools}): ${sanitizeForErrorMessage(listAgentToolNames(unmatchedAllows))} ${unmatchedAllows.length===1?"names":"name"} no tool. Use a tool name (run_shell_command, read_file), a display name (Shell, ReadFile), or an MCP tool's exact name as the model sees it (mcp__<server>__<tool>).`)}const agentTypeTools=baseConfig.tools!==void 0&&baseConfig.tools.length>0&&!baseConfig.tools.includes("*")?baseConfig.tools:void 0;try{augmented.tools=narrowAgentTools({requested:requestedAllows,requestedNames:await subagentMgr.resolveToolNames(requestedAllows),...agentTypeTools!==void 0?{agentTypeTools,agentTypeToolNames:await subagentMgr.resolveToolNames(agentTypeTools)}:{},denies:await subagentMgr.resolveToolNames(augmented.disallowedTools??[]),getMcpIdentity:__name(name=>config.getToolRegistry().getMcpToolIdentity?.(name),"getMcpIdentity"),schema:opts.schema!==void 0})}catch(error){throw new Error(sanitizeForErrorMessage(error instanceof Error?error.message:String(error)))}}const refusedToolConfig=refuseSubagentTools===true?{tools:opts.schema!==void 0?[ToolNames.STRUCTURED_OUTPUT]:[],disallowedTools:[]}:void 0;let worktreeIsolation=null;let effectiveContext=config;let approvalCleanup;if(opts.isolation!==void 0&&opts.workingDir!==void 0){throw new Error("agent({workingDir, isolation}): incompatible options. workingDir pins the agent to a worktree you already own; isolation creates a fresh one and removes it afterwards. Pass one.")}if(opts.isolation==="worktree"){worktreeIsolation=await provisionWorkflowWorktree(config);effectiveContext=deriveWorktreeConfig(config,worktreeIsolation.path,{customIgnoreFiles:config.getFileFilteringOptions().customIgnoreFiles});installSessionWorkflowRevisionWriteThrough(effectiveContext,config)}else if(opts.workingDir!==void 0){if(typeof opts.workingDir!=="string"||opts.workingDir.trim().length===0){throw new Error("agent({workingDir}): must be a non-empty string naming an existing git worktree of this repository.")}const resolved=await resolveExternalWorktreeDir(config,opts.workingDir,"workingDir");if("error"in resolved){throw new Error(`agent({workingDir: ${sanitizeForErrorMessage(JSON.stringify(opts.workingDir))}}): ${sanitizeForErrorMessage(resolved.error)}`)}effectiveContext=deriveWorktreeConfig(config,resolved.path,{customIgnoreFiles:config.getFileFilteringOptions().customIgnoreFiles});installSessionWorkflowRevisionWriteThrough(effectiveContext,config)}if(effectiveContext!==config){const approvalHandle=deriveApprovalModeConfig(effectiveContext,config.getApprovalMode());approvalCleanup=approvalHandle.cleanup;effectiveContext=approvalHandle.config}let onParentAbort;try{let schemaState=null;if(schemaValidate!==void 0){effectiveContext=await createSchemaConfigOverride(effectiveContext,opts.schema,schemaValidate);schemaState=createSchemaModeState(schemaValidate)}let dispatchSignal=signal;if(schemaState){const child=new AbortController;if(signal){if(signal.aborted){child.abort(signal.reason)}else{onParentAbort=__name(()=>child.abort(signal.reason),"onParentAbort");signal.addEventListener("abort",onParentAbort)}}schemaState.abortController=child;dispatchSignal=child.signal}const eventEmitter=emitter??(schemaState?new AgentEventEmitter:void 0);if(schemaState&&eventEmitter){attachSchemaListeners(eventEmitter,schemaState)}const{subagent,dispose}=await subagentMgr.createAgentHeadless(augmented,effectiveContext,{runConfigOverrides:subagentBounds??{max_turns:resolveSubagentMaxTurns(),max_time_minutes:resolveSubagentMaxTimeMinutes()},...effort!==void 0?{modelConfigOverrides:{reasoningEffort:effort}}:{},...refusedToolConfig!==void 0?{toolConfigOverride:refusedToolConfig}:{},eventEmitter,taskName:String(ctx.get("task_prompt")),subagentId:workflowAgentId});try{try{await runWithAgentContext(workflowAgentId,()=>subagent.execute(ctx,dispatchSignal,{enforceTimeLimitDuringRetryWait:true}))}finally{reportTokens(subagent,opts,onTokens)}if(schemaState){if(schemaState.result!==null){if(worktreeIsolation){const isolation=worktreeIsolation;worktreeIsolation=null;const preserved=await cleanupWorkflowWorktree(isolation);if(preserved){debugLogger.info(`[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.`)}}return schemaState.result}if(signal?.aborted){throw new DOMException("Workflow aborted.","AbortError")}const mode2=subagent.getTerminateMode();if(mode2!=="GOAL"&&mode2!=="CANCELLED"){throw terminalDispatchError(workflowAgentId,mode2)}throw new WorkflowAgentFailedError(describeMissingStructuredOutput(schemaState),"no_structured_output")}const mode=subagent.getTerminateMode();if(mode!=="GOAL"){throw terminalDispatchError(workflowAgentId,mode)}let finalText=toModelVisibleSubagentResult(subagent.getFinalText(),mode);if(worktreeIsolation){const isolation=worktreeIsolation;worktreeIsolation=null;const preserved=await cleanupWorkflowWorktree(isolation);if(preserved&&typeof finalText==="string"){finalText=appendWorktreePreservedSuffix(finalText,preserved)}}return finalText}finally{await dispose()}}finally{if(onParentAbort&&signal){signal.removeEventListener("abort",onParentAbort)}approvalCleanup?.();if(worktreeIsolation){try{await cleanupWorkflowWorktree(worktreeIsolation)}catch(error){debugLogger.warn(`Workflow worktree cleanup in fallback finally failed for ${worktreeIsolation.path}: ${error instanceof Error?error.message:String(error)}`)}}}}__name(runOverridePath,"runOverridePath");async function provisionWorkflowWorktree(config){const cwd=config.getTargetDir();if(/\.qwen[\\/]worktrees[\\/]/.test(cwd)){throw new Error(`agent({isolation:'worktree'}): parent is already inside a worktree (${cwd}). Nested isolation worktrees are not supported \u2014 the subagent's inherited paths would still reference the outer worktree.`)}const probe=new GitWorktreeService(cwd);const gitCheck=await probe.checkGitAvailable();if(!gitCheck.available){throw new Error(`agent({isolation:'worktree'}): ${gitCheck.error??"git is not available"}.`)}if(!await probe.isGitRepository()){throw new Error(`agent({isolation:'worktree'}): ${cwd} is not a git repository.`)}const projectRoot=await probe.getRepoTopLevel()??cwd;const wtService=projectRoot===cwd?probe:new GitWorktreeService(projectRoot);let parentDirty=false;try{parentDirty=await wtService.hasWorktreeChanges(projectRoot)}catch(error){debugLogger.warn(`[Workflow] hasWorktreeChanges failed at ${projectRoot}: ${error}`);parentDirty=true}if(parentDirty){throw new Error(`agent({isolation:'worktree'}): parent working tree at ${projectRoot} has uncommitted changes that would not propagate into the isolated worktree. The subagent would see the prior HEAD instead of the current state. Commit or stash the changes, then re-run.`)}const slug=generateAgentWorktreeSlug();let parentBranch;try{parentBranch=await wtService.getCurrentBranch()}catch(error){debugLogger.warn(`[Workflow] getCurrentBranch failed at ${projectRoot}: ${error}`)}const created=await wtService.createUserWorktree(slug,parentBranch,{symlinkDirectories:config.getWorktreeSymlinkDirectories()});if(!created.success||!created.worktree){throw new Error(`agent({isolation:'worktree'}): failed to create worktree: ${created.error??"unknown error"}.`)}try{await writeWorktreeSessionMarker(created.worktree.path,config.getSessionId())}catch(error){debugLogger.warn(`[Workflow] failed to write session marker at ${created.worktree.path}: ${error}`)}return{slug,path:created.worktree.path,branch:created.worktree.branch,repoRoot:projectRoot}}__name(provisionWorkflowWorktree,"provisionWorkflowWorktree");async function cleanupWorkflowWorktree(isolation){const wtService=new GitWorktreeService(isolation.repoRoot);const[hasChanges,hasUnmerged]=await Promise.all([wtService.hasWorktreeChanges(isolation.path).catch(error=>{debugLogger.warn(`[Workflow] hasWorktreeChanges failed for ${isolation.path}: ${error}`);return true}),wtService.hasUnmergedWorktreeCommits(isolation.slug).catch(error=>{debugLogger.warn(`[Workflow] hasUnmergedWorktreeCommits failed for ${isolation.slug}: ${error}`);return true})]);if(hasChanges||hasUnmerged){debugLogger.info(`[Workflow] Preserving isolation worktree ${isolation.path} (branch ${isolation.branch}, hasChanges=${hasChanges}, hasUnmerged=${hasUnmerged})`);return{path:isolation.path,branch:isolation.branch}}try{const result=await wtService.removeUserWorktree(isolation.slug,{deleteBranch:true});if(!result.success){debugLogger.warn(`[Workflow] Failed to remove ephemeral worktree ${isolation.path}: ${result.error}`);return{path:isolation.path,branch:isolation.branch}}if(result.branchPreserved){debugLogger.warn(`[Workflow] Removed worktree directory ${isolation.path} but kept branch ${isolation.branch} (unmerged commits at delete time)`);return{branch:isolation.branch}}}catch(error){debugLogger.warn(`[Workflow] Failed to remove ephemeral worktree ${isolation.path}: ${error}`);return{path:isolation.path,branch:isolation.branch}}return null}__name(cleanupWorkflowWorktree,"cleanupWorkflowWorktree");function appendWorktreePreservedSuffix(finalText,preserved){const sep=finalText.endsWith("\n")?"\n":"\n\n";if(preserved.path){return`${finalText}${sep}[worktree preserved: ${preserved.path} (branch ${preserved.branch})]`}return`${finalText}${sep}[worktree directory removed; branch ${preserved.branch} preserved \u2014 recover with \`git worktree add <path> ${preserved.branch}\`]`}__name(appendWorktreePreservedSuffix,"appendWorktreePreservedSuffix");var MAX_FAILED_STRUCTURED_OUTPUT_SUBMISSIONS=3;var MAX_STRUCTURED_OUTPUT_ERROR_LENGTH=500;function createSchemaModeState(validate){return{result:null,attempts:0,lastError:void 0,lastErrorAttempt:0,pendingArgs:new Map,abortController:new AbortController,validate}}__name(createSchemaModeState,"createSchemaModeState");function recordFailedSubmission(state,error){state.attempts+=1;if(typeof error==="string"&&error.trim().length>0){const clean=sanitizeForErrorMessage(error).trim();state.lastError=clean.length>MAX_STRUCTURED_OUTPUT_ERROR_LENGTH?`${clean.slice(0,MAX_STRUCTURED_OUTPUT_ERROR_LENGTH)}\u2026`:clean;state.lastErrorAttempt=state.attempts}if(state.attempts>=MAX_FAILED_STRUCTURED_OUTPUT_SUBMISSIONS&&state.result===null){state.abortController.abort()}}__name(recordFailedSubmission,"recordFailedSubmission");function describeMissingStructuredOutput(state){const attempts=state.attempts;if(attempts===0){return"subagent completed without calling structured_output (no validation attempt \u2014 model produced plain-text content)."}const submissions=`${attempts} failed structured_output submission${attempts===1?"":"s"}`;const head=attempts>=MAX_FAILED_STRUCTURED_OUTPUT_SUBMISSIONS?`subagent stopped after ${submissions} without a valid result.`:`subagent completed after ${submissions} without a valid result.`;if(state.lastError===void 0){return`${head} The failed submissions reported no error detail.`}if(state.lastErrorAttempt===attempts){return`${head} Last error: ${state.lastError}`}return`${head} Submission ${attempts} reported no error detail; the last error (submission ${state.lastErrorAttempt}): ${state.lastError}`}__name(describeMissingStructuredOutput,"describeMissingStructuredOutput");function attachSchemaListeners(emitter,state){const targetTool=ToolNames.STRUCTURED_OUTPUT;emitter.on("tool_call",evt=>{if(evt.name!==targetTool)return;state.pendingArgs.set(evt.callId,evt.args)});emitter.on("tool_result",evt=>{if(evt.name!==targetTool)return;const args=state.pendingArgs.get(evt.callId);state.pendingArgs.delete(evt.callId);if(state.result!==null)return;if(!evt.success){recordFailedSubmission(state,evt.error);return}if(args===void 0){recordFailedSubmission(state,"structured_output reported success for a call whose arguments were not observed.");return}const checked=validateStructuredResult(args,state.validate);if("error"in checked){recordFailedSubmission(state,`structured_output arguments did not pass validation: ${checked.error}`);return}state.result=checked.value;state.abortController.abort()})}__name(attachSchemaListeners,"attachSchemaListeners");async function createSchemaConfigOverride(base,schema,validate){const override=deriveConfig(base);installSessionWorkflowRevisionWriteThrough(override,base);await rebuildToolRegistryOnOverride(override,base);const registry=override.getToolRegistry();registry.registerTool(new SyntheticOutputTool(schema,validate));return override}__name(createSchemaConfigOverride,"createSchemaConfigOverride");var WorkflowOrchestrator=class{constructor(dispatch){this.dispatch=dispatch}static{__name(this,"WorkflowOrchestrator")}async run(req){const runId=req.runId??generateRunId();const maxAgents=resolveMaxAgentsPerRun();const signal=req.abortOnTimeout?.signal;const scheduler=req.scheduler??new WorkflowDispatchScheduler(resolveConcurrencyLimit(),signal);const rejectThroughPauseGate=__name(error=>scheduler.waitUntilRunning().then(()=>{throw error},()=>{throw error}),"rejectThroughPauseGate");let agentCount=0;let dispatchTraceCount=0;const emitter=req.emitter;const budget=req.budget;const dependencyContext=new AsyncLocalStorage;const issueDispatchTrace=__name((prompt,opts,cached=false,workflowCallId)=>{const id=`dispatch-${dispatchTraceCount+=1}`;const store=dependencyContext.getStore();const dependsOn=Array.from(new Set(store?.tails??[]));if(store)store.tails=[id];try{emitter?.dispatchQueued?.({id,...opts.stepId!==void 0?{stepId:opts.stepId}:{},...workflowCallId?{workflowCallId}:{},...typeof opts.label==="string"?{label:opts.label}:{},prompt,dependsOn,queuedAt:Date.now(),...cached?{cached:true}:{}})}catch(e){debugLogger.warn("emitter.dispatchQueued threw:",e)}return id},"issueDispatchTrace");const journal=req.journal;const replay=req.resumeReplay;let prefixHash=deriveArgsSeed(req.args);let hadMiss=false;const replayPrefix=new Set;let replayBarrier;let executionClosed=false;const assertExecutionOpen=__name(()=>{if(executionClosed||signal?.aborted){throw new DOMException("Workflow run has ended.","AbortError")}},"assertExecutionOpen");let journalAgentId=0;const parentSandboxRef={current:void 0};const countedDispatch=__name(async(prompt,opts,workflowCallId)=>{assertExecutionOpen();const stepId=readWorkflowStepId(opts.stepId);if(stepId!==void 0)opts={...opts,stepId};if(typeof prompt!=="string"||prompt.length===0){return rejectThroughPauseGate(new Error("agent() requires a non-empty string prompt."))}const schemaPreparation=opts.schema===void 0?void 0:prepareWorkflowSchema(opts.schema);const schemaError=schemaPreparation!==void 0&&!schemaPreparation.ok?schemaPreparation.error:void 0;let journalKey;let journalEntryId;let respawnLine;if(journal){journalKey=deriveAgentKey(prefixHash,prompt,opts);prefixHash=journalKey;if(!hadMiss&&replay&&schemaError===void 0){const cached=replay.results.get(journalKey);let cachedResult=cached?.result;let cacheUsable=cached!==void 0;if(cached!==void 0&&schemaPreparation?.ok){const checked=validateStructuredResult(cached.result,schemaPreparation.validate);if("error"in checked){debugLogger.info(`[Workflow] resume cache entry no longer satisfies its schema for runId=${runId}; re-running live: `+sanitizeForErrorMessage(checked.error));cacheUsable=false}else{cachedResult=checked.value}}if(cacheUsable){const replayed=cachedResult;replayPrefix.add(journalKey);const respawns=replay.started.get(journalKey);if(respawns&&respawns.length>0){debugLogger.info(`[Workflow] resume cache hit after ${respawns.length} prior respawn(s) for runId=${runId}.`)}const label2=typeof opts.label==="string"?opts.label:void 0;const dispatchId2=issueDispatchTrace(prompt,opts,true,workflowCallId);try{emitter?.agentDispatched?.(label2)}catch(e){debugLogger.warn("emitter.agentDispatched threw:",e)}try{emitter?.agentCompleted?.(label2)}catch(e){debugLogger.warn("emitter.agentCompleted threw:",e)}try{emitter?.dispatchSettled?.(dispatchId2,void 0,Date.now())}catch(e){debugLogger.warn("emitter.dispatchSettled threw:",e)}return scheduler.waitUntilRunning().then(()=>replayed,()=>replayed)}}const priorStarts=replay?.started.get(journalKey);if(priorStarts&&priorStarts.length>0&&!replay?.results.has(journalKey)){const name=typeof opts.label==="string"?`"${stripAnsiAndControl(opts.label)}"`:"an agent";respawnLine=replay?.failed.has(journalKey)?`[resume] re-running ${name}: it failed in the previous run`:`[resume] respawning ${name}: interrupted in a previous run (${priorStarts.length} prior attempt${priorStarts.length===1?"":"s"})`}if(!hadMiss&&replay){replayBarrier=journal.retainReplayPrefix(new Set(replayPrefix));void replayBarrier.catch(()=>void 0)}hadMiss=true}if(replayBarrier)await replayBarrier;assertExecutionOpen();if(budget&&budget.total!==null&&budget.remaining()<=0){debugLogger.warn(`[Workflow] budget gate refused dispatch at entry: runId=${runId} spent=${budget.spent()} total=${budget.total}`);return rejectThroughPauseGate(new WorkflowBudgetExceededError(runId,budget.total,budget.spent()))}if(agentCount>=maxAgents){return rejectThroughPauseGate(new WorkflowAgentCapExceededError(maxAgents))}agentCount+=1;if(journal&&journalKey!==void 0){journalEntryId=String(journalAgentId+=1)}const label=typeof opts.label==="string"?opts.label:void 0;const dispatchId=issueDispatchTrace(prompt,opts,false,workflowCallId);try{emitter?.agentDispatched?.(label)}catch(e){debugLogger.warn("emitter.agentDispatched threw:",e)}let completionEmitted=false;const emitCompletion=__name(error=>{if(completionEmitted)return;completionEmitted=true;const message=error===void 0?void 0:error instanceof Error?error.message:String(error);try{emitter?.agentCompleted?.(label,message)}catch(e){debugLogger.warn("emitter.agentCompleted threw:",e)}try{emitter?.dispatchSettled?.(dispatchId,message,Date.now())}catch(e){debugLogger.warn("emitter.dispatchSettled threw:",e)}},"emitCompletion");return scheduler.run(async()=>{try{assertExecutionOpen();try{emitter?.dispatchStarted?.(dispatchId,Date.now())}catch(e){debugLogger.warn("emitter.dispatchStarted threw:",e)}if(budget&&budget.total!==null&&budget.remaining()<=0){debugLogger.warn(`[Workflow] budget gate refused dispatch at slot-acquire: runId=${runId} spent=${budget.spent()} total=${budget.total}`);throw new WorkflowBudgetExceededError(runId,budget.total,budget.spent())}if(journal&&journalKey!==void 0&&journalEntryId!==void 0){journal.append({type:"started",key:journalKey,agentId:journalEntryId}).catch(e=>debugLogger.warn(`journal started-append failed: ${e}`))}if(respawnLine){parentSandboxRef.current?.appendLog(respawnLine);try{emitter?.resumeRespawn?.(respawnLine)}catch(e){debugLogger.warn("emitter.resumeRespawn threw:",e)}}if(schemaError!==void 0){throw new Error(schemaError)}const result=await this.dispatch(prompt,opts,dispatchId);emitCompletion();if(!executionClosed&&journal&&journalKey!==void 0){journal.append({type:"result",key:journalKey,agentId:journalEntryId??"",result}).catch(e=>debugLogger.warn(`journal result-append failed: ${e}`))}if(budget){try{emitter?.budgetUpdated?.(...runBudgetFigures(budget))}catch(e){debugLogger.warn("emitter.budgetUpdated threw:",e)}}return result}catch(err){emitCompletion(err);if(budget){try{emitter?.budgetUpdated?.(...runBudgetFigures(budget))}catch(e){debugLogger.warn("emitter.budgetUpdated threw:",e)}}if(journal&&journalKey!==void 0&&!executionClosed&&!signal?.aborted&&!isWorkflowRunLevelError(err)){journal.append({type:"failed",key:journalKey,agentId:journalEntryId??""}).catch(e=>debugLogger.warn(`journal failed-append failed: ${e}`))}if(executionClosed||signal?.aborted||isWorkflowRunLevelError(err)){throw err}if(isWorkflowAgentFailedError(err)){debugLogger.warn(`[Workflow] agent settled to null (${err.kind}): ${err.message}`)}else{debugLogger.warn(`[Workflow] agent settled to null: ${extractErrorMessage(err)}`)}return null}}).then(result=>scheduler.waitUntilRunning().then(()=>result,()=>result),error=>{emitCompletion(error);return scheduler.waitUntilRunning().then(()=>{throw error},()=>{throw error})})},"countedDispatch");const parallelImpl=makeParallelImpl(signal,dependencyContext);const pipelineImpl=makePipelineImpl(signal,dependencyContext);let workflowCallCount=0;const recordCall=__name(call=>{try{emitter?.workflowCallUpdated?.({...call})}catch(error){debugLogger.warn("emitter.workflowCallUpdated threw:",error)}},"recordCall");const resolveSavedWorkflow=req.resolveSavedWorkflow;const workflowImpl=resolveSavedWorkflow?async(nameOrRef,nestedArgs,stepId)=>{const call={id:`workflow-call-${++workflowCallCount}`,...stepId!==void 0?{stepId:readWorkflowStepId(stepId)}:{},...typeof nameOrRef==="string"?{workflowName:nameOrRef}:{},status:"running",startedAt:Date.now()};const recorded=workflowCallCount<=MAX_WORKFLOW_CALL_TRACES;if(recorded)recordCall(call);else if(workflowCallCount===MAX_WORKFLOW_CALL_TRACES+1){try{emitter?.workflowCallsTruncated?.()}catch(error){debugLogger.warn("emitter.workflowCallsTruncated threw:",error)}}let nestedSandbox;try{const resolved=await resolveSavedWorkflow(nameOrRef);if(resolved.name)call.workflowName=resolved.name;nestedSandbox=createWorkflowSandbox({args:nestedArgs,runId,dispatch:__name((prompt,opts)=>countedDispatch(prompt,opts,call.id),"dispatch"),parallel:parallelImpl,pipeline:pipelineImpl,abortOnTimeout:req.abortOnTimeout,emitter,budget,scheduler});const result=await nestedSandbox.run(resolved.script);call.status=signal?.aborted?"cancelled":"completed";return result}catch(error){call.status=signal?.aborted?"cancelled":"failed";try{const message=typeof error==="string"?error:error&&typeof error==="object"?Object.getOwnPropertyDescriptor(error,"message")?.value:void 0;if(typeof message==="string")call.error=message}catch{}throw error}finally{call.endedAt=Date.now();if(recorded)recordCall(call);for(const line of nestedSandbox?.getLogs()??[]){parentSandboxRef.current?.appendLog(line)}}}:void 0;const sandbox=createWorkflowSandbox({args:req.args,maxWallClockMs:req.maxWallClockMs,runId,dispatch:countedDispatch,parallel:parallelImpl,pipeline:pipelineImpl,workflow:workflowImpl,abortOnTimeout:req.abortOnTimeout,emitter,budget,scheduler});parentSandboxRef.current=sandbox;try{let result;try{result=await dependencyContext.run({tails:[]},()=>sandbox.run(req.script))}finally{executionClosed=true;await replayBarrier}return{runId,result,phases:sandbox.getPhases(),logs:sandbox.getLogs(),meta:sandbox.getMeta()}}catch(err){throw new WorkflowExecutionError(extractErrorMessage(err),sandbox.getPhases(),sandbox.getLogs(),sandbox.getMeta())}}};async function settleToNullArray(thunks,signal){const settled=await Promise.allSettled(thunks.map(t=>Promise.resolve().then(t)));if(signal?.aborted)throw new DOMException("Workflow run aborted.","AbortError");const visitedReasons=new WeakSet;const findRunFailureReason=__name(reason=>{if(reason===null||typeof reason!=="object")return void 0;if(visitedReasons.has(reason))return void 0;visitedReasons.add(reason);try{if(reason.__wfRunFailure===true){return reason}const errors=reason?.errors;if(!Array.isArray(errors))return void 0;for(const error of errors){const runFailure=findRunFailureReason(error);if(runFailure!==void 0)return runFailure}}catch{return void 0}return void 0},"findRunFailureReason");for(const result of settled){if(result.status!=="rejected")continue;const runFailure=findRunFailureReason(result.reason);if(runFailure!==void 0)throw runFailure}return settled.map((r,i)=>{if(r.status==="fulfilled")return r.value;const reason=r.reason;debugLogger.warn(`Workflow thunk at index ${i} rejected: ${String(reason?.message??r.reason)}`);return null})}__name(settleToNullArray,"settleToNullArray");function makeParallelImpl(signal,dependencyContext){return thunks=>{if(!Array.isArray(thunks)){return Promise.reject(new Error("parallel() expects an array of thunks (functions returning promises)."))}let batch;try{batch=snapshotBatch("parallel() thunks",thunks)}catch(error){return Promise.reject(error)}for(let i=0;i<batch.length;i++){if(typeof batch[i]!=="function"){return Promise.reject(new Error("parallel() expects an array of functions, not values \u2014 wrap each call: parallel([() => agent(...), () => agent(...)])."))}}const parent=dependencyContext.getStore();const inheritedTails=parent?.tails??[];const branches=batch.map(thunk=>{const store={tails:[...inheritedTails]};return{store,thunk:__name(()=>dependencyContext.run(store,thunk),"thunk")}});return settleToNullArray(branches.map(({thunk})=>thunk),signal).then(result=>{if(parent&&branches.length>0){parent.tails=mergeFanoutTails(parent.tails,inheritedTails,branches.flatMap(({store})=>store.tails))}return result})}}__name(makeParallelImpl,"makeParallelImpl");function makePipelineImpl(signal,dependencyContext){return(items,...stages)=>{if(!Array.isArray(items)){return Promise.reject(new Error("pipeline() expects an array of items as its first argument."))}let batch;try{batch=snapshotBatch("pipeline() items",items);snapshotBatch("pipeline() stages",stages)}catch(error){return Promise.reject(error)}for(const s of stages){if(typeof s!=="function"){return Promise.reject(new Error("pipeline() stages must be functions: pipeline(items, item => ..., result => ...)."))}}const parent=dependencyContext.getStore();const inheritedTails=parent?.tails??[];const branches=batch.map((item,idx)=>{const store={tails:[...inheritedTails]};return{store,thunk:__name(()=>dependencyContext.run(store,()=>runPipelineChain(item,idx,stages)),"thunk")}});return settleToNullArray(branches.map(({thunk})=>thunk),signal).then(result=>{if(parent&&branches.length>0){parent.tails=mergeFanoutTails(parent.tails,inheritedTails,branches.flatMap(({store})=>store.tails))}return result})}}__name(makePipelineImpl,"makePipelineImpl");function snapshotBatch(list,input){let length;try{length=input.length}catch{length=void 0}if(typeof length!=="number"||!Number.isSafeInteger(length)||length<0){throw new Error(`${list} must be an array with a readable length.`)}if(length>WORKFLOW_BATCH_LIMIT){throw new Error(describeOversizedBatch(list,length))}const batch=new Array(length);for(let i=0;i<length;i++){if(i in input)batch[i]=input[i]}return batch}__name(snapshotBatch,"snapshotBatch");function mergeFanoutTails(currentParentTails,inheritedTails,branchTails){const inherited=new Set(inheritedTails);const newBranchTails=branchTails.filter(tail=>!inherited.has(tail));const merged=newBranchTails.length>0?[...newBranchTails,...currentParentTails.filter(tail=>!inherited.has(tail))]:currentParentTails;return Array.from(new Set(merged))}__name(mergeFanoutTails,"mergeFanoutTails");async function runPipelineChain(item,idx,stages){let prev=item;for(const stage of stages){if(prev===null)break;prev=await stage(prev,item,idx)}return prev}__name(runPipelineChain,"runPipelineChain");function extractErrorMessage(err){if(err&&typeof err==="object"&&"message"in err){const m=err.message;if(typeof m==="string")return m;return String(m)}return String(err)}__name(extractErrorMessage,"extractErrorMessage");init_esbuild_shims();import{promises as fs2}from"node:fs";import path2 from"node:path";init_esbuild_shims();var MAX_WORKFLOW_RESULT_PREVIEW_CHARS=25e3;var MAX_RAW_PREVIEW_CHARS=MAX_WORKFLOW_RESULT_PREVIEW_CHARS*4;function buildWorkflowResultPreview(result){const raw=result===""?'""':stringifyWorkflowResult(result,true);const cut=truncateWorkflowText(raw,MAX_RAW_PREVIEW_CHARS);const text=sanitizeWorkflowText(cut);let reportedFailures;try{reportedFailures=reportedFailureLines(result)}catch{reportedFailures=[]}const bounded=truncateWorkflowText(text,MAX_WORKFLOW_RESULT_PREVIEW_CHARS);return{text:bounded,truncated:cut!==raw||bounded!==text,reportedFailures}}__name(buildWorkflowResultPreview,"buildWorkflowResultPreview");function isWorkflowResultPreview(value){if(typeof value!=="object"||value===null||Array.isArray(value)){return false}const{text,truncated,reportedFailures}=value;return typeof text==="string"&&text.length<=MAX_WORKFLOW_RESULT_PREVIEW_CHARS&&typeof truncated==="boolean"&&Array.isArray(reportedFailures)&&reportedFailures.length<=REPORTED_FAILURE_KEYS.length&&reportedFailures.every(line=>typeof line==="string"&&line.length<=MAX_FAILURE_LINE_CHARS)}__name(isWorkflowResultPreview,"isWorkflowResultPreview");var debugLogger5=createDebugLogger("WORKFLOW_SNAPSHOT");var MAX_RETAINED_SNAPSHOTS=30;var SNAPSHOT_TEMP_FILE=/^wf_[0-9a-f]+\.json\.[0-9a-f]+\.tmp$/;var SNAPSHOT_TEMP_GRACE_MS=60*60*1e3;var MAX_SNAPSHOT_ARGS_CHARS=256*1024;function toSnapshot(task){if(!isTerminalWorkflowStatus(task.status)){throw new Error(`Cannot snapshot active workflow ${task.runId}.`)}return{runId:task.runId,...task.sourceRef?{sourceRef:{...task.sourceRef}}:{},...task.workflowCalls?{workflowCalls:task.workflowCalls.map(call=>({...call}))}:{},...task.workflowCallsTruncated?{workflowCallsTruncated:true}:{},...task.toolUseId?{toolUseId:task.toolUseId}:{},...task.parentSessionId?{parentSessionId:task.parentSessionId}:{},description:task.description,...task.workflowName?{workflowName:task.workflowName}:{},sourceRunId:task.sourceRunId,startMode:task.startMode,...snapshotArgs(task.args),meta:task.meta,status:task.status,script:task.script??"",scriptPath:task.scriptPath,phases:[...task.phases],phaseVisits:task.phaseVisits.map(visit=>({...visit})),dispatches:task.dispatches.map(dispatch=>({...dispatch,dependsOn:[...dispatch.dependsOn]})),agentsDispatched:task.agentsDispatched,agentsCompleted:task.agentsCompleted,agentsRespawned:task.agentsRespawned??0,...task.sizeWarning?{sizeWarning:{...task.sizeWarning}}:{},tokensSpent:task.tokensSpent,tokenBudgetTotal:task.tokenBudgetTotal,perPhaseTokens:Array.from(task.perPhaseTokens.entries()),recentLogs:[...task.recentLogs],events:task.events.map(event=>({...event})),startTime:task.startTime,endTime:task.endTime,result:safeResult(task.result),...task.status==="completed"?{resultPreview:buildWorkflowResultPreview(task.result)}:{},error:task.error}}__name(toSnapshot,"toSnapshot");function snapshotArgs(args){if(args===void 0)return{argsRecorded:true};let json;try{json=JSON.stringify(args)}catch{return{argsOmitted:true}}if(json===void 0||json.length>MAX_SNAPSHOT_ARGS_CHARS){return{argsOmitted:true}}return{args:JSON.parse(json),argsRecorded:true}}__name(snapshotArgs,"snapshotArgs");function snapshotArgsUnavailable(snapshot){if(snapshot.argsOmitted)return"omitted";if(snapshot.argsRecorded!==true&&snapshot.args===void 0){return"unrecorded"}return void 0}__name(snapshotArgsUnavailable,"snapshotArgsUnavailable");function safeResult(result){if(result===void 0)return void 0;try{JSON.stringify(result);return result}catch{return`(non-JSON-serializable ${typeof result})`}}__name(safeResult,"safeResult");async function writeWorkflowSnapshot(config,task){const storage=config.storage;if(!storage)return false;try{const snapshot=toSnapshot(task);return await persistWorkflowSnapshot(config,snapshot)}catch(e){debugLogger5.warn(`writeWorkflowSnapshot failed for ${task.runId}: ${e}`);return false}}__name(writeWorkflowSnapshot,"writeWorkflowSnapshot");async function persistWorkflowSnapshot(config,snapshot){const storage=config.storage;if(!storage)return false;try{const dir=storage.getWorkflowRunsDir();await fs2.mkdir(dir,{recursive:true});await atomicWriteFile(storage.getWorkflowRunSnapshotPath(snapshot.runId),JSON.stringify(snapshot,null,2),{encoding:"utf8",mode:384,forceMode:true,noFollow:true});await pruneSnapshots(config,dir);return true}catch(e){debugLogger5.warn(`persistWorkflowSnapshot failed for ${snapshot.runId}: ${e}`);return false}}__name(persistWorkflowSnapshot,"persistWorkflowSnapshot");async function readWorkflowSnapshot(config,runId){const storage=config.storage;if(!storage)return void 0;try{const file=storage.getWorkflowRunSnapshotPath(runId);if((await fs2.lstat(file)).isSymbolicLink())return void 0;const parsed=JSON.parse(await fs2.readFile(file,"utf8"));return isWorkflowSnapshot(parsed)&&parsed.runId===runId?parsed:void 0}catch{return void 0}}__name(readWorkflowSnapshot,"readWorkflowSnapshot");async function listWorkflowSnapshots(config){const storage=config.storage;if(!storage)return[];const dir=storage.getWorkflowRunsDir();let files;try{files=(await fs2.readdir(dir)).filter(f=>f.endsWith(".json"))}catch{return[]}const snapshots=[];for(const file of files){try{const raw=await fs2.readFile(`${dir}/${file}`,"utf8");const parsed=JSON.parse(raw);if(!isWorkflowSnapshot(parsed)){debugLogger5.warn(`skipping invalid workflow snapshot ${file}`);continue}snapshots.push(parsed)}catch(e){debugLogger5.warn(`skipping unparseable snapshot ${file}: ${e}`)}}snapshots.sort((a,b)=>(b.startTime??0)-(a.startTime??0));return snapshots}__name(listWorkflowSnapshots,"listWorkflowSnapshots");async function deleteWorkflowSnapshot(config,runId){const storage=config.storage;if(!storage||!/^wf_[0-9a-f]+$/.test(runId))return false;try{await fs2.rm(path2.dirname(storage.getWorkflowRunJournalPath(runId)),{recursive:true,force:true})}catch(error){debugLogger5.warn(`delete workflow journal failed for ${runId}: ${error}`);return false}if(!await deleteInlineWorkflowScript(config,runId))return false;try{await fs2.unlink(storage.getWorkflowRunSnapshotPath(runId))}catch(error){if(error.code!=="ENOENT"){debugLogger5.warn(`deleteWorkflowSnapshot failed for ${runId}: ${error}`);return false}}return true}__name(deleteWorkflowSnapshot,"deleteWorkflowSnapshot");function isRecord2(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}__name(isRecord2,"isRecord");function isFiniteNumber(value){return typeof value==="number"&&Number.isFinite(value)}__name(isFiniteNumber,"isFiniteNumber");function isOptionalString(value){return value===void 0||typeof value==="string"}__name(isOptionalString,"isOptionalString");function isStringArray(value){return Array.isArray(value)&&value.every(item=>typeof item==="string")}__name(isStringArray,"isStringArray");function isWorkflowMeta(value){if(value===null)return true;if(!isRecord2(value))return false;if(typeof value["name"]!=="string"||typeof value["description"]!=="string"||!isOptionalString(value["whenToUse"])){return false}const phases=value["phases"];return phases===void 0||Array.isArray(phases)&&phases.every(phase=>isRecord2(phase)&&typeof phase["title"]==="string"&&isOptionalString(phase["detail"])&&isOptionalString(phase["model"]))}__name(isWorkflowMeta,"isWorkflowMeta");function isWorkflowPhaseVisit(value){return isRecord2(value)&&typeof value["id"]==="string"&&isFiniteNumber(value["index"])&&typeof value["title"]==="string"&&isFiniteNumber(value["startedAt"])&&(value["endedAt"]===void 0||isFiniteNumber(value["endedAt"]))}__name(isWorkflowPhaseVisit,"isWorkflowPhaseVisit");function isWorkflowDispatch(value){if(!isRecord2(value))return false;const status=value["status"];return typeof value["id"]==="string"&&(value["phaseVisitId"]===null||typeof value["phaseVisitId"]==="string")&&typeof value["label"]==="string"&&typeof value["prompt"]==="string"&&isOptionalString(value["subagentId"])&&isOptionalString(value["stepId"])&&isOptionalString(value["workflowCallId"])&&(status==="queued"||status==="running"||status==="completed"||status==="failed"||status==="cancelled"||status==="cached")&&isStringArray(value["dependsOn"])&&isFiniteNumber(value["queuedAt"])&&(value["startedAt"]===void 0||isFiniteNumber(value["startedAt"]))&&(value["endedAt"]===void 0||isFiniteNumber(value["endedAt"]))&&isOptionalString(value["error"])}__name(isWorkflowDispatch,"isWorkflowDispatch");function hasOnlyKeys(value,keys){const allowed=new Set(keys);return Object.keys(value).every(key=>allowed.has(key))}__name(hasOnlyKeys,"hasOnlyKeys");function isWorkflowEvent(value){if(!isRecord2(value)||typeof value["id"]!=="string"||!isFiniteNumber(value["at"])||typeof value["type"]!=="string"){return false}const base=["id","type","at"];switch(value["type"]){case"phase-started":return hasOnlyKeys(value,[...base,"phaseVisitId","title"])&&typeof value["phaseVisitId"]==="string"&&typeof value["title"]==="string";case"phase-completed":return hasOnlyKeys(value,[...base,"phaseVisitId"])&&typeof value["phaseVisitId"]==="string";case"dispatch-queued":case"dispatch-started":case"dispatch-completed":case"dispatch-cancelled":case"dispatch-cached":return hasOnlyKeys(value,[...base,"dispatchId"])&&typeof value["dispatchId"]==="string";case"dispatch-failed":return hasOnlyKeys(value,[...base,"dispatchId","error"])&&typeof value["dispatchId"]==="string"&&typeof value["error"]==="string";case"log":return hasOnlyKeys(value,[...base,"message"])&&typeof value["message"]==="string";case"approval-requested":case"approval-settled":return hasOnlyKeys(value,[...base,"name","dispatchId"])&&typeof value["name"]==="string"&&isOptionalString(value["dispatchId"]);case"workflow-completed":case"workflow-cancelled":return hasOnlyKeys(value,base);case"workflow-failed":return hasOnlyKeys(value,[...base,"error"])&&typeof value["error"]==="string";default:return false}}__name(isWorkflowEvent,"isWorkflowEvent");function isWorkflowCall(value){if(!isRecord2(value))return false;const status=value["status"];return typeof value["id"]==="string"&&isOptionalString(value["stepId"])&&isOptionalString(value["workflowName"])&&(status==="running"||status==="completed"||status==="failed"||status==="cancelled")&&isFiniteNumber(value["startedAt"])&&(value["endedAt"]===void 0||isFiniteNumber(value["endedAt"]))&&isOptionalString(value["error"])}__name(isWorkflowCall,"isWorkflowCall");function isWorkflowSnapshot(value){if(!isRecord2(value))return false;const status=value["status"];const workflowCalls=value["workflowCalls"];const phaseVisits=value["phaseVisits"];const dispatches=value["dispatches"];const events=value["events"];const perPhaseTokens=value["perPhaseTokens"];return(value["sourceRef"]===void 0||isWorkflowSourceRef(value["sourceRef"]))&&(workflowCalls===void 0||Array.isArray(workflowCalls)&&workflowCalls.length<=MAX_WORKFLOW_CALL_TRACES&&workflowCalls.every(isWorkflowCall))&&(value["workflowCallsTruncated"]===void 0||typeof value["workflowCallsTruncated"]==="boolean")&&typeof value["runId"]==="string"&&value["runId"].length>0&&isOptionalString(value["toolUseId"])&&isOptionalString(value["parentSessionId"])&&isOptionalString(value["description"])&&isOptionalString(value["workflowName"])&&isOptionalString(value["sourceRunId"])&&(value["startMode"]===void 0||value["startMode"]==="retry"||value["startMode"]==="rerun")&&(value["argsOmitted"]===void 0||value["argsOmitted"]===true)&&(value["argsRecorded"]===void 0||value["argsRecorded"]===true)&&isWorkflowMeta(value["meta"])&&(status==="completed"||status==="failed"||status==="cancelled")&&typeof value["script"]==="string"&&isOptionalString(value["scriptPath"])&&isStringArray(value["phases"])&&(phaseVisits===void 0||Array.isArray(phaseVisits)&&phaseVisits.every(isWorkflowPhaseVisit))&&(dispatches===void 0||Array.isArray(dispatches)&&dispatches.every(isWorkflowDispatch))&&(events===void 0||Array.isArray(events)&&events.every(isWorkflowEvent))&&isFiniteNumber(value["agentsDispatched"])&&isFiniteNumber(value["agentsCompleted"])&&(value["agentsRespawned"]===void 0||isFiniteNumber(value["agentsRespawned"]))&&(value["sizeWarning"]===void 0||isWorkflowSizeWarning(value["sizeWarning"]))&&isFiniteNumber(value["tokensSpent"])&&(value["tokenBudgetTotal"]===null||isFiniteNumber(value["tokenBudgetTotal"]))&&Array.isArray(perPhaseTokens)&&perPhaseTokens.every(entry=>Array.isArray(entry)&&entry.length===2&&(entry[0]===null||typeof entry[0]==="string")&&isFiniteNumber(entry[1]))&&isStringArray(value["recentLogs"])&&isFiniteNumber(value["startTime"])&&(value["endTime"]===void 0||isFiniteNumber(value["endTime"]))&&(value["resultPreview"]===void 0||isWorkflowResultPreview(value["resultPreview"]))&&isOptionalString(value["error"])}__name(isWorkflowSnapshot,"isWorkflowSnapshot");async function sweepSnapshotTempFiles(dir,entries){const cutoff=Date.now()-SNAPSHOT_TEMP_GRACE_MS;await Promise.all(entries.filter(entry=>SNAPSHOT_TEMP_FILE.test(entry)).map(async entry=>{try{if((await fs2.stat(`${dir}/${entry}`)).mtimeMs>=cutoff)return;await fs2.unlink(`${dir}/${entry}`)}catch(e){debugLogger5.warn(`snapshot temp sweep failed for ${entry}: ${e}`)}}))}__name(sweepSnapshotTempFiles,"sweepSnapshotTempFiles");async function pruneSnapshots(config,dir){let entries;try{entries=await fs2.readdir(dir)}catch{return}await sweepSnapshotTempFiles(dir,entries);const files=entries.filter(f=>f.endsWith(".json"));if(files.length<=MAX_RETAINED_SNAPSHOTS)return;const stats=await Promise.all(files.map(async f=>{try{const s=await fs2.stat(`${dir}/${f}`);return{f,mtime:s.mtimeMs}}catch{return{f,mtime:0}}}));stats.sort((a,b)=>a.mtime-b.mtime);const toPrune=stats.slice(0,stats.length-MAX_RETAINED_SNAPSHOTS);const registry=config.getWorkflowRunRegistry?.();const protectedRunIds=new Set([...(registry?.list()??[]).filter(entry=>isActiveWorkflowStatus(entry.status)).map(entry=>entry.runId),...registry?.listStartingRunIds()??[]]);await Promise.all(toPrune.map(s=>{const runId=s.f.replace(/\.json$/,"");const isRunDir=/^wf_[0-9a-f]+$/.test(runId);const deleteArtifacts=isRunDir&&!protectedRunIds.has(runId)&&!isWorkflowRunPersistenceActive(config,runId);return Promise.all([fs2.unlink(`${dir}/${s.f}`).catch(e=>debugLogger5.warn(`prune unlink failed for ${s.f}: ${e}`)),...deleteArtifacts?[fs2.rm(path2.dirname(config.storage.getWorkflowRunJournalPath(runId)),{recursive:true,force:true}).catch(e=>debugLogger5.warn(`prune journal dir failed for ${runId}: ${e}`)),deleteInlineWorkflowScript(config,runId)]:[]])}))}__name(pruneSnapshots,"pruneSnapshots");init_esbuild_shims();import{promises as fs3}from"node:fs";import os2 from"node:os";import path3 from"node:path";var debugLogger6=createDebugLogger("WORKFLOW_CHECKPOINT");var CHECKPOINT_FILE="checkpoint.json";var INTERRUPTED_WORKFLOW_ERROR="interrupted: the process running this workflow exited before it finished";function checkpointFromTask(task,context){return{v:1,runId:task.runId,sessionId:context.sessionId,pid:process.pid,hostname:os2.hostname(),startTime:task.startTime,script:task.script??"",...task.scriptPath?{scriptPath:task.scriptPath}:{},meta:context.meta,description:context.meta?.name??task.description??task.runId,...task.workflowName?{workflowName:task.workflowName}:{},...task.resumeName?{resumeName:task.resumeName}:{},...task.sourceRef?{sourceRef:{...task.sourceRef}}:{},...task.toolUseId?{toolUseId:task.toolUseId}:{},...task.sourceRunId?{sourceRunId:task.sourceRunId}:{},...task.startMode?{startMode:task.startMode}:{},tokenBudgetTotal:task.tokenBudgetTotal??null,...snapshotArgs(task.args)}}__name(checkpointFromTask,"checkpointFromTask");function checkpointPath(config,runId){const storage=config.storage;if(!storage||!isWorkflowRunId(runId))return void 0;return path3.join(path3.dirname(storage.getWorkflowRunJournalPath(runId)),CHECKPOINT_FILE)}__name(checkpointPath,"checkpointPath");async function isRunDirSymlinked(config,file){return await isSymlinkedRoot(config.storage.getWorkflowRunsDir())||await isSymlinkedRoot(path3.dirname(file))}__name(isRunDirSymlinked,"isRunDirSymlinked");async function writeWorkflowCheckpoint(config,checkpoint){const file=checkpointPath(config,checkpoint.runId);if(!file)return"unavailable";try{if(await isRunDirSymlinked(config,file))return"unavailable";await atomicWriteFile(file,JSON.stringify(checkpoint),{encoding:"utf8",mode:384,forceMode:true,noFollow:true});return"written"}catch(error){debugLogger6.warn(`writeWorkflowCheckpoint failed for ${checkpoint.runId}: ${error}`);return"failed"}}__name(writeWorkflowCheckpoint,"writeWorkflowCheckpoint");async function removeWorkflowCheckpoint(config,runId){const file=checkpointPath(config,runId);if(!file)return;try{if(await isRunDirSymlinked(config,file))return;await fs3.rm(file,{force:true})}catch(error){debugLogger6.warn(`removeWorkflowCheckpoint failed for ${runId}: ${error}`)}}__name(removeWorkflowCheckpoint,"removeWorkflowCheckpoint");async function readWorkflowCheckpoint(config,runId){const file=checkpointPath(config,runId);if(!file)return void 0;try{if(await isRunDirSymlinked(config,file))return void 0;if((await fs3.lstat(file)).isSymbolicLink())return void 0;const parsed=JSON.parse(await fs3.readFile(file,"utf8"));return isWorkflowCheckpoint(parsed)&&parsed.runId===runId?parsed:void 0}catch{return void 0}}__name(readWorkflowCheckpoint,"readWorkflowCheckpoint");function isRecord3(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}__name(isRecord3,"isRecord");function isOptionalString2(value){return value===void 0||typeof value==="string"}__name(isOptionalString2,"isOptionalString");function isWorkflowCheckpoint(value){if(!isRecord3(value))return false;const startMode=value["startMode"];const budget=value["tokenBudgetTotal"];return value["v"]===1&&typeof value["runId"]==="string"&&typeof value["sessionId"]==="string"&&Number.isSafeInteger(value["pid"])&&typeof value["hostname"]==="string"&&typeof value["startTime"]==="number"&&Number.isFinite(value["startTime"])&&typeof value["script"]==="string"&&isOptionalString2(value["scriptPath"])&&isWorkflowMeta(value["meta"])&&typeof value["description"]==="string"&&isOptionalString2(value["workflowName"])&&isOptionalString2(value["resumeName"])&&(value["sourceRef"]===void 0||isWorkflowSourceRef(value["sourceRef"]))&&isOptionalString2(value["toolUseId"])&&isOptionalString2(value["sourceRunId"])&&(startMode===void 0||startMode==="retry"||startMode==="rerun")&&(budget===null||typeof budget==="number"&&Number.isFinite(budget))&&(value["argsOmitted"]===void 0||value["argsOmitted"]===true)&&(value["argsRecorded"]===void 0||value["argsRecorded"]===true)}__name(isWorkflowCheckpoint,"isWorkflowCheckpoint");function isProcessRunning(pid){if(!Number.isSafeInteger(pid)||pid<=0)return false;try{process.kill(pid,0);return true}catch(error){return error.code==="EPERM"}}__name(isProcessRunning,"isProcessRunning");function writerHasExited(checkpoint,isRunning){if(checkpoint.hostname!==os2.hostname())return false;return checkpoint.pid===process.pid||!isRunning(checkpoint.pid)}__name(writerHasExited,"writerHasExited");async function lastWriteTime(file){try{return(await fs3.stat(file)).mtimeMs}catch{return void 0}}__name(lastWriteTime,"lastWriteTime");async function claimOne(config,seen){const{runId}=seen;const checkpoint=await readWorkflowCheckpoint(config,runId);if(!checkpoint||checkpoint.pid!==seen.pid||checkpoint.startTime!==seen.startTime){return void 0}const existing=await readWorkflowSnapshot(config,runId);if(existing&&existing.startTime>=checkpoint.startTime){await removeWorkflowCheckpoint(config,runId);return void 0}const storage=config.storage;const journalPath=storage.getWorkflowRunJournalPath(runId);const loaded=await new WorkflowJournal(journalPath,storage.getWorkflowRunsDir()).load();const replay=loaded.kind==="loaded"?loaded.replay:void 0;const endTime=Math.max(checkpoint.startTime,await lastWriteTime(journalPath)??checkpoint.startTime);const snapshot={runId,...checkpoint.sessionId?{parentSessionId:checkpoint.sessionId}:{},...checkpoint.sourceRef?{sourceRef:checkpoint.sourceRef}:{},...checkpoint.toolUseId?{toolUseId:checkpoint.toolUseId}:{},description:checkpoint.description,...checkpoint.workflowName?{workflowName:checkpoint.workflowName}:{},...checkpoint.sourceRunId?{sourceRunId:checkpoint.sourceRunId}:{},...checkpoint.startMode?{startMode:checkpoint.startMode}:{},...checkpoint.argsOmitted?{argsOmitted:true}:{...checkpoint.args!==void 0?{args:checkpoint.args}:{},argsRecorded:true},meta:checkpoint.meta,status:"failed",script:checkpoint.script,...checkpoint.scriptPath?{scriptPath:checkpoint.scriptPath}:{},phases:[],agentsDispatched:replay?.started.size??0,agentsCompleted:replay?.results.size??0,tokensSpent:0,tokenBudgetTotal:checkpoint.tokenBudgetTotal,perPhaseTokens:[],recentLogs:[],startTime:checkpoint.startTime,endTime,error:INTERRUPTED_WORKFLOW_ERROR};if(!await persistWorkflowSnapshot(config,snapshot))return void 0;await removeWorkflowCheckpoint(config,runId);return{snapshot,...checkpoint.resumeName?{resumeName:checkpoint.resumeName}:{},hasJournal:loaded.kind==="loaded"}}__name(claimOne,"claimOne");async function claimInterruptedWorkflowRuns(config,options={}){const storage=config.storage;if(!storage)return[];const isRunning=options.isProcessRunning??isProcessRunning;const runsDir=storage.getWorkflowRunsDir();let names;try{if(await isSymlinkedRoot(runsDir))return[];names=(await fs3.readdir(runsDir,{withFileTypes:true})).filter(entry=>entry.isDirectory()&&isWorkflowRunId(entry.name)).map(entry=>entry.name)}catch{return[]}const claimed=[];for(const runId of names){const run=await claimIfInterrupted(config,runId,isRunning);if(run)claimed.push(run)}claimed.sort((a,b)=>b.snapshot.startTime-a.snapshot.startTime);return claimed}__name(claimInterruptedWorkflowRuns,"claimInterruptedWorkflowRuns");async function claimInterruptedWorkflowRun(config,runId,options={}){return claimIfInterrupted(config,runId,options.isProcessRunning??isProcessRunning)}__name(claimInterruptedWorkflowRun,"claimInterruptedWorkflowRun");async function claimIfInterrupted(config,runId,isRunning){const seen=await readWorkflowCheckpoint(config,runId);if(!seen||!writerHasExited(seen,isRunning))return void 0;if(isWorkflowRunPersistenceActive(config,runId))return void 0;try{const attempt=await tryWithWorkflowTaskMutation(getWorkflowTaskMutationKey(config,runId),()=>claimOne(config,seen));return attempt.acquired?attempt.value:void 0}catch(error){debugLogger6.warn(`claiming interrupted run ${runId} failed: ${error}`);return void 0}}__name(claimIfInterrupted,"claimIfInterrupted");init_esbuild_shims();import{randomBytes as randomBytes2}from"node:crypto";import{promises as fs5}from"node:fs";import*as path5 from"node:path";init_esbuild_shims();import{createHash as createHash2}from"node:crypto";import{promises as fs4}from"node:fs";import path4 from"node:path";var debugLogger7=createDebugLogger("REVIEW_WORKFLOW");function resolveReviewWorkflowConcurrency(env=process.env){const configured=parsePositiveIntegerEnv(env[MAX_WORKFLOW_CONCURRENCY_ENV],0)||parsePositiveIntegerEnv(env["QWEN_CODE_MAX_TOOL_CONCURRENCY"],10);return resolveConcurrencyLimit({[MAX_WORKFLOW_CONCURRENCY_ENV]:String(configured)})}__name(resolveReviewWorkflowConcurrency,"resolveReviewWorkflowConcurrency");async function resolveReviewWorkflowLimits(scriptPath,generatedDir,scriptContent,env=process.env,nowMs=Date.now()){let canonicalScript;try{if((await fs4.lstat(generatedDir)).isSymbolicLink())return void 0;const generatedRoot=await fs4.realpath(generatedDir);canonicalScript=await fs4.realpath(scriptPath);if(!canonicalScript.startsWith(path4.join(generatedRoot,"review")+path4.sep)){return void 0}}catch(error){if(error.code!=="ENOENT"){debugLogger7.warn("Cannot classify review workflow; using generic limits:",error)}return void 0}const digest=/^qwen-review-[a-f0-9]{10}-([a-f0-9]{64})\.js$/.exec(path4.basename(canonicalScript))?.[1];if(!digest||createHash2("sha256").update(scriptContent).digest("hex")!==digest){return void 0}const seconds=Number(env["QWEN_CODE_MAX_WORKFLOW_SECONDS"]);let maxWallClockMs=(Number.isFinite(seconds)&&seconds>0?seconds:6*60*60)*1e3;const deadline=Number(env["QWEN_REVIEW_DEADLINE_EPOCH"]);if(Number.isFinite(deadline)&&deadline>0){const rawFloor=env["QWEN_REVIEW_DEADLINE_COMPOSE_FLOOR_SECONDS"];const floor=Number(rawFloor);const floorSeconds=rawFloor?.trim()&&Number.isFinite(floor)&&floor>=0?floor:1200;const remainingMs=deadline*1e3-nowMs-floorSeconds*1e3;if(remainingMs<=0){throw new Error("Review workflow was not launched: the review deadline has reached the compose reserve floor. Recover completed findings and compose now.")}maxWallClockMs=Math.min(maxWallClockMs,remainingMs)}return{subagent:{max_turns:resolveSubagentMaxTurns(env,500),max_time_minutes:resolveSubagentMaxTimeMinutes(env,100)},concurrency:resolveReviewWorkflowConcurrency(env),maxWallClockMs}}__name(resolveReviewWorkflowLimits,"resolveReviewWorkflowLimits");async function resolveResumeName(config,workflowName,scriptPath){if(!workflowName||!scriptPath)return void 0;const canonical=__name(file=>fs5.realpath(file).catch(()=>path5.resolve(file)),"canonical");try{const resolved=await resolveSavedWorkflowScript(workflowName,config);const[byName,ran]=await Promise.all([canonical(resolved.scriptPath),canonical(scriptPath)]);return byName===ran?workflowName:void 0}catch{return void 0}}__name(resolveResumeName,"resolveResumeName");var WorkflowRunHandle=class{constructor(runId,budget,registry,controller,scheduler,start,locations={}){this.runId=runId;this.budget=budget;this.registry=registry;this.controller=controller;this.scheduler=scheduler;this.scriptPath=locations.scriptPath;this.journalPath=locations.journalPath;this.sourceRef=locations.sourceRef;this.completion=Promise.resolve().then(start)}static{__name(this,"WorkflowRunHandle")}completion;scriptPath;journalPath;sourceRef;abort(){this.controller.abort()}pause(){return this.scheduler.pause()}resume(){return this.scheduler.resume()}};var WORKFLOW_SCRIPT_SYNTAX_HINT="Workflow scripts must be plain JavaScript \u2014 the usual causes are TypeScript syntax (type annotations, interfaces, generics) and broken string quoting or escaping. Metadata must be the first non-comment statement and use literal values.";var WorkflowScriptNotLaunchedError=class extends Error{constructor(detail,hint=WORKFLOW_SCRIPT_SYNTAX_HINT){super(`Workflow script is invalid and was not launched:
|
|
6
6
|
${detail}`+(hint?`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{sanitizeFilenameForDisplay,truncateToWidth}from"./chunk-MOH67CDU.js";import{t}from"./chunk-H45OX4VY.js";import{isCompressionFailureStatus}from"./chunk-RKPHDO42.js";import{fetchGitDiff}from"./chunk-LLX4BCWK.js";import{skillRestrictionNames}from"./chunk-CV2UAEZA.js";import{findProviderByCredentials,resolveMetadataKey}from"./chunk-XYBEQRSZ.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var formatCompressionTokenCount=__name((count,isEstimated)=>isEstimated?`~${count}`:String(count),"formatCompressionTokenCount");function getCompressionStatusText({isPending,originalTokenCount,newTokenCount,compressionStatus,originalTokenCountIsEstimated,newTokenCountIsEstimated}){if(isPending){return t("Compressing chat history")}const originalTokens=originalTokenCount??0;const newTokens=newTokenCount??0;switch(compressionStatus){case 1:return t("Chat history compressed from {{originalTokens}} to {{newTokens}} tokens.",{originalTokens:formatCompressionTokenCount(originalTokens,originalTokenCountIsEstimated),newTokens:formatCompressionTokenCount(newTokens,newTokenCountIsEstimated)});case 2:if(originalTokens<5e4){return t("Compression was not beneficial for this history size.")}return t("Chat history compression did not reduce size. This may indicate issues with the compression prompt.");case 3:return t("Could not compress chat history due to a token counting error.");case 4:return t("Could not compress chat history because the compression summary was empty.");case 6:return t("Could not compress chat history because the compression summary was truncated.");case 7:return t("Could not compress chat history due to an API error.");case 5:return"Nothing to compress.";default:return""}}__name(getCompressionStatusText,"getCompressionStatusText");function getCompressionFailureStatusText(options){if(!isCompressionFailureStatus(options.compressionStatus)){return t("Failed to compress chat history.")}return getCompressionStatusText({...options,isPending:false})||t("Failed to compress chat history.")}__name(getCompressionFailureStatusText,"getCompressionFailureStatusText");init_esbuild_shims();function calculateErrorRate(metrics){if(metrics.api.totalRequests===0){return 0}return metrics.api.totalErrors/metrics.api.totalRequests*100}__name(calculateErrorRate,"calculateErrorRate");function calculateAverageLatency(metrics){if(metrics.api.totalRequests===0){return 0}return metrics.api.totalLatencyMs/metrics.api.totalRequests}__name(calculateAverageLatency,"calculateAverageLatency");function calculateCacheHitRate(metrics){if(metrics.tokens.prompt===0){return 0}return metrics.tokens.cached/metrics.tokens.prompt*100}__name(calculateCacheHitRate,"calculateCacheHitRate");var computeSessionStats=__name(metrics=>{const{models,tools,files}=metrics;const totalApiTime=Object.values(models).reduce((acc,model)=>acc+model.api.totalLatencyMs,0);const totalToolTime=tools.totalDurationMs;const agentActiveTime=totalApiTime+totalToolTime;const apiTimePercent=agentActiveTime>0?totalApiTime/agentActiveTime*100:0;const toolTimePercent=agentActiveTime>0?totalToolTime/agentActiveTime*100:0;const totalCachedTokens=Object.values(models).reduce((acc,model)=>acc+model.tokens.cached,0);const totalPromptTokens=Object.values(models).reduce((acc,model)=>acc+model.tokens.prompt,0);const cacheEfficiency=totalPromptTokens>0?totalCachedTokens/totalPromptTokens*100:0;const totalDecisions=tools.totalDecisions.accept+tools.totalDecisions.reject+tools.totalDecisions.modify;const successRate=tools.totalCalls>0?tools.totalSuccess/tools.totalCalls*100:0;const agreementRate=totalDecisions>0?tools.totalDecisions.accept/totalDecisions*100:0;return{totalApiTime,totalToolTime,agentActiveTime,apiTimePercent,toolTimePercent,cacheEfficiency,totalDecisions,successRate,agreementRate,totalCachedTokens,totalPromptTokens,totalLinesAdded:files.totalLinesAdded,totalLinesRemoved:files.totalLinesRemoved}},"computeSessionStats");init_esbuild_shims();function commandRestrictionNames(cmd){const names=cmd.skillDetail?skillRestrictionNames(cmd.skillDetail):[cmd.name.trim().toLowerCase()];return[...names,...cmd.workflowName?[cmd.workflowName.trim().toLowerCase()]:[],...(cmd.altNames??[]).map(name=>name.trim().toLowerCase())]}__name(commandRestrictionNames,"commandRestrictionNames");function getEffectiveSupportedModes(cmd){if(cmd.supportedModes!==void 0){return cmd.supportedModes}switch(cmd.kind){case"built-in":return["interactive"];case"file":case"skill":case"mcp-prompt":return["interactive","non_interactive","acp"];default:return["interactive"]}}__name(getEffectiveSupportedModes,"getEffectiveSupportedModes");function filterCommandsForMode(commands,mode){return commands.filter(cmd=>getEffectiveSupportedModes(cmd).includes(mode))}__name(filterCommandsForMode,"filterCommandsForMode");init_esbuild_shims();function extensionOwnerLabel(owner){return`${t("Extension:")} ${owner.displayName||owner.name||"unknown"}`}__name(extensionOwnerLabel,"extensionOwnerLabel");var MAX_EXTENSION_OWNER_LABEL_WIDTH=35;function getCommandSourceBadge(command){switch(command.source){case"bundled-skill":return"[Skill]";case"skill-dir-command":if(command.sourceDetail==="user"){return"[User]"}if(command.sourceDetail==="project"){return"[Project]"}return"[Custom]";case"plugin-command":if(command.sourceDetail!=="extension"){return"[Plugin]"}return command.sourceLabel?`[${truncateToWidth(command.sourceLabel,MAX_EXTENSION_OWNER_LABEL_WIDTH)}]`:"[Extension]";case"mcp-prompt":return"[MCP]";case"workflow-command":return command.sourceDetail==="extension"&&command.sourceLabel?`[${truncateToWidth(command.sourceLabel,MAX_EXTENSION_OWNER_LABEL_WIDTH)}]`:null;case"builtin-command":default:return null}}__name(getCommandSourceBadge,"getCommandSourceBadge");function getCommandSourceGroup(command){switch(command.source){case"builtin-command":return{key:"built-in",title:"Built-in Commands",order:0};case"bundled-skill":return{key:"bundled-skill",title:"Bundled Skills",order:1};case"skill-dir-command":return{key:"custom",title:"Custom Commands",order:2};case"plugin-command":return{key:"plugin",title:"Plugin Commands",order:3};case"mcp-prompt":return{key:"mcp",title:"MCP Commands",order:4};default:return{key:"other",title:"Other Commands",order:5}}}__name(getCommandSourceGroup,"getCommandSourceGroup");function formatSupportedModes(command){const modes=getEffectiveSupportedModes(command);const hasInteractive=modes.includes("interactive");const hasNonInteractive=modes.includes("non_interactive");const hasAcp=modes.includes("acp");if(hasInteractive&&hasNonInteractive&&hasAcp){return"[all]"}if(!hasInteractive&&hasNonInteractive&&hasAcp){return"[headless]"}if(hasInteractive&&!hasNonInteractive&&!hasAcp){return"[interactive]"}return modes.map(mode=>{switch(mode){case"interactive":return"[i]";case"non_interactive":return"[ni]";case"acp":return"[acp]";default:return`[${mode}]`}}).join(" ")}__name(formatSupportedModes,"formatSupportedModes");function getCommandDisplayName(command,options={}){const prefix=options.prefix??"";const baseLabel=`${prefix}${command.name}`;if(options.matchedAlias){return`${baseLabel} (alias: ${options.matchedAlias})`}if(options.includeAliases===false){return baseLabel}const altNames=command.altNames?.filter(Boolean);if(!altNames||altNames.length===0){return baseLabel}return`${baseLabel} (${altNames.join(", ")})`}__name(getCommandDisplayName,"getCommandDisplayName");function getCommandSubcommandNames(command){return command.subCommands?.filter(subCommand=>!subCommand.hidden).map(subCommand=>subCommand.name)??[]}__name(getCommandSubcommandNames,"getCommandSubcommandNames");init_esbuild_shims();async function diffAction(context){const{config}=context.services;if(!config){return{type:"message",messageType:"error",content:t("Configuration not available.")}}if(config.getShellExecutionSandbox?.()){return{type:"message",messageType:"error",content:"Diff preview unavailable in tool sandbox. Run git diff through the Shell tool."}}if(context.executionMode==="interactive"){return{type:"dialog",dialog:"diff"}}const cwd=config.getWorkingDir()||config.getProjectRoot();if(!cwd){return{type:"message",messageType:"error",content:t("Could not determine current working directory.")}}let result;try{result=await fetchGitDiff(cwd)}catch(error){return{type:"message",messageType:"error",content:`${t("Failed to compute git diff stats")}: ${error instanceof Error?error.message:String(error)}`}}if(!result){return{type:"message",messageType:"info",content:t("No diff available. Either this is not a git repository, HEAD is missing, or a merge/rebase/cherry-pick/revert is in progress.")}}if(result.stats.filesCount===0){return{type:"message",messageType:"info",content:t("Clean working tree \u2014 no changes against HEAD.")}}const model=buildDiffRenderModel(result);return{type:"message",messageType:"info",content:renderDiffModelText(model)}}__name(diffAction,"diffAction");function buildDiffRenderModel(result){const rows=[];for(const[filename,s]of result.perFileStats){rows.push(toRow(filename,s))}const hiddenCount=Math.max(0,result.stats.filesCount-rows.length);return{filesCount:result.stats.filesCount,linesAdded:result.stats.linesAdded,linesRemoved:result.stats.linesRemoved,rows,hiddenCount}}__name(buildDiffRenderModel,"buildDiffRenderModel");function toRow(filename,s){if(s.isBinary){return{filename,oldPath:s.oldPath,isBinary:true,isUntracked:Boolean(s.isUntracked),isDeleted:Boolean(s.isDeleted),truncated:false}}return{filename,oldPath:s.oldPath,added:s.added,removed:s.isUntracked?0:s.removed,isBinary:false,isUntracked:Boolean(s.isUntracked),isDeleted:Boolean(s.isDeleted),truncated:Boolean(s.truncated)}}__name(toRow,"toRow");function computeDiffColumnWidths(rows){let maxAdded=0;let maxRemoved=0;for(const r of rows){if(r.isBinary)continue;if((r.added??0)>maxAdded)maxAdded=r.added??0;if((r.removed??0)>maxRemoved)maxRemoved=r.removed??0}const addWidth=String(maxAdded).length;const remWidth=String(maxRemoved).length;const statColumnWidth=1+addWidth+1+1+remWidth;return{addWidth,remWidth,statColumnWidth}}__name(computeDiffColumnWidths,"computeDiffColumnWidths");function renderDiffModelText(model){const{filesCount,linesAdded,linesRemoved,rows,hiddenCount}=model;const header=filesCount===1?t("{{count}} file changed, +{{added}} / -{{removed}}",{count:String(filesCount),added:String(linesAdded),removed:String(linesRemoved)}):t("{{count}} files changed, +{{added}} / -{{removed}}",{count:String(filesCount),added:String(linesAdded),removed:String(linesRemoved)});const lines=formatRowsText(rows);const capNote=hiddenCount>0&&rows.length>0?`
|
|
3
|
+
import{sanitizeFilenameForDisplay,truncateToWidth}from"./chunk-MOH67CDU.js";import{t}from"./chunk-H45OX4VY.js";import{isCompressionFailureStatus}from"./chunk-LDXZT3SG.js";import{fetchGitDiff}from"./chunk-LLX4BCWK.js";import{skillRestrictionNames}from"./chunk-CV2UAEZA.js";import{findProviderByCredentials,resolveMetadataKey}from"./chunk-DIHJELGW.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var formatCompressionTokenCount=__name((count,isEstimated)=>isEstimated?`~${count}`:String(count),"formatCompressionTokenCount");function getCompressionStatusText({isPending,originalTokenCount,newTokenCount,compressionStatus,originalTokenCountIsEstimated,newTokenCountIsEstimated}){if(isPending){return t("Compressing chat history")}const originalTokens=originalTokenCount??0;const newTokens=newTokenCount??0;switch(compressionStatus){case 1:return t("Chat history compressed from {{originalTokens}} to {{newTokens}} tokens.",{originalTokens:formatCompressionTokenCount(originalTokens,originalTokenCountIsEstimated),newTokens:formatCompressionTokenCount(newTokens,newTokenCountIsEstimated)});case 2:if(originalTokens<5e4){return t("Compression was not beneficial for this history size.")}return t("Chat history compression did not reduce size. This may indicate issues with the compression prompt.");case 3:return t("Could not compress chat history due to a token counting error.");case 4:return t("Could not compress chat history because the compression summary was empty.");case 6:return t("Could not compress chat history because the compression summary was truncated.");case 7:return t("Could not compress chat history due to an API error.");case 5:return"Nothing to compress.";default:return""}}__name(getCompressionStatusText,"getCompressionStatusText");function getCompressionFailureStatusText(options){if(!isCompressionFailureStatus(options.compressionStatus)){return t("Failed to compress chat history.")}return getCompressionStatusText({...options,isPending:false})||t("Failed to compress chat history.")}__name(getCompressionFailureStatusText,"getCompressionFailureStatusText");init_esbuild_shims();function calculateErrorRate(metrics){if(metrics.api.totalRequests===0){return 0}return metrics.api.totalErrors/metrics.api.totalRequests*100}__name(calculateErrorRate,"calculateErrorRate");function calculateAverageLatency(metrics){if(metrics.api.totalRequests===0){return 0}return metrics.api.totalLatencyMs/metrics.api.totalRequests}__name(calculateAverageLatency,"calculateAverageLatency");function calculateCacheHitRate(metrics){if(metrics.tokens.prompt===0){return 0}return metrics.tokens.cached/metrics.tokens.prompt*100}__name(calculateCacheHitRate,"calculateCacheHitRate");var computeSessionStats=__name(metrics=>{const{models,tools,files}=metrics;const totalApiTime=Object.values(models).reduce((acc,model)=>acc+model.api.totalLatencyMs,0);const totalToolTime=tools.totalDurationMs;const agentActiveTime=totalApiTime+totalToolTime;const apiTimePercent=agentActiveTime>0?totalApiTime/agentActiveTime*100:0;const toolTimePercent=agentActiveTime>0?totalToolTime/agentActiveTime*100:0;const totalCachedTokens=Object.values(models).reduce((acc,model)=>acc+model.tokens.cached,0);const totalPromptTokens=Object.values(models).reduce((acc,model)=>acc+model.tokens.prompt,0);const cacheEfficiency=totalPromptTokens>0?totalCachedTokens/totalPromptTokens*100:0;const totalDecisions=tools.totalDecisions.accept+tools.totalDecisions.reject+tools.totalDecisions.modify;const successRate=tools.totalCalls>0?tools.totalSuccess/tools.totalCalls*100:0;const agreementRate=totalDecisions>0?tools.totalDecisions.accept/totalDecisions*100:0;return{totalApiTime,totalToolTime,agentActiveTime,apiTimePercent,toolTimePercent,cacheEfficiency,totalDecisions,successRate,agreementRate,totalCachedTokens,totalPromptTokens,totalLinesAdded:files.totalLinesAdded,totalLinesRemoved:files.totalLinesRemoved}},"computeSessionStats");init_esbuild_shims();function commandRestrictionNames(cmd){const names=cmd.skillDetail?skillRestrictionNames(cmd.skillDetail):[cmd.name.trim().toLowerCase()];return[...names,...cmd.workflowName?[cmd.workflowName.trim().toLowerCase()]:[],...(cmd.altNames??[]).map(name=>name.trim().toLowerCase())]}__name(commandRestrictionNames,"commandRestrictionNames");function getEffectiveSupportedModes(cmd){if(cmd.supportedModes!==void 0){return cmd.supportedModes}switch(cmd.kind){case"built-in":return["interactive"];case"file":case"skill":case"mcp-prompt":return["interactive","non_interactive","acp"];default:return["interactive"]}}__name(getEffectiveSupportedModes,"getEffectiveSupportedModes");function filterCommandsForMode(commands,mode){return commands.filter(cmd=>getEffectiveSupportedModes(cmd).includes(mode))}__name(filterCommandsForMode,"filterCommandsForMode");init_esbuild_shims();function extensionOwnerLabel(owner){return`${t("Extension:")} ${owner.displayName||owner.name||"unknown"}`}__name(extensionOwnerLabel,"extensionOwnerLabel");var MAX_EXTENSION_OWNER_LABEL_WIDTH=35;function getCommandSourceBadge(command){switch(command.source){case"bundled-skill":return"[Skill]";case"skill-dir-command":if(command.sourceDetail==="user"){return"[User]"}if(command.sourceDetail==="project"){return"[Project]"}return"[Custom]";case"plugin-command":if(command.sourceDetail!=="extension"){return"[Plugin]"}return command.sourceLabel?`[${truncateToWidth(command.sourceLabel,MAX_EXTENSION_OWNER_LABEL_WIDTH)}]`:"[Extension]";case"mcp-prompt":return"[MCP]";case"workflow-command":return command.sourceDetail==="extension"&&command.sourceLabel?`[${truncateToWidth(command.sourceLabel,MAX_EXTENSION_OWNER_LABEL_WIDTH)}]`:null;case"builtin-command":default:return null}}__name(getCommandSourceBadge,"getCommandSourceBadge");function getCommandSourceGroup(command){switch(command.source){case"builtin-command":return{key:"built-in",title:"Built-in Commands",order:0};case"bundled-skill":return{key:"bundled-skill",title:"Bundled Skills",order:1};case"skill-dir-command":return{key:"custom",title:"Custom Commands",order:2};case"plugin-command":return{key:"plugin",title:"Plugin Commands",order:3};case"mcp-prompt":return{key:"mcp",title:"MCP Commands",order:4};default:return{key:"other",title:"Other Commands",order:5}}}__name(getCommandSourceGroup,"getCommandSourceGroup");function formatSupportedModes(command){const modes=getEffectiveSupportedModes(command);const hasInteractive=modes.includes("interactive");const hasNonInteractive=modes.includes("non_interactive");const hasAcp=modes.includes("acp");if(hasInteractive&&hasNonInteractive&&hasAcp){return"[all]"}if(!hasInteractive&&hasNonInteractive&&hasAcp){return"[headless]"}if(hasInteractive&&!hasNonInteractive&&!hasAcp){return"[interactive]"}return modes.map(mode=>{switch(mode){case"interactive":return"[i]";case"non_interactive":return"[ni]";case"acp":return"[acp]";default:return`[${mode}]`}}).join(" ")}__name(formatSupportedModes,"formatSupportedModes");function getCommandDisplayName(command,options={}){const prefix=options.prefix??"";const baseLabel=`${prefix}${command.name}`;if(options.matchedAlias){return`${baseLabel} (alias: ${options.matchedAlias})`}if(options.includeAliases===false){return baseLabel}const altNames=command.altNames?.filter(Boolean);if(!altNames||altNames.length===0){return baseLabel}return`${baseLabel} (${altNames.join(", ")})`}__name(getCommandDisplayName,"getCommandDisplayName");function getCommandSubcommandNames(command){return command.subCommands?.filter(subCommand=>!subCommand.hidden).map(subCommand=>subCommand.name)??[]}__name(getCommandSubcommandNames,"getCommandSubcommandNames");init_esbuild_shims();async function diffAction(context){const{config}=context.services;if(!config){return{type:"message",messageType:"error",content:t("Configuration not available.")}}if(config.getShellExecutionSandbox?.()){return{type:"message",messageType:"error",content:"Diff preview unavailable in tool sandbox. Run git diff through the Shell tool."}}if(context.executionMode==="interactive"){return{type:"dialog",dialog:"diff"}}const cwd=config.getWorkingDir()||config.getProjectRoot();if(!cwd){return{type:"message",messageType:"error",content:t("Could not determine current working directory.")}}let result;try{result=await fetchGitDiff(cwd)}catch(error){return{type:"message",messageType:"error",content:`${t("Failed to compute git diff stats")}: ${error instanceof Error?error.message:String(error)}`}}if(!result){return{type:"message",messageType:"info",content:t("No diff available. Either this is not a git repository, HEAD is missing, or a merge/rebase/cherry-pick/revert is in progress.")}}if(result.stats.filesCount===0){return{type:"message",messageType:"info",content:t("Clean working tree \u2014 no changes against HEAD.")}}const model=buildDiffRenderModel(result);return{type:"message",messageType:"info",content:renderDiffModelText(model)}}__name(diffAction,"diffAction");function buildDiffRenderModel(result){const rows=[];for(const[filename,s]of result.perFileStats){rows.push(toRow(filename,s))}const hiddenCount=Math.max(0,result.stats.filesCount-rows.length);return{filesCount:result.stats.filesCount,linesAdded:result.stats.linesAdded,linesRemoved:result.stats.linesRemoved,rows,hiddenCount}}__name(buildDiffRenderModel,"buildDiffRenderModel");function toRow(filename,s){if(s.isBinary){return{filename,oldPath:s.oldPath,isBinary:true,isUntracked:Boolean(s.isUntracked),isDeleted:Boolean(s.isDeleted),truncated:false}}return{filename,oldPath:s.oldPath,added:s.added,removed:s.isUntracked?0:s.removed,isBinary:false,isUntracked:Boolean(s.isUntracked),isDeleted:Boolean(s.isDeleted),truncated:Boolean(s.truncated)}}__name(toRow,"toRow");function computeDiffColumnWidths(rows){let maxAdded=0;let maxRemoved=0;for(const r of rows){if(r.isBinary)continue;if((r.added??0)>maxAdded)maxAdded=r.added??0;if((r.removed??0)>maxRemoved)maxRemoved=r.removed??0}const addWidth=String(maxAdded).length;const remWidth=String(maxRemoved).length;const statColumnWidth=1+addWidth+1+1+remWidth;return{addWidth,remWidth,statColumnWidth}}__name(computeDiffColumnWidths,"computeDiffColumnWidths");function renderDiffModelText(model){const{filesCount,linesAdded,linesRemoved,rows,hiddenCount}=model;const header=filesCount===1?t("{{count}} file changed, +{{added}} / -{{removed}}",{count:String(filesCount),added:String(linesAdded),removed:String(linesRemoved)}):t("{{count}} files changed, +{{added}} / -{{removed}}",{count:String(filesCount),added:String(linesAdded),removed:String(linesRemoved)});const lines=formatRowsText(rows);const capNote=hiddenCount>0&&rows.length>0?`
|
|
4
4
|
${t("\u2026and {{hidden}} more (showing first {{shown}})",{hidden:String(hiddenCount),shown:String(rows.length)})}`:"";return lines.length>0?`${header}
|
|
5
5
|
${lines.join("\n")}${capNote}`:header}__name(renderDiffModelText,"renderDiffModelText");function formatRowsText(rows){if(rows.length===0)return[];const{addWidth,remWidth,statColumnWidth}=computeDiffColumnWidths(rows);const out=[];for(const r of rows){const safeName=sanitizeFilenameForDisplay(r.filename);const displayName=r.oldPath?`${sanitizeFilenameForDisplay(r.oldPath)} \u2192 ${safeName}`:safeName;if(r.isBinary){const suffix2=r.isUntracked?` ${t("(binary, new)")}`:r.isDeleted?` ${t("(binary, deleted)")}`:` ${t("(binary)")}`;out.push(` ${padMarker("~",statColumnWidth)} ${displayName}${suffix2}`);continue}const added=`+${String(r.added??0).padStart(addWidth)}`;const removed=`-${String(r.removed??0).padStart(remWidth)}`;let suffix="";if(r.isUntracked){suffix=r.truncated?` ${t("(new, partial)")}`:` ${t("(new)")}`}else if(r.isDeleted){suffix=` ${t("(deleted)")}`}out.push(` ${added} ${removed} ${displayName}${suffix}`)}return out}__name(formatRowsText,"formatRowsText");function padMarker(marker,width){if(marker.length>=width)return marker;return`${marker}${" ".repeat(width-marker.length)}`}__name(padMarker,"padMarker");var diffCommand={name:"diff",get description(){return t("Show working-tree change stats versus HEAD")},kind:"built-in",supportedModes:["interactive","non_interactive","acp"],action:diffAction};init_esbuild_shims();var INLINE_MATH_MAX_CHARS=1024;var INLINE_CODE_SPAN_PATTERN_SOURCE=String.raw`(?<!\`)(?<inlineCodeFence>\`+)(?!\`).+?(?<!\`)\k<inlineCodeFence>(?!\`)`;var INLINE_CODE_SPAN_RE=new RegExp(INLINE_CODE_SPAN_PATTERN_SOURCE,"g");function isEscapedAt(text,index){let slashCount=0;for(let cursor=index-1;cursor>=0&&text[cursor]==="\\";cursor-=1){slashCount+=1}return slashCount%2===1}__name(isEscapedAt,"isEscapedAt");function isUnescapedDollarAt(text,index){return text[index]==="$"&&!isEscapedAt(text,index)}__name(isUnescapedDollarAt,"isUnescapedDollarAt");function unescapeMarkdownDollars(text){return text.replace(/(\\+)\$/g,(_match,slashes)=>`${"\\".repeat(Math.floor(slashes.length/2))}$`)}__name(unescapeMarkdownDollars,"unescapeMarkdownDollars");function unescapeMarkdownBeforeMath(text){return unescapeMarkdownDollars(`${text}$`).slice(0,-1)}__name(unescapeMarkdownBeforeMath,"unescapeMarkdownBeforeMath");function readInlineMathSpan(text,index){if(!isUnescapedDollarAt(text,index)){return null}const previous=text[index-1]??"";const next=text[index+1]??"";if(/\w/.test(previous)||isUnescapedDollarAt(text,index-1)||!next||/[\s\d$]/.test(next)){return null}let closingIndex=index+1;while(closingIndex<text.length&&text[closingIndex]!=="\n"&&closingIndex-index-1<=INLINE_MATH_MAX_CHARS&&!isUnescapedDollarAt(text,closingIndex)){closingIndex+=1}if(!isUnescapedDollarAt(text,closingIndex)){return null}const content=text.slice(index+1,closingIndex);const following=text[closingIndex+1]??"";if(content.length>INLINE_MATH_MAX_CHARS||/\s$/.test(content)||/[\w$]/.test(following)){return null}return{content,index,raw:text.slice(index,closingIndex+1)}}__name(readInlineMathSpan,"readInlineMathSpan");function findNextInlineMath(text,fromIndex=0){for(let index=fromIndex;index<text.length;index+=1){const span=readInlineMathSpan(text,index);if(span){return span}}return null}__name(findNextInlineMath,"findNextInlineMath");function*mergeInlineMathMatches(text,markupRegex,enableInlineMath=true){markupRegex.lastIndex=0;const markupMatches=text.matchAll(markupRegex);let nextMarkup=markupMatches.next();let nextMath=enableInlineMath?findNextInlineMath(text):null;let cursor=0;while(!nextMarkup.done||nextMath){while(!nextMarkup.done&&(nextMarkup.value.index??0)<cursor){nextMarkup=markupMatches.next()}if(nextMath&&nextMath.index<cursor){nextMath=findNextInlineMath(text,cursor)}const markupIndex=nextMarkup.done?Number.POSITIVE_INFINITY:nextMarkup.value.index??0;const mathIndex=nextMath?.index??Number.POSITIVE_INFINITY;if(!nextMarkup.done&&markupIndex<=mathIndex){const match=nextMarkup.value;yield{kind:"markup",match};cursor=markupIndex+match[0].length;nextMarkup=markupMatches.next()}else if(nextMath){yield{kind:"math",span:nextMath};cursor=mathIndex+nextMath.raw.length;nextMath=findNextInlineMath(text,cursor)}}}__name(mergeInlineMathMatches,"mergeInlineMathMatches");function findInlineMathExpressions(text){const expressions=[];for(const token of mergeInlineMathMatches(text,INLINE_CODE_SPAN_RE)){if(token.kind==="math"){expressions.push(token.span.content)}}return expressions}__name(findInlineMathExpressions,"findInlineMathExpressions");function readInlineMathSpanAt(text,index){return readInlineMathSpan(text,index)?.raw??null}__name(readInlineMathSpanAt,"readInlineMathSpanAt");init_esbuild_shims();function getSystemInfoFields(info){const fields=[];addField(fields,t("Qwen Code"),formatCliVersion(info));addField(fields,t("Runtime"),formatRuntime(info));addField(fields,t("IDE Client"),info.ideClient);addField(fields,"LSP",info.lspStatus??"");addField(fields,t("OS"),formatOs(info));addField(fields,t("Auth"),formatAuth(info));addField(fields,t("Base URL"),formatBaseUrl(info));addField(fields,t("Model"),info.modelVersion);addField(fields,t("Fast Model"),info.fastModel||info.modelVersion);addField(fields,t("Session ID"),info.sessionId);addField(fields,t("Sandbox"),info.sandboxEnv);addField(fields,t("Proxy"),formatProxy(info.proxy));addField(fields,t("Memory Usage"),info.memoryUsage);return fields}__name(getSystemInfoFields,"getSystemInfoFields");function addField(fields,label,value){if(value){fields.push({label,value})}}__name(addField,"addField");function formatCliVersion(info){if(!info.cliVersion){return""}if(!info.gitCommit){return info.cliVersion}return`${info.cliVersion} (${info.gitCommit})`}__name(formatCliVersion,"formatCliVersion");function formatRuntime(info){if(!info.nodeVersion&&!info.npmVersion){return""}const node=info.nodeVersion?`Node.js ${info.nodeVersion}`:"";const npm=info.npmVersion?`npm ${info.npmVersion}`:"";return joinParts([node,npm]," / ")}__name(formatRuntime,"formatRuntime");function formatOs(info){return joinParts([info.osPlatform,info.osArch,formatOsRelease(info.osRelease)]," ").trim()}__name(formatOs,"formatOs");function formatOsRelease(release){if(!release){return""}return`(${release})`}__name(formatOsRelease,"formatOsRelease");function formatAuth(info){if(!info.selectedAuthType){return""}const managedProvider=findProviderByCredentials(info.baseUrl,info.apiKeyEnvKey);if(managedProvider&&resolveMetadataKey(managedProvider)){return t(managedProvider.label)}if(info.selectedAuthType.startsWith("oauth")||info.selectedAuthType==="qwen-oauth"){return"Qwen OAuth"}return`API Key - ${info.selectedAuthType}`}__name(formatAuth,"formatAuth");function formatBaseUrl(info){if(!info.selectedAuthType||!info.baseUrl){return""}if(info.selectedAuthType.startsWith("oauth")||info.selectedAuthType==="qwen-oauth"){return""}return info.baseUrl}__name(formatBaseUrl,"formatBaseUrl");function formatProxy(proxy){if(!proxy){return"no proxy"}return redactProxy(proxy)}__name(formatProxy,"formatProxy");function redactProxy(proxy){try{const url=new URL(proxy);if(url.username||url.password){url.username=url.username?"***":"";url.password=url.password?"***":""}return url.toString()}catch{return proxy.replace(/\/\/[^/]*@/,"//***@")}}__name(redactProxy,"redactProxy");function joinParts(parts,separator){return parts.filter(part=>part).join(separator)}__name(joinParts,"joinParts");init_esbuild_shims();function calculateCost(args){const{inputTokens,outputTokens,pricing}=args;if(!pricing)return null;if(pricing.inputPerMillionTokens==null&&pricing.outputPerMillionTokens==null){return null}if(inputTokens<=0&&outputTokens<=0){return null}const inputCost=pricing.inputPerMillionTokens!=null?inputTokens/1e6*pricing.inputPerMillionTokens:0;const outputCost=pricing.outputPerMillionTokens!=null?outputTokens/1e6*pricing.outputPerMillionTokens:0;return inputCost+outputCost}__name(calculateCost,"calculateCost");init_esbuild_shims();function levelLabel(level){switch(level){case"project":return t("Project");case"user":return t("User");case"extension":return t("Extension");case"bundled":return t("Bundled");default:{const _exhaustive=level;return _exhaustive}}}__name(levelLabel,"levelLabel");function skillOriginLabel(skill){if(skill.level==="extension"){return`(${extensionOwnerLabel({name:skill.extensionName,displayName:skill.extensionDisplayName})})`}return`(${levelLabel(skill.level)})`}__name(skillOriginLabel,"skillOriginLabel");export{INLINE_CODE_SPAN_PATTERN_SOURCE,unescapeMarkdownDollars,unescapeMarkdownBeforeMath,mergeInlineMathMatches,findInlineMathExpressions,readInlineMathSpanAt,formatCompressionTokenCount,getCompressionStatusText,getCompressionFailureStatusText,getSystemInfoFields,redactProxy,calculateErrorRate,calculateAverageLatency,calculateCacheHitRate,computeSessionStats,calculateCost,commandRestrictionNames,getEffectiveSupportedModes,filterCommandsForMode,extensionOwnerLabel,MAX_EXTENSION_OWNER_LABEL_WIDTH,getCommandSourceBadge,getCommandSourceGroup,formatSupportedModes,getCommandDisplayName,getCommandSubcommandNames,levelLabel,skillOriginLabel,computeDiffColumnWidths,diffCommand};
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{runExitCleanup}from"./chunk-
|
|
3
|
+
import{runExitCleanup}from"./chunk-7DSJE3CL.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();var RELAUNCH_EXIT_CODE=42;var UPDATE_RELAUNCH_EXIT_CODE=43;var UPDATE_COMPLETE_EXIT_CODE=44;var SKIP_UPDATE_CHECK_ENV_VAR="QWEN_CODE_SKIP_UPDATE_CHECK_ONCE";var CUSTOM_SANDBOX_IMAGE_ENV_VAR="QWEN_CODE_CUSTOM_SANDBOX_IMAGE";var HOST_UPDATE_RELAUNCH_ENV_VAR="QWEN_CODE_HOST_UPDATE_RELAUNCH";var UPDATE_ON_EXIT_MESSAGE="qwen-code:update-on-exit";var inProcessUpdateRelaunch;var supervisedInProcess=false;var updateOnExitRequested=false;var updatingOnExit=false;function superviseInProcess(onUpdateRelaunch){supervisedInProcess=true;inProcessUpdateRelaunch=onUpdateRelaunch}__name(superviseInProcess,"superviseInProcess");function getRelaunchExecArgv(){const needsExposeGc=typeof globalThis.gc==="function"&&!process.execArgv.includes("--expose-gc");return needsExposeGc?[...process.execArgv,"--expose-gc"]:[...process.execArgv]}__name(getRelaunchExecArgv,"getRelaunchExecArgv");async function relaunchApp(){await runExitCleanup();const proc=process;if(supervisedInProcess&&proc.execve){proc.execve(process.execPath,[process.execPath,...getRelaunchExecArgv(),...process.argv.slice(1)])}process.exit(RELAUNCH_EXIT_CODE)}__name(relaunchApp,"relaunchApp");async function exitCleanly(code){if(updatingOnExit)return new Promise(()=>{});if(code===0&&updateOnExitRequested&&inProcessUpdateRelaunch){updateOnExitRequested=false;updatingOnExit=true;try{code=await inProcessUpdateRelaunch(false)}catch{code=1}}process.exit(code)}__name(exitCleanly,"exitCleanly");async function relaunchForUpdate(){await runExitCleanup();if(inProcessUpdateRelaunch){process.exit(await inProcessUpdateRelaunch(true))}process.exit(UPDATE_RELAUNCH_EXIT_CODE)}__name(relaunchForUpdate,"relaunchForUpdate");function requestUpdateOnExit(){if(inProcessUpdateRelaunch){updateOnExitRequested=true;return true}if(!process.send)return false;try{process.send({type:UPDATE_ON_EXIT_MESSAGE});return true}catch{return false}}__name(requestUpdateOnExit,"requestUpdateOnExit");export{RELAUNCH_EXIT_CODE,UPDATE_RELAUNCH_EXIT_CODE,UPDATE_COMPLETE_EXIT_CODE,SKIP_UPDATE_CHECK_ENV_VAR,CUSTOM_SANDBOX_IMAGE_ENV_VAR,HOST_UPDATE_RELAUNCH_ENV_VAR,UPDATE_ON_EXIT_MESSAGE,superviseInProcess,getRelaunchExecArgv,relaunchApp,exitCleanly,relaunchForUpdate,requestUpdateOnExit};
|
|
4
4
|
/**
|
|
5
5
|
* @license
|
|
6
6
|
* Copyright 2025 Google LLC
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{publicProviderBaseUrl}from"./chunk-GT4TCQ3R.js";import{getWritableScopes}from"./chunk-
|
|
3
|
+
import{publicProviderBaseUrl}from"./chunk-GT4TCQ3R.js";import{getWritableScopes}from"./chunk-FHFBCG6N.js";import{isImageGenerationCapable,tryResolveModelProtocol}from"./chunk-DIHJELGW.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import{createHash}from"node:crypto";function modelKey(scope,provider,model,authType){return createHash("sha256").update(JSON.stringify([scope,provider,model.id,model.baseUrl??"",authType])).digest("hex")}__name(modelKey,"modelKey");function modelEntries(loaded){const seenProviders=new Set;return["System",...getWritableScopes(loaded),"SystemDefaults"].flatMap(scope=>{const providers=loaded.forScope(scope).settings.modelProviders??{};return Object.entries(providers).flatMap(([provider,models])=>{if(seenProviders.has(provider))return[];seenProviders.add(provider);if(!Array.isArray(models))return[];return models.flatMap((model,index)=>{if(!model||typeof model!=="object"||typeof model.id!=="string"||!model.id||model.baseUrl!==void 0&&typeof model.baseUrl!=="string")return[];const authType=tryResolveModelProtocol(provider,model,loaded.merged.providerProtocol);if(!authType||authType==="qwen-oauth")return[];return[{scope,provider,authType,model,index,key:modelKey(scope,provider,model,authType)}]})})})}__name(modelEntries,"modelEntries");function findModelConfiguration(loaded,key){const matches=modelEntries(loaded).filter(entry=>entry.key===key);return matches.length===1&&getWritableScopes(loaded).includes(matches[0].scope)?matches[0]:void 0}__name(findModelConfiguration,"findModelConfiguration");function findModelConfigurationForDeletion(loaded,target){const candidates=modelEntries(loaded).filter(entry=>entry.authType===target.authType&&entry.model.id===target.modelId);const exact=candidates.filter(entry=>(entry.model.baseUrl??void 0)===target.baseUrl);const matches=target.baseUrl!==void 0&&exact.length?exact:candidates;if(matches.length===0)return void 0;return matches.length===1&&getWritableScopes(loaded).includes(matches[0].scope)?matches[0]:"ambiguous"}__name(findModelConfigurationForDeletion,"findModelConfigurationForDeletion");function getModelConfigurationKey(loaded,authType,modelId,baseUrl){const matches=modelEntries(loaded).filter(entry=>entry.authType===authType&&entry.model.id===modelId&&(entry.model.baseUrl??"")===(baseUrl??""));return matches.length===1&&getWritableScopes(loaded).includes(matches[0].scope)?matches[0].key:void 0}__name(getModelConfigurationKey,"getModelConfigurationKey");function isConversationModelConfiguration(model){return!model.imageOnly&&!model.voiceOnly&&!model.fastOnly&&!model.visionOnly&&!model.realtimeOnly}__name(isConversationModelConfiguration,"isConversationModelConfiguration");function isImageModelConfiguration(model){if(!isImageGenerationCapable(model)||model.fastOnly||model.voiceOnly||model.realtimeOnly||!model.baseUrl||typeof model.envKey!=="string"||!model.envKey.trim())return false;try{const url=new URL(model.baseUrl);return url.protocol==="https:"&&!url.username&&!url.password&&!url.search&&!url.hash}catch{return false}}__name(isImageModelConfiguration,"isImageModelConfiguration");function listModelConfigurations(loaded){const entries=modelEntries(loaded);const routeKey=__name(entry=>JSON.stringify([entry.authType,entry.model.id,entry.model.baseUrl??""]),"routeKey");const counts=new Map;for(const entry of entries){const route=routeKey(entry);counts.set(route,(counts.get(route)??0)+1)}const writableScopes=getWritableScopes(loaded);return entries.filter(entry=>writableScopes.includes(entry.scope)).map(entry=>{const{model,authType,key}=entry;const uniqueRoute=counts.get(routeKey(entry))===1;let imageModel;let advisorModel;if(uniqueRoute&&isConversationModelConfiguration(model)){if(!model.baseUrl)advisorModel=`${authType}:${model.id}\0`;else{try{const url=new URL(model.baseUrl);if(["https:","http:"].includes(url.protocol)&&!url.username&&!url.password&&!url.search&&!url.hash)advisorModel=`${authType}:${model.id}\0${model.baseUrl}`}catch{}}}if(uniqueRoute&&isImageModelConfiguration(model)){imageModel=`${authType}:${model.id}\0${model.baseUrl}`}return{key,authType,modelId:model.id,name:model.name,baseUrl:model.baseUrl?publicProviderBaseUrl(model.baseUrl):void 0,envKey:typeof model.envKey==="string"?model.envKey:void 0,contextWindowSize:typeof model.generationConfig?.contextWindowSize==="number"&&Number.isInteger(model.generationConfig.contextWindowSize)&&model.generationConfig.contextWindowSize>0?model.generationConfig.contextWindowSize:void 0,canEditContextWindow:uniqueRoute,purpose:model.imageOnly===true?"image":model.voiceOnly===true?"voice":model.realtimeOnly===true?"realtime":"chat",...imageModel?{imageModel}:{},...advisorModel?{advisorModel}:{}}})}__name(listModelConfigurations,"listModelConfigurations");function updateModelContextWindow(loaded,key,contextWindowSize,assertGenerationOpen){const match=findModelConfiguration(loaded,key);if(!match)return void 0;if(getModelConfigurationKey(loaded,match.authType,match.model.id,match.model.baseUrl)!==key)return void 0;const{scope,provider,index}=match;const providers=loaded.forScope(scope).originalSettings.modelProviders??{};const model=providers[provider][index];const generationConfig={...model.generationConfig};if(contextWindowSize===null)delete generationConfig.contextWindowSize;else generationConfig.contextWindowSize=contextWindowSize;const updated={...model,generationConfig};if(Object.keys(generationConfig).length===0)delete updated.generationConfig;loaded.setValue(scope,"modelProviders",{...providers,[provider]:providers[provider].map((entry,i)=>i===index?updated:entry)},assertGenerationOpen,{throwOnWriteFailure:true});return scope==="Workspace"?"workspace":"user"}__name(updateModelContextWindow,"updateModelContextWindow");export{findModelConfiguration,findModelConfigurationForDeletion,getModelConfigurationKey,isConversationModelConfiguration,isImageModelConfiguration,listModelConfigurations,updateModelContextWindow};
|
|
4
4
|
/**
|
|
5
5
|
* @license
|
|
6
6
|
* Copyright 2025 Qwen Team
|