@qwen-code/qwen-code 0.21.4 → 0.21.5
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/qc-helper/docs/configuration/model-providers.md +8 -7
- package/bundled/qc-helper/docs/configuration/settings.md +1 -1
- package/bundled/qc-helper/docs/features/code-review.md +2 -0
- package/bundled/qc-helper/docs/features/mcp.md +11 -3
- package/bundled/review/SKILL.md +32 -1
- package/chunks/{MaxSizedBox-5XDFQHTQ.js → MaxSizedBox-2MWU5JYB.js} +16 -16
- package/chunks/{StandaloneSessionPicker-DLADA54K.js → StandaloneSessionPicker-B6MI5NTB.js} +30 -30
- package/chunks/{acpAgent-MVEFZSBS.js → acpAgent-MRPYN6FH.js} +674 -290
- package/chunks/{agent-RB6LCRZX.js → agent-NAOXNW4I.js} +16 -16
- package/chunks/{agent-headless-272ZACJV.js → agent-headless-L4PPVFKW.js} +16 -16
- package/chunks/{artifact-tool-TBOYEKTY.js → artifact-tool-RROCCJDA.js} +1 -1
- package/chunks/{askUserQuestion-23Y5WZFJ.js → askUserQuestion-2EPPBPUZ.js} +1 -1
- package/chunks/{bridge-GXUXFSHK.js → bridge-LHXGYNCO.js} +17 -17
- package/chunks/{channel-settings-store-5UA2SABE.js → channel-settings-store-QB54TLYE.js} +21 -21
- package/chunks/{chunk-PWCQRLM5.js → chunk-2AGOQ7QO.js} +1 -1
- package/chunks/{chunk-XSOAW7FC.js → chunk-2JBETW4S.js} +5 -5
- package/chunks/{chunk-O4IWFYUW.js → chunk-3GOCVBYR.js} +4 -4
- package/chunks/{chunk-3PHUGFPH.js → chunk-3H5RFLTS.js} +1 -1
- package/chunks/{chunk-OOPFAIWP.js → chunk-3P4GP4S2.js} +1 -1
- package/chunks/{chunk-YXEVDA66.js → chunk-4LLUH3A7.js} +19 -18
- package/chunks/{chunk-ZRQY5BBS.js → chunk-4NEBUDWS.js} +10 -10
- package/chunks/{chunk-C5YFS6VR.js → chunk-4NNR24EP.js} +4 -4
- package/chunks/{chunk-RL2NPV5E.js → chunk-4O6HLCOF.js} +1 -1
- package/chunks/{chunk-AFJSRJTO.js → chunk-5HWAJ4BK.js} +1 -1
- package/chunks/{chunk-O2ZYHG33.js → chunk-5L6CQ4ZU.js} +131 -67
- package/chunks/{chunk-AWTLFUVN.js → chunk-5XNO4AW7.js} +13 -13
- package/chunks/{chunk-LLMGP5IC.js → chunk-6WBWIPBF.js} +2 -2
- package/chunks/{chunk-4CTV3FZH.js → chunk-7M2RLFNX.js} +23 -19
- package/chunks/{chunk-X6QNZOTC.js → chunk-7MFQLOHZ.js} +1 -1
- package/chunks/{chunk-DZPOYHBT.js → chunk-7W5KOBYU.js} +1 -1
- package/chunks/{chunk-SBBHZ3YT.js → chunk-AEWOKOJY.js} +1 -1
- package/chunks/{chunk-2CCUHZP5.js → chunk-B2RBYP7Z.js} +2 -2
- package/chunks/{chunk-URVJ4AZC.js → chunk-B3EBIZUY.js} +1 -1
- package/chunks/{chunk-GDREW3U5.js → chunk-BWLUCN35.js} +1 -1
- package/chunks/{chunk-DJA7YBLJ.js → chunk-C6ARWPCG.js} +2 -2
- package/chunks/{chunk-RNKGMZEW.js → chunk-CAX76R46.js} +1 -1
- package/chunks/{chunk-CFDR3GNL.js → chunk-D7D7RXIJ.js} +11 -0
- package/chunks/{chunk-PCVMRBLN.js → chunk-D7QAZ5DF.js} +1 -1
- package/chunks/{chunk-THLV7YGY.js → chunk-EXHQZBVJ.js} +2 -2
- package/chunks/{chunk-DOCBJIBL.js → chunk-FEUXV3DC.js} +1 -1
- package/chunks/{chunk-QZQ72YF6.js → chunk-G2UXFO2B.js} +1 -1
- package/chunks/{chunk-QXTGHZCX.js → chunk-GBY3ODW7.js} +3 -3
- package/chunks/{chunk-LPLMUGIM.js → chunk-GEP54CHX.js} +5 -5
- package/chunks/{chunk-2T3RYG4L.js → chunk-GP4IMBX5.js} +420 -94
- package/chunks/{chunk-XPAY4EMH.js → chunk-IK3RYLAD.js} +3 -3
- package/chunks/{chunk-I32URQI7.js → chunk-IWGMDSC3.js} +5 -5
- package/chunks/{chunk-WDLQGFWP.js → chunk-IWYXZAGT.js} +27 -27
- package/chunks/{chunk-HBCKZF2A.js → chunk-IZ2CMEYO.js} +1 -1
- package/chunks/{chunk-PQEIKQXN.js → chunk-J7I2BZHS.js} +4 -3
- package/chunks/{chunk-PQ5JFCNL.js → chunk-JDNWIXHJ.js} +3 -3
- package/chunks/{chunk-KHSJSMFS.js → chunk-K2ETEWG6.js} +1 -1
- package/chunks/{chunk-FV4TUUDE.js → chunk-K64OI7S7.js} +1 -1
- package/chunks/{chunk-C6FU76AA.js → chunk-K6VEL5KP.js} +1 -1
- package/chunks/{chunk-B3EBXISV.js → chunk-KH2BIJ4H.js} +3 -3
- package/chunks/{chunk-G7XXKQYS.js → chunk-LKRMNRSN.js} +27 -1
- package/chunks/{chunk-G6KI6B5L.js → chunk-LMNM37OE.js} +1 -1
- package/chunks/{chunk-SV5X2EUV.js → chunk-LSYVASZS.js} +1 -1
- package/chunks/{chunk-4PZ7SPD5.js → chunk-LYPXNRBX.js} +1 -1
- package/chunks/{chunk-HFVW54NL.js → chunk-MBEMTXQT.js} +9 -2
- package/chunks/{chunk-RPYYTL7E.js → chunk-MGSSJT27.js} +2 -2
- package/chunks/{chunk-M2L4TMH3.js → chunk-N3RERU5N.js} +3 -3
- package/chunks/{chunk-HI4YGRJD.js → chunk-NLQIEY6W.js} +3 -3
- package/chunks/{chunk-UATJZOAJ.js → chunk-OGAARVN7.js} +3 -3
- package/chunks/{chunk-6KQUOXT5.js → chunk-OIGB253L.js} +6 -6
- package/chunks/{chunk-EIAPOG76.js → chunk-P3SLTSNY.js} +3 -3
- package/chunks/{chunk-BC4LTKEG.js → chunk-Q2V4AOQL.js} +1 -1
- package/chunks/{chunk-KB6VSG2U.js → chunk-RM3F46UT.js} +6 -6
- package/chunks/{chunk-6ME3PVMM.js → chunk-SJMCYCUQ.js} +5 -5
- package/chunks/{chunk-2JN5V3I7.js → chunk-SQTA6PAY.js} +1 -1
- package/chunks/{chunk-2ON2O4MD.js → chunk-SVIEVA3L.js} +3 -3
- package/chunks/{chunk-FPPVCCAH.js → chunk-TCOJPG2P.js} +1 -1
- package/chunks/{chunk-BOWKLLWA.js → chunk-TJ56V3AR.js} +2 -2
- package/chunks/{chunk-A7PONO5G.js → chunk-URJHXOSO.js} +2 -2
- package/chunks/{chunk-EJXATV5R.js → chunk-VJPF6GF2.js} +2 -2
- package/chunks/{chunk-5XGI4IPK.js → chunk-VOA2UPZM.js} +3 -3
- package/chunks/{chunk-XGA6XHH3.js → chunk-WTM5QONI.js} +3 -3
- package/chunks/{chunk-IMGNGOGC.js → chunk-WU5NBSLD.js} +3 -3
- package/chunks/{chunk-7UXI6P72.js → chunk-WVAESIM6.js} +2 -2
- package/chunks/{chunk-TXZDRD36.js → chunk-XD2PNH3K.js} +5 -5
- package/chunks/{chunk-E2SYUEIA.js → chunk-YLL3SC5S.js} +743 -312
- package/chunks/{chunk-M6RNMBUO.js → chunk-YMUZQ3MQ.js} +4 -4
- package/chunks/{chunk-DHNFB7NC.js → chunk-YO4JI7B4.js} +5 -5
- package/chunks/{chunk-VA5NLVPT.js → chunk-Z7JILXGX.js} +1 -1
- package/chunks/{chunk-P5UJMCVS.js → chunk-ZLGPHA34.js} +4 -4
- package/chunks/{chunk-JDJ7SC4E.js → chunk-ZPGMDT4S.js} +237 -106
- package/chunks/{chunk-UEJESCS7.js → chunk-ZPPP6VCL.js} +1 -1
- package/chunks/{computer-use-MDOMIVTL.js → computer-use-XDOGP2KA.js} +16 -16
- package/chunks/{contextCommand-FCK3CB37.js → contextCommand-N3LQDCYJ.js} +18 -18
- package/chunks/{core-runtime-UHRHHU2O.js → core-runtime-STAFP45W.js} +16 -16
- package/chunks/{create-sub-session-MIXUVLWW.js → create-sub-session-2B3JENWD.js} +16 -16
- package/chunks/{create-sub-session-J32WC64U.js → create-sub-session-6EWLAZD5.js} +1 -1
- package/chunks/{cron-create-HMFSHIAR.js → cron-create-CCRIULJE.js} +1 -1
- package/chunks/{cron-delete-ZJFHOX57.js → cron-delete-FCFW6BGP.js} +1 -1
- package/chunks/{cron-list-ZEX2NBMN.js → cron-list-QDBVCHRF.js} +1 -1
- package/chunks/{daemon-status-provider-6LC7LUNR.js → daemon-status-provider-PPAH3ATF.js} +21 -21
- package/chunks/{daemon-trust-policy-Y36HGRAM.js → daemon-trust-policy-X6XL3MB4.js} +21 -21
- package/chunks/{daemon-trust-policy-monitor-ROTBBDOH.js → daemon-trust-policy-monitor-M5LBL2HD.js} +21 -21
- package/chunks/{deferred-core-runtime-ZQ4JIAJD.js → deferred-core-runtime-O54YPTBU.js} +16 -16
- package/chunks/{display-image-2WOG27DY.js → display-image-GUJA352B.js} +2 -2
- package/chunks/{earlyInputCapture-GPRUNXTP.js → earlyInputCapture-CBIT2RGT.js} +16 -16
- package/chunks/{edit-YK3UP6D2.js → edit-KW2TOC6A.js} +17 -17
- package/chunks/{enter-worktree-QMVQW7UG.js → enter-worktree-YL34NEU5.js} +16 -16
- package/chunks/{enterPlanMode-TZAYQ5MP.js → enterPlanMode-JFJTDASQ.js} +16 -16
- package/chunks/{environment-3UQURCZG.js → environment-IATU5GXG.js} +18 -18
- package/chunks/{errors-VBIMTNNI.js → errors-SAVRDE7Q.js} +18 -18
- package/chunks/{exit-worktree-4EC7LBBC.js → exit-worktree-5M43QPBB.js} +16 -16
- package/chunks/{exitPlanMode-K5Y3REU2.js → exitPlanMode-W4EICZ4N.js} +16 -16
- package/chunks/{fast-path-KS6IE7YR.js → fast-path-YQJPIKMP.js} +2 -2
- package/chunks/{gemini-LTUCUOJH.js → gemini-FUF5SSPR.js} +47 -47
- package/chunks/{geminiContentGenerator-M3HJTHKR.js → geminiContentGenerator-LLLZBOUG.js} +1 -1
- package/chunks/{glob-SKUYGTF2.js → glob-LJFFMN4D.js} +16 -16
- package/chunks/{goal-tools-SPQ5M6D3.js → goal-tools-3AZKX5WQ.js} +2 -18
- package/chunks/{grep-SQ7RD7SV.js → grep-Q64EAM73.js} +16 -16
- package/chunks/{handleAutoUpdate-OK7OX23A.js → handleAutoUpdate-QBMPRTSQ.js} +20 -20
- package/chunks/{i18n-P77YBKY4.js → i18n-LDUW5DMN.js} +17 -17
- package/chunks/{image-gen-2ZWPS42A.js → image-gen-G7RLG3KR.js} +2 -2
- package/chunks/{initializer-PIOYXVW7.js → initializer-74A7DMMD.js} +21 -21
- package/chunks/{installationInfo-IWMM6DPV.js → installationInfo-OFDYLDFD.js} +17 -17
- package/chunks/{list-3DCR4TRI.js → list-JA2EWRHJ.js} +24 -24
- package/chunks/{list-agents-TWEGRJWO.js → list-agents-GC4BRET7.js} +1 -1
- package/chunks/{loadedSettingsAdapter-EJC6CU5N.js → loadedSettingsAdapter-2GNJOQ3L.js} +21 -21
- package/chunks/{loggingContentGenerator-2JEFU25T.js → loggingContentGenerator-B6B5EGB3.js} +8 -8
- package/chunks/{loop-wakeup-6LLEOQYV.js → loop-wakeup-SQQSBMEY.js} +2 -2
- package/chunks/{ls-H5WX22VK.js → ls-63CC3NNX.js} +1 -1
- package/chunks/{lsp-G6FXYEIS.js → lsp-P6NVJVNT.js} +1 -1
- package/chunks/{managed-npm-update-EGVQPSBR.js → managed-npm-update-4YZHLUER.js} +17 -17
- package/chunks/{mcp-KFFH2MBV.js → mcp-LLK5YJVH.js} +21 -21
- package/chunks/{monitor-6Y3NDMTI.js → monitor-NYJPAWVP.js} +16 -16
- package/chunks/{nonInteractiveCli-426IQDPE.js → nonInteractiveCli-HZBBBDJD.js} +45 -45
- package/chunks/{notebook-edit-373IQQLE.js → notebook-edit-LLM6UXFX.js} +17 -17
- package/chunks/{openaiContentGenerator-PGFSOMIQ.js → openaiContentGenerator-2AEXDN55.js} +8 -8
- package/chunks/{pidfile-Y4INDMHG.js → pidfile-3JUWX7G2.js} +16 -16
- package/chunks/{processUtils-6BCPCJZW.js → processUtils-JLLRVZHT.js} +2 -2
- package/chunks/{qwenContentGenerator-QC3KSHSX.js → qwenContentGenerator-2FESCF27.js} +17 -17
- package/chunks/{qwenOAuth2-IOAXKJ3L.js → qwenOAuth2-2KKPYA5J.js} +1 -1
- package/chunks/{read-file-2T54FYZV.js → read-file-5GVXLY74.js} +6 -6
- package/chunks/{read-mcp-resource-DRZSI3HE.js → read-mcp-resource-RTSSEER5.js} +1 -1
- package/chunks/{record-artifact-IPIRWMFY.js → record-artifact-L3BAHQFN.js} +2 -2
- package/chunks/{resumeHistoryUtils-O62RDCZ3.js → resumeHistoryUtils-Z4OFBXPM.js} +19 -19
- package/chunks/{ripGrep-3H72KY7S.js → ripGrep-TKOJTIAB.js} +16 -16
- package/chunks/{run-qwen-serve-3AIDNNHO.js → run-qwen-serve-K5W6MM6M.js} +27 -27
- package/chunks/{runtime-AZ4EHHFV.js → runtime-IADXMRCY.js} +22 -22
- package/chunks/{scheduler-L4UUCU4Z.js → scheduler-T7AV37LD.js} +16 -16
- package/chunks/{sdk-exporters-http-IKNWQJNV.js → sdk-exporters-http-IL2346MJ.js} +6 -2
- package/chunks/{sdk-impl-7CUUMQDB.js → sdk-impl-SYKGVWOZ.js} +2 -2
- package/chunks/{send-message-LHJLVWFD.js → send-message-TL6FIMMN.js} +3 -3
- package/chunks/{serve-CLXGSYOE.js → serve-ROEGMS3I.js} +21 -21
- package/chunks/{server-MEAE3WMM.js → server-NGXMRODI.js} +40 -40
- package/chunks/{session-OSLD2LT5.js → session-RCDLDJA4.js} +46 -46
- package/chunks/{settings-ILWAOKA4.js → settings-E6H3AURD.js} +20 -20
- package/chunks/{shell-RT5DBH6B.js → shell-RHGGJ6BE.js} +16 -16
- package/chunks/{skill-LVGA3ATZ.js → skill-GQ7PBS25.js} +7 -7
- package/chunks/{skill-settings-WTZE7EPE.js → skill-settings-E2F7OCBL.js} +20 -20
- package/chunks/{spawnChannel-BOBS7DVM.js → spawnChannel-Q2IQBHME.js} +16 -16
- package/chunks/{standalone-update-Y5JB4S2K.js → standalone-update-NYYZEHLD.js} +18 -18
- package/chunks/{startInteractiveUI-ZV25CD2S.js → startInteractiveUI-IX6I3Y2Z.js} +62 -59
- package/chunks/{syntheticOutput-EYL7DWO7.js → syntheticOutput-BN7E626U.js} +2 -2
- package/chunks/{task-create-4ALZMGP5.js → task-create-2X4UP4F3.js} +4 -4
- package/chunks/{task-list-6CVQPORX.js → task-list-WOLJPZ64.js} +1 -1
- package/chunks/{task-stop-Y5ZTFVRX.js → task-stop-TNXRNAL2.js} +1 -1
- package/chunks/{task-update-IKCEEWJ6.js → task-update-VDUSN36E.js} +4 -4
- package/chunks/{team-create-ZVPQIXCP.js → team-create-UTRVUEDA.js} +16 -16
- package/chunks/{team-delete-CE7DC53R.js → team-delete-D2VMSDOT.js} +1 -1
- package/chunks/{team-plan-approval-5UHUBY3W.js → team-plan-approval-YZNB4U5U.js} +16 -16
- package/chunks/{terminal-image-renderer-NWC2RALG.js → terminal-image-renderer-QRSCS2BE.js} +17 -17
- package/chunks/{theme-manager-5KICSBOB.js → theme-manager-EKZBY34I.js} +16 -16
- package/chunks/{todoWrite-FTZWQRZH.js → todoWrite-MHWHO5UO.js} +1 -1
- package/chunks/{tool-search-2AOU77H4.js → tool-search-N2R7LVMC.js} +8 -8
- package/chunks/{total-session-admission-FR7RMHVL.js → total-session-admission-HBIYARPO.js} +17 -17
- package/chunks/{trustedFolders-V7UUPQXO.js → trustedFolders-ZQLYRCSY.js} +17 -17
- package/chunks/{update-relaunch-TBWRMQD6.js → update-relaunch-PJWXMPCR.js} +5 -5
- package/chunks/{updateCheck-42SPCLH7.js → updateCheck-ZXRCGY66.js} +19 -19
- package/chunks/{useAutoAcceptIndicator-4C2KM345.js → useAutoAcceptIndicator-ZYQW5SGJ.js} +22 -22
- package/chunks/{validateNonInterActiveAuth-UVFRXV3Z.js → validateNonInterActiveAuth-M7J7OTRH.js} +42 -42
- package/chunks/{version-HKTV6TPN.js → version-2AOHMPK3.js} +1 -1
- package/chunks/{web-fetch-ZRXSV5AN.js → web-fetch-DS34CJ3R.js} +6 -6
- package/chunks/{web-search-WOLV3L6T.js → web-search-ITFPD7V4.js} +4 -4
- package/chunks/{workflow-F63ES3OB.js → workflow-LZQ4PGNS.js} +17 -17
- package/chunks/{workspace-providers-status-PJMGMYMC.js → workspace-providers-status-ZPTLKOBM.js} +23 -23
- package/chunks/{workspace-registration-store-LNBOX5TJ.js → workspace-registration-store-OTFKSGG7.js} +1 -1
- package/chunks/{workspace-registry-4PR7VDQ3.js → workspace-registry-YZ3OXPHP.js} +17 -17
- package/chunks/{workspace-service-PVI3VUNQ.js → workspace-service-OCZXOOSQ.js} +24 -24
- package/chunks/{workspace-skills-status-2Q5ZISO6.js → workspace-skills-status-K2ALGUCD.js} +21 -21
- package/chunks/{workspace-trust-reconciler-NOILUH3C.js → workspace-trust-reconciler-KMRZISJP.js} +22 -22
- package/chunks/{write-file-MOM4JDHG.js → write-file-AWBI4GJS.js} +16 -16
- package/chunks/{zoom-image-E3VHRCFU.js → zoom-image-NHKN6F77.js} +6 -6
- package/cli.js +12 -12
- package/package.json +3 -3
- package/web-shell/assets/{arc-GpdmhIxr.js → arc-Dpg66jw7.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-C-LhCgH_.js → architectureDiagram-3BPJPVTR-BJ4FIBxN.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CzNdTCm-.js → blockDiagram-GPEHLZMM-VXmYdtYT.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Ce7hbrRM.js → c4Diagram-AAUBKEIU-BNLDb8FE.js} +1 -1
- package/web-shell/assets/channel-Bd9wOnaA.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BBSEn1PK.js → chunk-2J33WTMH-DR5yHxr0.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-_llgjfe5.js → chunk-4BX2VUAB-Czkq8UZU.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-9fJZ_oZE.js → chunk-55IACEB6-DugUgM6s.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DgEzQWOu.js → chunk-727SXJPM-Dw6quA1K.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-B4RthUTc.js → chunk-AQP2D5EJ-BoVYOTTz.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CDI-emMW.js → chunk-FMBD7UC4--Amcse-j.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-jM2-yOd8.js → chunk-ND2GUHAM-ajaEYAC8.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-XGZHlKPF.js → chunk-QZHKN3VN-CUNDZ7im.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-XhCT8FE3.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-XhCT8FE3.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-90nbW1xQ.js → cose-bilkent-S5V4N54A-BnfkD-m1.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-BtzlyqZ9.js → dagre-BM42HDAG-BuUdFk7Z.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-DAaqGWaH.js → diagram-2AECGRRQ-B2ZXxoab.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-CxlzSIFa.js → diagram-5GNKFQAL-BsgOICzM.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-8kj-1H6u.js → diagram-KO2AKTUF-DTTjG6U-.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-6NhjFwRF.js → diagram-LMA3HP47-temLf1x7.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-Bn9kvInz.js → diagram-OG6HWLK6-CRFjScs2.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CaRoGsAt.js → erDiagram-TEJ5UH35-D4oaY-rQ.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-TkLweHdf.js → flowDiagram-I6XJVG4X-BqG8B49b.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-ruwhCKBl.js → ganttDiagram-6RSMTGT7-DffQBdd5.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DNI_PxoU.js → gitGraphDiagram-PVQCEYII-CMDPfseF.js} +1 -1
- package/web-shell/assets/{index-T4KluHvu.js → index-2F4RsNzd.js} +322 -322
- package/web-shell/assets/index-CaucmEO_.css +5 -0
- package/web-shell/assets/{index-p1gz-sxE.js → index-qTQR_smP.js} +1 -1
- package/web-shell/assets/{infoDiagram-5YYISTIA-DarXq1-A.js → infoDiagram-5YYISTIA-Cn3T83MA.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-GxDaDlT0.js → ishikawaDiagram-YF4QCWOH-ijFs7e25.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-mDEoGBzY.js → journeyDiagram-JHISSGLW-CINTv8VB.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Ds0t-Mup.js → kanban-definition-UN3LZRKU-CMGRZCxx.js} +1 -1
- package/web-shell/assets/{linear-05nJ0xZ7.js → linear-Co-2_37d.js} +1 -1
- package/web-shell/assets/{mermaid.core-Bua24ThM.js → mermaid.core-DijbyaN5.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_zRdvUS.js → mindmap-definition-RKZ34NQL-k_sDYDPZ.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-DZHr1x16.js → pieDiagram-4H26LBE5-CG-oz8V3.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-HA06Wf0h.js → quadrantDiagram-W4KKPZXB-Baq7HIG2.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-DH3urmJf.js → requirementDiagram-4Y6WPE33-CDM3ZvBt.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C4xgz0TT.js → sankeyDiagram-5OEKKPKP-C2dJbWKN.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DAUoZWgv.js → sequenceDiagram-3UESZ5HK-Cf1_h59p.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-v7NzXy4l.js → stateDiagram-AJRCARHV-CI5clUEc.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDc8asKD.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-B3GTYR2W.js → timeline-definition-PNZ67QCA-B2O8cAZX.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BWHjSPAq.js → vennDiagram-CIIHVFJN-BLsJ_h9s.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-m9r6IUBC.js → wardley-L42UT6IY-BlPU4FTA.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-kT0FkVfK.js → wardleyDiagram-YWT4CUSO-D_U-RdU4.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-CYRm10z5.js → xychartDiagram-2RQKCTM6-BynXGSTl.js} +1 -1
- package/web-shell/index.html +2 -2
- package/web-shell/assets/channel-95y6Rcp3.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-pfzVkmjQ.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-pfzVkmjQ.js +0 -1
- package/web-shell/assets/index-WxSvj2tI.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CtdFexEf.js +0 -1
|
@@ -8,17 +8,18 @@ import {
|
|
|
8
8
|
} from "./chunk-E4WHKETF.js";
|
|
9
9
|
import {
|
|
10
10
|
STRUCTURED_OUTPUT_REDACTED_ARGS
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ZPPP6VCL.js";
|
|
12
12
|
import {
|
|
13
13
|
BaseDeclarativeTool,
|
|
14
14
|
BaseToolInvocation,
|
|
15
15
|
SchemaValidator,
|
|
16
|
+
StructuredToolError,
|
|
16
17
|
ToolDisplayNames,
|
|
17
18
|
ToolNames
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-D7D7RXIJ.js";
|
|
19
20
|
import {
|
|
20
21
|
DEFAULT_QWEN_MODEL
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-XD2PNH3K.js";
|
|
22
23
|
import {
|
|
23
24
|
estimateTextTokens,
|
|
24
25
|
generateLegacyMcpToolName,
|
|
@@ -52,8 +53,9 @@ import {
|
|
|
52
53
|
recordModelSlashCommand,
|
|
53
54
|
recordSubagentExecutionMetrics,
|
|
54
55
|
recordTokenUsageMetrics,
|
|
55
|
-
recordToolCallMetrics
|
|
56
|
-
|
|
56
|
+
recordToolCallMetrics,
|
|
57
|
+
recordToolExecutionMetrics
|
|
58
|
+
} from "./chunk-5L6CQ4ZU.js";
|
|
57
59
|
import {
|
|
58
60
|
require_src,
|
|
59
61
|
safeJsonStringify
|
|
@@ -102,7 +104,7 @@ import {
|
|
|
102
104
|
EVENT_WORKFLOW_KEYWORD,
|
|
103
105
|
EVENT_WORKFLOW_RUN,
|
|
104
106
|
SERVICE_NAME
|
|
105
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-LKRMNRSN.js";
|
|
106
108
|
import {
|
|
107
109
|
Storage,
|
|
108
110
|
createDebugLogger,
|
|
@@ -11224,12 +11226,14 @@ var QwenLogger = class _QwenLogger {
|
|
|
11224
11226
|
`tool_call#${event.function_name}`,
|
|
11225
11227
|
{
|
|
11226
11228
|
properties: {
|
|
11229
|
+
call_id: event.call_id,
|
|
11227
11230
|
prompt_id: event.prompt_id,
|
|
11228
11231
|
response_id: event.response_id,
|
|
11229
11232
|
tool_name: event.function_name,
|
|
11230
|
-
permission: event.decision,
|
|
11231
11233
|
status: event.status,
|
|
11234
|
+
execution_status: event.execution_status,
|
|
11232
11235
|
tool_type: event.tool_type,
|
|
11236
|
+
permission: event.decision,
|
|
11233
11237
|
success: event.success ? 1 : 0,
|
|
11234
11238
|
duration_ms: event.duration_ms,
|
|
11235
11239
|
error_type: event.error_type,
|
|
@@ -12718,6 +12722,32 @@ function recordUiTelemetryEventToChat(config, uiEvent) {
|
|
|
12718
12722
|
config.getChatRecordingService()?.recordUiTelemetryEvent(uiEvent);
|
|
12719
12723
|
}
|
|
12720
12724
|
__name(recordUiTelemetryEventToChat, "recordUiTelemetryEventToChat");
|
|
12725
|
+
function normalizeToolCallEvent(event) {
|
|
12726
|
+
const functionName = event.function_name ?? "";
|
|
12727
|
+
const normalized = {
|
|
12728
|
+
...event,
|
|
12729
|
+
function_name: functionName.trim().length > 0 ? functionName : "unknown_tool",
|
|
12730
|
+
success: event.status === "success",
|
|
12731
|
+
execution_status: event.execution_status ?? "unknown"
|
|
12732
|
+
};
|
|
12733
|
+
if (event.status === "error") {
|
|
12734
|
+
normalized.error_type = event.error_type?.trim() || "unknown" /* UNKNOWN */;
|
|
12735
|
+
} else {
|
|
12736
|
+
delete normalized.error;
|
|
12737
|
+
delete normalized.error_type;
|
|
12738
|
+
}
|
|
12739
|
+
return normalized;
|
|
12740
|
+
}
|
|
12741
|
+
__name(normalizeToolCallEvent, "normalizeToolCallEvent");
|
|
12742
|
+
var debugLogger5 = createDebugLogger("TELEMETRY_SINK");
|
|
12743
|
+
function runToolTelemetrySink(sink) {
|
|
12744
|
+
try {
|
|
12745
|
+
sink();
|
|
12746
|
+
} catch (e) {
|
|
12747
|
+
debugLogger5.debug("Telemetry sink failed (best-effort):", e);
|
|
12748
|
+
}
|
|
12749
|
+
}
|
|
12750
|
+
__name(runToolTelemetrySink, "runToolTelemetrySink");
|
|
12721
12751
|
function logStartSession(config, event) {
|
|
12722
12752
|
QwenLogger.getInstance(config)?.logStartSessionEvent(event);
|
|
12723
12753
|
if (!isTelemetrySdkInitialized()) return;
|
|
@@ -12796,17 +12826,6 @@ function logUserRetry(config, event) {
|
|
|
12796
12826
|
logger.emit(logRecord);
|
|
12797
12827
|
}
|
|
12798
12828
|
__name(logUserRetry, "logUserRetry");
|
|
12799
|
-
function normalizeToolCallEvent(event) {
|
|
12800
|
-
const isError = event.status === "error";
|
|
12801
|
-
return {
|
|
12802
|
-
...event,
|
|
12803
|
-
function_name: event.function_name.trim().length > 0 ? event.function_name : "unknown_tool",
|
|
12804
|
-
success: event.status === "success",
|
|
12805
|
-
error: isError ? event.error : void 0,
|
|
12806
|
-
error_type: isError ? event.error_type?.trim() ? event.error_type : "unknown" /* UNKNOWN */ : void 0
|
|
12807
|
-
};
|
|
12808
|
-
}
|
|
12809
|
-
__name(normalizeToolCallEvent, "normalizeToolCallEvent");
|
|
12810
12829
|
function logToolCall(config, event) {
|
|
12811
12830
|
const normalizedEvent = normalizeToolCallEvent(event);
|
|
12812
12831
|
const uiEvent = {
|
|
@@ -12814,37 +12833,53 @@ function logToolCall(config, event) {
|
|
|
12814
12833
|
"event.name": EVENT_TOOL_CALL,
|
|
12815
12834
|
"event.timestamp": (/* @__PURE__ */ new Date()).toISOString()
|
|
12816
12835
|
};
|
|
12817
|
-
|
|
12818
|
-
|
|
12819
|
-
|
|
12820
|
-
|
|
12821
|
-
|
|
12836
|
+
runToolTelemetrySink(() => {
|
|
12837
|
+
uiTelemetryService.addEvent(uiEvent, config.getSessionId());
|
|
12838
|
+
});
|
|
12839
|
+
runToolTelemetrySink(() => {
|
|
12840
|
+
if (!isInternalPromptId(normalizedEvent.prompt_id)) {
|
|
12841
|
+
recordUiTelemetryEventToChat(config, uiEvent);
|
|
12842
|
+
}
|
|
12843
|
+
});
|
|
12844
|
+
runToolTelemetrySink(() => {
|
|
12845
|
+
QwenLogger.getInstance(config)?.logToolCallEvent(normalizedEvent);
|
|
12846
|
+
});
|
|
12822
12847
|
if (!isTelemetrySdkInitialized()) return;
|
|
12823
|
-
|
|
12824
|
-
|
|
12825
|
-
|
|
12826
|
-
|
|
12827
|
-
|
|
12828
|
-
|
|
12829
|
-
|
|
12830
|
-
|
|
12831
|
-
|
|
12832
|
-
|
|
12833
|
-
|
|
12834
|
-
|
|
12835
|
-
|
|
12836
|
-
|
|
12837
|
-
|
|
12838
|
-
|
|
12839
|
-
|
|
12840
|
-
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
|
|
12845
|
-
|
|
12846
|
-
|
|
12847
|
-
|
|
12848
|
+
runToolTelemetrySink(() => {
|
|
12849
|
+
const attributes = {
|
|
12850
|
+
...getCommonAttributes(config),
|
|
12851
|
+
...normalizedEvent,
|
|
12852
|
+
"event.name": EVENT_TOOL_CALL,
|
|
12853
|
+
"event.timestamp": (/* @__PURE__ */ new Date()).toISOString(),
|
|
12854
|
+
function_args: safeJsonStringify(normalizedEvent.function_args, 2)
|
|
12855
|
+
};
|
|
12856
|
+
if (normalizedEvent.error) {
|
|
12857
|
+
attributes["error.message"] = normalizedEvent.error;
|
|
12858
|
+
}
|
|
12859
|
+
if (normalizedEvent.error_type) {
|
|
12860
|
+
attributes["error.type"] = normalizedEvent.error_type;
|
|
12861
|
+
}
|
|
12862
|
+
const logger = import_api_logs.logs.getLogger(SERVICE_NAME);
|
|
12863
|
+
const logRecord = {
|
|
12864
|
+
body: `Tool call: ${normalizedEvent.function_name}${normalizedEvent.decision ? `. Decision: ${normalizedEvent.decision}` : ""}. Success: ${normalizedEvent.success}. Duration: ${normalizedEvent.duration_ms}ms.`,
|
|
12865
|
+
attributes
|
|
12866
|
+
};
|
|
12867
|
+
logger.emit(logRecord);
|
|
12868
|
+
});
|
|
12869
|
+
runToolTelemetrySink(() => {
|
|
12870
|
+
recordToolCallMetrics(config, normalizedEvent.duration_ms, {
|
|
12871
|
+
function_name: normalizedEvent.function_name,
|
|
12872
|
+
status: normalizedEvent.status,
|
|
12873
|
+
success: normalizedEvent.success,
|
|
12874
|
+
decision: normalizedEvent.decision,
|
|
12875
|
+
tool_type: normalizedEvent.tool_type
|
|
12876
|
+
});
|
|
12877
|
+
});
|
|
12878
|
+
runToolTelemetrySink(() => {
|
|
12879
|
+
recordToolExecutionMetrics(config, {
|
|
12880
|
+
execution_status: normalizedEvent.execution_status,
|
|
12881
|
+
tool_type: normalizedEvent.tool_type
|
|
12882
|
+
});
|
|
12848
12883
|
});
|
|
12849
12884
|
}
|
|
12850
12885
|
__name(logToolCall, "logToolCall");
|
|
@@ -13749,7 +13784,7 @@ init_esbuild_shims();
|
|
|
13749
13784
|
import * as fs6 from "node:fs/promises";
|
|
13750
13785
|
import * as path7 from "node:path";
|
|
13751
13786
|
import * as crypto from "node:crypto";
|
|
13752
|
-
var
|
|
13787
|
+
var debugLogger6 = createDebugLogger("TRUNCATION");
|
|
13753
13788
|
var PREVIEW_SIZE_CHARS = 2e3;
|
|
13754
13789
|
var MAX_FILE_SIZE_BYTES = 50 * 1024 * 1024;
|
|
13755
13790
|
var MAX_SESSION_BYTES = 500 * 1024 * 1024;
|
|
@@ -13836,7 +13871,7 @@ ${truncatedContent}`;
|
|
|
13836
13871
|
outputFile
|
|
13837
13872
|
};
|
|
13838
13873
|
} catch (error) {
|
|
13839
|
-
|
|
13874
|
+
debugLogger6.warn(
|
|
13840
13875
|
`Failed to save truncated output to ${outputFile}:`,
|
|
13841
13876
|
error
|
|
13842
13877
|
);
|
|
@@ -13947,7 +13982,7 @@ __name(normalizeToolResultCallId, "normalizeToolResultCallId");
|
|
|
13947
13982
|
async function persistAndTruncateToolResult(callId, toolName, content, config) {
|
|
13948
13983
|
const byteSize = Buffer.byteLength(content, "utf-8");
|
|
13949
13984
|
if (byteSize > MAX_FILE_SIZE_BYTES) {
|
|
13950
|
-
|
|
13985
|
+
debugLogger6.warn(
|
|
13951
13986
|
`Tool result for ${toolName} exceeds ${MAX_FILE_SIZE_BYTES} bytes (${byteSize}), skipping disk persistence`
|
|
13952
13987
|
);
|
|
13953
13988
|
return {
|
|
@@ -13957,7 +13992,7 @@ async function persistAndTruncateToolResult(callId, toolName, content, config) {
|
|
|
13957
13992
|
}
|
|
13958
13993
|
const budgetUsed = config.getToolResultBytesWritten();
|
|
13959
13994
|
if (budgetUsed + byteSize > MAX_SESSION_BYTES) {
|
|
13960
|
-
|
|
13995
|
+
debugLogger6.warn(
|
|
13961
13996
|
`Session tool result budget exhausted (${budgetUsed} + ${byteSize} > ${MAX_SESSION_BYTES}), skipping disk persistence`
|
|
13962
13997
|
);
|
|
13963
13998
|
return {
|
|
@@ -13968,7 +14003,7 @@ async function persistAndTruncateToolResult(callId, toolName, content, config) {
|
|
|
13968
14003
|
config.trackToolResultBytes(byteSize);
|
|
13969
14004
|
const safeCallId = normalizeToolResultCallId(callId);
|
|
13970
14005
|
if (!safeCallId) {
|
|
13971
|
-
|
|
14006
|
+
debugLogger6.warn(
|
|
13972
14007
|
`Invalid callId for disk persistence: ${JSON.stringify(callId)}`
|
|
13973
14008
|
);
|
|
13974
14009
|
config.trackToolResultBytes(-byteSize);
|
|
@@ -13993,7 +14028,7 @@ async function persistAndTruncateToolResult(callId, toolName, content, config) {
|
|
|
13993
14028
|
bytesWritten: byteSize
|
|
13994
14029
|
};
|
|
13995
14030
|
} catch (error) {
|
|
13996
|
-
|
|
14031
|
+
debugLogger6.warn("Failed to persist tool result:", error);
|
|
13997
14032
|
try {
|
|
13998
14033
|
const fallback = await truncateAndSaveToFile(
|
|
13999
14034
|
content,
|
|
@@ -14013,7 +14048,7 @@ async function persistAndTruncateToolResult(callId, toolName, content, config) {
|
|
|
14013
14048
|
return { content: fallback.content, bytesWritten: 0 };
|
|
14014
14049
|
} catch (fallbackError) {
|
|
14015
14050
|
config.trackToolResultBytes(-byteSize);
|
|
14016
|
-
|
|
14051
|
+
debugLogger6.warn("Fallback truncation also failed:", fallbackError);
|
|
14017
14052
|
return {
|
|
14018
14053
|
content: buildStub(content, byteSize, "(disk persistence unavailable)"),
|
|
14019
14054
|
bytesWritten: 0
|
|
@@ -14206,7 +14241,7 @@ function collectText(parts) {
|
|
|
14206
14241
|
__name(collectText, "collectText");
|
|
14207
14242
|
|
|
14208
14243
|
// packages/core/src/tools/mcp-tool.ts
|
|
14209
|
-
var
|
|
14244
|
+
var debugLogger7 = createDebugLogger("MCP_TOOL");
|
|
14210
14245
|
var MCP_CONNECTION_ERROR_PATTERNS = [
|
|
14211
14246
|
/ECONNREFUSED/i,
|
|
14212
14247
|
/ENOTFOUND/i,
|
|
@@ -14217,6 +14252,51 @@ var MCP_CONNECTION_ERROR_PATTERNS = [
|
|
|
14217
14252
|
/disconnected/i,
|
|
14218
14253
|
/transport closed/i
|
|
14219
14254
|
];
|
|
14255
|
+
var MCP_REQUEST_TIMEOUT_CODE = -32001;
|
|
14256
|
+
function isMcpRequestTimeout(error) {
|
|
14257
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === MCP_REQUEST_TIMEOUT_CODE;
|
|
14258
|
+
}
|
|
14259
|
+
__name(isMcpRequestTimeout, "isMcpRequestTimeout");
|
|
14260
|
+
function isExecutionTimeoutFailure(error, serverName, signal) {
|
|
14261
|
+
if (signal.aborted) return false;
|
|
14262
|
+
if (!isMcpRequestTimeout(error)) return false;
|
|
14263
|
+
const statuses = getAllMCPServerStatuses();
|
|
14264
|
+
return !(statuses.has(serverName) && statuses.get(serverName) === "disconnected" /* DISCONNECTED */);
|
|
14265
|
+
}
|
|
14266
|
+
__name(isExecutionTimeoutFailure, "isExecutionTimeoutFailure");
|
|
14267
|
+
var PARENT_ABORT_OUTCOME = Symbol("parent_abort_outcome");
|
|
14268
|
+
function createToolCallAbortError() {
|
|
14269
|
+
return Object.assign(new Error("Tool call aborted"), { name: "AbortError" });
|
|
14270
|
+
}
|
|
14271
|
+
__name(createToolCallAbortError, "createToolCallAbortError");
|
|
14272
|
+
function isParentAbortOutcome(value) {
|
|
14273
|
+
return typeof value === "object" && value !== null && PARENT_ABORT_OUTCOME in value;
|
|
14274
|
+
}
|
|
14275
|
+
__name(isParentAbortOutcome, "isParentAbortOutcome");
|
|
14276
|
+
function createParentAbortRace(signal, forwardAbort) {
|
|
14277
|
+
let onAbort;
|
|
14278
|
+
const promise = new Promise((resolve) => {
|
|
14279
|
+
onAbort = /* @__PURE__ */ __name(() => {
|
|
14280
|
+
const reason = createToolCallAbortError();
|
|
14281
|
+
resolve({ [PARENT_ABORT_OUTCOME]: true, reason });
|
|
14282
|
+
forwardAbort?.(reason);
|
|
14283
|
+
}, "onAbort");
|
|
14284
|
+
if (signal.aborted) {
|
|
14285
|
+
onAbort();
|
|
14286
|
+
} else {
|
|
14287
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
14288
|
+
}
|
|
14289
|
+
});
|
|
14290
|
+
return {
|
|
14291
|
+
promise,
|
|
14292
|
+
dispose: /* @__PURE__ */ __name(() => {
|
|
14293
|
+
if (onAbort) {
|
|
14294
|
+
signal.removeEventListener("abort", onAbort);
|
|
14295
|
+
}
|
|
14296
|
+
}, "dispose")
|
|
14297
|
+
};
|
|
14298
|
+
}
|
|
14299
|
+
__name(createParentAbortRace, "createParentAbortRace");
|
|
14220
14300
|
var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends BaseToolInvocation {
|
|
14221
14301
|
constructor(mcpTool, serverName, serverToolName, displayName, registeredToolName, permissionAliases, trust, params = {}, cliConfig, mcpClient, mcpTimeout, mcpToolIdleTimeoutMs, annotations, allowInvocationContext = false, retryCount = 0) {
|
|
14222
14302
|
super(params);
|
|
@@ -14239,6 +14319,7 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14239
14319
|
__name(this, "DiscoveredMCPToolInvocation");
|
|
14240
14320
|
}
|
|
14241
14321
|
static MAX_RECONNECT_RETRIES = 3;
|
|
14322
|
+
static UNSAFE_REPLAY_ERROR_MESSAGE = "MCP tool execution may have completed before the connection failed. Automatic replay was skipped because the call could not be verified as safe to replay. Do not retry automatically; verify the outcome before trying again.";
|
|
14242
14323
|
/**
|
|
14243
14324
|
* MCP tool default permission based on trust:
|
|
14244
14325
|
* - trust: true in a trusted folder → 'allow' (server explicitly trusted by user config)
|
|
@@ -14286,33 +14367,42 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14286
14367
|
return null;
|
|
14287
14368
|
}
|
|
14288
14369
|
try {
|
|
14289
|
-
|
|
14370
|
+
debugLogger7.info(
|
|
14290
14371
|
`Attempting to reconnect MCP server '${this.serverName}'...`
|
|
14291
14372
|
);
|
|
14292
14373
|
const toolRegistry = this.cliConfig.getToolRegistry();
|
|
14293
14374
|
await toolRegistry.discoverToolsForServer(this.serverName);
|
|
14294
14375
|
const newTool = await toolRegistry.ensureTool(this.registeredToolName);
|
|
14295
14376
|
if (newTool instanceof DiscoveredMCPTool) {
|
|
14296
|
-
|
|
14377
|
+
debugLogger7.info(
|
|
14297
14378
|
`Successfully reconnected to MCP server '${this.serverName}'`
|
|
14298
14379
|
);
|
|
14299
14380
|
return newTool;
|
|
14300
14381
|
}
|
|
14301
14382
|
return null;
|
|
14302
14383
|
} catch (error) {
|
|
14303
|
-
|
|
14384
|
+
debugLogger7.error(
|
|
14304
14385
|
`Failed to reconnect MCP server '${this.serverName}': ${error}`
|
|
14305
14386
|
);
|
|
14306
14387
|
return null;
|
|
14307
14388
|
}
|
|
14308
14389
|
}
|
|
14309
14390
|
async handleReconnectOnError(error, signal, updateOutput) {
|
|
14310
|
-
|
|
14391
|
+
debugLogger7.error(`MCP server error '${this.serverName}': ${error}`);
|
|
14392
|
+
if (signal.aborted) {
|
|
14393
|
+
throw error;
|
|
14394
|
+
}
|
|
14311
14395
|
if (!this.shouldAttemptReconnect(error)) {
|
|
14312
14396
|
throw error;
|
|
14313
14397
|
}
|
|
14398
|
+
if (!this.cliConfig) {
|
|
14399
|
+
throw error;
|
|
14400
|
+
}
|
|
14401
|
+
if (!this.canSafelyReplay()) {
|
|
14402
|
+
throw new Error(_DiscoveredMCPToolInvocation.UNSAFE_REPLAY_ERROR_MESSAGE);
|
|
14403
|
+
}
|
|
14314
14404
|
if (this.retryCount < _DiscoveredMCPToolInvocation.MAX_RECONNECT_RETRIES) {
|
|
14315
|
-
|
|
14405
|
+
debugLogger7.info(
|
|
14316
14406
|
`Reconnection attempt ${this.retryCount + 1}/${_DiscoveredMCPToolInvocation.MAX_RECONNECT_RETRIES} for MCP server '${this.serverName}'`
|
|
14317
14407
|
);
|
|
14318
14408
|
const newTool = await this.attemptReconnect();
|
|
@@ -14324,25 +14414,39 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14324
14414
|
this.displayName,
|
|
14325
14415
|
newTool.name,
|
|
14326
14416
|
newTool.permissionAliases,
|
|
14327
|
-
|
|
14417
|
+
newTool.trust,
|
|
14328
14418
|
this.params,
|
|
14329
14419
|
this.cliConfig,
|
|
14330
14420
|
newTool["mcpClient"],
|
|
14331
14421
|
this.mcpTimeout,
|
|
14332
14422
|
this.mcpToolIdleTimeoutMs,
|
|
14333
|
-
|
|
14423
|
+
newTool.annotations,
|
|
14334
14424
|
newTool["allowInvocationContext"] === true,
|
|
14335
14425
|
this.retryCount + 1
|
|
14336
14426
|
);
|
|
14427
|
+
if (!newInvocation.canSafelyReplay()) {
|
|
14428
|
+
throw new Error(
|
|
14429
|
+
_DiscoveredMCPToolInvocation.UNSAFE_REPLAY_ERROR_MESSAGE
|
|
14430
|
+
);
|
|
14431
|
+
}
|
|
14337
14432
|
return newInvocation.execute(signal, updateOutput);
|
|
14338
14433
|
}
|
|
14339
14434
|
} else if (this.retryCount >= _DiscoveredMCPToolInvocation.MAX_RECONNECT_RETRIES) {
|
|
14340
|
-
|
|
14435
|
+
debugLogger7.error(
|
|
14341
14436
|
`Max reconnection attempts (${_DiscoveredMCPToolInvocation.MAX_RECONNECT_RETRIES}) reached for MCP server '${this.serverName}'`
|
|
14342
14437
|
);
|
|
14343
14438
|
}
|
|
14344
14439
|
throw error;
|
|
14345
14440
|
}
|
|
14441
|
+
canSafelyReplay() {
|
|
14442
|
+
if (this.trust !== true || this.cliConfig?.isTrustedFolder() !== true || !this.annotations) {
|
|
14443
|
+
return false;
|
|
14444
|
+
}
|
|
14445
|
+
if (this.annotations.readOnlyHint === true && (this.annotations.destructiveHint === true || this.annotations.idempotentHint === false)) {
|
|
14446
|
+
return false;
|
|
14447
|
+
}
|
|
14448
|
+
return this.annotations.idempotentHint === true || this.annotations.readOnlyHint === true;
|
|
14449
|
+
}
|
|
14346
14450
|
shouldAttemptReconnect(error) {
|
|
14347
14451
|
if (isAbortError(error)) {
|
|
14348
14452
|
return false;
|
|
@@ -14368,10 +14472,18 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14368
14472
|
* MCP tool calls (e.g., browser automation).
|
|
14369
14473
|
*/
|
|
14370
14474
|
async executeWithDirectClient(signal, updateOutput) {
|
|
14475
|
+
if (signal.aborted) {
|
|
14476
|
+
throw createToolCallAbortError();
|
|
14477
|
+
}
|
|
14371
14478
|
const idleTimeoutController = new AbortController();
|
|
14479
|
+
const parentAbortController = new AbortController();
|
|
14480
|
+
const parentAbortRace = createParentAbortRace(signal, (reason) => {
|
|
14481
|
+
parentAbortController.abort(reason);
|
|
14482
|
+
});
|
|
14372
14483
|
let idleTimeoutId;
|
|
14484
|
+
let idleTimeoutWon = false;
|
|
14373
14485
|
const combinedSignal = AbortSignal.any([
|
|
14374
|
-
signal,
|
|
14486
|
+
parentAbortController.signal,
|
|
14375
14487
|
idleTimeoutController.signal
|
|
14376
14488
|
]);
|
|
14377
14489
|
const resetIdleTimeout = /* @__PURE__ */ __name(() => {
|
|
@@ -14380,6 +14492,10 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14380
14492
|
}
|
|
14381
14493
|
if (this.mcpToolIdleTimeoutMs && this.mcpToolIdleTimeoutMs > 0) {
|
|
14382
14494
|
const timer = setTimeout(() => {
|
|
14495
|
+
if (signal.aborted) {
|
|
14496
|
+
return;
|
|
14497
|
+
}
|
|
14498
|
+
idleTimeoutWon = true;
|
|
14383
14499
|
const error = new Error(
|
|
14384
14500
|
`MCP tool '${this.serverToolName}' on server '${this.serverName}' did not respond within ${this.mcpToolIdleTimeoutMs}ms idle timeout`
|
|
14385
14501
|
);
|
|
@@ -14393,7 +14509,7 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14393
14509
|
try {
|
|
14394
14510
|
resetIdleTimeout();
|
|
14395
14511
|
const invocationContext = this.allowInvocationContext ? getInvocationContext() : void 0;
|
|
14396
|
-
const
|
|
14512
|
+
const callPromise = this.mcpClient.callTool(
|
|
14397
14513
|
{
|
|
14398
14514
|
name: this.serverToolName,
|
|
14399
14515
|
arguments: this.params,
|
|
@@ -14421,6 +14537,14 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14421
14537
|
signal: combinedSignal
|
|
14422
14538
|
}
|
|
14423
14539
|
);
|
|
14540
|
+
const outcome = await Promise.race([
|
|
14541
|
+
callPromise,
|
|
14542
|
+
parentAbortRace.promise
|
|
14543
|
+
]);
|
|
14544
|
+
if (isParentAbortOutcome(outcome)) {
|
|
14545
|
+
throw outcome.reason;
|
|
14546
|
+
}
|
|
14547
|
+
const callToolResult = outcome;
|
|
14424
14548
|
const rawResponseParts = wrapMcpCallToolResultAsParts(
|
|
14425
14549
|
this.serverToolName,
|
|
14426
14550
|
callToolResult
|
|
@@ -14442,11 +14566,18 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14442
14566
|
persistedOutputFiles: truncated.persistedOutputFiles
|
|
14443
14567
|
};
|
|
14444
14568
|
} catch (error) {
|
|
14569
|
+
if (idleTimeoutWon || isExecutionTimeoutFailure(error, this.serverName, signal)) {
|
|
14570
|
+
throw new StructuredToolError(
|
|
14571
|
+
getErrorMessage(error),
|
|
14572
|
+
"execution_timeout" /* EXECUTION_TIMEOUT */
|
|
14573
|
+
);
|
|
14574
|
+
}
|
|
14445
14575
|
return this.handleReconnectOnError(error, signal, updateOutput);
|
|
14446
14576
|
} finally {
|
|
14447
14577
|
if (idleTimeoutId) {
|
|
14448
14578
|
clearTimeout(idleTimeoutId);
|
|
14449
14579
|
}
|
|
14580
|
+
parentAbortRace.dispose();
|
|
14450
14581
|
}
|
|
14451
14582
|
}
|
|
14452
14583
|
/**
|
|
@@ -14454,38 +14585,26 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14454
14585
|
* This path does NOT support progress notifications.
|
|
14455
14586
|
*/
|
|
14456
14587
|
async executeWithCallableTool(signal) {
|
|
14588
|
+
if (signal.aborted) {
|
|
14589
|
+
throw createToolCallAbortError();
|
|
14590
|
+
}
|
|
14457
14591
|
const functionCalls = [
|
|
14458
14592
|
{
|
|
14459
14593
|
name: this.serverToolName,
|
|
14460
14594
|
args: this.params
|
|
14461
14595
|
}
|
|
14462
14596
|
];
|
|
14597
|
+
const parentAbortRace = createParentAbortRace(signal);
|
|
14463
14598
|
try {
|
|
14464
|
-
const
|
|
14465
|
-
|
|
14466
|
-
|
|
14467
|
-
|
|
14468
|
-
|
|
14469
|
-
|
|
14470
|
-
|
|
14471
|
-
|
|
14472
|
-
|
|
14473
|
-
const error = new Error("Tool call aborted");
|
|
14474
|
-
error.name = "AbortError";
|
|
14475
|
-
reject(error);
|
|
14476
|
-
}, "onAbort");
|
|
14477
|
-
const cleanup = /* @__PURE__ */ __name(() => {
|
|
14478
|
-
signal.removeEventListener("abort", onAbort);
|
|
14479
|
-
}, "cleanup");
|
|
14480
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
14481
|
-
this.mcpTool.callTool(functionCalls).then((res) => {
|
|
14482
|
-
cleanup();
|
|
14483
|
-
resolve(res);
|
|
14484
|
-
}).catch((err) => {
|
|
14485
|
-
cleanup();
|
|
14486
|
-
reject(err);
|
|
14487
|
-
});
|
|
14488
|
-
});
|
|
14599
|
+
const callPromise = this.mcpTool.callTool(functionCalls);
|
|
14600
|
+
const outcome = await Promise.race([
|
|
14601
|
+
callPromise,
|
|
14602
|
+
parentAbortRace.promise
|
|
14603
|
+
]);
|
|
14604
|
+
if (isParentAbortOutcome(outcome)) {
|
|
14605
|
+
throw outcome.reason;
|
|
14606
|
+
}
|
|
14607
|
+
const rawResponseParts = outcome;
|
|
14489
14608
|
if (this.isMCPToolError(rawResponseParts)) {
|
|
14490
14609
|
return await this.buildMcpToolError(rawResponseParts, functionCalls[0]);
|
|
14491
14610
|
}
|
|
@@ -14500,7 +14619,15 @@ var DiscoveredMCPToolInvocation = class _DiscoveredMCPToolInvocation extends Bas
|
|
|
14500
14619
|
persistedOutputFiles: truncated.persistedOutputFiles
|
|
14501
14620
|
};
|
|
14502
14621
|
} catch (error) {
|
|
14622
|
+
if (isExecutionTimeoutFailure(error, this.serverName, signal)) {
|
|
14623
|
+
throw new StructuredToolError(
|
|
14624
|
+
getErrorMessage(error),
|
|
14625
|
+
"execution_timeout" /* EXECUTION_TIMEOUT */
|
|
14626
|
+
);
|
|
14627
|
+
}
|
|
14503
14628
|
return this.handleReconnectOnError(error, signal);
|
|
14629
|
+
} finally {
|
|
14630
|
+
parentAbortRace.dispose();
|
|
14504
14631
|
}
|
|
14505
14632
|
}
|
|
14506
14633
|
async buildMcpToolError(rawResponseParts, functionCall) {
|
|
@@ -14931,10 +15058,12 @@ var ToolCallEvent = class {
|
|
|
14931
15058
|
}
|
|
14932
15059
|
"event.name";
|
|
14933
15060
|
"event.timestamp";
|
|
15061
|
+
call_id;
|
|
14934
15062
|
function_name;
|
|
14935
15063
|
function_args;
|
|
14936
15064
|
duration_ms;
|
|
14937
15065
|
status;
|
|
15066
|
+
execution_status;
|
|
14938
15067
|
success;
|
|
14939
15068
|
// Keep for backward compatibility
|
|
14940
15069
|
decision;
|
|
@@ -14950,10 +15079,12 @@ var ToolCallEvent = class {
|
|
|
14950
15079
|
constructor(call) {
|
|
14951
15080
|
this["event.name"] = "tool_call";
|
|
14952
15081
|
this["event.timestamp"] = (/* @__PURE__ */ new Date()).toISOString();
|
|
15082
|
+
this.call_id = call.request.callId;
|
|
14953
15083
|
this.function_name = call.request.name;
|
|
14954
15084
|
this.function_args = call.request.name === ToolNames.STRUCTURED_OUTPUT ? { ...STRUCTURED_OUTPUT_REDACTED_ARGS } : call.request.args;
|
|
14955
15085
|
this.duration_ms = call.durationMs ?? 0;
|
|
14956
15086
|
this.status = call.status;
|
|
15087
|
+
this.execution_status = call.response.executionStatus;
|
|
14957
15088
|
this.success = call.status === "success";
|
|
14958
15089
|
this.decision = call.outcome ? getDecisionFromOutcome(call.outcome) : void 0;
|
|
14959
15090
|
this.error = call.response.error?.message;
|
|
@@ -16154,7 +16285,7 @@ async function runSideQuery(config, options) {
|
|
|
16154
16285
|
__name(runSideQuery, "runSideQuery");
|
|
16155
16286
|
|
|
16156
16287
|
// packages/core/src/services/visionBridge/vision-bridge-service.ts
|
|
16157
|
-
var
|
|
16288
|
+
var debugLogger8 = createDebugLogger("VISION_BRIDGE");
|
|
16158
16289
|
var turnImageCounts = /* @__PURE__ */ new WeakMap();
|
|
16159
16290
|
var BRIDGE_MAX_OUTPUT_TOKENS = 2048;
|
|
16160
16291
|
var VISION_BRIDGE_TIMEOUT_MS = 3e4;
|
|
@@ -16424,7 +16555,7 @@ async function runVisionBridge(params) {
|
|
|
16424
16555
|
try {
|
|
16425
16556
|
timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
16426
16557
|
combinedSignal = AbortSignal.any([signal, timeoutSignal]);
|
|
16427
|
-
|
|
16558
|
+
debugLogger8.debug(`calling ${modelId} for ${toConvert.length} image(s)`);
|
|
16428
16559
|
const { text } = await runSideQuery(config, {
|
|
16429
16560
|
contents: requestContents,
|
|
16430
16561
|
abortSignal: combinedSignal,
|
|
@@ -16443,7 +16574,7 @@ async function runVisionBridge(params) {
|
|
|
16443
16574
|
});
|
|
16444
16575
|
const description = stripThinkTags(text ?? "");
|
|
16445
16576
|
if (description.length === 0) {
|
|
16446
|
-
|
|
16577
|
+
debugLogger8.warn(`${modelId} returned an empty description`);
|
|
16447
16578
|
return failure(
|
|
16448
16579
|
"the vision model returned no description",
|
|
16449
16580
|
parts,
|
|
@@ -16451,7 +16582,7 @@ async function runVisionBridge(params) {
|
|
|
16451
16582
|
{ modelId, ...egress }
|
|
16452
16583
|
);
|
|
16453
16584
|
}
|
|
16454
|
-
|
|
16585
|
+
debugLogger8.debug(
|
|
16455
16586
|
`vision bridge transcription via ${modelId} (${description.length} chars)`
|
|
16456
16587
|
);
|
|
16457
16588
|
return {
|
|
@@ -16477,7 +16608,7 @@ async function runVisionBridge(params) {
|
|
|
16477
16608
|
};
|
|
16478
16609
|
} catch (error) {
|
|
16479
16610
|
if (signal.aborted) {
|
|
16480
|
-
|
|
16611
|
+
debugLogger8.debug(`conversion cancelled via ${modelId}`);
|
|
16481
16612
|
return {
|
|
16482
16613
|
applied: false,
|
|
16483
16614
|
status: "skipped",
|
|
@@ -16489,13 +16620,13 @@ async function runVisionBridge(params) {
|
|
|
16489
16620
|
}
|
|
16490
16621
|
const timedOut = !!combinedSignal?.aborted && !!timeoutSignal?.aborted;
|
|
16491
16622
|
if (timedOut && attempt < VISION_BRIDGE_MAX_ATTEMPTS) {
|
|
16492
|
-
|
|
16623
|
+
debugLogger8.warn(
|
|
16493
16624
|
`conversion attempt ${attempt} via ${modelId} timed out after ${timeoutMs}ms; retrying`
|
|
16494
16625
|
);
|
|
16495
16626
|
continue;
|
|
16496
16627
|
}
|
|
16497
16628
|
const reason = timedOut ? `timed out after ${timeoutMs}ms (${VISION_BRIDGE_MAX_ATTEMPTS} attempts)` : error instanceof Error ? error.message : String(error);
|
|
16498
|
-
|
|
16629
|
+
debugLogger8.warn(`conversion failed via ${modelId}: ${reason}`);
|
|
16499
16630
|
return failure(reason, parts, omittedCount, {
|
|
16500
16631
|
modelId,
|
|
16501
16632
|
// The timeout message is safe to show; an arbitrary provider error is not
|
|
@@ -16510,7 +16641,7 @@ async function runVisionBridge(params) {
|
|
|
16510
16641
|
__name(runVisionBridge, "runVisionBridge");
|
|
16511
16642
|
|
|
16512
16643
|
// packages/core/src/tools/read-file.ts
|
|
16513
|
-
var
|
|
16644
|
+
var debugLogger9 = createDebugLogger("READ_FILE_CACHE");
|
|
16514
16645
|
var ReadFileToolInvocation = class extends BaseToolInvocation {
|
|
16515
16646
|
constructor(config, params) {
|
|
16516
16647
|
super(params);
|
|
@@ -16562,7 +16693,7 @@ var ReadFileToolInvocation = class extends BaseToolInvocation {
|
|
|
16562
16693
|
try {
|
|
16563
16694
|
stats = await fs7.stat(absPath);
|
|
16564
16695
|
} catch (err) {
|
|
16565
|
-
|
|
16696
|
+
debugLogger9.debug("stat-failed", {
|
|
16566
16697
|
path: absPath,
|
|
16567
16698
|
code: err.code
|
|
16568
16699
|
});
|
|
@@ -16572,10 +16703,10 @@ var ReadFileToolInvocation = class extends BaseToolInvocation {
|
|
|
16572
16703
|
if (status.state === "fresh" && status.entry.lastReadAt !== void 0 && status.entry.lastReadWasFull && status.entry.lastReadCacheable && // Only quote-back if that read is still in history (issue
|
|
16573
16704
|
// #4239: idle microcompaction flips this off when it blanks it).
|
|
16574
16705
|
status.entry.readResidentInHistory && (status.entry.lastWriteAt === void 0 || status.entry.lastReadAt > status.entry.lastWriteAt)) {
|
|
16575
|
-
|
|
16706
|
+
debugLogger9.debug("hit", { path: absPath });
|
|
16576
16707
|
return this.unchangedResult(absPath);
|
|
16577
16708
|
}
|
|
16578
|
-
|
|
16709
|
+
debugLogger9.debug("miss", { path: absPath, state: status.state });
|
|
16579
16710
|
}
|
|
16580
16711
|
const prepareForVisionBridge = shouldRunVisionBridge(this.config);
|
|
16581
16712
|
let result = await processSingleFileContent(
|
|
@@ -16660,7 +16791,7 @@ ${result.llmContent}`;
|
|
|
16660
16791
|
if (!candidate) return result;
|
|
16661
16792
|
const { imageParts } = splitImageParts(result.llmContent);
|
|
16662
16793
|
if (imageParts.length === 0 || !hasImageParts(imageParts)) {
|
|
16663
|
-
|
|
16794
|
+
debugLogger9.debug("pdf vision bridge candidate contained no images");
|
|
16664
16795
|
return this.restorePdfFallback(result, "Vision bridge could not run.");
|
|
16665
16796
|
}
|
|
16666
16797
|
const sourceContext = {
|
|
@@ -16681,7 +16812,7 @@ ${result.llmContent}`;
|
|
|
16681
16812
|
const notice = formatVisionBridgeNotice(bridgeResult);
|
|
16682
16813
|
if (bridgeResult.status === "ok" && bridgeResult.applied && bridgeResult.parts != null) {
|
|
16683
16814
|
if (bridgeResult.convertedCount !== imageParts.length || bridgeResult.omittedCount !== 0) {
|
|
16684
|
-
|
|
16815
|
+
debugLogger9.debug("pdf vision bridge omitted candidate pages");
|
|
16685
16816
|
return this.restorePdfFallback(
|
|
16686
16817
|
result,
|
|
16687
16818
|
`${notice} The transcription was discarded because the bridge did not transcribe every rendered PDF page.`
|
|
@@ -16691,7 +16822,7 @@ ${result.llmContent}`;
|
|
|
16691
16822
|
if (bridgedParts.some(
|
|
16692
16823
|
(part) => part.inlineData != null || part.fileData != null
|
|
16693
16824
|
)) {
|
|
16694
|
-
|
|
16825
|
+
debugLogger9.debug("pdf vision bridge returned media data");
|
|
16695
16826
|
return this.restorePdfFallback(
|
|
16696
16827
|
result,
|
|
16697
16828
|
`${notice} The transcription was discarded because the bridge returned an unsafe media payload.`
|
|
@@ -16725,7 +16856,7 @@ ${result.llmContent}`;
|
|
|
16725
16856
|
);
|
|
16726
16857
|
} catch (error) {
|
|
16727
16858
|
signal.throwIfAborted();
|
|
16728
|
-
|
|
16859
|
+
debugLogger9.debug(
|
|
16729
16860
|
`pdf vision bridge failed before replacement: ${String(error instanceof Error ? error.message : error)}`
|
|
16730
16861
|
);
|
|
16731
16862
|
return this.restorePdfFallback(
|