@qwen-code/qwen-code 0.21.1 → 0.21.2
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 +1 -0
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/github.md +42 -10
- package/bundled/qc-helper/docs/features/channels/gitlab.md +171 -0
- package/bundled/qc-helper/docs/features/code-review.md +20 -0
- package/bundled/qc-helper/docs/features/hooks.md +20 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +22 -8
- package/bundled/qc-helper/docs/qwen-serve.md +7 -5
- package/bundled/review/SKILL.md +1 -1
- package/chunks/{MaxSizedBox-VI3ROJJA.js → MaxSizedBox-TQBQ247P.js} +42 -38
- package/chunks/{StandaloneSessionPicker-LYXKD2EV.js → StandaloneSessionPicker-2HPTKCLX.js} +58 -54
- package/chunks/{acp-startup-profiler-DFVPFQ6C.js → acp-startup-profiler-2C4A5ZTJ.js} +2 -2
- package/chunks/{acpAgent-WN5SRDQO.js → acpAgent-PS6EDGH3.js} +431 -168
- package/chunks/{agent-K6ECSM64.js → agent-VDOUB35F.js} +38 -34
- package/chunks/{agent-headless-NO4Y2HOE.js → agent-headless-EO53EFS2.js} +38 -34
- package/chunks/{anthropicContentGenerator-V2QOGVYD.js → anthropicContentGenerator-OFHSZJBF.js} +6 -6
- package/chunks/{artifact-tool-6K6U7XYJ.js → artifact-tool-RDN2W7ND.js} +2 -2
- package/chunks/{askUserQuestion-GD2IJJ7I.js → askUserQuestion-OZERWH5R.js} +2 -2
- package/chunks/{bridge-3KJEWDNE.js → bridge-W7AZSRZQ.js} +42 -38
- package/chunks/{build-S6DO7LMM.js → build-GDBLPA24.js} +1 -1
- package/chunks/{channel-management-service-XR7GZSWF.js → channel-management-service-5S7YCWX5.js} +20 -5
- package/chunks/{channel-settings-store-HW4FXXUA.js → channel-settings-store-JFVRSNER.js} +44 -40
- package/chunks/{channel-worker-group-XDPTDWTX.js → channel-worker-group-OVWGYMZS.js} +5 -5
- package/chunks/{channel-worker-manager-YYEHVRRE.js → channel-worker-manager-H55GKOQA.js} +5 -5
- package/chunks/{channel-worker-supervisor-74HTWA2G.js → channel-worker-supervisor-CABBXYHK.js} +3 -3
- package/chunks/{chunk-UWMLWVCA.js → chunk-2IIJTXYF.js} +26 -10
- package/chunks/{chunk-VYOXCEPJ.js → chunk-2KKCCLPT.js} +1 -1
- package/chunks/{chunk-T4TXDL7G.js → chunk-2LEOZTBT.js} +36 -24
- package/chunks/{chunk-XWWKIXVD.js → chunk-3APUUXRF.js} +1 -1
- package/chunks/{chunk-TCIFAA7K.js → chunk-3F2WDAV6.js} +2 -2
- package/chunks/{chunk-SGFT55XI.js → chunk-3I6DUGQD.js} +1 -1
- package/chunks/{chunk-ZURDMIDR.js → chunk-44F4LBWZ.js} +228 -71
- package/chunks/{chunk-GKX7E4CO.js → chunk-45IOTAUS.js} +1 -1
- package/chunks/{chunk-6QIGFD5W.js → chunk-4KP2F2TE.js} +1 -1
- package/chunks/{chunk-X5WNMMIA.js → chunk-54YCNSK5.js} +4241 -1636
- package/chunks/{chunk-P4WOAOJW.js → chunk-56Z7QEAQ.js} +67 -21
- package/chunks/{chunk-UPUG4GXM.js → chunk-5NNHICSA.js} +3 -3
- package/chunks/{chunk-LGAOC3ZS.js → chunk-675H6PLP.js} +1 -1
- package/chunks/{chunk-5KTQXHPY.js → chunk-6CQWRWUC.js} +3 -3
- package/chunks/chunk-6FMJLI5M.js +1591 -0
- package/chunks/{chunk-GZ3RCT54.js → chunk-6MPDY6ZG.js} +1 -1
- package/chunks/{chunk-RCUQIPTN.js → chunk-6PQPKTXP.js} +1 -1
- package/chunks/{chunk-KCO4FLFJ.js → chunk-6TAASXWL.js} +3 -3
- package/chunks/{chunk-JHNRZMHI.js → chunk-77V3VIKL.js} +9 -9
- package/chunks/{chunk-CAPPWD3X.js → chunk-7KAXXBER.js} +3 -3
- package/chunks/{chunk-A4COXFB3.js → chunk-7SJN2IWT.js} +5 -5
- package/chunks/{chunk-Y4IHBGBP.js → chunk-7ULQIS27.js} +1 -1
- package/chunks/{chunk-5MKRTI4T.js → chunk-A7Y5H4TX.js} +4 -4
- package/chunks/{chunk-CVHIL5IG.js → chunk-AOHY3QJ3.js} +13 -6
- package/chunks/chunk-AQ37AY7B.js +93 -0
- package/chunks/{chunk-OCESJA77.js → chunk-AUOULH6Q.js} +45 -45
- package/chunks/{chunk-UBEPNVDI.js → chunk-BBIQAX4V.js} +3 -3
- package/chunks/{chunk-JSD33JG6.js → chunk-CBBP4BMC.js} +23 -9
- package/chunks/{chunk-ZHBO7WVX.js → chunk-CNTR4GR6.js} +1 -1
- package/chunks/{chunk-PB3MBFKG.js → chunk-CO2U743O.js} +4 -4
- package/chunks/{chunk-XZC5VLBZ.js → chunk-CPZAH673.js} +4 -0
- package/chunks/{chunk-T3O2B4XO.js → chunk-CU47KXB5.js} +3 -3
- package/chunks/{chunk-2LKVPASC.js → chunk-D4HTUMGX.js} +3 -3
- package/chunks/{chunk-BNWB5CYE.js → chunk-D6MDRSZ6.js} +7 -7
- package/chunks/{chunk-7BAU433D.js → chunk-DEEABGH2.js} +867 -91
- package/chunks/{chunk-52ZSWYEG.js → chunk-DQ2O5QOJ.js} +1 -1
- package/chunks/{chunk-WBSMNTSV.js → chunk-DSFHVTWD.js} +2 -2
- package/chunks/{chunk-PT722TDT.js → chunk-DUNI4EBW.js} +701 -86
- package/chunks/{chunk-UHUSJ6X7.js → chunk-E2BHWIDT.js} +19 -4
- package/chunks/{chunk-T2QMKU3R.js → chunk-E2FN6SM7.js} +17 -5
- package/chunks/{chunk-W4MIWP6M.js → chunk-E6CJ2SMM.js} +2 -2
- package/chunks/{chunk-5ZF5XXTS.js → chunk-EQNUDTL6.js} +2 -2
- package/chunks/{chunk-2N7CODY5.js → chunk-EU5TBFJI.js} +2 -2
- package/chunks/{chunk-TFRMVU6R.js → chunk-FANRZEAJ.js} +1 -1
- package/chunks/{chunk-WBL3FJEU.js → chunk-FC4KQFCS.js} +1 -1
- package/chunks/{chunk-GNR2RNMP.js → chunk-FCYYAB4S.js} +2 -2
- package/chunks/{chunk-FNMZK765.js → chunk-FJ5WUMUQ.js} +1 -1
- package/chunks/{chunk-J7OACQDE.js → chunk-FNDXMN7I.js} +71 -49
- package/chunks/{chunk-U3E3UQAA.js → chunk-FS674JW4.js} +3 -3
- package/chunks/{chunk-S7W2GKIO.js → chunk-G7XXKQYS.js} +2 -0
- package/chunks/{chunk-VWOOBLTY.js → chunk-GJ2GBPBD.js} +2 -2
- package/chunks/{chunk-TBBV36Y4.js → chunk-GL4JOZXU.js} +4 -4
- package/chunks/{chunk-FTD6DP4T.js → chunk-GURGAJTX.js} +2 -1
- package/chunks/{chunk-65PQENQP.js → chunk-H6I4PGRV.js} +5 -5
- package/chunks/{chunk-7XATOOE7.js → chunk-HC45LTEN.js} +1 -1
- package/chunks/{chunk-VCPIZRYH.js → chunk-HIVKI6O6.js} +7 -7
- package/chunks/{chunk-HMRM2A3U.js → chunk-HX6RLYUO.js} +3 -3
- package/chunks/{chunk-GZXCZHCT.js → chunk-I3G5JWBV.js} +1 -1
- package/chunks/{chunk-2XSLTRFZ.js → chunk-I5BT7ADR.js} +2 -2
- package/chunks/{chunk-GATT5TKW.js → chunk-IGTHU3T4.js} +1 -1
- package/chunks/{chunk-4G2BISNC.js → chunk-IIUGIWWY.js} +1 -1
- package/chunks/{chunk-7I5GTCT4.js → chunk-JCJ7LKNA.js} +5104 -4817
- package/chunks/{chunk-657BH7VM.js → chunk-JE2CEOBO.js} +2 -2
- package/chunks/{chunk-S3TWXGKA.js → chunk-JE7KQ2UP.js} +4 -2
- package/chunks/{chunk-BPZKP57P.js → chunk-JJPKFJBT.js} +3 -3
- package/chunks/{chunk-6PE7N3A4.js → chunk-JLZ3RBQG.js} +7 -5
- package/chunks/{chunk-2LQTH543.js → chunk-JXVC2PL3.js} +2 -2
- package/chunks/{chunk-JCW2R7WC.js → chunk-K623ENWT.js} +3 -79
- package/chunks/{chunk-T2NCM2ET.js → chunk-K6KS3LTN.js} +2 -749
- package/chunks/{chunk-6RPMI2AB.js → chunk-KR32NIAN.js} +6 -6
- package/chunks/{chunk-XBYYDKAZ.js → chunk-KWHKHSIS.js} +8 -7
- package/chunks/{chunk-EVKE2FZL.js → chunk-KXDONCPU.js} +4 -4
- package/chunks/{chunk-5TBMQLGG.js → chunk-L2E5GFAG.js} +2 -2
- package/chunks/{chunk-MHAIJPTD.js → chunk-L32VV3ZJ.js} +12 -12
- package/chunks/{chunk-OKF7JF3R.js → chunk-LHKCY7DY.js} +3 -3
- package/chunks/{chunk-LW3RFMG7.js → chunk-LOY7RWQG.js} +3 -3
- package/chunks/{chunk-AQIDMUGU.js → chunk-LYI2PZDK.js} +1 -1
- package/chunks/{chunk-YGF33UXG.js → chunk-MB32MS4U.js} +12 -3
- package/chunks/{chunk-Y6AXW2OG.js → chunk-MM7TH7ZM.js} +1 -1
- package/chunks/{chunk-2DN4J57Y.js → chunk-N4ACHWNH.js} +1 -1
- package/chunks/{chunk-M7OONWYU.js → chunk-NBD76HUW.js} +4 -2
- package/chunks/{chunk-A2D5BAVP.js → chunk-NHFEMWAZ.js} +1 -1
- package/chunks/{chunk-3EFXSQCM.js → chunk-NTDH4IML.js} +7 -7
- package/chunks/chunk-O6GEWCJA.js +21 -0
- package/chunks/{chunk-7DXQIJID.js → chunk-OFZKFPYG.js} +3 -3
- package/chunks/{chunk-JTV5K7NH.js → chunk-P5VC5USY.js} +1 -1
- package/chunks/{chunk-Q43KPN7X.js → chunk-P755N4CS.js} +3 -3
- package/chunks/{chunk-XFZYFU3I.js → chunk-PCK4B6LR.js} +1 -1
- package/chunks/{chunk-EJGJIBRS.js → chunk-PJOHNFIY.js} +3 -3
- package/chunks/{chunk-WUZ7H6DP.js → chunk-PVNQRENX.js} +1 -1
- package/chunks/{chunk-LO4ROVP4.js → chunk-PZEXDV3H.js} +106 -8
- package/chunks/{chunk-WZRWHXFE.js → chunk-Q3T5KA2V.js} +1 -1
- package/chunks/{chunk-QIZKCVM3.js → chunk-Q5WZTTWE.js} +4 -4
- package/chunks/{chunk-BGTQCTQW.js → chunk-QARJNL2V.js} +3 -3
- package/chunks/{chunk-GXIJHV66.js → chunk-QCXGC7QB.js} +3 -3
- package/chunks/{chunk-DZLYR4U3.js → chunk-QDK4F2N5.js} +1 -1
- package/chunks/{chunk-NOKIVHOL.js → chunk-QTHQ6Z5X.js} +1 -1
- package/chunks/{chunk-A3NDJ5SB.js → chunk-R2XWGR75.js} +2 -2
- package/chunks/{chunk-JX27F6QS.js → chunk-RDJOB6S3.js} +1 -1
- package/chunks/{chunk-TV64SXKD.js → chunk-RG64CDT2.js} +4 -4
- package/chunks/{chunk-JFMA7Y5M.js → chunk-RSVPYAGK.js} +5 -5
- package/chunks/{chunk-64LQLPL7.js → chunk-SHN4KHDK.js} +3 -3
- package/chunks/chunk-T3CHYWJZ.js +758 -0
- package/chunks/{chunk-PONHVBRT.js → chunk-TEGJSJDF.js} +2 -2
- package/chunks/{chunk-75GFAX4R.js → chunk-THVU3RNH.js} +1 -1
- package/chunks/{record-artifact-XAMSFSW4.js → chunk-TIRRPCFS.js} +22 -7
- package/chunks/{chunk-HV26XH34.js → chunk-TTJZAIFP.js} +3 -3
- package/chunks/{chunk-JMONIXMJ.js → chunk-TZTAV5RH.js} +1 -1
- package/chunks/{chunk-7AEJDLRA.js → chunk-UV6KF7T3.js} +2 -2
- package/chunks/{chunk-PLDQBIO6.js → chunk-V25K5ID7.js} +1 -1
- package/chunks/{chunk-S4WJVPZW.js → chunk-V4XNUDPE.js} +3 -3
- package/chunks/{chunk-2FAK6PNM.js → chunk-VEMNQMHA.js} +2 -2
- package/chunks/{chunk-CQL64ESB.js → chunk-VMX5RZQH.js} +12 -10
- package/chunks/{chunk-EIF3FXTB.js → chunk-W3UKBMSI.js} +63 -18
- package/chunks/{chunk-TDL6LB4K.js → chunk-WWCMSZII.js} +21 -9
- package/chunks/{chunk-5YKDXHUY.js → chunk-XP4L6KS3.js} +2 -2
- package/chunks/{chunk-RPLGZJV2.js → chunk-XQK4XXTN.js} +1 -1
- package/chunks/{chunk-KAMYKP7E.js → chunk-XUGZYLDH.js} +1 -1
- package/chunks/{chunk-MR5EAQ5M.js → chunk-YANIWTRZ.js} +1 -1
- package/chunks/{chunk-3L2SPEBH.js → chunk-YGE3IXJP.js} +1 -1
- package/chunks/{chunk-BCZFQXWK.js → chunk-YUFIEIWC.js} +1 -1
- package/chunks/{chunk-75MIQ3LV.js → chunk-Z3S5EMOW.js} +4 -4
- package/chunks/{chunk-BMFALVGQ.js → chunk-ZMOJ7ISP.js} +1 -1
- package/chunks/{chunk-GEBV2JGB.js → chunk-ZPZ7ZJEE.js} +1 -1
- package/chunks/{computer-use-ZTIDHMMA.js → computer-use-5QWCFNKD.js} +38 -34
- package/chunks/{config-utils-NYSXDMEQ.js → config-utils-WADIDWGG.js} +4 -4
- package/chunks/{contextCommand-2PIEU37Z.js → contextCommand-4Z7T7TUM.js} +40 -36
- package/chunks/{core-runtime-3XEYLQFK.js → core-runtime-6N4EFC2Q.js} +38 -34
- package/chunks/{create-sub-session-SBYUMSSS.js → create-sub-session-62YZWVAY.js} +2 -2
- package/chunks/{create-sub-session-R76FVXCI.js → create-sub-session-AEREHZBQ.js} +38 -34
- package/chunks/{cron-create-2QK6TCEC.js → cron-create-6E7GIQTG.js} +4 -4
- package/chunks/{cron-delete-FDCDFYMG.js → cron-delete-JD26XY3W.js} +4 -4
- package/chunks/{cron-list-XN3WVBTP.js → cron-list-CUWFB44G.js} +4 -4
- package/chunks/{daemon-Q2AB5Z23.js → daemon-PCNCI5YU.js} +72 -3
- package/chunks/{daemon-status-provider-3XJI6CAL.js → daemon-status-provider-DDF7C5M7.js} +46 -42
- package/chunks/{daemon-trust-policy-ILUDTLHD.js → daemon-trust-policy-Q4KSOJTR.js} +43 -39
- package/chunks/{daemon-trust-policy-monitor-HS3PKKRO.js → daemon-trust-policy-monitor-V6FTE3IY.js} +43 -39
- package/chunks/{deferred-core-runtime-X4QV662U.js → deferred-core-runtime-GHJ5GQHK.js} +38 -34
- package/chunks/{dist-BSTVRPMT.js → dist-26BIMQT6.js} +276 -16
- package/chunks/{dist-SV7Q3AWJ.js → dist-2PERFI23.js} +12 -9
- package/chunks/{dist-DOLYHMXE.js → dist-OAOC5OV4.js} +2 -2
- package/chunks/{dist-YGBBMK3Z.js → dist-PVEAFLHY.js} +5 -4
- package/chunks/{dist-HVRQ2CFL.js → dist-SL2LUMML.js} +1180 -5
- package/chunks/dist-ULIG4M5H.js +13415 -0
- package/chunks/{dist-IXQEQWRG.js → dist-WGMNT3JQ.js} +1 -1
- package/chunks/{dist-SSU66DM4.js → dist-ZHXOBXDN.js} +1 -1
- package/chunks/{earlyInputCapture-XKLZT7ZD.js → earlyInputCapture-TQXLLISD.js} +39 -35
- package/chunks/{edit-HHGIOTQ2.js → edit-FJEUV6KZ.js} +38 -34
- package/chunks/{enter-worktree-ZN7PUQ46.js → enter-worktree-7GE3TZ4P.js} +38 -34
- package/chunks/{enterPlanMode-EIFIDSIV.js → enterPlanMode-KR5TMPCJ.js} +38 -34
- package/chunks/{environment-XXQ75D2Q.js → environment-SWL3CMB3.js} +40 -36
- package/chunks/{errors-4GMVU7CK.js → errors-XQE7BGZV.js} +40 -36
- package/chunks/{exit-worktree-GXMI4ATY.js → exit-worktree-CHKTYNCV.js} +38 -34
- package/chunks/{exitPlanMode-34UVY7M6.js → exitPlanMode-QYAG6LWX.js} +38 -34
- package/chunks/{fast-path-VPIVA7L6.js → fast-path-Z2K7W6DC.js} +2 -2
- package/chunks/{gemini-4BWIK4WD.js → gemini-YU4XKEDG.js} +91 -87
- package/chunks/{geminiContentGenerator-3XVV5MSS.js → geminiContentGenerator-ZZX6NBO4.js} +6 -6
- package/chunks/{glob-TZ2ABCJG.js → glob-VYF5CXSX.js} +38 -34
- package/chunks/goal-tools-HGO6VXPB.js +335 -0
- package/chunks/{grep-BEF463NA.js → grep-5DP5ZUTW.js} +38 -34
- package/chunks/{handleAutoUpdate-L6ERF36Y.js → handleAutoUpdate-UVBJ56DL.js} +42 -38
- package/chunks/{i18n-FMM5FDXR.js → i18n-UQNYHEUD.js} +39 -35
- package/chunks/{image-gen-HHVLF7HS.js → image-gen-WHPIZNWF.js} +9 -9
- package/chunks/{initializer-625TIAIO.js → initializer-GMIICF4W.js} +44 -40
- package/chunks/{installationInfo-6AM4I2Y3.js → installationInfo-4MGG4WVI.js} +39 -35
- package/chunks/{keychain-token-storage-72IYCAZV.js → keychain-token-storage-IKO4G53C.js} +2 -2
- package/chunks/list-CPN2W334.js +92 -0
- package/chunks/{list-agents-R6KDXQR3.js → list-agents-PXJ7ZUFB.js} +2 -2
- package/chunks/{loadedSettingsAdapter-SPUTNKAV.js → loadedSettingsAdapter-ZQAV5NDO.js} +43 -39
- package/chunks/{loggingContentGenerator-LKOF7XI7.js → loggingContentGenerator-5E7W4IEP.js} +18 -18
- package/chunks/{loop-wakeup-3IQKCYAH.js → loop-wakeup-Y26NQZ5I.js} +13 -6
- package/chunks/{ls-DKZ37A7N.js → ls-ONQTTMQR.js} +4 -4
- package/chunks/{lsp-QNWN7KN3.js → lsp-YGHHRGMD.js} +2 -2
- package/chunks/{managed-npm-update-ACQGGIN5.js → managed-npm-update-MKKAXYXA.js} +39 -35
- package/chunks/{mcp-SZLHKFJW.js → mcp-V5NTJF6X.js} +43 -39
- package/chunks/{monitor-DF52UVHI.js → monitor-CO3ASY6E.js} +38 -34
- package/chunks/nonInteractiveCli-ZJYEOO7U.js +148 -0
- package/chunks/{notebook-edit-FCWS4XVN.js → notebook-edit-Z7AEE6FM.js} +38 -34
- package/chunks/{openaiContentGenerator-7LDK3DCJ.js → openaiContentGenerator-CA3MQOP3.js} +19 -19
- package/chunks/{pidfile-6ERW3DF4.js → pidfile-NL7MKDRU.js} +39 -35
- package/chunks/{processUtils-COKZAMUP.js → processUtils-PB5K2DYH.js} +2 -2
- package/chunks/{qwenContentGenerator-TKWUMR7N.js → qwenContentGenerator-JYFNDCOS.js} +44 -40
- package/chunks/{qwenOAuth2-7HMU47SF.js → qwenOAuth2-W2ALKQDD.js} +8 -8
- package/chunks/{read-file-X6DRC574.js → read-file-IEOR5H5W.js} +11 -11
- package/chunks/{read-mcp-resource-GFTWYXMK.js → read-mcp-resource-U2IJN5HM.js} +2 -2
- package/chunks/record-artifact-MGPJ7EG4.js +21 -0
- package/chunks/{resumeHistoryUtils-PFPM2GWM.js → resumeHistoryUtils-BNBTP5AS.js} +44 -40
- package/chunks/{ripGrep-OWV2IVJC.js → ripGrep-UMQODKEB.js} +38 -34
- package/chunks/{run-qwen-serve-TSTCO4XE.js → run-qwen-serve-RN2R6QQW.js} +116 -65
- package/chunks/{runtime-DAUPSUKI.js → runtime-QFJ2MJF5.js} +48 -44
- package/chunks/{scheduler-KMADMT26.js → scheduler-AMYUFOZI.js} +38 -34
- package/chunks/{sdk-exporters-http-WO556XNU.js → sdk-exporters-http-4BQANSJ6.js} +3 -3
- package/chunks/{sdk-impl-LPAVACSF.js → sdk-impl-Z4VXWVFX.js} +3 -3
- package/chunks/{send-message-SAWK4DZX.js → send-message-PMP4ATVM.js} +6 -11
- package/chunks/{serve-NNRWS6F4.js → serve-EIIYJVX3.js} +43 -39
- package/chunks/{server-WEH7DVCH.js → server-EP2LLAPD.js} +1768 -712
- package/chunks/{session-WXC56V2I.js → session-GMPZBLOW.js} +83 -79
- package/chunks/{settings-DJDXFDZ3.js → settings-LN7RNKBS.js} +47 -43
- package/chunks/{shell-JN5VRQXD.js → shell-EM2OWU5X.js} +38 -34
- package/chunks/{skill-SGXPKJCS.js → skill-T5VPSK73.js} +17 -16
- package/chunks/{skill-settings-VJ5PDMZI.js → skill-settings-GMR3GMNY.js} +42 -38
- package/chunks/{spawnChannel-ETMJW7YX.js → spawnChannel-YPCU62DI.js} +40 -36
- package/chunks/{standalone-update-MK3Z7KBI.js → standalone-update-JAKIM2NF.js} +40 -36
- package/chunks/{startInteractiveUI-ZCGIXPGT.js → startInteractiveUI-YETQWGYF.js} +774 -779
- package/chunks/{syntheticOutput-355CB6CJ.js → syntheticOutput-D7E6ZFKR.js} +3 -3
- package/chunks/{task-create-INGWNUG4.js → task-create-NFCYD43L.js} +10 -9
- package/chunks/{task-list-5XNNGTF4.js → task-list-TAVMGEVD.js} +5 -5
- package/chunks/{task-stop-4ROAOBXH.js → task-stop-ZDF2UJRM.js} +2 -2
- package/chunks/{task-update-CRK5VWWZ.js → task-update-6L7LHGEX.js} +10 -9
- package/chunks/{team-create-QQGAJG7P.js → team-create-LFJ6HGNY.js} +38 -34
- package/chunks/{team-delete-S2RCXA4P.js → team-delete-DPGGRQBU.js} +5 -5
- package/chunks/{team-plan-approval-RT7Q5R6O.js → team-plan-approval-C2KLSDGO.js} +38 -34
- package/chunks/{theme-manager-EEWIQJ7J.js → theme-manager-JQ3ZGBP5.js} +39 -35
- package/chunks/{todoWrite-7WM3VDMY.js → todoWrite-2UO5G6G6.js} +32 -4
- package/chunks/{tool-search-Z3Z4AYKP.js → tool-search-FAZBFRJZ.js} +15 -14
- package/chunks/{total-session-admission-44JKRWQD.js → total-session-admission-5CALIVYO.js} +42 -38
- package/chunks/{trustedFolders-X2JEIO57.js → trustedFolders-KOPSP44S.js} +39 -35
- package/chunks/{update-relaunch-VWNPYDIP.js → update-relaunch-6QL2TICS.js} +5 -5
- package/chunks/{updateCheck-KAQH67DV.js → updateCheck-4Q6RIKFW.js} +41 -37
- package/chunks/{useAutoAcceptIndicator-JH6BCF7S.js → useAutoAcceptIndicator-Q5BMKZV3.js} +47 -43
- package/chunks/{validateNonInterActiveAuth-GIUJ2UFS.js → validateNonInterActiveAuth-GKOC5F6Z.js} +79 -75
- package/chunks/{version-BGLYIJUY.js → version-VSATY2LD.js} +1 -1
- package/chunks/{web-fetch-OTDU4VQF.js → web-fetch-JCLKL6NL.js} +14 -14
- package/chunks/{web-search-FP6SIHPR.js → web-search-DSQTFUBX.js} +8 -8
- package/chunks/{workflow-YCIVBYSB.js → workflow-M6QAVKVJ.js} +41 -37
- package/chunks/workspace-providers-status-YKLTLMJA.js +89 -0
- package/chunks/{workspace-registration-store-OTMS3H4C.js → workspace-registration-store-5DMGKU64.js} +1 -1
- package/chunks/{workspace-registry-O63R6IZ4.js → workspace-registry-PTYUSYXX.js} +42 -38
- package/chunks/{workspace-service-M6LLHKJ5.js → workspace-service-25ML3T47.js} +48 -44
- package/chunks/{workspace-skills-status-C2V7BAIS.js → workspace-skills-status-YKZWOYRX.js} +44 -40
- package/chunks/{workspace-trust-reconciler-IBUPOUJN.js → workspace-trust-reconciler-5FI2S3OS.js} +47 -43
- package/chunks/write-file-AY7VLP5X.js +78 -0
- package/chunks/zoom-image-S4LJZMD5.js +224 -0
- package/cli.js +50 -16
- package/package.json +3 -3
- package/web-shell/assets/{arc-75-Wdeo3.js → arc-xjArKHU2.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-FKeXQbyP.js → architectureDiagram-3BPJPVTR-BgrQDNYG.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CY0vc-A3.js → blockDiagram-GPEHLZMM-CXxWC-1_.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CNP-A-8u.js → c4Diagram-AAUBKEIU-Dx1tLm3v.js} +1 -1
- package/web-shell/assets/channel-B1cyk94G.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-GybS4Gii.js → chunk-2J33WTMH-CBxjogVR.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-02H91V8v.js → chunk-4BX2VUAB-izb-rY5W.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-D3M-2VT6.js → chunk-55IACEB6-NzLyvSb8.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-CCu29u4H.js → chunk-727SXJPM-DVyKb0dl.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-CaFKWgrn.js → chunk-AQP2D5EJ-BtqL7NzB.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-ZZpPqIwQ.js → chunk-FMBD7UC4-iNpdKIO0.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-D22DqGs8.js → chunk-ND2GUHAM-DI7cbFmX.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-Bu85S0fw.js → chunk-QZHKN3VN-3Y_-xFYs.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-f1CK1Gwe.js → cose-bilkent-S5V4N54A--raRatZn.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-D0Ow8F_n.js → dagre-BM42HDAG-B8SU70mO.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BPrmTWp8.js → diagram-2AECGRRQ-ewgoakXo.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-HccuFAzy.js → diagram-5GNKFQAL-Bm_JLTnS.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-BrS76mbA.js → diagram-KO2AKTUF-DEIUjUy9.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-V7T9lU-5.js → diagram-LMA3HP47-C2Wmrpj-.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-DKidyJMR.js → diagram-OG6HWLK6-CtYe6bFx.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DBadZIkp.js → erDiagram-TEJ5UH35-DfpHcWLV.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BymfqdNJ.js → flowDiagram-I6XJVG4X-CAiUhio5.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-DOw340jf.js → ganttDiagram-6RSMTGT7-CYc7ezr4.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-_8EiD8sl.js → gitGraphDiagram-PVQCEYII-70lbkcRS.js} +1 -1
- package/web-shell/assets/index-C1k3PDuU.css +5 -0
- package/web-shell/assets/index-C2GE3DAF.js +74 -0
- package/web-shell/assets/index-DZLIXILO.js +1750 -0
- package/web-shell/assets/{index-CKIadvET.js → index-Ww86nT9f.js} +1 -1
- package/web-shell/assets/{infoDiagram-5YYISTIA-D61KYQBu.js → infoDiagram-5YYISTIA-C7e8DWPa.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CsiXSpNx.js → ishikawaDiagram-YF4QCWOH-BYLr2op-.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-Sdfionyh.js → journeyDiagram-JHISSGLW-hEibAHKX.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-C3WI3Cnl.js → kanban-definition-UN3LZRKU-F2rt8Uhp.js} +1 -1
- package/web-shell/assets/{linear-Dpigcc62.js → linear-DPhyNezd.js} +1 -1
- package/web-shell/assets/{mermaid.core-Ct97pqgW.js → mermaid.core-ZUtnug0n.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BzeaN0rB.js → mindmap-definition-RKZ34NQL-DDWcMoi8.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CvjgcbVD.js → pieDiagram-4H26LBE5-CTRKzw1_.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-BUzgTNdH.js → quadrantDiagram-W4KKPZXB-CAEwYG_z.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-B7zKlgUQ.js → requirementDiagram-4Y6WPE33-CRjnH9D9.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Bb9CQgrT.js → sankeyDiagram-5OEKKPKP-LPQT_sOd.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DJ6V7itG.js → sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-IImflERY.js → stateDiagram-AJRCARHV-CIUdqOXu.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BmqqQZ6w.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-6Q_uWHKh.js → timeline-definition-PNZ67QCA-BcilneZF.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-TmyKyjwv.js → vennDiagram-CIIHVFJN-BljwiiH1.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-CRh9uiPv.js → wardley-L42UT6IY-DeKjkYjq.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-59TKAW8w.js → wardleyDiagram-YWT4CUSO-L3U1H7KG.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-GCSUIK2L.js → xychartDiagram-2RQKCTM6-IJnWsgMT.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/list-L2GA674Y.js +0 -88
- package/chunks/nonInteractiveCli-5T7KYKLK.js +0 -144
- package/chunks/workspace-providers-status-S35YAIUS.js +0 -85
- package/chunks/write-file-3BZC3EAE.js +0 -72
- package/chunks/zoom-image-TZ6S2O57.js +0 -351
- package/web-shell/assets/channel-DPYMT76A.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK--JstsIgL.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2--JstsIgL.js +0 -1
- package/web-shell/assets/index-D1eXNRHe.js +0 -1389
- package/web-shell/assets/index-DVLD4CQq.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CYI_YoNR.js +0 -1
|
@@ -337,6 +337,7 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
|
|
|
337
337
|
| `tools.computerUse.maxImageDimension` | number | Longest-edge pixel cap applied to cua-driver screenshots (via `set_config`'s `max_image_dimension`). `-1` (default) keeps cua-driver's built-in default (1568); `0` disables resizing (full resolution); a positive value caps the longest edge. Lower caps cut vision-token cost at the expense of fine detail. | `-1` | Requires restart: Yes. Env override: `QWEN_COMPUTER_USE_MAX_IMAGE_DIMENSION` (a non-negative integer; takes precedence over this setting) |
|
|
338
338
|
| `tools.computerUse.idleTimeoutMs` | number | Milliseconds to keep the cua-driver process alive after the last `computer_use__*` call. The default is `300000` (5 minutes). Set to `0` to keep it running until Qwen Code exits. | `300000` | Requires restart: Yes |
|
|
339
339
|
| `tools.toolSearch.enabled` | boolean | Load MCP tools on demand via ToolSearch to reduce prompt size. Disable this for models that rely on prefix-based KV caching (e.g. DeepSeek) to keep the prompt prefix stable and maximize cache hit rates. | `true` | Requires restart: Yes |
|
|
340
|
+
| `tools.toolSearch.threshold` | number | Context-window percentage used as the session-start budget for preloading deferred tools (bundled built-ins and MCP alike). When the combined schemas of every deferred tool fit within this budget, they are all declared upfront instead of loaded on demand via ToolSearch — a stable declaration list keeps prefix KV caches valid for the whole session. Set `0` to always load deferred tools on demand. | `10` | Requires restart: Yes |
|
|
340
341
|
|
|
341
342
|
> [!note]
|
|
342
343
|
>
|
|
@@ -4,7 +4,8 @@ This guide covers setting up a Qwen Code channel that monitors GitHub notificati
|
|
|
4
4
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
|
-
- A GitHub account
|
|
7
|
+
- A GitHub account for the channel. Use a dedicated bot account when the PAT
|
|
8
|
+
owner also needs to operate the channel.
|
|
8
9
|
- A GitHub Personal Access Token (PAT) with `notifications` and `public_repo` (or `repo`) scopes
|
|
9
10
|
|
|
10
11
|
## Creating a Token
|
|
@@ -26,10 +27,12 @@ Add the channel to `~/.qwen/settings.json`:
|
|
|
26
27
|
"type": "github",
|
|
27
28
|
"token": "$GITHUB_TOKEN",
|
|
28
29
|
"pollInterval": 60000,
|
|
30
|
+
"reasonFilter": ["mention", "review_requested", "assign"],
|
|
29
31
|
"senderPolicy": "allowlist",
|
|
30
|
-
"allowedUsers": ["
|
|
32
|
+
"allowedUsers": ["operator-github-username"],
|
|
31
33
|
"sessionScope": "chat_thread",
|
|
32
34
|
"cwd": "/path/to/your/project",
|
|
35
|
+
"blockStreaming": "off",
|
|
33
36
|
"groupPolicy": "open",
|
|
34
37
|
"groups": {
|
|
35
38
|
"*": { "requireMention": true }
|
|
@@ -45,6 +48,13 @@ Set the token as an environment variable:
|
|
|
45
48
|
export GITHUB_TOKEN="ghp_your_token_here"
|
|
46
49
|
```
|
|
47
50
|
|
|
51
|
+
The PAT owner cannot trigger its own channel: GitHub self-activity does not
|
|
52
|
+
provide a usable notification, and the adapter intentionally ignores its own
|
|
53
|
+
comments to prevent reply loops. If the PAT owner needs to operate the channel,
|
|
54
|
+
use a separate bot-owned PAT and put only operator accounts in `allowedUsers`.
|
|
55
|
+
Startup rejects an allowlist containing only the PAT owner and warns when the
|
|
56
|
+
PAT owner appears alongside other operators.
|
|
57
|
+
|
|
48
58
|
### GitHub Enterprise
|
|
49
59
|
|
|
50
60
|
For GitHub Enterprise Server, set `baseUrl`:
|
|
@@ -57,14 +67,22 @@ For GitHub Enterprise Server, set `baseUrl`:
|
|
|
57
67
|
|
|
58
68
|
## Configuration Options
|
|
59
69
|
|
|
60
|
-
| Option | Default | Description
|
|
61
|
-
| ------------------------- | ------------------------ |
|
|
62
|
-
| `token` | (required) | Classic PAT with `notifications` scope
|
|
63
|
-
| `pollInterval` | `60000` | Poll interval in ms
|
|
64
|
-
| `baseUrl` | `https://api.github.com` | API base URL (for GHE)
|
|
65
|
-
| `groupPolicy` | `"disabled"` | Must be `"open"` for notifications to flow
|
|
66
|
-
| `senderPolicy` | `"allowlist"` | Who can trigger the bot
|
|
67
|
-
| `groups.*.requireMention` | `true` | Require @mentions for ordinary comments; directed notification reasons still run
|
|
70
|
+
| Option | Default | Description |
|
|
71
|
+
| ------------------------- | ------------------------ | --------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `token` | (required) | Classic PAT with `notifications` scope |
|
|
73
|
+
| `pollInterval` | `60000` | Poll interval in ms |
|
|
74
|
+
| `baseUrl` | `https://api.github.com` | API base URL (for GHE) |
|
|
75
|
+
| `groupPolicy` | `"disabled"` | Must be `"open"` for notifications to flow |
|
|
76
|
+
| `senderPolicy` | `"allowlist"` | Who can trigger the bot |
|
|
77
|
+
| `groups.*.requireMention` | `true` | Require @mentions for ordinary comments; directed notification reasons still run |
|
|
78
|
+
| `blockStreaming` | `"off"` | Always forced to `"off"`; intermediate model chunks aren't published; `"on"` is not supported |
|
|
79
|
+
| `reasonFilter` | unset | Optional allowlist of GitHub notification reasons to process |
|
|
80
|
+
|
|
81
|
+
Use `reasonFilter` to drop noisy notification classes such as `ci_activity` or `state_change`. Do not use `reasonFilter: ["mention"]` as a replacement for `groups.*.requireMention`: GitHub's `mention` reason is sticky at the thread level, so real new @mentions can arrive later under `comment`, `subscribed`, `author`, or other reasons and would be skipped.
|
|
82
|
+
|
|
83
|
+
Valid `reasonFilter` values are `mention`, `review_requested`, `assign`, `author`, `comment`, `ci_activity`, `manual`, `state_change`, `subscribed`, `team_mention`, `security_alert`, `approval_requested`, `invitation`, `member_feature_requested`, and `security_advisory_credit`.
|
|
84
|
+
|
|
85
|
+
Filtered notifications are still marked read before they are skipped. Removing the filter later will not replay notifications the channel already skipped.
|
|
68
86
|
|
|
69
87
|
## ⚠️ Security
|
|
70
88
|
|
|
@@ -92,6 +110,20 @@ The comment window is `(previousCursor, currentMaxUpdatedAt]` — comments alrea
|
|
|
92
110
|
|
|
93
111
|
Non-comment activity (push, label changes) bumps the notification's `updated_at` but produces zero new comments in the window, so re-fetched threads are skipped without triggering the agent.
|
|
94
112
|
|
|
113
|
+
## Response Feedback
|
|
114
|
+
|
|
115
|
+
For an accepted issue or pull-request comment, the channel adds GitHub's `👀` reaction while the agent is working, then removes it when the run completes, fails, or is cancelled. Both operations are best-effort: a reaction API or permission failure is logged and never prevents the final response.
|
|
116
|
+
|
|
117
|
+
### Final-only output
|
|
118
|
+
|
|
119
|
+
The GitHub channel always forces final-only delivery. The adapter sets `blockStreaming` to `"off"`, so intermediate model chunks are never published as separate comments and `blockStreaming: "on"` is not supported.
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"blockStreaming": "off"
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
95
127
|
## Known Limitations
|
|
96
128
|
|
|
97
129
|
- **First start skips existing unread notifications.** The cursor initializes to "now" on first launch. Notifications created before the bot starts are not processed unless the thread receives new activity afterwards.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# GitLab
|
|
2
|
+
|
|
3
|
+
This guide covers setting up a Qwen Code channel that monitors GitLab todos and responds to mentions on issues and merge requests.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- A GitLab account (or a dedicated bot account)
|
|
8
|
+
- A GitLab Personal Access Token with `read_api` and `api` scopes
|
|
9
|
+
|
|
10
|
+
## Creating a Token
|
|
11
|
+
|
|
12
|
+
1. Go to **Preferences → Access Tokens**
|
|
13
|
+
2. Create a token with these scopes:
|
|
14
|
+
- **read_api** — read todos and project data
|
|
15
|
+
- **api** — post notes (comments) on issues/MRs
|
|
16
|
+
3. Save the token securely as an environment variable
|
|
17
|
+
|
|
18
|
+
## Configuration
|
|
19
|
+
|
|
20
|
+
Add the channel to `~/.qwen/settings.json`:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"channels": {
|
|
25
|
+
"my-gitlab": {
|
|
26
|
+
"type": "gitlab",
|
|
27
|
+
"token": "$GITLAB_TOKEN",
|
|
28
|
+
"pollInterval": 60000,
|
|
29
|
+
"senderPolicy": "open",
|
|
30
|
+
"sessionScope": "chat_thread",
|
|
31
|
+
"cwd": "/path/to/your/project",
|
|
32
|
+
"groupPolicy": "open",
|
|
33
|
+
"action_prompt_template": {
|
|
34
|
+
"mentioned": "Project: %project% | URL: %project_url% | Author: %author% | Type: %target_type% | IID: %iid% | Title: %title% | Description: %description% | TodoID: %todo_id%"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Set the token as an environment variable:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
export GITLAB_TOKEN="glpat-your_token_here"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Self-hosted GitLab
|
|
48
|
+
|
|
49
|
+
For self-hosted instances, set `baseUrl`:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"baseUrl": "https://gitlab.example.com"
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Configuration Options
|
|
58
|
+
|
|
59
|
+
| Option | Default | Description |
|
|
60
|
+
| ------------------------ | ------------------------- | ---------------------------------------------------------- |
|
|
61
|
+
| `token` | (required) | PAT with `read_api` + `api` scopes |
|
|
62
|
+
| `pollInterval` | `60000` | Poll interval in ms |
|
|
63
|
+
| `baseUrl` | `https://gitlab.com` | GitLab instance URL |
|
|
64
|
+
| `action_prompt_template` | (required for processing) | Maps GitLab action names to metadata templates |
|
|
65
|
+
| `groupPolicy` | `"disabled"` | Must be `"open"`, or `"allowlist"` with the project listed |
|
|
66
|
+
| `senderPolicy` | `"allowlist"` | Who can trigger the bot |
|
|
67
|
+
|
|
68
|
+
## action_prompt_template
|
|
69
|
+
|
|
70
|
+
This field controls which todo actions are processed and how metadata is rendered. Only actions with a configured template are dispatched; all others are skipped and marked done.
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"action_prompt_template": {
|
|
75
|
+
"mentioned": "Project: %project% | Author: %author% | Title: %title%"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The `directly_addressed` action (comment starting with `@bot`) automatically falls back to the `mentioned` template if not explicitly configured.
|
|
81
|
+
|
|
82
|
+
### Available Action Keys
|
|
83
|
+
|
|
84
|
+
| Key | Trigger |
|
|
85
|
+
| --------------------- | ------------------------------------------------------------------------ |
|
|
86
|
+
| `mentioned` | Someone @mentions the bot in a comment or description (not at the start) |
|
|
87
|
+
| `directly_addressed` | A comment **starts with** `@bot` (falls back to `mentioned` template) |
|
|
88
|
+
| `assigned` | Someone assigns the bot to an issue/MR |
|
|
89
|
+
| `review_requested` | Someone requests the bot as a reviewer on an MR |
|
|
90
|
+
| `approval_required` | An MR requires the bot's approval (approval rules) |
|
|
91
|
+
| `marked` | Someone marks the bot's comment/issue/MR (star) |
|
|
92
|
+
| `build_failed` | A CI/CD pipeline fails on the bot's branch/MR |
|
|
93
|
+
| `unmergeable` | An MR the bot is involved with becomes unmergeable (conflicts) |
|
|
94
|
+
| `merge_train_removed` | An MR is removed from the merge train |
|
|
95
|
+
|
|
96
|
+
Only keys present in `action_prompt_template` are processed. Unconfigured actions are skipped and marked done silently.
|
|
97
|
+
|
|
98
|
+
### Template Variables
|
|
99
|
+
|
|
100
|
+
| Variable | Value |
|
|
101
|
+
| --------------- | --------------------------------- |
|
|
102
|
+
| `%project%` | Project path (e.g., `owner/repo`) |
|
|
103
|
+
| `%project_url%` | Full project URL |
|
|
104
|
+
| `%author%` | Todo author username |
|
|
105
|
+
| `%target_type%` | `Issue` or `MergeRequest` |
|
|
106
|
+
| `%iid%` | Issue/MR internal ID |
|
|
107
|
+
| `%title%` | Issue/MR title |
|
|
108
|
+
| `%description%` | Issue/MR description body |
|
|
109
|
+
| `%todo_id%` | GitLab todo ID |
|
|
110
|
+
| `%%` | Literal `%` (escape) |
|
|
111
|
+
|
|
112
|
+
Unknown variables are preserved as-is in the output.
|
|
113
|
+
|
|
114
|
+
### Prompt Assembly
|
|
115
|
+
|
|
116
|
+
The template renders into `envelope.metadata` (structured context). The triggering text (`todo.body` or description) goes into `envelope.text` (primary prompt). The base class assembles the final prompt sent to the agent:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
[alice] please fix this bug
|
|
120
|
+
|
|
121
|
+
Project: owner/repo | URL: https://gitlab.com/owner/repo | Author: alice | Type: Issue | IID: 42 | Title: Test Issue | Description: ... | TodoID: 100
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
- Line 1: `[sender]` prefix + `envelope.text` (with `@bot` stripped)
|
|
125
|
+
- Line 3: `envelope.metadata` (rendered template, sanitized)
|
|
126
|
+
|
|
127
|
+
You do **not** need a `%body%` variable — the comment/description text is always the primary prompt content, and the template provides supplementary context below it.
|
|
128
|
+
|
|
129
|
+
## ⚠️ Security
|
|
130
|
+
|
|
131
|
+
On a **public project**, setting `senderPolicy: "open"` allows **any GitLab user** who @mentions the bot to submit prompts that drive the agent in your `cwd`.
|
|
132
|
+
|
|
133
|
+
Always use `senderPolicy: "allowlist"` with explicit `allowedUsers` on public projects.
|
|
134
|
+
|
|
135
|
+
## Mention Detection
|
|
136
|
+
|
|
137
|
+
The adapter always sets `isMentioned = true` on dispatched envelopes, because GitLab has already determined the mention when creating the todo. The `action_prompt_template` config is the real event filter — only actions with a configured template are processed. The `@bot` mention is stripped from the message text before dispatch via `stripBotMention`.
|
|
138
|
+
|
|
139
|
+
### ⚠️ groupPolicy Must Be "open" or "allowlist"
|
|
140
|
+
|
|
141
|
+
`groupPolicy` must be set to `"open"`, or `"allowlist"` with the project explicitly listed, for todos to be processed. The default value `"disabled"` drops all mentions: todos are marked done and the cursor advances, but no dispatch occurs. A rejection is logged (`preflight rejected reason=group_disabled`) but the todo is still consumed. If your bot is not responding to mentions, check that `groupPolicy` is not `"disabled"`.
|
|
142
|
+
|
|
143
|
+
## How It Works
|
|
144
|
+
|
|
145
|
+
The adapter uses GitLab's Todos API as the message source:
|
|
146
|
+
|
|
147
|
+
1. **Poll** `GET /todos?state=pending` for new todos
|
|
148
|
+
2. **First-poll drain**: if the cursor has never been initialized (`initialized: false`), all pending todos are marked done without dispatch and the cursor advances to the max todo ID. This prevents a backlog flood on first start.
|
|
149
|
+
3. **Clean up stale todos**: todos with `id <= cursor` are marked done (best-effort) to prevent them from being re-fetched on every poll
|
|
150
|
+
4. **Filter** by `id > cursor` and configured `action_prompt_template`
|
|
151
|
+
5. **Detect mention type** via `target_url` anchor:
|
|
152
|
+
- `#note_123` present → comment mention → text is `todo.body` (the comment)
|
|
153
|
+
- No anchor → description mention → text is the issue/MR description
|
|
154
|
+
6. **Dispatch** the envelope through `handleInbound` (requires `groupPolicy: "open"` or `"allowlist"` with the project listed)
|
|
155
|
+
7. **Advance cursor** and **mark todo done** (best-effort)
|
|
156
|
+
|
|
157
|
+
The cursor (`lastProcessedId`) advances regardless of dispatch success or failure. Failed dispatches post a ⚠️ error comment on the issue/MR and are not retried — the user can re-mention the bot to trigger a new todo.
|
|
158
|
+
|
|
159
|
+
## Known Limitations
|
|
160
|
+
|
|
161
|
+
- **First start skips existing pending todos.** The cursor initializes to `{ lastProcessedId: 0, initialized: false }` on first launch. On the first poll cycle, all pre-existing pending todos are marked done without dispatch (the `initialized` flag gates this one-time drain), preventing a backlog flood.
|
|
162
|
+
- The bot does not read prior conversation history — only the triggering content is processed.
|
|
163
|
+
- **Confidential (internal) notes:** If someone @mentions the bot in a confidential note, the todo body contains that internal text and the agent will process it. The bot's reply is always posted as a **public** note, potentially exposing internal discussion. GitLab's todo API does not expose note visibility, so the adapter cannot filter this. Avoid @mentioning the bot in confidential notes.
|
|
164
|
+
- Requires `read_api` + `api` PAT scopes. Group-level or project-level tokens work if they have these scopes.
|
|
165
|
+
- Todos for Epics, Designs, and Alerts are skipped (only Issues and MRs are processed).
|
|
166
|
+
|
|
167
|
+
## Starting the Channel
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
qwen channel start my-gitlab
|
|
171
|
+
```
|
|
@@ -277,6 +277,26 @@ The deterministic halves of the pipeline — argument parsing (`qwen review pars
|
|
|
277
277
|
|
|
278
278
|
Every run ends with one machine-readable line (`Review complete: <target> — <disposition>`), so scripts and CI wrappers can detect completion and outcome with a single `^Review complete: ` match.
|
|
279
279
|
|
|
280
|
+
## Headless runs (`qwen review run`)
|
|
281
|
+
|
|
282
|
+
`/review` is interactive. When a script or CI job needs to run a review and act on its outcome, use the headless wrapper:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
qwen review run [target] [--json] [--fail-on request-changes] [--comment] [--quiet]
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
`target` is a PR number, a PR URL, or a file path; omit it to review the local working tree. The command runs this build's own CLI non-interactively (with stdin closed, so slash-command detection survives), streams the child's progress to **stderr**, and prints the verdict to **stdout** — or, with `--json`, the full result object. The verdict is read from the artifact `compose-review` writes (the same JSON the skill treats as the verdict authority), never parsed from the model's prose.
|
|
289
|
+
|
|
290
|
+
The exit code is the contract a gate should read:
|
|
291
|
+
|
|
292
|
+
| Exit | Meaning |
|
|
293
|
+
| ---- | ------------------------------------------------------------------------------------------------- |
|
|
294
|
+
| `0` | The review completed (whatever it decided) |
|
|
295
|
+
| `1` | It never reached a verdict — the child failed, timed out, or left no composed artifact |
|
|
296
|
+
| `3` | It completed with `REQUEST_CHANGES` **and** `--fail-on request-changes` was set (opt-in blocking) |
|
|
297
|
+
|
|
298
|
+
`3` (not `2`) lets a gate distinguish "the review is blocking" from "the tool broke" — yargs already uses `1` for usage errors — without parsing any output. `--timeout-minutes` (default 120, floored at 1) terminates a hung review and exits `1`, and cancelling the command (Ctrl+C / SIGTERM) terminates the review's process group rather than orphaning it.
|
|
299
|
+
|
|
280
300
|
## Cross-file Impact Analysis
|
|
281
301
|
|
|
282
302
|
A dedicated cross-file tracer (Agent 1c) owns this walk end-to-end. When code changes modify exported functions, classes, or interfaces, it searches for all callers and checks compatibility:
|
|
@@ -103,6 +103,24 @@ HTTP hooks send hook input as POST requests to specified URLs. They support URL
|
|
|
103
103
|
- **DNS Validation**: Validates domain resolution before requests to prevent DNS rebinding attacks
|
|
104
104
|
- **Environment Variable Interpolation**: `${VAR}` syntax, only allows variables in `allowedEnvVars` whitelist
|
|
105
105
|
|
|
106
|
+
#### Allowing private-network hooks (managed environments only)
|
|
107
|
+
|
|
108
|
+
By default, HTTP hooks cannot target private or link-local IP ranges. In platform-managed environments where the hook receiver is a first-party, VPC-internal endpoint (for example, an internal API gateway resolving to `172.16.0.0/12`), you can relax the IP-range checks with:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"security": {
|
|
113
|
+
"allowPrivateNetworkHooks": true
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- This setting is **only honored from User, System, and SystemDefaults settings scopes**. A value set in Workspace (project) settings is ignored and logged as a warning, so a cloned repository can never self-grant this bypass.
|
|
119
|
+
- The flag relaxes only the general private/CGNAT/link-local **range** checks. Cloud metadata endpoints stay blocked in every configuration: the `BLOCKED_HOSTS` list is matched literally (`metadata.google.internal`, `metadata.azure.internal`, ...), and the metadata IPs `169.254.169.254` and `100.100.100.200` are blocked in all serialized forms (including IPv4-mapped IPv6 such as `::ffff:a9fe:a9fe`) and after DNS resolution.
|
|
120
|
+
- The `security.allowedHttpHookUrls` whitelist still applies independently. In managed environments, pair this flag with a whitelist so only the intended internal endpoints are reachable.
|
|
121
|
+
|
|
122
|
+
> **Warning:** Enabling this flag lets hooks reach internal infrastructure on your network. Enable it only in trusted, managed settings — never in a repository you do not control.
|
|
123
|
+
|
|
106
124
|
**Example:**
|
|
107
125
|
|
|
108
126
|
```json
|
|
@@ -539,6 +557,8 @@ Sequential UserPromptSubmit hooks can append `additionalContext` to `prompt`; `s
|
|
|
539
557
|
- `reason`: human-readable explanation for the decision
|
|
540
558
|
- `hookSpecificOutput.additionalContext`: additional context to append to the prompt (optional)
|
|
541
559
|
|
|
560
|
+
When sent to the model, injected `additionalContext` is appended as its own message part wrapped in a reserved `<qwen:user-prompt-submit-context>...</qwen:user-prompt-submit-context>` tag, so it stays distinguishable from user-authored text in model history and session transcripts. Angle brackets in hook output are escaped before wrapping, so hook content cannot close or forge the tag. The session transcript also records the user's original prompt text separately; the interactive TUI and the ACP/export transcript-replay path display that original text rather than the injected context.
|
|
561
|
+
|
|
542
562
|
**Note**: Since UserPromptSubmitOutput extends HookOutput, all standard fields are available but only additionalContext in hookSpecificOutput is specifically defined for this event.
|
|
543
563
|
|
|
544
564
|
**Example Output**:
|
|
@@ -25,14 +25,28 @@ Only `subagent_type: "fork"` accepts `fork_turns`:
|
|
|
25
25
|
|
|
26
26
|
Tool responses and pure system reminders do not count as user turns. Regular named subagents and agent-team teammates do not accept `fork_turns`; they keep their separate conversation context.
|
|
27
27
|
|
|
28
|
+
## Restricting Fork Tool Execution with `fork_tools`
|
|
29
|
+
|
|
30
|
+
Only `subagent_type: "fork"` accepts `fork_tools`. The array may contain exact canonical tool names, such as `read_file` and `grep_search`, or MCP server patterns such as `mcp__github`. The fork still receives the same model-visible tool declarations as an unrestricted fork, preserving its prompt-cache prefix, but its task prompt identifies the restriction and a call not matched by `fork_tools` is rejected before scheduling or approval.
|
|
31
|
+
|
|
32
|
+
- Omitting `fork_tools` preserves unrestricted fork execution.
|
|
33
|
+
- An empty array rejects every tool call.
|
|
34
|
+
- `*` is not accepted; omit `fork_tools` when unrestricted execution is intended.
|
|
35
|
+
- Tool names cannot have surrounding whitespace. Wildcards are accepted only as `mcp__*` or as a trailing MCP tool-prefix pattern such as `mcp__github__read_*`.
|
|
36
|
+
- `mcp__*` intentionally allows every MCP tool while still denying unlisted built-in tools.
|
|
37
|
+
- Shell command argument patterns are not supported. Listing `run_shell_command` allows that tool to proceed through its normal permission checks but does not pre-approve any command.
|
|
38
|
+
|
|
39
|
+
This is a per-invocation restriction supplied by the caller. It narrows a child fork's capabilities but is not an administrator-enforced security sandbox because the caller can omit or expand the list.
|
|
40
|
+
|
|
28
41
|
### How Fork Differs from Named Subagents
|
|
29
42
|
|
|
30
|
-
| | Named Subagent | Fork Subagent
|
|
31
|
-
| ------------- | -------------------------------------------------------------- |
|
|
32
|
-
| Context | Starts fresh with no parent conversation history | Inherits all parent history by default; `fork_turns` can select a bounded recent window
|
|
33
|
-
| System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing)
|
|
34
|
-
|
|
|
35
|
-
|
|
|
43
|
+
| | Named Subagent | Fork Subagent |
|
|
44
|
+
| ------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
45
|
+
| Context | Starts fresh with no parent conversation history | Inherits all parent history by default; `fork_turns` can select a bounded recent window |
|
|
46
|
+
| System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing) |
|
|
47
|
+
| Tools | Configured declaration set | Keeps the parent-derived declaration set; `fork_tools` can independently narrow execution without changing that set |
|
|
48
|
+
| Execution | Background by default; supports an explicit foreground opt-out | Always detached; parent continues immediately |
|
|
49
|
+
| Use case | Specialized tasks (testing, docs) | Parallel tasks that need the current context |
|
|
36
50
|
|
|
37
51
|
### When Fork is Used
|
|
38
52
|
|
|
@@ -46,9 +60,9 @@ The AI automatically uses fork when it needs to:
|
|
|
46
60
|
|
|
47
61
|
All forks share the parent's exact API request prefix (system prompt, tools, conversation history), enabling DashScope prompt cache hits. When 3 forks run in parallel, the shared prefix is cached once and reused — saving 80%+ token costs compared to independent subagents.
|
|
48
62
|
|
|
49
|
-
### Recursive
|
|
63
|
+
### Recursive Delegation Prevention
|
|
50
64
|
|
|
51
|
-
Fork children cannot
|
|
65
|
+
Fork children cannot spawn any further sub-agent. This is enforced at runtime — if a fork calls the Agent tool, it receives an error instructing it to execute tasks directly.
|
|
52
66
|
|
|
53
67
|
### Current Limitation
|
|
54
68
|
|
|
@@ -218,17 +218,19 @@ remediation.
|
|
|
218
218
|
|
|
219
219
|
The daemon also exposes workspace file helpers:
|
|
220
220
|
|
|
221
|
-
- `GET /file` reads text files
|
|
221
|
+
- `GET /file` reads text files. Full-snapshot responses return a raw-byte
|
|
222
|
+
`sha256:<hex>` hash; finite-line windows from files above 256 KiB omit it.
|
|
222
223
|
- `GET /file/bytes` reads bounded raw byte windows and returns base64 content.
|
|
223
224
|
- `POST /file/write` creates or replaces text files.
|
|
224
225
|
- `POST /file/edit` applies one exact text replacement.
|
|
225
226
|
|
|
226
227
|
Write/edit are **strict mutation routes**: even on loopback they require a
|
|
227
228
|
configured bearer token, otherwise they return `token_required`. Replacements
|
|
228
|
-
and edits require the latest `expectedHash` from `GET /file`
|
|
229
|
-
`GET /file/bytes`).
|
|
230
|
-
|
|
231
|
-
|
|
229
|
+
and edits require the latest `expectedHash` from a full-snapshot `GET /file`
|
|
230
|
+
(or a full-window `GET /file/bytes`). A partial large-file window cannot be
|
|
231
|
+
used as an optimistic-concurrency token. `create` never overwrites. Explicit
|
|
232
|
+
writes to ignored paths are allowed but audited. Binary writes,
|
|
233
|
+
delete/move/mkdir, and recursive parent creation are not part of this surface.
|
|
232
234
|
|
|
233
235
|
### 3. Open a session
|
|
234
236
|
|
package/bundled/review/SKILL.md
CHANGED
|
@@ -444,7 +444,7 @@ An agent that finds nothing must say so **and say what it walked** — `No issue
|
|
|
444
444
|
| `4` | **Performance & efficiency.** N+1s, leaks, needless re-renders, bad data structures, bundle size. **Reproduces the PR's claimed numbers** rather than trusting them — confirms a cheap deterministic claim (bundle bytes, tree-shake) or flags an unreproducible/unsubstantiated benchmark as unverified. |
|
|
445
445
|
| `5` | **Test coverage.** Specific untested paths in the diff, never "coverage is low"; a missing test is a Suggestion. **Mutation-tests the tests the diff adds/changes** — a test that stays green when the code under it is broken is vacuous — a Suggestion, Critical only when it asserts the opposite, was weakened in-diff, or lets a named incorrect behaviour ship (report the behaviour, not the gap). |
|
|
446
446
|
| `6a` `6b` `6c` | **Undirected audit, three personas** — attacker, 3 AM oncall, six-months-later maintainer. The framings force diverse paths; the union of what they find is the point, so all three run. |
|
|
447
|
-
| `7` | **Build & test verification** (needs a local tree). Runs _one_ build and _one_ test command, and the **test-efficacy probe** — which reverts the diff's source, keeps its tests, and reports the ones that pass anyway. Its evidence is the commands it ran. `Source: [build]` / `[test]`, never `[review]`.
|
|
447
|
+
| `7` | **Build & test verification** (needs a local tree). Runs _one_ build and _one_ test command, and the **test-efficacy probe** — which reverts the diff's source, keeps its tests, and reports the ones that pass anyway, and deletes individual added safety statements (mutants) to find the ones no test notices. Its evidence is the commands it ran. `Source: [build]` / `[test]`, never `[review]`. |
|
|
448
448
|
| `test-matrix` | **Test coverage matrix** (Step 3B). Maps each behavioural change to the test that exercises it — the pairing a territory agent cannot see, because it holds either the implementation or the test, rarely both. |
|
|
449
449
|
| `invariant-a` `invariant-b` `invariant-c` | **Whole-file invariants** on a `heavy` file, one checklist slice each: (a) mutable fields, timers, collections; (b) retry counters, ignored return values, error taxonomies; (c) config fields, early returns. |
|
|
450
450
|
|
|
@@ -4,71 +4,75 @@ import {
|
|
|
4
4
|
MINIMUM_MAX_HEIGHT,
|
|
5
5
|
MaxSizedBox,
|
|
6
6
|
setMaxSizedBoxDebugging
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-FS674JW4.js";
|
|
8
|
+
import "./chunk-45IOTAUS.js";
|
|
9
9
|
import "./chunk-SV5PQVQE.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-2IIJTXYF.js";
|
|
11
|
+
import "./chunk-IGTHU3T4.js";
|
|
12
12
|
import "./chunk-5QWWOFGG.js";
|
|
13
13
|
import "./chunk-YDLJGZHL.js";
|
|
14
14
|
import "./chunk-2MIN6GRR.js";
|
|
15
15
|
import "./chunk-QHTIBUWB.js";
|
|
16
16
|
import "./chunk-RKUWKYED.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-54YCNSK5.js";
|
|
18
|
+
import "./chunk-5M6IDOMF.js";
|
|
18
19
|
import "./chunk-TWPJO254.js";
|
|
19
20
|
import "./chunk-H6XPXXMH.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-AOHY3QJ3.js";
|
|
22
|
+
import "./chunk-5NNHICSA.js";
|
|
23
|
+
import "./chunk-SHN4KHDK.js";
|
|
24
|
+
import "./chunk-JXVC2PL3.js";
|
|
24
25
|
import "./chunk-KRXPRVGL.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-6PVPNMXU.js";
|
|
27
|
+
import "./chunk-ZMOJ7ISP.js";
|
|
27
28
|
import "./chunk-IRH27ZC2.js";
|
|
28
29
|
import "./chunk-QHWCP53L.js";
|
|
29
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-TEGJSJDF.js";
|
|
31
|
+
import "./chunk-TIRRPCFS.js";
|
|
32
|
+
import "./chunk-O6GEWCJA.js";
|
|
30
33
|
import "./chunk-T26EAKDL.js";
|
|
31
|
-
import "./chunk-6PVPNMXU.js";
|
|
32
34
|
import "./chunk-CPBF7KYF.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-4KP2F2TE.js";
|
|
36
|
+
import "./chunk-3APUUXRF.js";
|
|
37
|
+
import "./chunk-THVU3RNH.js";
|
|
38
|
+
import "./chunk-LHKCY7DY.js";
|
|
39
|
+
import "./chunk-6FMJLI5M.js";
|
|
40
|
+
import "./chunk-CBBP4BMC.js";
|
|
38
41
|
import "./chunk-S6LOFUVP.js";
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-K623ENWT.js";
|
|
43
|
+
import "./chunk-AQ37AY7B.js";
|
|
44
|
+
import "./chunk-N4ACHWNH.js";
|
|
41
45
|
import "./chunk-ZPJWUGCS.js";
|
|
42
|
-
import "./chunk-
|
|
46
|
+
import "./chunk-D4HTUMGX.js";
|
|
43
47
|
import "./chunk-NAVJD2PQ.js";
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
48
|
+
import "./chunk-LOY7RWQG.js";
|
|
49
|
+
import "./chunk-E6CJ2SMM.js";
|
|
46
50
|
import "./chunk-DGEIYUC3.js";
|
|
47
51
|
import "./chunk-MPHPFVKK.js";
|
|
48
52
|
import "./chunk-GLNBDYUX.js";
|
|
49
53
|
import "./chunk-DJ2GSRLV.js";
|
|
50
|
-
import "./chunk-
|
|
51
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-6CQWRWUC.js";
|
|
55
|
+
import "./chunk-Z3S5EMOW.js";
|
|
52
56
|
import "./chunk-2J3OJGTL.js";
|
|
53
57
|
import "./chunk-P3QQPMQA.js";
|
|
54
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-XQK4XXTN.js";
|
|
55
59
|
import "./chunk-GLCZKT5V.js";
|
|
56
|
-
import "./chunk-
|
|
57
|
-
import "./chunk-
|
|
60
|
+
import "./chunk-QDK4F2N5.js";
|
|
61
|
+
import "./chunk-DUNI4EBW.js";
|
|
58
62
|
import "./chunk-VGC4I5JJ.js";
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-
|
|
62
|
-
import "./chunk-
|
|
63
|
+
import "./chunk-3I6DUGQD.js";
|
|
64
|
+
import "./chunk-7ULQIS27.js";
|
|
65
|
+
import "./chunk-MM7TH7ZM.js";
|
|
66
|
+
import "./chunk-HIVKI6O6.js";
|
|
63
67
|
import "./chunk-46UV252V.js";
|
|
64
68
|
import "./chunk-ZBVS26BY.js";
|
|
65
|
-
import "./chunk-
|
|
66
|
-
import "./chunk-
|
|
67
|
-
import "./chunk-
|
|
68
|
-
import "./chunk-
|
|
69
|
+
import "./chunk-Q3T5KA2V.js";
|
|
70
|
+
import "./chunk-R2XWGR75.js";
|
|
71
|
+
import "./chunk-HC45LTEN.js";
|
|
72
|
+
import "./chunk-QARJNL2V.js";
|
|
69
73
|
import "./chunk-W4RQUHY3.js";
|
|
70
|
-
import "./chunk-
|
|
71
|
-
import "./chunk-
|
|
74
|
+
import "./chunk-G7XXKQYS.js";
|
|
75
|
+
import "./chunk-E2BHWIDT.js";
|
|
72
76
|
import "./chunk-VOQXFAY5.js";
|
|
73
77
|
import "./chunk-75DOP5OR.js";
|
|
74
78
|
import "./chunk-DMTGGOSA.js";
|