@qwen-code/qwen-code 0.21.2 → 0.21.3-nightly.20260803.e1e5b42ce
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/settings.md +53 -38
- package/bundled/qc-helper/docs/features/channels/github.md +16 -5
- package/bundled/qc-helper/docs/features/channels/gitlab.md +6 -0
- package/bundled/qc-helper/docs/features/code-review.md +92 -24
- package/bundled/qc-helper/docs/features/commands.md +46 -38
- package/bundled/qc-helper/docs/features/hooks.md +115 -18
- package/bundled/qc-helper/docs/features/memory.md +27 -0
- package/bundled/qc-helper/docs/features/skills.md +46 -1
- package/bundled/qc-helper/docs/features/sub-agents.md +42 -9
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +7 -7
- package/bundled/qc-helper/docs/qwen-serve.md +46 -25
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +62 -31
- package/bundled/qc-helper/docs/support/troubleshooting.md +6 -1
- package/bundled/review/DESIGN.md +167 -32
- package/bundled/review/SKILL.md +207 -38
- package/chunks/{MaxSizedBox-TQBQ247P.js → MaxSizedBox-FCEK5P5K.js} +41 -38
- package/chunks/{StandaloneSessionPicker-2HPTKCLX.js → StandaloneSessionPicker-AT77J3PM.js} +63 -59
- package/chunks/{acp-startup-profiler-2C4A5ZTJ.js → acp-startup-profiler-3RICG2YW.js} +2 -2
- package/chunks/{acpAgent-PS6EDGH3.js → acpAgent-PBMKZ5KH.js} +664 -560
- package/chunks/{agent-VDOUB35F.js → agent-55W5BPK3.js} +37 -34
- package/chunks/{agent-headless-EO53EFS2.js → agent-headless-I7VMHI22.js} +37 -34
- package/chunks/{anthropicContentGenerator-OFHSZJBF.js → anthropicContentGenerator-3CAHEZBM.js} +341 -29
- package/chunks/{artifact-tool-RDN2W7ND.js → artifact-tool-TBOYEKTY.js} +2 -2
- package/chunks/{askUserQuestion-OZERWH5R.js → askUserQuestion-23Y5WZFJ.js} +2 -2
- package/chunks/{bridge-W7AZSRZQ.js → bridge-XNAWEDAN.js} +43 -40
- package/chunks/{ca-6W3SK7OQ.js → ca-NYKNH222.js} +50 -5
- package/chunks/{channel-management-service-5S7YCWX5.js → channel-management-service-UHX56NBO.js} +7 -7
- package/chunks/{channel-settings-store-JFVRSNER.js → channel-settings-store-7P6RJSSF.js} +44 -41
- package/chunks/{channel-worker-group-OVWGYMZS.js → channel-worker-group-NDG4WOOZ.js} +8 -8
- package/chunks/{channel-worker-manager-H55GKOQA.js → channel-worker-manager-ZCW6UW34.js} +8 -8
- package/chunks/{channel-worker-supervisor-CABBXYHK.js → channel-worker-supervisor-ATGFTZRN.js} +4 -4
- package/chunks/{chunk-6MPDY6ZG.js → chunk-24ER7UV4.js} +1 -1
- package/chunks/{chunk-QDK4F2N5.js → chunk-2DNKEBXY.js} +1 -1
- package/chunks/{chunk-AUOULH6Q.js → chunk-2GF3IDEK.js} +1610 -2196
- package/chunks/{chunk-JYBU6YUE.js → chunk-2M5N3DHY.js} +1 -1
- package/chunks/{chunk-LHKCY7DY.js → chunk-2UISUFHQ.js} +3 -3
- package/chunks/{chunk-BBIQAX4V.js → chunk-2ZCYE3F2.js} +30 -18
- package/chunks/{chunk-GJ2GBPBD.js → chunk-332FMXSD.js} +5 -5
- package/chunks/{chunk-JXVC2PL3.js → chunk-33FNCQSY.js} +2 -2
- package/chunks/{chunk-P755N4CS.js → chunk-3GALLNII.js} +6 -6
- package/chunks/{chunk-YANIWTRZ.js → chunk-3ICGQSVO.js} +1 -1
- package/chunks/{chunk-NBD76HUW.js → chunk-3LGZEYOF.js} +2 -2
- package/chunks/{chunk-E2BHWIDT.js → chunk-3RXUYQJI.js} +6 -2
- package/chunks/{chunk-E5Z2AVNV.js → chunk-3SH53ANB.js} +0 -11
- package/chunks/{chunk-N4ACHWNH.js → chunk-432XCUHF.js} +1 -1
- package/chunks/{chunk-JLZ3RBQG.js → chunk-44EJDGMS.js} +144 -11
- package/chunks/{chunk-KR32NIAN.js → chunk-4JP34TZ6.js} +10 -10
- package/chunks/{chunk-L2E5GFAG.js → chunk-4LKVQFHM.js} +2 -2
- package/chunks/{chunk-YDLJGZHL.js → chunk-4NFY2S7N.js} +0 -33
- package/chunks/{chunk-NHFEMWAZ.js → chunk-5WY5QEM6.js} +1 -1
- package/chunks/{chunk-56Z7QEAQ.js → chunk-6BUPGI3J.js} +16 -16
- package/chunks/{chunk-H6I4PGRV.js → chunk-6DNHLK7F.js} +4 -4
- package/chunks/{chunk-XQK4XXTN.js → chunk-6O5DVH27.js} +1 -1
- package/chunks/{chunk-2RFKHEXL.js → chunk-6PLDPT2C.js} +1 -1
- package/chunks/{chunk-Q5WZTTWE.js → chunk-7UPJXZLD.js} +6 -8
- package/chunks/{chunk-CBBP4BMC.js → chunk-7UXI6P72.js} +82 -207
- package/chunks/{chunk-6CQWRWUC.js → chunk-7XLPYF6B.js} +3 -3
- package/chunks/{chunk-VEMNQMHA.js → chunk-7ZH55K26.js} +5 -13
- package/chunks/{chunk-JJPKFJBT.js → chunk-A2FOI762.js} +3 -3
- package/chunks/{chunk-LYI2PZDK.js → chunk-A5LNZGJB.js} +2 -2
- package/chunks/{chunk-3APUUXRF.js → chunk-A5YZ3FA2.js} +2 -1
- package/chunks/{chunk-SHN4KHDK.js → chunk-A6SX5TAH.js} +3 -3
- package/chunks/{chunk-QCXGC7QB.js → chunk-A7PONO5G.js} +3 -3
- package/chunks/{chunk-SZ3KHTDR.js → chunk-AKA24BGO.js} +1 -1
- package/chunks/{chunk-RSVPYAGK.js → chunk-B4HXOGF5.js} +5 -5
- package/chunks/{chunk-D6MDRSZ6.js → chunk-BBXSRVSN.js} +22 -11
- package/chunks/{chunk-Q3T5KA2V.js → chunk-BFHXDAR7.js} +1 -1
- package/chunks/{chunk-L55JWS76.js → chunk-BGXZBI5B.js} +1 -1
- package/chunks/{chunk-2KKCCLPT.js → chunk-C4IUDGPI.js} +1 -1
- package/chunks/{chunk-MM7TH7ZM.js → chunk-CFDR3GNL.js} +18 -3
- package/chunks/{chunk-3F2WDAV6.js → chunk-CFVFQWFB.js} +14 -14
- package/chunks/{chunk-E2FN6SM7.js → chunk-CIUUYB23.js} +5 -5
- package/chunks/{chunk-JCJ7LKNA.js → chunk-DIEFUBV6.js} +1644 -1570
- package/chunks/{chunk-KWHKHSIS.js → chunk-DTAPI453.js} +8 -8
- package/chunks/{chunk-WWCMSZII.js → chunk-DV2GAGR7.js} +71 -7
- package/chunks/{chunk-675H6PLP.js → chunk-DYA25Y7U.js} +1 -1
- package/chunks/{chunk-3I6DUGQD.js → chunk-E4WHKETF.js} +32 -4
- package/chunks/{chunk-QTERJVPZ.js → chunk-EKTCKZV5.js} +1 -0
- package/chunks/{chunk-HX6RLYUO.js → chunk-ENOHFX2M.js} +4 -4
- package/chunks/{chunk-VMX5RZQH.js → chunk-EZZJHMFK.js} +18 -9
- package/chunks/{chunk-KXDONCPU.js → chunk-FBDRTW3I.js} +4 -4
- package/chunks/{chunk-FCYYAB4S.js → chunk-FHPKHXHT.js} +3 -3
- package/chunks/{chunk-DQ2O5QOJ.js → chunk-FJZS2MXB.js} +1 -1
- package/chunks/{chunk-EQNUDTL6.js → chunk-FVLPZSKH.js} +3 -3
- package/chunks/{chunk-2LEOZTBT.js → chunk-FYMMZV5F.js} +111 -26
- package/chunks/{chunk-UV6KF7T3.js → chunk-GNZ7MX73.js} +3 -3
- package/chunks/chunk-GOFAQQZA.js +132 -0
- package/chunks/{chunk-YUFIEIWC.js → chunk-GTM6IHBB.js} +2 -2
- package/chunks/{chunk-W3UKBMSI.js → chunk-GU5B6IF3.js} +118 -9
- package/chunks/{chunk-PCK4B6LR.js → chunk-GU5XWZU2.js} +1 -1
- package/chunks/{chunk-DEEABGH2.js → chunk-H2EDCJIM.js} +5954 -1766
- package/chunks/{chunk-FJ5WUMUQ.js → chunk-H36SETQS.js} +1 -1
- package/chunks/{chunk-6FMJLI5M.js → chunk-HFVW54NL.js} +41 -6
- package/chunks/chunk-HGCQ5SE7.js +136 -0
- package/chunks/{chunk-OFZKFPYG.js → chunk-HR4CHEQS.js} +3 -3
- package/chunks/{chunk-CO2U743O.js → chunk-I3GX6LGS.js} +4 -4
- package/chunks/{chunk-5NNHICSA.js → chunk-I7JDGNG6.js} +3 -3
- package/chunks/{chunk-RDJOB6S3.js → chunk-IEBT6DXF.js} +1 -1
- package/chunks/{chunk-EU5TBFJI.js → chunk-IV7QPMC2.js} +2 -2
- package/chunks/{chunk-B4AJNNOL.js → chunk-J26HHFI5.js} +1 -1
- package/chunks/{chunk-CNTR4GR6.js → chunk-JELIWHXD.js} +1 -1
- package/chunks/{chunk-FNDXMN7I.js → chunk-JQFMW7BD.js} +936 -223
- package/chunks/{chunk-IGTHU3T4.js → chunk-KKN2IE7Q.js} +1 -1
- package/chunks/{chunk-TZTAV5RH.js → chunk-KVUBYJDM.js} +2 -2
- package/chunks/{chunk-DUNI4EBW.js → chunk-KZXSAQYV.js} +86 -52
- package/chunks/chunk-LBOVL47Y.js +29 -0
- package/chunks/{chunk-FS674JW4.js → chunk-LBWNSLJK.js} +3 -3
- package/chunks/{chunk-I5BT7ADR.js → chunk-LEZFUYPM.js} +4 -4
- package/chunks/chunk-LLMGP5IC.js +222 -0
- package/chunks/{chunk-44F4LBWZ.js → chunk-LVW7BHTW.js} +56 -18
- package/chunks/{chunk-YGE3IXJP.js → chunk-M744OFVE.js} +1 -1
- package/chunks/chunk-MISUEWB4.js +8749 -0
- package/chunks/{chunk-7SJN2IWT.js → chunk-MJ2SKNTY.js} +5 -5
- package/chunks/{chunk-JE2CEOBO.js → chunk-MNTXIO6T.js} +4 -4
- package/chunks/{chunk-TEGJSJDF.js → chunk-MOHAWIAW.js} +2 -2
- package/chunks/{chunk-54YCNSK5.js → chunk-MVMBE5EH.js} +4521 -10220
- package/chunks/{chunk-PZEXDV3H.js → chunk-NCY2CDDX.js} +71 -43
- package/chunks/{chunk-TTJZAIFP.js → chunk-NJELCSFL.js} +3 -3
- package/chunks/{chunk-A7Y5H4TX.js → chunk-NXDJEZCI.js} +7 -7
- package/chunks/{chunk-PQNHRFJC.js → chunk-NYX53SV4.js} +0 -2
- package/chunks/{chunk-QARJNL2V.js → chunk-O2ZYHG33.js} +5 -4
- package/chunks/{chunk-6PQPKTXP.js → chunk-OPMLL3B3.js} +1 -1
- package/chunks/{chunk-PVNQRENX.js → chunk-OUQGNGIU.js} +1 -1
- package/chunks/{chunk-V7RNNPGC.js → chunk-P5Y23G2L.js} +18 -1
- package/chunks/{chunk-GURGAJTX.js → chunk-PDDYAXL2.js} +4 -1
- package/chunks/chunk-PWCQRLM5.js +1170 -0
- package/chunks/{chunk-GL4JOZXU.js → chunk-Q43MIWDH.js} +4 -4
- package/chunks/{chunk-V4XNUDPE.js → chunk-QFIYH5KR.js} +28 -7
- package/chunks/chunk-QL4TN4HS.js +59 -0
- package/chunks/{chunk-E6CJ2SMM.js → chunk-QMBEW7EW.js} +2 -2
- package/chunks/{chunk-U4VTUMMK.js → chunk-QONSRAEV.js} +1 -1
- package/chunks/{chunk-LOY7RWQG.js → chunk-QYPT3QUD.js} +3 -3
- package/chunks/{chunk-RG64CDT2.js → chunk-RJAVNGJJ.js} +131 -48
- package/chunks/{chunk-Z3S5EMOW.js → chunk-RPYYTL7E.js} +60 -12
- package/chunks/{chunk-V25K5ID7.js → chunk-SWCEYR6T.js} +1 -1
- package/chunks/{chunk-77V3VIKL.js → chunk-SXGNNAMC.js} +9 -9
- package/chunks/{chunk-7KAXXBER.js → chunk-TNQ5BEEB.js} +3 -3
- package/chunks/{chunk-R2XWGR75.js → chunk-TYERNYH4.js} +2 -2
- package/chunks/{chunk-45IOTAUS.js → chunk-U25CMJYY.js} +1 -1
- package/chunks/{chunk-7ULQIS27.js → chunk-UEJESCS7.js} +1 -1
- package/chunks/{chunk-HC45LTEN.js → chunk-UH7Z7Y45.js} +1 -1
- package/chunks/{chunk-P5VC5USY.js → chunk-UIKCPMID.js} +1 -1
- package/chunks/{chunk-CPZAH673.js → chunk-UKZEXS6K.js} +2 -0
- package/chunks/{chunk-HIVKI6O6.js → chunk-UO7AWUZJ.js} +9 -7
- package/chunks/{chunk-XP4L6KS3.js → chunk-URN76TKR.js} +2 -2
- package/chunks/{chunk-XUGZYLDH.js → chunk-UWSXFI6E.js} +1 -1
- package/chunks/{chunk-AOHY3QJ3.js → chunk-VA5NLVPT.js} +3 -3
- package/chunks/{chunk-FANRZEAJ.js → chunk-VWOVHOTT.js} +1 -1
- package/chunks/{chunk-NTDH4IML.js → chunk-W2K4OEW4.js} +7 -7
- package/chunks/{chunk-L32VV3ZJ.js → chunk-WH7W24EN.js} +12 -12
- package/chunks/{chunk-QTHQ6Z5X.js → chunk-WK4TJUEA.js} +1 -1
- package/chunks/{chunk-ZPZ7ZJEE.js → chunk-WUC6ZFXO.js} +1 -1
- package/chunks/{chunk-TIRRPCFS.js → chunk-X6QNZOTC.js} +1 -1
- package/chunks/{chunk-IIUGIWWY.js → chunk-XC2VAFVZ.js} +1 -1
- package/chunks/{chunk-D4HTUMGX.js → chunk-XC656O42.js} +3 -3
- package/chunks/{chunk-ZMOJ7ISP.js → chunk-XXOVLDZQ.js} +1 -1
- package/chunks/{chunk-THVU3RNH.js → chunk-YAVY33G4.js} +1 -1
- package/chunks/{chunk-PJOHNFIY.js → chunk-YIAC2OXH.js} +5 -5
- package/chunks/{chunk-CU47KXB5.js → chunk-YTSN63PD.js} +6 -6
- package/chunks/{chunk-DSFHVTWD.js → chunk-YXEVDA66.js} +2 -2
- package/chunks/{chunk-MB32MS4U.js → chunk-ZLJQIGCH.js} +260 -175
- package/chunks/{chunk-6TAASXWL.js → chunk-ZX6RZZFB.js} +3 -3
- package/chunks/{computer-use-5QWCFNKD.js → computer-use-BG2EHNJE.js} +37 -34
- package/chunks/{config-utils-WADIDWGG.js → config-utils-E3ZQTHGM.js} +4 -4
- package/chunks/{contextCommand-4Z7T7TUM.js → contextCommand-JAPYNKFC.js} +41 -38
- package/chunks/{core-runtime-6N4EFC2Q.js → core-runtime-2VCZN5QF.js} +37 -34
- package/chunks/{create-sub-session-AEREHZBQ.js → create-sub-session-52OUA2VU.js} +52 -43
- package/chunks/{create-sub-session-62YZWVAY.js → create-sub-session-J32WC64U.js} +2 -2
- package/chunks/{cron-create-6E7GIQTG.js → cron-create-HMFSHIAR.js} +4 -4
- package/chunks/{cron-delete-JD26XY3W.js → cron-delete-ZJFHOX57.js} +4 -4
- package/chunks/{cron-list-CUWFB44G.js → cron-list-ZEX2NBMN.js} +4 -4
- package/chunks/{daemon-PCNCI5YU.js → daemon-CCIX4BMG.js} +47 -6
- package/chunks/{daemon-status-provider-DDF7C5M7.js → daemon-status-provider-F2YGDKHR.js} +48 -45
- package/chunks/{daemon-trust-policy-Q4KSOJTR.js → daemon-trust-policy-XCY7JETR.js} +43 -40
- package/chunks/{daemon-trust-policy-monitor-V6FTE3IY.js → daemon-trust-policy-monitor-FBHB5GMQ.js} +43 -40
- package/chunks/{de-SY6O76BF.js → de-VL76CPLV.js} +50 -5
- package/chunks/{deferred-core-runtime-GHJ5GQHK.js → deferred-core-runtime-BBLJ4JUM.js} +37 -34
- package/chunks/display-image-2WOG27DY.js +184 -0
- package/chunks/{dist-ZHXOBXDN.js → dist-3BMEUGTG.js} +1 -1
- package/chunks/{dist-OAOC5OV4.js → dist-7JGAAQSC.js} +2 -2
- package/chunks/{dist-SL2LUMML.js → dist-A7H2KKUC.js} +1 -1
- package/chunks/{dist-ULIG4M5H.js → dist-C5U4LJKW.js} +162 -15
- package/chunks/{dist-2PERFI23.js → dist-DPPHJAVL.js} +3 -3
- package/chunks/{dist-PVEAFLHY.js → dist-HVBMEYWK.js} +1 -1
- package/chunks/{dist-26BIMQT6.js → dist-IKGVITP3.js} +676 -37
- package/chunks/{dist-WGMNT3JQ.js → dist-SFQ34F4M.js} +24 -6
- package/chunks/{earlyInputCapture-TQXLLISD.js → earlyInputCapture-ALVSMKP7.js} +38 -35
- package/chunks/{edit-FJEUV6KZ.js → edit-POB3CIHQ.js} +37 -34
- package/chunks/{en-NBK3JKCE.js → en-IRJ2WN5T.js} +61 -6
- package/chunks/{enter-worktree-7GE3TZ4P.js → enter-worktree-Q2N7UZWC.js} +37 -34
- package/chunks/{enterPlanMode-KR5TMPCJ.js → enterPlanMode-QGAH2GMP.js} +37 -34
- package/chunks/{environment-SWL3CMB3.js → environment-FE5AX2U5.js} +40 -37
- package/chunks/{errors-XQE7BGZV.js → errors-SLMCFLSC.js} +40 -37
- package/chunks/{exit-worktree-CHKTYNCV.js → exit-worktree-7WO2LPLF.js} +37 -34
- package/chunks/{exitPlanMode-QYAG6LWX.js → exitPlanMode-3PINWUTY.js} +37 -34
- package/chunks/{fast-path-Z2K7W6DC.js → fast-path-SVFFEL6U.js} +17 -4
- package/chunks/{fr-4KG5V7UT.js → fr-GK3HQYVB.js} +50 -5
- package/chunks/{gemini-YU4XKEDG.js → gemini-QECJNKNJ.js} +151 -90
- package/chunks/{geminiContentGenerator-ZZX6NBO4.js → geminiContentGenerator-ZFAZKT6R.js} +6 -6
- package/chunks/{glob-VYF5CXSX.js → glob-GXUNQYNR.js} +37 -34
- package/chunks/{goal-tools-HGO6VXPB.js → goal-tools-SPQ5M6D3.js} +3 -3
- package/chunks/{grep-5DP5ZUTW.js → grep-LVU5KBCV.js} +37 -34
- package/chunks/{handleAutoUpdate-UVBJ56DL.js → handleAutoUpdate-MPDHQY72.js} +43 -40
- package/chunks/{i18n-UQNYHEUD.js → i18n-LEYRN6RV.js} +39 -36
- package/chunks/{image-gen-WHPIZNWF.js → image-gen-4T2D4PTP.js} +9 -9
- package/chunks/{initializer-GMIICF4W.js → initializer-PQV2THBS.js} +44 -41
- package/chunks/{installationInfo-4MGG4WVI.js → installationInfo-XC3HXLTX.js} +38 -35
- package/chunks/{ja-F3GSQXMF.js → ja-3FA46IKD.js} +50 -5
- package/chunks/{keychain-token-storage-IKO4G53C.js → keychain-token-storage-7BT4TQ2A.js} +2 -2
- package/chunks/{kittyProtocolDetector-MBRTDRBK.js → kittyProtocolDetector-BFLAKYXH.js} +1 -1
- package/chunks/{list-CPN2W334.js → list-AQBTPZRG.js} +46 -43
- package/chunks/{list-agents-PXJ7ZUFB.js → list-agents-TWEGRJWO.js} +2 -2
- package/chunks/{loadedSettingsAdapter-ZQAV5NDO.js → loadedSettingsAdapter-EZYPDX2J.js} +43 -40
- package/chunks/{loggingContentGenerator-5E7W4IEP.js → loggingContentGenerator-WD6YWU7Q.js} +52 -37
- package/chunks/{loop-wakeup-Y26NQZ5I.js → loop-wakeup-6LLEOQYV.js} +5 -5
- package/chunks/{ls-ONQTTMQR.js → ls-H5WX22VK.js} +4 -4
- package/chunks/{lsp-YGHHRGMD.js → lsp-G6FXYEIS.js} +2 -2
- package/chunks/{managed-npm-update-MKKAXYXA.js → managed-npm-update-BMM57CHD.js} +40 -37
- package/chunks/{mcp-V5NTJF6X.js → mcp-FMI6NCWA.js} +43 -40
- package/chunks/{monitor-CO3ASY6E.js → monitor-PZJOYAA2.js} +37 -34
- package/chunks/nonInteractiveCli-QPX6R4LL.js +152 -0
- package/chunks/{notebook-edit-Z7AEE6FM.js → notebook-edit-GZF2SKTQ.js} +37 -34
- package/chunks/{openaiContentGenerator-CA3MQOP3.js → openaiContentGenerator-ZPLCFAAG.js} +18 -18
- package/chunks/{pidfile-NL7MKDRU.js → pidfile-PCADVJQW.js} +38 -35
- package/chunks/{processUtils-PB5K2DYH.js → processUtils-FKUVQVEU.js} +2 -2
- package/chunks/{pt-EQ33KWEN.js → pt-3AOBKPIJ.js} +50 -5
- package/chunks/{qwenContentGenerator-JYFNDCOS.js → qwenContentGenerator-2Y4R6YLB.js} +42 -40
- package/chunks/{qwenOAuth2-W2ALKQDD.js → qwenOAuth2-UCEHY3I2.js} +8 -8
- package/chunks/{read-file-IEOR5H5W.js → read-file-DYHDFVAS.js} +10 -10
- package/chunks/{read-mcp-resource-U2IJN5HM.js → read-mcp-resource-DRZSI3HE.js} +2 -2
- package/chunks/{record-artifact-MGPJ7EG4.js → record-artifact-IPIRWMFY.js} +3 -3
- package/chunks/{resumeHistoryUtils-BNBTP5AS.js → resumeHistoryUtils-5JS6R3AJ.js} +45 -42
- package/chunks/{ripGrep-UMQODKEB.js → ripGrep-2QOR3ZQT.js} +37 -34
- package/chunks/{ru-7OZAUKGG.js → ru-VJRAMC4W.js} +50 -5
- package/chunks/{run-qwen-serve-RN2R6QQW.js → run-qwen-serve-MTVRAUBR.js} +271 -60
- package/chunks/{runtime-QFJ2MJF5.js → runtime-DQGE2DYR.js} +50 -45
- package/chunks/{scheduler-AMYUFOZI.js → scheduler-BXIZQ4OO.js} +37 -34
- package/chunks/{sdk-exporters-http-4BQANSJ6.js → sdk-exporters-http-IKNWQJNV.js} +2 -2
- package/chunks/{sdk-impl-Z4VXWVFX.js → sdk-impl-7CUUMQDB.js} +2 -2
- package/chunks/{send-message-PMP4ATVM.js → send-message-LHJLVWFD.js} +5 -4
- package/chunks/{serve-EIIYJVX3.js → serve-D4GYHFLL.js} +44 -40
- package/chunks/{server-EP2LLAPD.js → server-S22MLWTJ.js} +618 -387
- package/chunks/{session-GMPZBLOW.js → session-AHNM6YXP.js} +151 -87
- package/chunks/{settings-LN7RNKBS.js → settings-77MDDUSX.js} +42 -39
- package/chunks/{shell-EM2OWU5X.js → shell-DLD2VQTQ.js} +37 -34
- package/chunks/{skill-T5VPSK73.js → skill-3B2PAQE4.js} +27 -14
- package/chunks/{skill-settings-GMR3GMNY.js → skill-settings-STR5NF4B.js} +42 -39
- package/chunks/{spawnChannel-YPCU62DI.js → spawnChannel-TOWYOVDZ.js} +39 -36
- package/chunks/{standalone-update-JAKIM2NF.js → standalone-update-F6ZWABD7.js} +40 -37
- package/chunks/{startInteractiveUI-YETQWGYF.js → startInteractiveUI-QR7MHDX7.js} +1829 -1036
- package/chunks/{syntheticOutput-D7E6ZFKR.js → syntheticOutput-EYL7DWO7.js} +3 -3
- package/chunks/{task-create-NFCYD43L.js → task-create-4ALZMGP5.js} +10 -9
- package/chunks/{task-list-TAVMGEVD.js → task-list-6CVQPORX.js} +6 -6
- package/chunks/{task-stop-ZDF2UJRM.js → task-stop-Y5ZTFVRX.js} +2 -2
- package/chunks/{task-update-6L7LHGEX.js → task-update-IKCEEWJ6.js} +10 -9
- package/chunks/{team-create-LFJ6HGNY.js → team-create-LQVIAVRF.js} +37 -34
- package/chunks/{team-delete-DPGGRQBU.js → team-delete-CE7DC53R.js} +6 -6
- package/chunks/{team-plan-approval-C2KLSDGO.js → team-plan-approval-G5PUNI52.js} +37 -34
- package/chunks/terminal-image-renderer-33GSM55L.js +90 -0
- package/chunks/{theme-manager-JQ3ZGBP5.js → theme-manager-DBFM5QOG.js} +38 -35
- package/chunks/{todoWrite-2UO5G6G6.js → todoWrite-FTZWQRZH.js} +108 -36
- package/chunks/{tool-search-FAZBFRJZ.js → tool-search-RGG7BBC4.js} +13 -12
- package/chunks/{total-session-admission-5CALIVYO.js → total-session-admission-LY3RMXXI.js} +44 -41
- package/chunks/{trustedFolders-KOPSP44S.js → trustedFolders-3M4IQ6K6.js} +39 -36
- package/chunks/{update-relaunch-6QL2TICS.js → update-relaunch-G3CMSX3M.js} +5 -5
- package/chunks/{updateCheck-4Q6RIKFW.js → updateCheck-ZKFGBDTG.js} +42 -39
- package/chunks/{useAutoAcceptIndicator-Q5BMKZV3.js → useAutoAcceptIndicator-7SAFZK5H.js} +47 -44
- package/chunks/{validateNonInterActiveAuth-GKOC5F6Z.js → validateNonInterActiveAuth-F2K6UGE4.js} +88 -84
- package/chunks/{version-VSATY2LD.js → version-KM6MYV2D.js} +1 -1
- package/chunks/{web-fetch-JCLKL6NL.js → web-fetch-SM4LZHRS.js} +13 -13
- package/chunks/{web-search-DSQTFUBX.js → web-search-OGKZNDAC.js} +8 -8
- package/chunks/{workflow-M6QAVKVJ.js → workflow-HU365RFR.js} +419 -304
- package/chunks/{workspace-providers-status-YKLTLMJA.js → workspace-providers-status-QKKXQHL7.js} +46 -43
- package/chunks/{workspace-registration-store-5DMGKU64.js → workspace-registration-store-7J7KOXFD.js} +2 -2
- package/chunks/{workspace-registry-PTYUSYXX.js → workspace-registry-KC66O6DH.js} +44 -41
- package/chunks/{workspace-service-25ML3T47.js → workspace-service-TEV5Q2AA.js} +51 -48
- package/chunks/{workspace-skills-status-YKZWOYRX.js → workspace-skills-status-VRL55OMU.js} +45 -42
- package/chunks/{workspace-trust-reconciler-5FI2S3OS.js → workspace-trust-reconciler-COC5M7CY.js} +50 -47
- package/chunks/{write-file-AY7VLP5X.js → write-file-3SO2BMNO.js} +37 -34
- package/chunks/{zh-H3YDK5QW.js → zh-ARWDLDLR.js} +58 -6
- package/chunks/{zh-TW-JYCP7XUA.js → zh-TW-Y4RGI3P7.js} +58 -6
- package/chunks/{zoom-image-S4LJZMD5.js → zoom-image-O3RWTVKV.js} +10 -10
- package/cli.js +32 -48
- package/locales/ca.js +68 -4
- package/locales/de.js +70 -4
- package/locales/en.js +84 -6
- package/locales/fr.js +72 -4
- package/locales/ja.js +69 -4
- package/locales/pt.js +68 -4
- package/locales/ru.js +71 -4
- package/locales/zh-TW.js +74 -6
- package/locales/zh.js +74 -6
- package/package.json +3 -3
- package/web-shell/assets/{arc-xjArKHU2.js → arc-KuwiZ67W.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BgrQDNYG.js → architectureDiagram-3BPJPVTR-Cppop6HB.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CXxWC-1_.js → blockDiagram-GPEHLZMM-DQ6HT72s.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Dx1tLm3v.js → c4Diagram-AAUBKEIU-B8TX_Mh-.js} +1 -1
- package/web-shell/assets/channel-BZd6Ile0.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CBxjogVR.js → chunk-2J33WTMH-B2WBUTp8.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-izb-rY5W.js → chunk-4BX2VUAB-DXUsWC6O.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-NzLyvSb8.js → chunk-55IACEB6-DtB-6cyk.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DVyKb0dl.js → chunk-727SXJPM-B-PhPyC3.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BtqL7NzB.js → chunk-AQP2D5EJ-DNaTFMSC.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-iNpdKIO0.js → chunk-FMBD7UC4-DZ345tFf.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-DI7cbFmX.js → chunk-ND2GUHAM-BR_EpgzJ.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-3Y_-xFYs.js → chunk-QZHKN3VN-BTU-0gDT.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-B7c-TqtK.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B7c-TqtK.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A--raRatZn.js → cose-bilkent-S5V4N54A-BmsKBCNt.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-B8SU70mO.js → dagre-BM42HDAG-Ba8YWdDC.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-ewgoakXo.js → diagram-2AECGRRQ-CCt2SnI6.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-Bm_JLTnS.js → diagram-5GNKFQAL-BVTLXEU7.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-DEIUjUy9.js → diagram-KO2AKTUF-DpDAVCYV.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-C2Wmrpj-.js → diagram-LMA3HP47-8ljXg-TB.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CtYe6bFx.js → diagram-OG6HWLK6-JAXfQSmd.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DfpHcWLV.js → erDiagram-TEJ5UH35-CUeakG6k.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-CAiUhio5.js → flowDiagram-I6XJVG4X-Cd4Wrdwv.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CYc7ezr4.js → ganttDiagram-6RSMTGT7-C0nMFvH_.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-70lbkcRS.js → gitGraphDiagram-PVQCEYII-uKk88n_L.js} +1 -1
- package/web-shell/assets/index-BXGtjHs5.js +1756 -0
- package/web-shell/assets/{index-Ww86nT9f.js → index-C1UWBJSX.js} +1 -1
- package/web-shell/assets/index-WxSvj2tI.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-C7e8DWPa.js → infoDiagram-5YYISTIA-GfPN17hR.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BYLr2op-.js → ishikawaDiagram-YF4QCWOH-CDbWTcGa.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-hEibAHKX.js → journeyDiagram-JHISSGLW-J8TvvVFz.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-F2rt8Uhp.js → kanban-definition-UN3LZRKU-Ds_ndLrs.js} +1 -1
- package/web-shell/assets/{linear-DPhyNezd.js → linear-DuL9O4i3.js} +1 -1
- package/web-shell/assets/{mermaid.core-ZUtnug0n.js → mermaid.core-DtK4PsQB.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DDWcMoi8.js → mindmap-definition-RKZ34NQL-DD0r7MS3.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CTRKzw1_.js → pieDiagram-4H26LBE5-CxGPZ8Q-.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CAEwYG_z.js → quadrantDiagram-W4KKPZXB-Ds7Buxed.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CRjnH9D9.js → requirementDiagram-4Y6WPE33-DIx28ph5.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-LPQT_sOd.js → sankeyDiagram-5OEKKPKP-AxdAYcVX.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js → sequenceDiagram-3UESZ5HK-CojoXAZ5.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CIUdqOXu.js → stateDiagram-AJRCARHV-Dy1WN3mi.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BaTNMz02.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-BcilneZF.js → timeline-definition-PNZ67QCA-DeWe_43M.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BljwiiH1.js → vennDiagram-CIIHVFJN-BN8PVlFq.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-DeKjkYjq.js → wardley-L42UT6IY-CbjV_1hf.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-L3U1H7KG.js → wardleyDiagram-YWT4CUSO-D2mw84_p.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-IJnWsgMT.js → xychartDiagram-2RQKCTM6-er9CTQXi.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-4KP2F2TE.js +0 -82
- package/chunks/chunk-HGT6JR3U.js +0 -177
- package/chunks/nonInteractiveCli-ZJYEOO7U.js +0 -148
- package/web-shell/assets/channel-B1cyk94G.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +0 -1
- package/web-shell/assets/index-C1k3PDuU.css +0 -5
- package/web-shell/assets/index-DZLIXILO.js +0 -1750
- package/web-shell/assets/insert-DmRbh9Rv.svg +0 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BmqqQZ6w.js +0 -1
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
import {
|
|
4
4
|
getGitVersion,
|
|
5
5
|
getNpmVersion
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7UPJXZLD.js";
|
|
7
7
|
import {
|
|
8
8
|
buildEnvStatusFromEnv,
|
|
9
9
|
snapshotProcessEnv
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7ZH55K26.js";
|
|
11
11
|
import {
|
|
12
12
|
mapDomainErrorToErrorKind
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PDDYAXL2.js";
|
|
14
14
|
import {
|
|
15
15
|
canUseRipgrep
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-MVMBE5EH.js";
|
|
17
17
|
import {
|
|
18
18
|
init_esbuild_shims
|
|
19
19
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
import {
|
|
4
4
|
HEADLESS_YOLO_NO_SANDBOX_WARNING
|
|
5
5
|
} from "./chunk-6H67XLET.js";
|
|
6
|
+
import {
|
|
7
|
+
isValidMemoryBudgetMb,
|
|
8
|
+
memoryBudgetRangeError
|
|
9
|
+
} from "./chunk-HGCQ5SE7.js";
|
|
6
10
|
import {
|
|
7
11
|
DEFAULT_RING_SIZE
|
|
8
12
|
} from "./chunk-GLWP3FDB.js";
|
|
@@ -16,13 +20,10 @@ import {
|
|
|
16
20
|
} from "./chunk-ALMR3E6Q.js";
|
|
17
21
|
import {
|
|
18
22
|
loadSettings
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import {
|
|
21
|
-
writeStderrLine
|
|
22
|
-
} from "./chunk-OWAK7LMW.js";
|
|
23
|
+
} from "./chunk-GU5B6IF3.js";
|
|
23
24
|
import {
|
|
24
25
|
MCP_BUDGET_WARN_FRACTION
|
|
25
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-MVMBE5EH.js";
|
|
26
27
|
import {
|
|
27
28
|
parsePositiveIntegerEnv
|
|
28
29
|
} from "./chunk-6PVPNMXU.js";
|
|
@@ -30,6 +31,12 @@ import {
|
|
|
30
31
|
openBrowserSecurely,
|
|
31
32
|
shouldLaunchBrowser
|
|
32
33
|
} from "./chunk-NAVJD2PQ.js";
|
|
34
|
+
import {
|
|
35
|
+
MEMORY_PROJECT_SCOPES
|
|
36
|
+
} from "./chunk-E4WHKETF.js";
|
|
37
|
+
import {
|
|
38
|
+
writeStderrLine
|
|
39
|
+
} from "./chunk-OWAK7LMW.js";
|
|
33
40
|
import {
|
|
34
41
|
init_esbuild_shims
|
|
35
42
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -93,7 +100,7 @@ var serveCommand = {
|
|
|
93
100
|
description: "Bearer token required on every request. Falls back to the QWEN_SERVER_TOKEN env var."
|
|
94
101
|
}).option("max-sessions", {
|
|
95
102
|
type: "number",
|
|
96
|
-
default:
|
|
103
|
+
default: 32,
|
|
97
104
|
description: "Cap on concurrent live sessions. New spawn requests beyond this return 503; attach to existing sessions still works. Set to 0 to disable."
|
|
98
105
|
}).option("max-total-sessions", {
|
|
99
106
|
type: "number",
|
|
@@ -107,6 +114,10 @@ var serveCommand = {
|
|
|
107
114
|
array: true,
|
|
108
115
|
requiresArg: true,
|
|
109
116
|
description: "Absolute workspace path to register with this daemon. POST /session requests with a mismatched cwd return 400 workspace_mismatch. Defaults to process.cwd() when omitted. Repeat to register isolated workspace runtimes; the first is primary."
|
|
117
|
+
}).option("memory-project-scope", {
|
|
118
|
+
type: "string",
|
|
119
|
+
choices: MEMORY_PROJECT_SCOPES,
|
|
120
|
+
description: 'Choose how project memory is partitioned. "git-root" preserves the legacy shared scope; "workspace" keeps each daemon workspace isolated. Overrides QWEN_CODE_MEMORY_PROJECT_SCOPE when provided.'
|
|
110
121
|
}).option("max-connections", {
|
|
111
122
|
type: "number",
|
|
112
123
|
default: 256,
|
|
@@ -165,6 +176,9 @@ var serveCommand = {
|
|
|
165
176
|
type: "boolean",
|
|
166
177
|
default: true,
|
|
167
178
|
description: "HTTP bridge mode: attempt to preheat one primary `qwen --acp` child; trusted secondaries start one on demand. Stage 2 native in-process mode is not yet implemented; this flag will become opt-in then."
|
|
179
|
+
}).option("memory-budget-mb", {
|
|
180
|
+
type: "number",
|
|
181
|
+
description: "Total memory budget in MB for the daemon process tree. When unset, derived as 50% of cgroup-constrained or host memory, and capped at the resolved available memory either way. Currently observed and reported under `limits.memory` in daemon status; it does not yet size any child process. Must be an integer in [1024, 1048576]."
|
|
168
182
|
}).option("mcp-client-budget", {
|
|
169
183
|
type: "number",
|
|
170
184
|
description: "Cap on live MCP clients spawned inside the ACP child for the bound workspace. Positive integer. Combine with --mcp-budget-mode to control behavior at the cap. When unset, mode defaults to off (no accounting-driven enforcement, but GET /workspace/mcp still reports `clientCount`). Distinct from claude-code MCP_SERVER_CONNECTION_BATCH_SIZE which gates startup concurrency, not the total client count."
|
|
@@ -253,6 +267,11 @@ var serveCommand = {
|
|
|
253
267
|
process.exit(1);
|
|
254
268
|
}
|
|
255
269
|
const resolvedMcpMode = mcpBudgetMode ?? (mcpClientBudget !== void 0 ? "warn" : "off");
|
|
270
|
+
const memoryBudgetMb = argv["memory-budget-mb"];
|
|
271
|
+
if (memoryBudgetMb !== void 0 && !isValidMemoryBudgetMb(memoryBudgetMb)) {
|
|
272
|
+
writeStderrLine(memoryBudgetRangeError());
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
256
275
|
const maxPendingPromptsPerSession = argv["max-pending-prompts-per-session"];
|
|
257
276
|
if (maxPendingPromptsPerSession !== Number.POSITIVE_INFINITY && (!Number.isFinite(maxPendingPromptsPerSession) || !Number.isInteger(maxPendingPromptsPerSession) || maxPendingPromptsPerSession < 0)) {
|
|
258
277
|
writeStderrLine(
|
|
@@ -312,7 +331,7 @@ var serveCommand = {
|
|
|
312
331
|
process.exit(1);
|
|
313
332
|
}
|
|
314
333
|
}
|
|
315
|
-
const { runQwenServe } = await import("./run-qwen-serve-
|
|
334
|
+
const { runQwenServe } = await import("./run-qwen-serve-MTVRAUBR.js");
|
|
316
335
|
try {
|
|
317
336
|
const handle = await runQwenServe({
|
|
318
337
|
port: argv.port,
|
|
@@ -328,6 +347,7 @@ var serveCommand = {
|
|
|
328
347
|
maxJournalEvents: argv["max-journal-events"],
|
|
329
348
|
maxJournalBytes: argv["max-journal-bytes"],
|
|
330
349
|
workspace: argv.workspace,
|
|
350
|
+
...argv["memory-project-scope"] !== void 0 ? { memoryProjectScope: argv["memory-project-scope"] } : {},
|
|
331
351
|
requireAuth: argv["require-auth"],
|
|
332
352
|
enableSessionShell: argv["enable-session-shell"],
|
|
333
353
|
serveWebShell: argv.web,
|
|
@@ -336,6 +356,7 @@ var serveCommand = {
|
|
|
336
356
|
allowPrivateAuthBaseUrl: argv["allow-private-auth-base-url"],
|
|
337
357
|
mcpClientBudget,
|
|
338
358
|
mcpBudgetMode: resolvedMcpMode,
|
|
359
|
+
...memoryBudgetMb !== void 0 ? { memoryBudgetMb } : {},
|
|
339
360
|
...argv["allow-origin"] && argv["allow-origin"].length > 0 ? { allowOrigins: argv["allow-origin"] } : {},
|
|
340
361
|
...argv["prompt-deadline-ms"] !== void 0 ? { promptDeadlineMs: argv["prompt-deadline-ms"] } : {},
|
|
341
362
|
...argv["writer-idle-timeout-ms"] !== void 0 ? { writerIdleTimeoutMs: argv["writer-idle-timeout-ms"] } : {},
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
writeStderrLine
|
|
5
|
+
} from "./chunk-OWAK7LMW.js";
|
|
6
|
+
import {
|
|
7
|
+
init_esbuild_shims
|
|
8
|
+
} from "./chunk-5O2XNYP6.js";
|
|
9
|
+
import {
|
|
10
|
+
__name
|
|
11
|
+
} from "./chunk-J2S4EL5Y.js";
|
|
12
|
+
|
|
13
|
+
// packages/cli/src/utils/uncaught-exception-handler.ts
|
|
14
|
+
init_esbuild_shims();
|
|
15
|
+
function getErrnoCode(error) {
|
|
16
|
+
if (!error || typeof error !== "object") {
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
19
|
+
const code = error.code;
|
|
20
|
+
return typeof code === "string" ? code : void 0;
|
|
21
|
+
}
|
|
22
|
+
__name(getErrnoCode, "getErrnoCode");
|
|
23
|
+
function isExpectedPtyRaceError(error) {
|
|
24
|
+
if (!(error instanceof Error)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const message = error.message;
|
|
28
|
+
const code = getErrnoCode(error);
|
|
29
|
+
if (code === "EIO" && message.includes("read") || message.includes("read EIO")) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (code === "EAGAIN" && message.includes("read") || message.includes("read EAGAIN")) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return message.includes("ioctl(2) failed, EBADF") || message.includes("Cannot resize a pty that has already exited");
|
|
36
|
+
}
|
|
37
|
+
__name(isExpectedPtyRaceError, "isExpectedPtyRaceError");
|
|
38
|
+
function handleUncaughtException(error) {
|
|
39
|
+
if (isExpectedPtyRaceError(error)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (error instanceof Error) {
|
|
43
|
+
writeStderrLine(error.stack ?? error.message);
|
|
44
|
+
} else {
|
|
45
|
+
writeStderrLine(String(error));
|
|
46
|
+
}
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
__name(handleUncaughtException, "handleUncaughtException");
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
isExpectedPtyRaceError,
|
|
53
|
+
handleUncaughtException
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* @license
|
|
57
|
+
* Copyright 2026 Qwen Team
|
|
58
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
59
|
+
*/
|
|
@@ -11,12 +11,12 @@ import {
|
|
|
11
11
|
isQuotaExhaustedError,
|
|
12
12
|
isQwenQuotaExceededError,
|
|
13
13
|
isRateLimitError
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-6O5DVH27.js";
|
|
15
15
|
import {
|
|
16
16
|
createDebugLogger,
|
|
17
17
|
getErrorStatus,
|
|
18
18
|
isAbortError
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-3RXUYQJI.js";
|
|
20
20
|
import {
|
|
21
21
|
init_esbuild_shims
|
|
22
22
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -67,7 +67,7 @@ function isChannelWebhookTaskResultMessage(value) {
|
|
|
67
67
|
}
|
|
68
68
|
__name(isChannelWebhookTaskResultMessage, "isChannelWebhookTaskResultMessage");
|
|
69
69
|
|
|
70
|
-
// packages/cli/src/
|
|
70
|
+
// packages/cli/src/runtime/channel-delivery-ipc.ts
|
|
71
71
|
init_esbuild_shims();
|
|
72
72
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
73
73
|
var ChannelDeliveryError = class extends Error {
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
delay
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QMBEW7EW.js";
|
|
6
6
|
import {
|
|
7
7
|
isTlsVerificationDisabled
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BFHXDAR7.js";
|
|
9
9
|
import {
|
|
10
10
|
getErrorMessage
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-3RXUYQJI.js";
|
|
12
12
|
import {
|
|
13
13
|
init_esbuild_shims
|
|
14
14
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
t
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CFVFQWFB.js";
|
|
6
6
|
import {
|
|
7
7
|
SessionReferenceService,
|
|
8
8
|
SessionService,
|
|
9
9
|
readManyFiles,
|
|
10
10
|
stripTerminalControlSequences
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-MVMBE5EH.js";
|
|
12
12
|
import {
|
|
13
13
|
emptyMcpResourceText,
|
|
14
14
|
formatMcpResourceContents,
|
|
@@ -16,14 +16,15 @@ import {
|
|
|
16
16
|
} from "./chunk-ZPJWUGCS.js";
|
|
17
17
|
import {
|
|
18
18
|
shouldRunVisionBridge
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KZXSAQYV.js";
|
|
20
20
|
import {
|
|
21
21
|
Storage,
|
|
22
22
|
getErrorMessage,
|
|
23
23
|
isNodeError,
|
|
24
24
|
isSubpath,
|
|
25
|
-
unescapePath
|
|
26
|
-
|
|
25
|
+
unescapePath,
|
|
26
|
+
unescapeShellSpecials
|
|
27
|
+
} from "./chunk-3RXUYQJI.js";
|
|
27
28
|
import {
|
|
28
29
|
init_esbuild_shims
|
|
29
30
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -230,7 +231,8 @@ function isSessionId(value) {
|
|
|
230
231
|
__name(isSessionId, "isSessionId");
|
|
231
232
|
function parseSessionRef(pathName) {
|
|
232
233
|
if (!pathName.startsWith(SESSION_MENTION_PREFIX)) return null;
|
|
233
|
-
const
|
|
234
|
+
const rawRemainder = pathName.slice(SESSION_MENTION_PREFIX.length).trim();
|
|
235
|
+
const remainder = process.platform === "win32" ? unescapeShellSpecials(rawRemainder) : rawRemainder;
|
|
234
236
|
if (remainder.length === 0) return null;
|
|
235
237
|
return isSessionId(remainder) ? { id: remainder } : { title: remainder };
|
|
236
238
|
}
|
|
@@ -368,14 +370,29 @@ async function resolveAtCommandQuery({
|
|
|
368
370
|
}
|
|
369
371
|
const fileDiscovery = config.getFileService();
|
|
370
372
|
const respectFileIgnore = config.getFileFilteringOptions();
|
|
373
|
+
const configuredProjectTempDir = Storage.getGlobalTempDir();
|
|
374
|
+
const projectTempDir = await fs2.realpath(configuredProjectTempDir).catch(() => path.resolve(configuredProjectTempDir));
|
|
371
375
|
const pathSpecsToRead = [];
|
|
372
376
|
const atPathToResolvedSpecMap = /* @__PURE__ */ new Map();
|
|
373
377
|
const contentLabelsForDisplay = [];
|
|
378
|
+
const displayPaths = /* @__PURE__ */ new Map();
|
|
379
|
+
const displayPathsByCanonicalPath = /* @__PURE__ */ new Map();
|
|
374
380
|
const ignoredByReason = {
|
|
375
381
|
git: [],
|
|
376
382
|
qwen: [],
|
|
377
383
|
both: []
|
|
378
384
|
};
|
|
385
|
+
const getIgnoreReason = /* @__PURE__ */ __name((candidate) => {
|
|
386
|
+
const gitIgnored = respectFileIgnore.respectGitIgnore && fileDiscovery.shouldIgnoreFile(candidate, {
|
|
387
|
+
respectGitIgnore: true,
|
|
388
|
+
respectQwenIgnore: false
|
|
389
|
+
});
|
|
390
|
+
const qwenIgnored = respectFileIgnore.respectQwenIgnore && fileDiscovery.shouldIgnoreFile(candidate, {
|
|
391
|
+
respectGitIgnore: false,
|
|
392
|
+
respectQwenIgnore: true
|
|
393
|
+
});
|
|
394
|
+
return gitIgnored && qwenIgnored ? "both" : gitIgnored ? "git" : qwenIgnored ? "qwen" : void 0;
|
|
395
|
+
}, "getIgnoreReason");
|
|
379
396
|
const mcpServerNames = new Set(Object.keys(config.getMcpServers() || {}));
|
|
380
397
|
const mcpResourceRefs = [];
|
|
381
398
|
const mcpServerMentions = [];
|
|
@@ -413,7 +430,10 @@ async function resolveAtCommandQuery({
|
|
|
413
430
|
)) {
|
|
414
431
|
sessionMentions.push({ originalAtPath, ref: sessionRef });
|
|
415
432
|
}
|
|
416
|
-
atPathToResolvedSpecMap.set(
|
|
433
|
+
atPathToResolvedSpecMap.set(
|
|
434
|
+
originalAtPath,
|
|
435
|
+
buildSessionRef(sessionRef.id ?? sessionRef.title)
|
|
436
|
+
);
|
|
417
437
|
continue;
|
|
418
438
|
}
|
|
419
439
|
const resourceRef = parseMcpResourceRef(pathName, mcpServerNames);
|
|
@@ -447,24 +467,16 @@ async function resolveAtCommandQuery({
|
|
|
447
467
|
continue;
|
|
448
468
|
}
|
|
449
469
|
const workspaceContext = config.getWorkspaceContext();
|
|
450
|
-
const projectTempDir = Storage.getGlobalTempDir();
|
|
451
470
|
const absolutePathName = path.isAbsolute(pathName) ? pathName : path.resolve(workspaceContext.getDirectories()[0] || "", pathName);
|
|
452
|
-
if (!isSubpath(projectTempDir, absolutePathName) && !workspaceContext.isPathWithinWorkspace(pathName)) {
|
|
471
|
+
if (!isSubpath(configuredProjectTempDir, absolutePathName) && !isSubpath(projectTempDir, absolutePathName) && !workspaceContext.isPathWithinWorkspace(pathName)) {
|
|
453
472
|
onDebugMessage(
|
|
454
473
|
`Path ${pathName} is not in the workspace and will be skipped.`
|
|
455
474
|
);
|
|
456
475
|
continue;
|
|
457
476
|
}
|
|
458
|
-
const
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
});
|
|
462
|
-
const qwenIgnored = respectFileIgnore.respectQwenIgnore && fileDiscovery.shouldIgnoreFile(pathName, {
|
|
463
|
-
respectGitIgnore: false,
|
|
464
|
-
respectQwenIgnore: true
|
|
465
|
-
});
|
|
466
|
-
if (gitIgnored || qwenIgnored) {
|
|
467
|
-
const reason = gitIgnored && qwenIgnored ? "both" : gitIgnored ? "git" : "qwen";
|
|
477
|
+
const ignoredReason = getIgnoreReason(pathName);
|
|
478
|
+
if (ignoredReason) {
|
|
479
|
+
const reason = ignoredReason;
|
|
468
480
|
ignoredByReason[reason].push(pathName);
|
|
469
481
|
const reasonText = reason === "both" ? "ignored by both git and qwen" : reason === "git" ? "git-ignored" : "qwen-ignored";
|
|
470
482
|
onDebugMessage(`Path ${pathName} is ${reasonText} and will be skipped.`);
|
|
@@ -472,17 +484,39 @@ async function resolveAtCommandQuery({
|
|
|
472
484
|
}
|
|
473
485
|
let resolvedSuccessfully = false;
|
|
474
486
|
let sawNotFound = false;
|
|
487
|
+
let deferredIgnoreReason;
|
|
475
488
|
for (const dir of config.getWorkspaceContext().getDirectories()) {
|
|
476
|
-
let currentPathSpec = pathName;
|
|
477
489
|
try {
|
|
478
490
|
const absolutePath = path.resolve(dir, pathName);
|
|
479
|
-
const
|
|
491
|
+
const canonicalPath = await fs2.realpath(absolutePath);
|
|
492
|
+
const stats = await fs2.stat(canonicalPath);
|
|
493
|
+
if (!isSubpath(configuredProjectTempDir, canonicalPath) && !isSubpath(projectTempDir, canonicalPath) && !workspaceContext.isPathWithinWorkspace(canonicalPath)) {
|
|
494
|
+
onDebugMessage(
|
|
495
|
+
`Path ${pathName} is not in the workspace and will be skipped.`
|
|
496
|
+
);
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
const canonicalIgnoreReason = getIgnoreReason(canonicalPath);
|
|
500
|
+
if (canonicalIgnoreReason) {
|
|
501
|
+
deferredIgnoreReason = canonicalIgnoreReason;
|
|
502
|
+
const reasonText = canonicalIgnoreReason === "both" ? "ignored by both git and qwen" : canonicalIgnoreReason === "git" ? "git-ignored" : "qwen-ignored";
|
|
503
|
+
onDebugMessage(
|
|
504
|
+
`Path ${pathName} is ${reasonText} and will be skipped.`
|
|
505
|
+
);
|
|
506
|
+
continue;
|
|
507
|
+
}
|
|
480
508
|
if (stats.isDirectory()) {
|
|
481
|
-
currentPathSpec = pathName;
|
|
482
509
|
onDebugMessage(`Path ${pathName} resolved to directory.`);
|
|
483
510
|
} else {
|
|
484
511
|
onDebugMessage(`Path ${pathName} resolved to file: ${absolutePath}`);
|
|
485
512
|
}
|
|
513
|
+
pathSpecsToRead.push(canonicalPath);
|
|
514
|
+
atPathToResolvedSpecMap.set(originalAtPath, pathName);
|
|
515
|
+
contentLabelsForDisplay.push(pathName);
|
|
516
|
+
displayPaths.set(canonicalPath, pathName);
|
|
517
|
+
const canonicalDisplays = displayPathsByCanonicalPath.get(canonicalPath) ?? /* @__PURE__ */ new Set();
|
|
518
|
+
canonicalDisplays.add(pathName);
|
|
519
|
+
displayPathsByCanonicalPath.set(canonicalPath, canonicalDisplays);
|
|
486
520
|
resolvedSuccessfully = true;
|
|
487
521
|
} catch (error) {
|
|
488
522
|
if (isNodeError(error) && error.code === "ENOENT") {
|
|
@@ -495,9 +529,6 @@ async function resolveAtCommandQuery({
|
|
|
495
529
|
}
|
|
496
530
|
}
|
|
497
531
|
if (resolvedSuccessfully) {
|
|
498
|
-
pathSpecsToRead.push(currentPathSpec);
|
|
499
|
-
atPathToResolvedSpecMap.set(originalAtPath, currentPathSpec);
|
|
500
|
-
contentLabelsForDisplay.push(pathName);
|
|
501
532
|
break;
|
|
502
533
|
}
|
|
503
534
|
}
|
|
@@ -506,31 +537,37 @@ async function resolveAtCommandQuery({
|
|
|
506
537
|
`Path ${pathName} not found. Path ${pathName} will be skipped.`
|
|
507
538
|
);
|
|
508
539
|
}
|
|
540
|
+
if (!resolvedSuccessfully && deferredIgnoreReason) {
|
|
541
|
+
ignoredByReason[deferredIgnoreReason].push(pathName);
|
|
542
|
+
}
|
|
509
543
|
}
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
const resolvedSpec = atPathToResolvedSpecMap.get(part.content);
|
|
517
|
-
if (i > 0 && initialQueryText.length > 0 && !initialQueryText.endsWith(" ")) {
|
|
518
|
-
const prevPart = commandParts[i - 1];
|
|
519
|
-
if (prevPart.type === "text" || prevPart.type === "atPath" && atPathToResolvedSpecMap.has(prevPart.content)) {
|
|
520
|
-
initialQueryText += " ";
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
if (resolvedSpec) {
|
|
524
|
-
initialQueryText += `@${resolvedSpec}`;
|
|
544
|
+
const buildInitialQueryText = /* @__PURE__ */ __name(() => {
|
|
545
|
+
let text = "";
|
|
546
|
+
for (let i = 0; i < commandParts.length; i++) {
|
|
547
|
+
const part = commandParts[i];
|
|
548
|
+
if (part.type === "text") {
|
|
549
|
+
text += part.content;
|
|
525
550
|
} else {
|
|
526
|
-
|
|
527
|
-
|
|
551
|
+
const resolvedSpec = atPathToResolvedSpecMap.get(part.content);
|
|
552
|
+
if (i > 0 && text.length > 0 && !text.endsWith(" ")) {
|
|
553
|
+
const prevPart = commandParts[i - 1];
|
|
554
|
+
if (prevPart.type === "text" || prevPart.type === "atPath") {
|
|
555
|
+
text += " ";
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (resolvedSpec) {
|
|
559
|
+
text += `@${resolvedSpec}`;
|
|
560
|
+
} else {
|
|
561
|
+
if (i > 0 && text.length > 0 && !text.endsWith(" ") && !part.content.startsWith(" ")) {
|
|
562
|
+
text += " ";
|
|
563
|
+
}
|
|
564
|
+
text += part.content;
|
|
528
565
|
}
|
|
529
|
-
initialQueryText += part.content;
|
|
530
566
|
}
|
|
531
567
|
}
|
|
532
|
-
|
|
533
|
-
|
|
568
|
+
return text.trim();
|
|
569
|
+
}, "buildInitialQueryText");
|
|
570
|
+
let initialQueryText = buildInitialQueryText();
|
|
534
571
|
const totalIgnored = ignoredByReason["git"].length + ignoredByReason["qwen"].length + ignoredByReason["both"].length;
|
|
535
572
|
if (totalIgnored > 0) {
|
|
536
573
|
const messages = [];
|
|
@@ -787,12 +824,58 @@ ${messages.join("\n")}`;
|
|
|
787
824
|
);
|
|
788
825
|
const fileParts = [];
|
|
789
826
|
let fileDisplays = [];
|
|
790
|
-
|
|
827
|
+
const revalidatedPathSpecs = [];
|
|
828
|
+
const revalidatedDisplayPaths = /* @__PURE__ */ new Map();
|
|
829
|
+
const validatedPathIdentities = /* @__PURE__ */ new Map();
|
|
830
|
+
const pruneSkippedPath = /* @__PURE__ */ __name((approvedPath) => {
|
|
831
|
+
const displayPath = displayPaths.get(approvedPath);
|
|
832
|
+
const displayLabels = displayPathsByCanonicalPath.get(approvedPath) ?? new Set(displayPath ? [displayPath] : []);
|
|
833
|
+
for (const [originalAtPath, resolvedSpec] of atPathToResolvedSpecMap) {
|
|
834
|
+
if (resolvedSpec === approvedPath || displayLabels.has(resolvedSpec)) {
|
|
835
|
+
atPathToResolvedSpecMap.delete(originalAtPath);
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
for (let index = contentLabelsForDisplay.length - 1; index >= 0; index--) {
|
|
839
|
+
const label = contentLabelsForDisplay[index];
|
|
840
|
+
if (label === approvedPath || displayLabels.has(label)) {
|
|
841
|
+
contentLabelsForDisplay.splice(index, 1);
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
}, "pruneSkippedPath");
|
|
845
|
+
for (const approvedPath of pathSpecsToRead) {
|
|
846
|
+
try {
|
|
847
|
+
const currentPath = await fs2.realpath(approvedPath);
|
|
848
|
+
const stats = await fs2.stat(currentPath);
|
|
849
|
+
if (currentPath === approvedPath && (stats.isFile() || stats.isDirectory()) && (isSubpath(configuredProjectTempDir, currentPath) || isSubpath(projectTempDir, currentPath) || config.getWorkspaceContext().isPathWithinWorkspace(currentPath)) && getIgnoreReason(currentPath) === void 0) {
|
|
850
|
+
revalidatedPathSpecs.push(currentPath);
|
|
851
|
+
const displayPath = displayPaths.get(approvedPath);
|
|
852
|
+
if (displayPath) revalidatedDisplayPaths.set(currentPath, displayPath);
|
|
853
|
+
validatedPathIdentities.set(currentPath, {
|
|
854
|
+
dev: stats.dev,
|
|
855
|
+
ino: stats.ino
|
|
856
|
+
});
|
|
857
|
+
} else {
|
|
858
|
+
pruneSkippedPath(approvedPath);
|
|
859
|
+
onDebugMessage(
|
|
860
|
+
`Path ${approvedPath} failed revalidation and will be skipped.`
|
|
861
|
+
);
|
|
862
|
+
}
|
|
863
|
+
} catch {
|
|
864
|
+
pruneSkippedPath(approvedPath);
|
|
865
|
+
onDebugMessage(
|
|
866
|
+
`Path ${approvedPath} changed before it could be read and will be skipped.`
|
|
867
|
+
);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
initialQueryText = buildInitialQueryText();
|
|
871
|
+
if (revalidatedPathSpecs.length > 0) {
|
|
791
872
|
try {
|
|
792
873
|
const result = await readManyFiles(config, {
|
|
793
|
-
paths:
|
|
874
|
+
paths: revalidatedPathSpecs,
|
|
794
875
|
signal,
|
|
795
|
-
preserveUnsupportedImageForBridge: shouldRunVisionBridge(config)
|
|
876
|
+
preserveUnsupportedImageForBridge: shouldRunVisionBridge(config),
|
|
877
|
+
validatedPathIdentities,
|
|
878
|
+
displayPaths: revalidatedDisplayPaths
|
|
796
879
|
});
|
|
797
880
|
const parts = Array.isArray(result.contentParts) ? result.contentParts : [result.contentParts];
|
|
798
881
|
fileDisplays = result.files.map((file, index) => ({
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
stringifyGenAiJson
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DNKEBXY.js";
|
|
6
6
|
import {
|
|
7
7
|
getMeter,
|
|
8
8
|
isTelemetrySdkInitialized,
|
|
9
9
|
truncateSpanError
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-O2ZYHG33.js";
|
|
11
11
|
import {
|
|
12
12
|
require_src
|
|
13
13
|
} from "./chunk-W4RQUHY3.js";
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
createDebugLogger,
|
|
23
23
|
formatTraceparent,
|
|
24
24
|
getActiveSpanTraceContext
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-3RXUYQJI.js";
|
|
26
26
|
import {
|
|
27
27
|
ROOT_CONTEXT,
|
|
28
28
|
SpanKind,
|
|
@@ -554,6 +554,8 @@ init_esbuild_shims();
|
|
|
554
554
|
import { monitorEventLoopDelay } from "node:perf_hooks";
|
|
555
555
|
var DEFAULT_RESOLUTION_MS = 20;
|
|
556
556
|
var DEFAULT_STALL_THRESHOLD_MS = 1e3;
|
|
557
|
+
var DEFAULT_EVENT_LOOP_SUSPEND_THRESHOLD_MS = 5 * 60 * 1e3;
|
|
558
|
+
var DEFAULT_SUSPEND_CPU_RATIO = 0.01;
|
|
557
559
|
var NS_PER_MS = 1e6;
|
|
558
560
|
function startEventLoopLagMonitor(options = {}) {
|
|
559
561
|
const resolutionMs = positiveFiniteOrDefault(
|
|
@@ -564,24 +566,54 @@ function startEventLoopLagMonitor(options = {}) {
|
|
|
564
566
|
options.stallThresholdMs,
|
|
565
567
|
DEFAULT_STALL_THRESHOLD_MS
|
|
566
568
|
);
|
|
569
|
+
const suspendThresholdMs = positiveFiniteOrDefault(
|
|
570
|
+
options.suspendThresholdMs,
|
|
571
|
+
DEFAULT_EVENT_LOOP_SUSPEND_THRESHOLD_MS
|
|
572
|
+
);
|
|
573
|
+
const suspendCpuRatio = fractionOrDefault(
|
|
574
|
+
options.suspendCpuRatio,
|
|
575
|
+
DEFAULT_SUSPEND_CPU_RATIO
|
|
576
|
+
);
|
|
567
577
|
const histogram = monitorEventLoopDelay({ resolution: resolutionMs });
|
|
568
578
|
histogram.enable();
|
|
569
579
|
let disposed = false;
|
|
570
580
|
let lastReportedMaxMs = 0;
|
|
581
|
+
let lastObservedMaxMs = 0;
|
|
582
|
+
let lastCheckTimeMs = Date.now();
|
|
583
|
+
let lastCpuUsage = safeCpuUsage();
|
|
584
|
+
let pendingSuspendGapMs = 0;
|
|
571
585
|
const readMaxMs = /* @__PURE__ */ __name(() => nsToMs(histogram.max), "readMaxMs");
|
|
572
|
-
const
|
|
573
|
-
if (disposed
|
|
586
|
+
const checkHistogram = /* @__PURE__ */ __name(() => {
|
|
587
|
+
if (disposed) return;
|
|
588
|
+
const nowMs = Date.now();
|
|
589
|
+
const cpuUsage = safeCpuUsage();
|
|
590
|
+
const elapsedMs = Math.max(0, nowMs - lastCheckTimeMs);
|
|
574
591
|
const maxMs = readMaxMs();
|
|
575
|
-
|
|
592
|
+
const newMaxMs = maxMs > lastObservedMaxMs ? maxMs : 0;
|
|
593
|
+
const cpuRatio = calculateCpuRatio(lastCpuUsage, cpuUsage, elapsedMs);
|
|
594
|
+
lastCheckTimeMs = nowMs;
|
|
595
|
+
if (cpuUsage) lastCpuUsage = cpuUsage;
|
|
596
|
+
lastObservedMaxMs = maxMs;
|
|
597
|
+
const isLowCpuGap = elapsedMs >= suspendThresholdMs && cpuRatio !== void 0 && cpuRatio <= suspendCpuRatio;
|
|
598
|
+
const suspendGapMs = isLowCpuGap ? elapsedMs : pendingSuspendGapMs;
|
|
599
|
+
pendingSuspendGapMs = isLowCpuGap ? elapsedMs : 0;
|
|
600
|
+
if (newMaxMs >= suspendThresholdMs && suspendGapMs >= suspendThresholdMs && newMaxMs <= suspendGapMs * 1.5) {
|
|
601
|
+
histogram.reset();
|
|
602
|
+
lastObservedMaxMs = 0;
|
|
603
|
+
lastReportedMaxMs = 0;
|
|
604
|
+
pendingSuspendGapMs = 0;
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
if (options.onNewMaxStall && maxMs >= stallThresholdMs && maxMs > lastReportedMaxMs) {
|
|
576
608
|
lastReportedMaxMs = maxMs;
|
|
577
609
|
try {
|
|
578
610
|
options.onNewMaxStall(maxMs);
|
|
579
611
|
} catch {
|
|
580
612
|
}
|
|
581
613
|
}
|
|
582
|
-
}, "
|
|
583
|
-
const interval =
|
|
584
|
-
interval
|
|
614
|
+
}, "checkHistogram");
|
|
615
|
+
const interval = setInterval(checkHistogram, resolutionMs);
|
|
616
|
+
interval.unref();
|
|
585
617
|
return {
|
|
586
618
|
snapshot() {
|
|
587
619
|
return {
|
|
@@ -594,14 +626,26 @@ function startEventLoopLagMonitor(options = {}) {
|
|
|
594
626
|
dispose() {
|
|
595
627
|
if (disposed) return;
|
|
596
628
|
disposed = true;
|
|
597
|
-
|
|
598
|
-
clearInterval(interval);
|
|
599
|
-
}
|
|
629
|
+
clearInterval(interval);
|
|
600
630
|
histogram.disable();
|
|
601
631
|
}
|
|
602
632
|
};
|
|
603
633
|
}
|
|
604
634
|
__name(startEventLoopLagMonitor, "startEventLoopLagMonitor");
|
|
635
|
+
function safeCpuUsage() {
|
|
636
|
+
try {
|
|
637
|
+
return process.cpuUsage();
|
|
638
|
+
} catch {
|
|
639
|
+
return void 0;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
__name(safeCpuUsage, "safeCpuUsage");
|
|
643
|
+
function calculateCpuRatio(previous, current, elapsedMs) {
|
|
644
|
+
if (!previous || !current || elapsedMs <= 0) return void 0;
|
|
645
|
+
const cpuMicroseconds = current.user - previous.user + (current.system - previous.system);
|
|
646
|
+
return Math.max(0, cpuMicroseconds / (elapsedMs * 1e3));
|
|
647
|
+
}
|
|
648
|
+
__name(calculateCpuRatio, "calculateCpuRatio");
|
|
605
649
|
function nsToMs(value) {
|
|
606
650
|
return Number.isFinite(value) ? value / NS_PER_MS : 0;
|
|
607
651
|
}
|
|
@@ -610,6 +654,10 @@ function positiveFiniteOrDefault(value, fallback) {
|
|
|
610
654
|
return value !== void 0 && Number.isFinite(value) && value > 0 ? value : fallback;
|
|
611
655
|
}
|
|
612
656
|
__name(positiveFiniteOrDefault, "positiveFiniteOrDefault");
|
|
657
|
+
function fractionOrDefault(value, fallback) {
|
|
658
|
+
return value !== void 0 && Number.isFinite(value) && value >= 0 && value <= 1 ? value : fallback;
|
|
659
|
+
}
|
|
660
|
+
__name(fractionOrDefault, "fractionOrDefault");
|
|
613
661
|
|
|
614
662
|
// packages/core/src/telemetry/event-loop-lag-metrics.ts
|
|
615
663
|
init_esbuild_shims();
|