@qwen-code/qwen-code 0.22.0 → 0.22.2-preview.0
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/computer-use/SKILL.md +229 -0
- package/bundled/computer-use/agents/openai.yaml +4 -0
- package/bundled/coordinate/SKILL.md +5 -5
- package/bundled/qc-helper/docs/configuration/auth.md +7 -7
- package/bundled/qc-helper/docs/configuration/model-providers.md +70 -9
- package/bundled/qc-helper/docs/configuration/settings.md +40 -40
- package/bundled/qc-helper/docs/extension/introduction.md +3 -1
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +12 -0
- package/bundled/qc-helper/docs/features/channels/dws.md +120 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +3 -3
- package/bundled/qc-helper/docs/features/code-review.md +25 -21
- package/bundled/qc-helper/docs/features/commands.md +2 -2
- package/bundled/qc-helper/docs/features/computer-use.md +57 -51
- package/bundled/qc-helper/docs/features/mcp.md +35 -12
- package/bundled/qc-helper/docs/features/sub-agents.md +1 -1
- package/bundled/qc-helper/docs/features/worktree.md +1 -1
- package/bundled/qc-helper/docs/overview.md +1 -1
- package/bundled/qc-helper/docs/quickstart.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +29 -6
- package/bundled/review/SKILL.md +119 -417
- package/bundled/review/references/aone.md +18 -0
- package/bundled/review/references/persistence.md +105 -0
- package/bundled/review/references/posting.md +270 -0
- package/chunks/MaxSizedBox-XYQOMOBE.js +112 -0
- package/chunks/{StandaloneSessionPicker-KTHPCSR6.js → StandaloneSessionPicker-KFMJILVY.js} +87 -86
- package/chunks/{acp-startup-profiler-T4GEAPLX.js → acp-startup-profiler-GNYAL6LI.js} +2 -2
- package/chunks/{acpAgent-CRY3JZ5O.js → acpAgent-KNFTTDWL.js} +2216 -1931
- package/chunks/agent-6V6MZOA7.js +97 -0
- package/chunks/agent-headless-3ZC4LX3E.js +87 -0
- package/chunks/{anthropicContentGenerator-Y2OX6LS4.js → anthropicContentGenerator-U76GTVB6.js} +128 -58
- package/chunks/{artifact-tool-SBXMTVCB.js → artifact-tool-XDJCZZCF.js} +2 -2
- package/chunks/{askUserQuestion-KEQJRFD6.js → askUserQuestion-ZXXERLEV.js} +2 -2
- package/chunks/bridge-LFFLHLU5.js +119 -0
- package/chunks/{ca-D3F4S6NG.js → ca-7HPYOYSZ.js} +3 -0
- package/chunks/{channel-management-service-IRTT7RNE.js → channel-management-service-HXXS3HOZ.js} +4 -4
- package/chunks/channel-settings-store-CAL2HWAH.js +117 -0
- package/chunks/{channel-worker-group-BJNMR2MP.js → channel-worker-group-EVDC2P4K.js} +8 -7
- package/chunks/{channel-worker-manager-EMA7CQDJ.js → channel-worker-manager-IJJZHGEI.js} +8 -7
- package/chunks/{channel-worker-supervisor-F6I6WSWW.js → channel-worker-supervisor-YSKB5GVB.js} +12 -7
- package/chunks/{chunk-2TRNCJK4.js → chunk-27ONXAFY.js} +1 -1
- package/chunks/{read-package-up-UXSW3YPB.js → chunk-2EAZ43JQ.js} +1 -0
- package/chunks/{chunk-DB2OKNTU.js → chunk-2FN2HNTI.js} +2 -2
- package/chunks/{chunk-KM73TBQ4.js → chunk-2LD5U7Q3.js} +31 -0
- package/chunks/{chunk-QJHPWLZC.js → chunk-2MHGD7EE.js} +1 -1
- package/chunks/{chunk-A5F2YNO6.js → chunk-2NNTE2ED.js} +245 -10
- package/chunks/{chunk-Z3JMO2CH.js → chunk-2SERYG4T.js} +1 -1
- package/chunks/{chunk-4J7OPYNS.js → chunk-2YDYDDE2.js} +6 -6
- package/chunks/{chunk-SE55HQGF.js → chunk-3B5DCAQU.js} +74 -52
- package/chunks/{chunk-UIRLQ3N7.js → chunk-3BV7TZNQ.js} +3 -3
- package/chunks/{chunk-2Z6LSQMF.js → chunk-3FSBMAYD.js} +1 -1
- package/chunks/{chunk-S4C4JJKE.js → chunk-3UXJFOB3.js} +5 -5
- package/chunks/{chunk-DJEHYM4H.js → chunk-3UZCLCXR.js} +3 -3
- package/chunks/{chunk-BUGYW6FB.js → chunk-4IDJQOCO.js} +1 -1
- package/chunks/chunk-4K7NQDCG.js +104 -0
- package/chunks/{chunk-WS7PAXXR.js → chunk-4N6UAPD3.js} +18 -13
- package/chunks/{chunk-VYC7XFYV.js → chunk-4PLAO7FS.js} +5 -5
- package/chunks/{chunk-UZPYR3EV.js → chunk-4TPAG3O7.js} +1 -1
- package/chunks/{chunk-2E3V7G6Y.js → chunk-4X5GYZFO.js} +55 -50
- package/chunks/{chunk-XYQHT3AW.js → chunk-4Z3PSHN4.js} +2 -2
- package/chunks/{chunk-PDL6LKB5.js → chunk-5AFPOEY3.js} +1 -1
- package/chunks/{chunk-BB5IMQCV.js → chunk-5CW26JIE.js} +2 -2
- package/chunks/{chunk-7KOFLDEP.js → chunk-5JTIYALA.js} +1 -1
- package/chunks/{chunk-U2UYQMM6.js → chunk-5NV2AN56.js} +3 -3
- package/chunks/{chunk-CXJHQVEK.js → chunk-5PA6UEYA.js} +4 -0
- package/chunks/{chunk-IBJ5S45N.js → chunk-5T4LWWNX.js} +2 -2
- package/chunks/{chunk-VUMLT7E5.js → chunk-5Y2JCJAH.js} +2 -2
- package/chunks/{chunk-BEGIBJAZ.js → chunk-6HOU52QX.js} +4 -4
- package/chunks/{chunk-GAHYKJPV.js → chunk-6US7BF3G.js} +7 -59
- package/chunks/{chunk-3CLIDIVQ.js → chunk-73WFGVIZ.js} +3 -3
- package/chunks/{chunk-ZZUVC6RI.js → chunk-76WGY6LW.js} +3 -3
- package/chunks/{chunk-XLDFW44M.js → chunk-77TOMRBG.js} +3 -3
- package/chunks/{chunk-ND7NOI4P.js → chunk-7CWEZQ6T.js} +0 -15
- package/chunks/{chunk-DWCKACFL.js → chunk-7DPKPBOQ.js} +2 -2
- package/chunks/{chunk-X7V3N6YH.js → chunk-7JJUFI36.js} +218 -37
- package/chunks/{chunk-45NQKMYB.js → chunk-7JPW6IYH.js} +1 -1
- package/chunks/{chunk-HDKCKCYO.js → chunk-7QGEJI7M.js} +1 -1
- package/chunks/{chunk-PHJJ3RVO.js → chunk-7XKW4CVK.js} +7 -15
- package/chunks/{chunk-O5Z7EB6Y.js → chunk-AYHQZBJ4.js} +170 -207
- package/chunks/{chunk-7DYNJFES.js → chunk-AYVIGUUK.js} +6 -1
- package/chunks/{chunk-43T5WDQ7.js → chunk-BFSFJR3D.js} +1 -1
- package/chunks/{chunk-OARZJFZX.js → chunk-BGWT7VBV.js} +4 -4
- package/chunks/{chunk-AP3B7LKD.js → chunk-BKDAF7ES.js} +2 -2
- package/chunks/{chunk-B6UBOIFE.js → chunk-BQBUZDDH.js} +14 -11
- package/chunks/{chunk-6PCOVQO2.js → chunk-BU7OUDQB.js} +8 -8
- package/chunks/{chunk-VLRBJ24J.js → chunk-BVE5EMIG.js} +2 -2
- package/chunks/{chunk-6UQSU7CQ.js → chunk-C2BAEV64.js} +58 -107
- package/chunks/{chunk-QKBYFU2Q.js → chunk-CFKIH3D3.js} +21 -1
- package/chunks/{chunk-URN2JIAQ.js → chunk-CITGRGCM.js} +2 -1
- package/chunks/{chunk-WU5E4HMO.js → chunk-CPPYZHBN.js} +1 -1
- package/chunks/{chunk-T6XLJRQY.js → chunk-D6XO27Z5.js} +36509 -5182
- package/chunks/{chunk-Q54XG7IX.js → chunk-DEYPMJPD.js} +1 -1
- package/chunks/{chunk-KSPRQSB4.js → chunk-DIMEPKCW.js} +52 -12
- package/chunks/{chunk-I432KXWD.js → chunk-DP7LABIB.js} +1 -1
- package/chunks/{chunk-P47E4SJC.js → chunk-DWRFOH3G.js} +3 -3
- package/chunks/{chunk-J5ZDDUKM.js → chunk-DX5FZGHZ.js} +4 -4
- package/chunks/{chunk-36OF5PRW.js → chunk-E4I5MVBR.js} +7 -3
- package/chunks/{chunk-AW27A43Y.js → chunk-E55H6BZ7.js} +93 -1
- package/chunks/{chunk-K623ENWT.js → chunk-E6FGMDFQ.js} +4 -0
- package/chunks/{chunk-YZBDKFRQ.js → chunk-EADEZDPO.js} +993 -895
- package/chunks/{chunk-5XUTPXQU.js → chunk-EAV3TENS.js} +6 -9
- package/chunks/{chunk-LI4YHTQK.js → chunk-EB4VDXNI.js} +1 -1
- package/chunks/{chunk-JOLJTKIG.js → chunk-EC5BONC3.js} +1 -1
- package/chunks/{chunk-W4CRPSC5.js → chunk-ELY4QVIB.js} +1 -1
- package/chunks/{chunk-AVCCKIZ6.js → chunk-EWBY3PFB.js} +1 -1
- package/chunks/chunk-FBX2SDQ4.js +48 -0
- package/chunks/{chunk-C72BXMJ5.js → chunk-FJWICLG7.js} +1 -1
- package/chunks/{chunk-LDGWX737.js → chunk-FN5C6C7G.js} +160 -59
- package/chunks/{chunk-3ZFJUBTP.js → chunk-FPH6TXD3.js} +1 -1
- package/chunks/{chunk-WRT324N6.js → chunk-FVDQ5E67.js} +3 -3
- package/chunks/{chunk-2A4C2MEG.js → chunk-FY62MBPS.js} +35 -12
- package/chunks/{chunk-VFACN2CE.js → chunk-GNMJNDZE.js} +1 -1
- package/chunks/{chunk-6QSA4JHL.js → chunk-GQAIZL3H.js} +2772 -814
- package/chunks/{chunk-PZRUV52H.js → chunk-GTUKW3I6.js} +20 -2
- package/chunks/{chunk-7DMTAQJ6.js → chunk-GXWY24QS.js} +132 -49
- package/chunks/chunk-GYTKQYDB.js +23 -0
- package/chunks/{chunk-VMJL7RH6.js → chunk-GZJUCMH4.js} +4 -4
- package/chunks/{chunk-2GXYDNXP.js → chunk-H2MDBYLL.js} +8 -8
- package/chunks/{chunk-RDG44S5I.js → chunk-H4JK2A2V.js} +2 -2
- package/chunks/{chunk-FVBVJEBG.js → chunk-HOANA6GC.js} +10 -8
- package/chunks/{chunk-AO4M6NMD.js → chunk-I6HWGOWD.js} +60 -20
- package/chunks/{chunk-7IV52LTO.js → chunk-I6VVOZDK.js} +2 -2
- package/chunks/{chunk-SQS55KR4.js → chunk-IJVDHPKD.js} +2 -2
- package/chunks/{chunk-QS4ENGVF.js → chunk-IKN3IUJP.js} +9 -8
- package/chunks/{chunk-2UZJWSVD.js → chunk-ILPXSKGQ.js} +2 -2
- package/chunks/{chunk-OVH5Y7KS.js → chunk-IN66KO3N.js} +19 -3
- package/chunks/{chunk-ZRYQMWEP.js → chunk-IPQA4SR5.js} +2 -2
- package/chunks/{chunk-AZF6SME3.js → chunk-JECO75XD.js} +3 -3
- package/chunks/{chunk-MQP3MHWN.js → chunk-JJJD6QCC.js} +21 -15
- package/chunks/chunk-JLGFGPZJ.js +346 -0
- package/chunks/{chunk-WZDM44SB.js → chunk-JUIJ3FXC.js} +7 -7
- package/chunks/{chunk-A6NRNRKE.js → chunk-JVPFTDBK.js} +1 -1
- package/chunks/{chunk-2J3OJGTL.js → chunk-K2OJUPOE.js} +1 -21
- package/chunks/{chunk-GHY5OIYP.js → chunk-K5PNJ6VL.js} +13 -13
- package/chunks/{chunk-NW35NVFN.js → chunk-K6FURWIX.js} +4 -4
- package/chunks/{chunk-6NFAEG54.js → chunk-KOJ6MHD5.js} +24 -13
- package/chunks/{chunk-A5F63FEW.js → chunk-L436XFLJ.js} +1 -1
- package/chunks/{chunk-GIWB5QLV.js → chunk-LJP2BBMK.js} +4 -4
- package/chunks/{chunk-FYZMB6DB.js → chunk-LKOSBI2M.js} +11 -11
- package/chunks/{create-sub-session-XBCVGNFU.js → chunk-LRKMQPMD.js} +4 -6
- package/chunks/{chunk-5HJUPACR.js → chunk-LRLMDV5X.js} +2 -2
- package/chunks/{chunk-MHG6NDS6.js → chunk-MB4OCRQ2.js} +2 -2
- package/chunks/{chunk-IIWGSX4L.js → chunk-MI7CMXPU.js} +1 -1
- package/chunks/{chunk-ZLCT4C5A.js → chunk-MZS7GEC7.js} +1 -1
- package/chunks/{chunk-WWUSHZ7M.js → chunk-N4B7VPXK.js} +5 -5
- package/chunks/{chunk-BMCSKS37.js → chunk-NUHCXGAD.js} +6 -6
- package/chunks/{chunk-XZJKSETB.js → chunk-O3BUXIPM.js} +3 -3
- package/chunks/{chunk-4XPSVIED.js → chunk-O5YGAEQS.js} +6 -6
- package/chunks/{chunk-ZRFUT5VV.js → chunk-OAAPGZVH.js} +7 -7
- package/chunks/{chunk-UU4WC7DK.js → chunk-OGZAQWJP.js} +82 -12
- package/chunks/{chunk-5XHAOUWD.js → chunk-OI2DR6QB.js} +3 -3
- package/chunks/{chunk-EFB657PR.js → chunk-OX44MOAN.js} +3 -3
- package/chunks/{chunk-LURJYO2T.js → chunk-OZ6KS6KW.js} +4 -0
- package/chunks/{chunk-4F5WV4RF.js → chunk-PAJGKZAA.js} +281 -10
- package/chunks/{chunk-HIK2OF33.js → chunk-PVBT5QPD.js} +1 -1
- package/chunks/{chunk-MPHLIJYL.js → chunk-QB5DD75E.js} +14 -8
- package/chunks/chunk-QHMLYMMS.js +32 -0
- package/chunks/{chunk-4CWDWDL6.js → chunk-RCDXSEJ5.js} +1 -1
- package/chunks/{chunk-L4HVF7LM.js → chunk-RQ5ASDFQ.js} +3 -3
- package/chunks/{chunk-PXOJLJ5W.js → chunk-RQAMNZ4Y.js} +333 -184
- package/chunks/{chunk-K52PZNU4.js → chunk-RRKNX553.js} +2 -2
- package/chunks/{chunk-RPJQ3O4M.js → chunk-RUJTCU46.js} +31 -41
- package/chunks/{chunk-62JOGZL5.js → chunk-RUQBJS34.js} +199 -87
- package/chunks/chunk-RXFQM6FQ.js +42 -0
- package/chunks/{chunk-SJ4HB27T.js → chunk-SDVF6A42.js} +3 -3
- package/chunks/{chunk-TBVSALA3.js → chunk-SKNVVYIJ.js} +3 -3
- package/chunks/{chunk-JGUBDRBC.js → chunk-SLEWBQWM.js} +3 -3
- package/chunks/{chunk-UUQFJILB.js → chunk-SQPOJ4ZI.js} +15 -3
- package/chunks/{chunk-ISJMN3ML.js → chunk-T2CRBIDJ.js} +1 -1
- package/chunks/{chunk-MZKWFWVG.js → chunk-T2HMXHYA.js} +6 -6
- package/chunks/{chunk-FEMQ6Y7W.js → chunk-T6OODF2U.js} +47 -126
- package/chunks/{chunk-KVGR4MCF.js → chunk-TOF4UZHH.js} +3 -3
- package/chunks/{chunk-7HFULI45.js → chunk-TQYZG5DU.js} +3 -3
- package/chunks/{chunk-LD5VIJ7S.js → chunk-TWSKM647.js} +1 -1
- package/chunks/{chunk-25NESM4G.js → chunk-TWUA5EIL.js} +29 -5
- package/chunks/{chunk-6FRJEE2S.js → chunk-U66FXEH2.js} +5 -5
- package/chunks/{chunk-7NBVNAJJ.js → chunk-UCSV2IZW.js} +3 -3
- package/chunks/chunk-UVDOONRU.js +20 -0
- package/chunks/{chunk-FDD2IUEL.js → chunk-UX3IFLJM.js} +229 -21
- package/chunks/{chunk-YDJRMQU4.js → chunk-V3GINY6K.js} +3 -3
- package/chunks/{chunk-XL5K4SVK.js → chunk-VL4YX3FH.js} +1 -1
- package/chunks/{chunk-ZS5BHEPD.js → chunk-VLY6XOBY.js} +1 -1
- package/chunks/{chunk-KIVGVFMM.js → chunk-VUZY6MEQ.js} +16 -4
- package/chunks/{chunk-OE52YHCZ.js → chunk-W2WRNJKX.js} +11 -11
- package/chunks/{chunk-YLFLHKDL.js → chunk-W3N5XAZ6.js} +1 -1
- package/chunks/{chunk-IWOWEENB.js → chunk-WBT3STGU.js} +385 -25
- package/chunks/{chunk-S3G6YFQC.js → chunk-WEGXPP5E.js} +1 -1
- package/chunks/{chunk-RDQ7QB4Y.js → chunk-XJS54K4A.js} +2 -2
- package/chunks/{chunk-7JBHIQS2.js → chunk-XO4NGYRP.js} +7 -13
- package/chunks/{chunk-F6WFNA7U.js → chunk-XZA32HII.js} +3 -6
- package/chunks/{chunk-VEND4KA4.js → chunk-YT5XN3HV.js} +1 -1
- package/chunks/{chunk-NUGZAFR2.js → chunk-ZEADBZLO.js} +147 -6
- package/chunks/chunk-ZELCTN6Y.js +29 -0
- package/chunks/{chunk-TQOF5KBL.js → chunk-ZEZKIS2K.js} +0 -31
- package/chunks/{chunk-IOSEW6KP.js → chunk-ZJG323IA.js} +5 -4
- package/chunks/{chunk-VSNPOSDN.js → chunk-ZKAZP2ZG.js} +107 -12
- package/chunks/{chunk-YMVFIYHV.js → chunk-ZLTEQYNC.js} +2 -2
- package/chunks/{chunk-O5BDEWBC.js → chunk-ZWKGZB2K.js} +3 -3
- package/chunks/chunk-ZYNTSXWK.js +32 -0
- package/chunks/config-utils-YMJNA25D.js +113 -0
- package/chunks/contextCommand-WMPSNKPG.js +108 -0
- package/chunks/{core-runtime-CES6JSVV.js → core-runtime-6TBMEULI.js} +63 -58
- package/chunks/create-sub-session-RVHSWVAP.js +17 -0
- package/chunks/{create-sub-session-UJTPMVOG.js → create-sub-session-SAOMTP62.js} +60 -58
- package/chunks/{cron-create-IKA56DAF.js → cron-create-IJGVR5R2.js} +4 -4
- package/chunks/{cron-delete-K5Q62EGH.js → cron-delete-4N5BI6GL.js} +4 -4
- package/chunks/{cron-list-QBFGAMP7.js → cron-list-2CATIPUX.js} +4 -4
- package/chunks/{daemon-RZZUPGOJ.js → daemon-NAYK4XXU.js} +51 -24
- package/chunks/{daemon-git-worktree-guard-3QY2BQYB.js → daemon-git-worktree-guard-TYLESM6G.js} +338 -92
- package/chunks/daemon-status-provider-YBQAZD3G.js +118 -0
- package/chunks/daemon-trust-policy-O75ZSIJN.js +114 -0
- package/chunks/{daemon-trust-policy-monitor-TK4K7M63.js → daemon-trust-policy-monitor-WWX7I7P6.js} +68 -66
- package/chunks/{de-RYUHH2C6.js → de-X6HLSIFE.js} +1 -0
- package/chunks/deferred-core-runtime-MGCCR6LA.js +116 -0
- package/chunks/{display-image-OEJMJV3S.js → display-image-DR55LL6M.js} +5 -5
- package/chunks/dist-4Q7NTUNB.js +2512 -0
- package/chunks/{dist-ESS34DHC.js → dist-6H6RZ5H6.js} +2 -2
- package/chunks/{dist-LZO24N3E.js → dist-7CKN54NL.js} +1 -1
- package/chunks/{dist-5EV2G6MC.js → dist-DJBNNPLN.js} +1 -1
- package/chunks/{dist-J6P3C52Z.js → dist-FVJZSIO4.js} +28 -7
- package/chunks/{dist-K7IQB53U.js → dist-SATKXKUR.js} +1 -1
- package/chunks/{dist-ES6HNUW2.js → dist-TJUDJTCB.js} +246 -17
- package/chunks/{dist-VVQBOKDH.js → dist-UQUFZDIY.js} +1 -1
- package/chunks/{dist-2OG3PGKO.js → dist-ZBVOXSKF.js} +3 -3
- package/chunks/earlyInputCapture-2EJKJET3.js +109 -0
- package/chunks/{edit-A2633SLR.js → edit-GBDKI5DZ.js} +48 -48
- package/chunks/{en-3RHLPITS.js → en-6MDBWMTG.js} +3 -0
- package/chunks/{enter-worktree-OIAHE2TB.js → enter-worktree-UOZ6ZTP7.js} +7 -8
- package/chunks/{enterPlanMode-SUGIKLR7.js → enterPlanMode-2KTIPPM3.js} +47 -47
- package/chunks/environment-XJ75LJ6N.js +131 -0
- package/chunks/errors-XEI3SJRV.js +115 -0
- package/chunks/{exit-worktree-3UT3SSWT.js → exit-worktree-G2QATUCV.js} +7 -8
- package/chunks/exitPlanMode-AUMYTFIQ.js +85 -0
- package/chunks/{fast-path-3AVP3G35.js → fast-path-TU7U2ETU.js} +28 -7
- package/chunks/{fast-path-settings-WHX3J3ZI.js → fast-path-settings-XMFBYFUH.js} +2 -2
- package/chunks/{fr-4PL5GHG4.js → fr-FTZWF462.js} +1 -0
- package/chunks/{gemini-7PVQWHTH.js → gemini-FKMYDP64.js} +129 -123
- package/chunks/{geminiContentGenerator-B2FOJJDJ.js → geminiContentGenerator-WSHP7CSR.js} +16 -13
- package/chunks/{glob-7YGXE6OV.js → glob-EOM6XK7H.js} +47 -47
- package/chunks/{goal-tools-TLJCE7YZ.js → goal-tools-CNVXMSZD.js} +72 -28
- package/chunks/{grep-6DV6LTON.js → grep-3NLSS32D.js} +6 -6
- package/chunks/handleAutoUpdate-S4CLP36D.js +111 -0
- package/chunks/i18n-XX7U2Q3X.js +126 -0
- package/chunks/{image-gen-7CSCJ73T.js → image-gen-63NN2H5N.js} +9 -11
- package/chunks/initializer-D3CA3272.js +115 -0
- package/chunks/installationInfo-HVDQOSIE.js +109 -0
- package/chunks/{ja-HZ7X7PQO.js → ja-2GL5FKYJ.js} +1 -0
- package/chunks/{keychain-token-storage-MTFTAESK.js → keychain-token-storage-3MGFRYGM.js} +2 -2
- package/chunks/list-XUDSTGT3.js +118 -0
- package/chunks/{list-agents-43XUEXJV.js → list-agents-EXRSHIDJ.js} +2 -2
- package/chunks/loadedSettingsAdapter-ZOJ4QEID.js +112 -0
- package/chunks/{loggingContentGenerator-RNE66CKK.js → loggingContentGenerator-TUDGCVUG.js} +27 -30
- package/chunks/{loop-wakeup-E54KDUXC.js → loop-wakeup-XBPB2BRO.js} +5 -5
- package/chunks/{ls-CGL2UC3H.js → ls-WFONAND2.js} +4 -4
- package/chunks/{lsp-5IKUO5DX.js → lsp-DUKPDUXN.js} +2 -2
- package/chunks/{managed-npm-update-Y3SC3GLJ.js → managed-npm-update-5K4FWFX2.js} +61 -59
- package/chunks/mcp-QJ6AUYE5.js +112 -0
- package/chunks/{monitor-PXYSGSUN.js → monitor-UUHIAGT7.js} +47 -47
- package/chunks/nonInteractiveCli-PAWO75YO.js +185 -0
- package/chunks/{notebook-edit-ISIBJVBR.js → notebook-edit-GZPB3Q57.js} +48 -48
- package/chunks/open-with-auth-4UI3KHUR.js +55 -0
- package/chunks/{openaiContentGenerator-6TBOPEGT.js → openaiContentGenerator-RPP6YBS3.js} +29 -30
- package/chunks/pidfile-RF3WUFKR.js +113 -0
- package/chunks/{processUtils-YK2TDTTU.js → processUtils-ENAY2GSA.js} +2 -2
- package/chunks/prompt-terminal-ledger-4CCXZ2LF.js +107 -0
- package/chunks/{pt-QT5N2Q6Q.js → pt-XN2YWJVM.js} +1 -0
- package/chunks/{qwenContentGenerator-CLDMA2Y4.js → qwenContentGenerator-GLUZVJAU.js} +53 -59
- package/chunks/{qwenOAuth2-DLDR6UC5.js → qwenOAuth2-JIYAWXTW.js} +8 -10
- package/chunks/{read-file-2HOD2ATO.js → read-file-75R5LUWQ.js} +13 -14
- package/chunks/{read-mcp-resource-XYES2B42.js → read-mcp-resource-7A7NFSFL.js} +2 -2
- package/chunks/read-package-up-6T6ICKR7.js +13 -0
- package/chunks/{record-artifact-W3IBTGL7.js → record-artifact-CPJ4IJSD.js} +4 -5
- package/chunks/report-findings-VFM5DENC.js +33 -0
- package/chunks/request-shutdown-AXVOFN5C.js +133 -0
- package/chunks/resumeHistoryUtils-GFPJD2XB.js +120 -0
- package/chunks/ripGrep-FNLXQYBS.js +39 -0
- package/chunks/{ru-STMG5BPD.js → ru-OLTMFJEW.js} +1 -0
- package/chunks/{run-qwen-serve-XJHOW2NY.js → run-qwen-serve-FJD4VMI2.js} +622 -79
- package/chunks/{runtime-J4SPTJRQ.js → runtime-INDSJB4K.js} +73 -71
- package/chunks/{scheduler-VRAEZZ4E.js → scheduler-Z52TCSUG.js} +62 -60
- package/chunks/{sdk-exporters-http-RSIOP3G2.js → sdk-exporters-http-XXSKBD2C.js} +5 -5
- package/chunks/{sdk-impl-CB3KARSK.js → sdk-impl-VPNBLV7I.js} +7 -7
- package/chunks/{send-message-J4VT46OI.js → send-message-A2GXDX3B.js} +10 -31
- package/chunks/serve-GVD2WXVL.js +120 -0
- package/chunks/{server-74ONDK62.js → server-PSN5OOSX.js} +965 -405
- package/chunks/{session-BO6VBWJP.js → session-JPE34X6Q.js} +151 -140
- package/chunks/{settings-35QZNFDG.js → settings-IVGC4UYK.js} +71 -69
- package/chunks/shell-A5PZGPBR.js +95 -0
- package/chunks/{skill-DKEMQSNJ.js → skill-UUXQPDEH.js} +108 -25
- package/chunks/skill-settings-WVRXLTK4.js +120 -0
- package/chunks/spawnChannel-KTURLD4B.js +113 -0
- package/chunks/standalone-update-IRFRNGAA.js +120 -0
- package/chunks/{startInteractiveUI-J2QSGWPU.js → startInteractiveUI-MC4GLL6G.js} +381 -293
- package/chunks/{syntheticOutput-JAXMIMZP.js → syntheticOutput-5AJ444QT.js} +3 -3
- package/chunks/{task-create-I2H322E4.js → task-create-CDJSOEQD.js} +11 -11
- package/chunks/{task-list-3OLIWFTQ.js → task-list-BELMPA75.js} +5 -5
- package/chunks/{task-stop-JAUY6MSY.js → task-stop-U3S3KZG2.js} +2 -2
- package/chunks/{task-update-B3XO4CPI.js → task-update-77VCFDDZ.js} +11 -11
- package/chunks/{team-create-W534PMGX.js → team-create-WO5ZBCFW.js} +48 -48
- package/chunks/{team-delete-Q7GE7RRI.js → team-delete-YWFXX77L.js} +5 -5
- package/chunks/{team-plan-approval-WNV6P6NG.js → team-plan-approval-KAVKRN7U.js} +47 -47
- package/chunks/terminal-image-renderer-SMRRNI6Z.js +116 -0
- package/chunks/theme-manager-A7CPN7F4.js +104 -0
- package/chunks/{todoWrite-FJJTY2TI.js → todoWrite-435EO2CS.js} +4 -4
- package/chunks/{tool-search-Y4KL3LRE.js → tool-search-FBN6OC6U.js} +18 -19
- package/chunks/total-session-admission-B7U6UWKQ.js +114 -0
- package/chunks/trustedFolders-B4LPJBFK.js +124 -0
- package/chunks/{update-relaunch-OHVFN6KF.js → update-relaunch-X5TJVKVG.js} +6 -6
- package/chunks/updateCheck-JCLP5JFT.js +120 -0
- package/chunks/useAutoAcceptIndicator-VBT3NKDM.js +122 -0
- package/chunks/{validateNonInterActiveAuth-WJXH426F.js → validateNonInterActiveAuth-W7HYH5ZN.js} +113 -106
- package/chunks/{version-QMDRADXM.js → version-JG4J76GL.js} +2 -2
- package/chunks/{web-fetch-ROS6P4LP.js → web-fetch-SPLMEDWF.js} +25 -242
- package/chunks/{web-search-JS3E76O6.js → web-search-PNW6OEH6.js} +11 -11
- package/chunks/{web-shell-static-3NUTRHAH.js → web-shell-static-A6QMUNNV.js} +11 -4
- package/chunks/webapi-Z5OM224P.js +4118 -0
- package/chunks/{workflow-2FCMBTBZ.js → workflow-QHOIIXJO.js} +635 -94
- package/chunks/workspace-providers-status-653DTR35.js +116 -0
- package/chunks/{workspace-registration-store-SU4EJKSD.js → workspace-registration-store-H375IYR2.js} +1 -1
- package/chunks/workspace-registry-XTLCD7Z2.js +123 -0
- package/chunks/workspace-service-KVJWACCS.js +131 -0
- package/chunks/workspace-skills-status-TRJ2VWGU.js +115 -0
- package/chunks/{workspace-trust-reconciler-4Y4F7XIX.js → workspace-trust-reconciler-6SC6RKQE.js} +74 -73
- package/chunks/write-file-EAZSJZKR.js +90 -0
- package/chunks/{zh-TW-NX43Z2S2.js → zh-TW-MV4FWFB6.js} +3 -0
- package/chunks/{zh-3JQ75KFU.js → zh-X3WGU6SI.js} +3 -0
- package/chunks/{zoom-image-DNBKCGGF.js → zoom-image-WGNPZ572.js} +13 -14
- package/cli.js +15 -15
- package/locales/ca.js +3 -0
- package/locales/de.js +1 -0
- package/locales/en.js +3 -0
- package/locales/fr.js +1 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +1 -0
- package/locales/ru.js +1 -0
- package/locales/zh-TW.js +3 -0
- package/locales/zh.js +3 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DWHXEVlf.js → abnfDiagram-VCTEODGH-yq7z7Anb.js} +1 -1
- package/web-shell/assets/{arc-CXKjm86V.js → arc-CbJO0xnT.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-B_ynI0cX.js → architectureDiagram-5GKGNRK7-CRh89421.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-DMebd9X0.js → blockDiagram-NRAW4CY4-C75KAhKv.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BZ5BlxS-.js → c4Diagram-UCG6FXSJ-BzlMveFB.js} +1 -1
- package/web-shell/assets/channel-B3sGR79J.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-CluJKopE.js → chunk-2Q5K7J3B-DA8QDX3a.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-hzDAPFOo.js → chunk-5VM5RSS4-Bgu7gQ7Y.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-6vHioKJe.js → chunk-F27PBJKO-BOew7pIK.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-B_5hKTGo.js → chunk-G27WJ6UU-DHx1I-hO.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-CO9VoFCH.js → chunk-JWPE2WC7-SarFW0WU.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-7L5JpxYu.js → chunk-LCL6LL3I-BLzP083Z.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-DHLJMAqj.js → chunk-POPQ4Y6H-Bmkv_iKm.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-Dt-4Cqdl.js → chunk-SVP7TREG-MPx9r1N2.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-QlSQ3ssG.js → chunk-XXDRQBXY-Ck-09rKG.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-sTGo0K3v.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-sTGo0K3v.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-DMw3EOxl.js → cose-bilkent-JH36ORCC-DWm6lfOG.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-s6vEA7RQ.js → cynefin-OW5HDTMX-DcBUyr5R.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-AOKsvYLt.js → cynefinDiagram-5FMLGOSQ-Df8qmd_p.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-9QAZn3m7.js → dagre-3AP2YEHR-DDmGspD7.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-CWpnu4FN.js → diagram-S7CK7UJ4-BK_qFvbi.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-9l0jXD8q.js → diagram-UQ7AKVKN-Uw3AP_bi.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-BMUHroj4.js → diagram-VSXAHHWV-CJOQKxY7.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-Co9x27vm.js → diagram-VX7I27RA-DhdvZna5.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-BKnTeOER.js → diagram-Z3DM3KII-edQU0nlP.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-QBZD9CKG.js → ebnfDiagram-PWID7BFC-4kugBEsO.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-dKWAEGun.js → erDiagram-SSCWMZ5O-BMkFivWO.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CR_UgVqj.js → flowDiagram-A5DVABFB-BM1ea8g-.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DQUnjWO6.js → ganttDiagram-EL5Y4UJY-CXj_cKRf.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-C4j59wPL.js → gitGraphDiagram-WWUBYQGX-D0nEqwqu.js} +1 -1
- package/web-shell/assets/{index-tYXRIPz4.js → index-B6JN54Pd.js} +1 -1
- package/web-shell/assets/{index-BN_m_uHJ.css → index-C-XlQn24.css} +1 -1
- package/web-shell/assets/index-DLjXM0dn.js +1860 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-mzqbt50w.js → infoDiagram-RXCK75RN-DF7aGGbQ.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-ChLOqhGl.js → ishikawaDiagram-5VMMS53U-CZYNX1lL.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-SifZE-R8.js → journeyDiagram-EYS64GPL-CvrqMUz1.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-Sft2qlbc.js → kanban-definition-3QL26DDD-BZNJQZBj.js} +1 -1
- package/web-shell/assets/{layout-O2uHVkPd.js → layout-Bf83x7D6.js} +1 -1
- package/web-shell/assets/{linear-BVqYgjSc.js → linear-Bkc3ES2f.js} +1 -1
- package/web-shell/assets/{mermaid.core-CZ9MQaJ6.js → mermaid.core-C6xuovwz.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BNQYjBqM.js → mindmap-definition-FBJOCRG2-DzH6gVRg.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-rh1J8uv6.js → pegDiagram-XKGWAZYB-DCvLh2fa.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BQHR5mn9.js → pieDiagram-E7YTZNPT-BtjVlx_6.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CLCbP7mK.js → quadrantDiagram-AXDQQJYC-IbroqxFe.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CDQhrkbm.js → railroadDiagram-O6MQD6OU-BvMykiWW.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BdP9uswg.js → requirementDiagram-EFPCY7ZU-D-HHMyrh.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CFZDFBXF.js → sankeyDiagram-P5KCCOFB-C0XXhB6d.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BW9WOJXI.js → sequenceDiagram-WJ2MYXX4-DseAXj5d.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CPMia32z.js → sizeCapture-X5ZJPWSS-Cek2EweK.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BANp9p7F.js → stateDiagram-HBIQ2CUA-yLv8wafW.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DeThXnol.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-JroXksK-.js → swimlanes-XN3QIQJK-Cwz-opvE.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-GW0R1ZSv.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-DfuVIfYY.js → timeline-definition-24CTP7MA-BJuFD7OG.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-BZXoSjRB.js → vennDiagram-4TSXK5OY-CNAavdoV.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-BdiY8avC.js → wardleyDiagram-VM6X3IG4-DaIjAidq.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-DcXh_U4H.js → xychartDiagram-S5SC5T6Z-DkcQXjTy.js} +1 -1
- package/web-shell/index.html +19 -4
- package/chunks/MaxSizedBox-3OZJCC3J.js +0 -110
- package/chunks/agent-BFE3DQM3.js +0 -93
- package/chunks/agent-headless-LLVKZZ4P.js +0 -87
- package/chunks/bridge-EBYO4SYM.js +0 -118
- package/chunks/channel-settings-store-5VP2Y2YM.js +0 -115
- package/chunks/chunk-AXMWHKXA.js +0 -42
- package/chunks/chunk-IO257NUD.js +0 -623
- package/chunks/chunk-YHC2EYYG.js +0 -125
- package/chunks/computer-use-EGPWFEX6.js +0 -2142
- package/chunks/config-utils-WZ43VOBS.js +0 -25
- package/chunks/contextCommand-5DSEQI6S.js +0 -106
- package/chunks/daemon-status-provider-EYMLPYJU.js +0 -116
- package/chunks/daemon-trust-policy-CQYKZ7VO.js +0 -112
- package/chunks/deferred-core-runtime-WFEPUXZR.js +0 -114
- package/chunks/earlyInputCapture-PN4PP7V5.js +0 -107
- package/chunks/environment-WUPHLPKZ.js +0 -127
- package/chunks/errors-WPMPVIAT.js +0 -113
- package/chunks/exitPlanMode-MLFHYZNB.js +0 -85
- package/chunks/handleAutoUpdate-F5OTWUT5.js +0 -109
- package/chunks/i18n-C562S6KN.js +0 -124
- package/chunks/initializer-7YPGOFP4.js +0 -113
- package/chunks/installationInfo-ARU5Q2H7.js +0 -107
- package/chunks/list-KTSK275C.js +0 -116
- package/chunks/loadedSettingsAdapter-F3T2EQ5J.js +0 -110
- package/chunks/mcp-6ONTVPAY.js +0 -110
- package/chunks/nonInteractiveCli-KZDWFAN6.js +0 -178
- package/chunks/pidfile-IO7ALSZF.js +0 -111
- package/chunks/prompt-terminal-ledger-TCE7PMCE.js +0 -105
- package/chunks/resumeHistoryUtils-DDSBAQJS.js +0 -118
- package/chunks/ripGrep-E7P6K4QR.js +0 -40
- package/chunks/serve-KEAWV4TI.js +0 -118
- package/chunks/shell-H6K63WG3.js +0 -95
- package/chunks/skill-settings-TCKLXIXM.js +0 -118
- package/chunks/spawnChannel-2K6NKWM5.js +0 -111
- package/chunks/standalone-update-LSCGOEFP.js +0 -118
- package/chunks/terminal-image-renderer-UHX3UD66.js +0 -114
- package/chunks/theme-manager-6B47ZPIF.js +0 -102
- package/chunks/total-session-admission-NSCFWGJH.js +0 -113
- package/chunks/trustedFolders-7XMJWGQ3.js +0 -122
- package/chunks/updateCheck-EOVLHD4T.js +0 -118
- package/chunks/useAutoAcceptIndicator-ZNMIGBTN.js +0 -120
- package/chunks/workspace-providers-status-GPGU5YMT.js +0 -113
- package/chunks/workspace-registry-BQISXT6Y.js +0 -122
- package/chunks/workspace-service-LLY6HCUC.js +0 -129
- package/chunks/workspace-skills-status-L5N2Y3ZP.js +0 -113
- package/chunks/write-file-EJHU2Z3E.js +0 -90
- package/web-shell/assets/channel-Zg3WHgq_.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C16l9jQz.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C16l9jQz.js +0 -1
- package/web-shell/assets/index-DrlJu79f.js +0 -1792
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-NZYAoQLU.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-3YdVX3vj.js +0 -8
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: computer-use
|
|
3
|
+
description: Control local desktop applications through Computer Use for tasks that require reading or operating app UI. Prefer purpose-built connectors, APIs, or CLIs when available.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## `node_repl` + `@qwen-code/cua-sdk` (Computer Use)
|
|
7
|
+
|
|
8
|
+
- Use `node_repl` (JavaScript) for all Computer Use actions.
|
|
9
|
+
- Do not use other technologies besides `node_repl` for computer interactions
|
|
10
|
+
unless specifically requested by the user. This includes AppleScript,
|
|
11
|
+
`osascript`, JXA, System Events, and synthesized input.
|
|
12
|
+
- Prefer a dedicated plugin or skill when it can complete the task; use
|
|
13
|
+
Computer Use for app interactions that are not exposed through a more
|
|
14
|
+
specific interface.
|
|
15
|
+
- Use only the typed `ComputerUse` API. Do not use a generic SDK `callTool`,
|
|
16
|
+
direct `CuaDriver` imports, or a Qwen global bridge.
|
|
17
|
+
- `node_repl` state persists across calls.
|
|
18
|
+
- Use `nodeRepl.write(...)` for text output. It takes a string, so wrap objects
|
|
19
|
+
with `JSON.stringify(...)`.
|
|
20
|
+
|
|
21
|
+
## Install automatically
|
|
22
|
+
|
|
23
|
+
Run `qwen mcp list` to check whether the `node-repl` server is configured. If it
|
|
24
|
+
is not configured, run both commands yourself:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.0
|
|
28
|
+
npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.0
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Tell the user to restart Qwen Code after adding the MCP server, then stop. Do
|
|
32
|
+
not ask the user to copy or run the commands.
|
|
33
|
+
|
|
34
|
+
If `node_repl` is available but the SDK import fails, run the SDK installation
|
|
35
|
+
command yourself from the current workspace, then retry the import:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.0
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Bootstrap
|
|
42
|
+
|
|
43
|
+
Import the SDK once per fresh `node_repl` kernel:
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
globalThis.computer = await (
|
|
47
|
+
await import('@qwen-code/cua-sdk/computer-use')
|
|
48
|
+
).ComputerUse.create();
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## API surface
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
type WindowTarget = { pid: number; windowId: number };
|
|
55
|
+
type ElementTarget = {
|
|
56
|
+
pid: number;
|
|
57
|
+
windowId?: number;
|
|
58
|
+
elementToken: string;
|
|
59
|
+
};
|
|
60
|
+
type CoordinateTarget = WindowTarget & { x: number; y: number };
|
|
61
|
+
type PointOrElementTarget = CoordinateTarget | ElementTarget;
|
|
62
|
+
type App = {
|
|
63
|
+
name?: string;
|
|
64
|
+
bundle_id?: string;
|
|
65
|
+
pid?: number;
|
|
66
|
+
running?: boolean;
|
|
67
|
+
launch_path?: string;
|
|
68
|
+
};
|
|
69
|
+
type Window = {
|
|
70
|
+
window_id: number;
|
|
71
|
+
title?: string;
|
|
72
|
+
is_on_screen?: boolean;
|
|
73
|
+
on_current_space?: boolean;
|
|
74
|
+
};
|
|
75
|
+
type Element = {
|
|
76
|
+
element_token?: string;
|
|
77
|
+
role?: string;
|
|
78
|
+
label?: string;
|
|
79
|
+
value?: unknown;
|
|
80
|
+
actions?: string[];
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
type ComputerUse = {
|
|
84
|
+
listApps: () => Promise<App[]>;
|
|
85
|
+
listWindows: (args?: {
|
|
86
|
+
pid?: number;
|
|
87
|
+
onScreenOnly?: boolean;
|
|
88
|
+
}) => Promise<Window[]>;
|
|
89
|
+
observeWindow: (
|
|
90
|
+
args: WindowTarget & {
|
|
91
|
+
baseRevisionId?: string;
|
|
92
|
+
forceFull?: boolean;
|
|
93
|
+
includeScreenshot?: boolean;
|
|
94
|
+
},
|
|
95
|
+
) => Promise<{
|
|
96
|
+
text: string;
|
|
97
|
+
elements: Element[];
|
|
98
|
+
revisionId?: string;
|
|
99
|
+
screenshot?: { images: object[] };
|
|
100
|
+
}>;
|
|
101
|
+
click: (
|
|
102
|
+
args: PointOrElementTarget & {
|
|
103
|
+
button?: 'left' | 'right' | 'middle';
|
|
104
|
+
count?: number;
|
|
105
|
+
},
|
|
106
|
+
) => Promise<object>;
|
|
107
|
+
doubleClick: (args: PointOrElementTarget) => Promise<object>;
|
|
108
|
+
rightClick: (args: PointOrElementTarget) => Promise<object>;
|
|
109
|
+
setValue: (args: ElementTarget & { value: string }) => Promise<object>;
|
|
110
|
+
typeText: (args: WindowTarget & { text: string }) => Promise<object>;
|
|
111
|
+
pressKey: (args: WindowTarget & { key: string }) => Promise<object>;
|
|
112
|
+
hotkey: (args: WindowTarget & { keys: string[] }) => Promise<object>;
|
|
113
|
+
scroll: (
|
|
114
|
+
args: PointOrElementTarget & {
|
|
115
|
+
direction: 'up' | 'down' | 'left' | 'right';
|
|
116
|
+
by?: 'line' | 'page';
|
|
117
|
+
amount?: number;
|
|
118
|
+
},
|
|
119
|
+
) => Promise<object>;
|
|
120
|
+
drag: (
|
|
121
|
+
args: WindowTarget & {
|
|
122
|
+
fromX: number;
|
|
123
|
+
fromY: number;
|
|
124
|
+
toX: number;
|
|
125
|
+
toY: number;
|
|
126
|
+
deliveryMode?: 'background' | 'foreground';
|
|
127
|
+
},
|
|
128
|
+
) => Promise<object>;
|
|
129
|
+
performSecondaryAction: (
|
|
130
|
+
args: ElementTarget & { action: string },
|
|
131
|
+
) => Promise<object>;
|
|
132
|
+
close: () => Promise<void>;
|
|
133
|
+
};
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Workflow
|
|
137
|
+
|
|
138
|
+
### 1. Initialize
|
|
139
|
+
|
|
140
|
+
Resolve the exact running application and window named by the task. Filter
|
|
141
|
+
inside `node_repl`; do not print the entire application list:
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
var apps = await computer.listApps();
|
|
145
|
+
var matches = apps.filter(
|
|
146
|
+
(app) => app.name === 'Target App' || app.bundle_id === 'com.example.target',
|
|
147
|
+
);
|
|
148
|
+
nodeRepl.write(JSON.stringify(matches));
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
After choosing the application from returned metadata, list only its windows:
|
|
152
|
+
|
|
153
|
+
```js
|
|
154
|
+
var pid = matches[0].pid;
|
|
155
|
+
var windows = await computer.listWindows({ pid });
|
|
156
|
+
nodeRepl.write(JSON.stringify(windows));
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Choose the window from returned metadata, then get its current accessibility
|
|
160
|
+
state:
|
|
161
|
+
|
|
162
|
+
```js
|
|
163
|
+
var target = { pid, windowId: windows[0].window_id };
|
|
164
|
+
var state = await computer.observeWindow({ ...target, forceFull: true });
|
|
165
|
+
nodeRepl.write(state.text);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Never guess a PID, window ID, coordinate, or element token. `ComputerUse`
|
|
169
|
+
discovers running applications but does not launch them; if necessary, start
|
|
170
|
+
the application from `node_repl` with ordinary Node.js process APIs, then
|
|
171
|
+
refresh the application and window lists.
|
|
172
|
+
|
|
173
|
+
### 2. Act and get the latest state
|
|
174
|
+
|
|
175
|
+
Choose only the action needed for the user's task. Prefer current
|
|
176
|
+
`element_token` values over coordinates. Pass an observed `element_token` as
|
|
177
|
+
the camel-case `elementToken` action field:
|
|
178
|
+
|
|
179
|
+
```js
|
|
180
|
+
await computer.setValue({
|
|
181
|
+
...target,
|
|
182
|
+
elementToken,
|
|
183
|
+
value: 'hello',
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
state = await computer.observeWindow({
|
|
187
|
+
...target,
|
|
188
|
+
baseRevisionId: state.revisionId,
|
|
189
|
+
});
|
|
190
|
+
nodeRepl.write(state.text);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
After one or more actions, always observe the exact window before deciding what
|
|
194
|
+
to do next. If the updated state shows the requested result, stop acting,
|
|
195
|
+
clean up, and answer the user. If the UI does not behave as expected, get a
|
|
196
|
+
fresh full state before choosing a different action.
|
|
197
|
+
|
|
198
|
+
Use a secondary action only when the current accessibility state advertises
|
|
199
|
+
that exact action. Prefer accessibility text for efficiency; use a screenshot
|
|
200
|
+
when it is incomplete or visual layout matters.
|
|
201
|
+
|
|
202
|
+
## Reading screenshots
|
|
203
|
+
|
|
204
|
+
```js
|
|
205
|
+
var state = await computer.observeWindow({
|
|
206
|
+
...target,
|
|
207
|
+
forceFull: true,
|
|
208
|
+
includeScreenshot: true,
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
for (var image of state.screenshot?.images ?? []) {
|
|
212
|
+
if (image?.dataBase64 && image?.mimeType) {
|
|
213
|
+
await nodeRepl.emitImage(
|
|
214
|
+
`data:${image.mimeType};base64,${image.dataBase64}`,
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Finish
|
|
221
|
+
|
|
222
|
+
When the task is complete, close the SDK client:
|
|
223
|
+
|
|
224
|
+
```js
|
|
225
|
+
await computer.close();
|
|
226
|
+
globalThis.computer = undefined;
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Call `node_repl_reset` when no other REPL state is needed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: coordinate
|
|
3
|
-
description: Coordinate
|
|
3
|
+
description: Coordinate a small team of Qwen Code teammates with enforced read-only workers, an optional worktree-pinned writer, shared tasks, peer messages, and existing Agent View tabs. Invoke explicitly with /coordinate.
|
|
4
4
|
argument-hint: '<goal>'
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
---
|
|
@@ -14,7 +14,7 @@ Act as the team leader. Decompose the goal, keep task ownership clear, reconcile
|
|
|
14
14
|
When `team_create` is available:
|
|
15
15
|
|
|
16
16
|
1. Create one team and one self-contained task per current investigation workstream. Do not queue an implementation task while read-only teammates are idle because tasks are auto-assigned.
|
|
17
|
-
2. Spawn
|
|
17
|
+
2. Spawn named investigation teammates with `read_only: true` — one per workstream, and prefer three at most. Never exceed the team's configured cap, which `team_create` reports; spawning past it fails outright. Do not pass `model`; use the session-default model unless the selected agent definition explicitly overrides it.
|
|
18
18
|
3. Assign tasks and let teammates collaborate through `send_message` and the shared task list. Send targeted follow-ups when evidence conflicts, a task needs clarification, or a result is incomplete.
|
|
19
19
|
4. Accept or reject each result based on its evidence. Reassign rejected work instead of silently using it.
|
|
20
20
|
|
|
@@ -25,7 +25,7 @@ Read-only teammates have a positive execution allowlist. They cannot use shell,
|
|
|
25
25
|
When the goal requires code changes:
|
|
26
26
|
|
|
27
27
|
1. Finish the parallel investigation first.
|
|
28
|
-
2.
|
|
28
|
+
2. Call `request_shutdown` for each investigation teammate. Once shutdown is pending, they are excluded from automatic task assignment.
|
|
29
29
|
3. Call `enter_worktree` once and keep the returned path.
|
|
30
30
|
4. Create the implementation task, then spawn exactly one named writer with `subagent_type: "general-purpose"` and `working_dir: <path>`. Do not set `read_only` for this teammate.
|
|
31
31
|
5. Give the writer the accepted investigation evidence and require all changes to stay inside the worktree.
|
|
@@ -34,7 +34,7 @@ When the goal requires code changes:
|
|
|
34
34
|
|
|
35
35
|
If the checkout is not a Git repository or worktree creation fails, keep all teammates read-only and let the leader make the final change in the current checkout.
|
|
36
36
|
|
|
37
|
-
After synthesis,
|
|
37
|
+
After synthesis, call `request_shutdown` for each still-active teammate, then delete the team.
|
|
38
38
|
|
|
39
39
|
The existing Agent View tabs show teammate conversations, messages, status, and approvals. Do not create another roster, session manager, or terminal UI.
|
|
40
40
|
|
|
@@ -42,7 +42,7 @@ If the Agent Team tools are unavailable, say that `experimental.agentTeam` must
|
|
|
42
42
|
|
|
43
43
|
## Keep coordination bounded
|
|
44
44
|
|
|
45
|
-
- Use one teammate for a narrow task
|
|
45
|
+
- Use one teammate for a narrow task. Past roughly three, the leader spends more of its turn reconciling reports than doing the work, so add a fourth only when the workstreams are genuinely independent — and never past the configured cap.
|
|
46
46
|
- Give every task an objective, scope, completion condition, and required evidence.
|
|
47
47
|
- Default every teammate to `read_only: true`; add one worktree writer only when implementation is required.
|
|
48
48
|
- Do not use Arena: it is for competing solutions to the same task, not collaboration on different tasks.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Qwen Code's first-run `/auth` menu has three top-level options. Pick the one that matches how you want to run the CLI:
|
|
4
4
|
|
|
5
5
|
- **Alibaba ModelStudio**: official recommended setup. Opens a sub-menu with **Coding Plan** (for individual developers · weekly quota included), **Token Plan** (for teams and companies · usage-based billing with a dedicated endpoint), or **Standard API Key** (connect with an existing ModelStudio API key).
|
|
6
|
-
- **Third-party Providers**: choose a built-in provider and connect with an API key (DeepSeek, MiniMax, Z.AI, Idealab, ModelScope, OpenRouter, Requesty).
|
|
6
|
+
- **Third-party Providers**: choose a built-in provider and connect with an API key (DeepSeek, Grok, MiniMax, Z.AI, Kimi, Idealab, ModelScope, OpenRouter, Requesty).
|
|
7
7
|
- **Custom Provider**: manually connect a local server, proxy, or unsupported provider — supports OpenAI, Anthropic, Gemini, and other compatible endpoints.
|
|
8
8
|
|
|
9
9
|
> [!note]
|
|
@@ -157,12 +157,12 @@ The key concept is **Model Providers** (`modelProviders`): Qwen Code supports mu
|
|
|
157
157
|
|
|
158
158
|
#### Supported protocols
|
|
159
159
|
|
|
160
|
-
| Protocol | `modelProviders` key | Environment variables
|
|
161
|
-
| ----------------- | -------------------- |
|
|
162
|
-
| OpenAI-compatible | `openai` | `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_MODEL` (alias: `QWEN_MODEL`)
|
|
163
|
-
| Anthropic | `anthropic` | `ANTHROPIC_API_KEY`, `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL`
|
|
164
|
-
| Google GenAI | `gemini` | `GEMINI_API_KEY`, `GEMINI_MODEL`
|
|
165
|
-
| Vertex AI | `vertex-ai` | `GOOGLE_API_KEY
|
|
160
|
+
| Protocol | `modelProviders` key | Environment variables | Providers |
|
|
161
|
+
| ----------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
162
|
+
| OpenAI-compatible | `openai` | `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_MODEL` (alias: `QWEN_MODEL`) | OpenAI, Azure OpenAI, OpenRouter, Requesty, ModelScope, Alibaba Cloud, any OpenAI-compatible endpoint |
|
|
163
|
+
| Anthropic | `anthropic` | `ANTHROPIC_API_KEY`, `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL` | Anthropic Claude |
|
|
164
|
+
| Google GenAI | `gemini` | `GEMINI_API_KEY`, `GEMINI_MODEL` | Google Gemini |
|
|
165
|
+
| Vertex AI | `vertex-ai` | `GOOGLE_API_KEY` or `GOOGLE_CLOUD_PROJECT` (+ optional `GOOGLE_CLOUD_LOCATION`), `GOOGLE_MODEL` (uses the `gemini` protocol; a keyless project-only setup is not auto-detected from the environment, so select the auth type explicitly with `--auth-type vertex-ai` or `security.auth.selectedType`) | Google Vertex AI |
|
|
166
166
|
|
|
167
167
|
#### Step 1: Configure models and providers in `~/.qwen/settings.json`
|
|
168
168
|
|
|
@@ -18,6 +18,53 @@ Use `modelProviders` to declare models per provider id that the `/model` picker
|
|
|
18
18
|
>
|
|
19
19
|
> **Model uniqueness:** Models within the same `authType` are uniquely identified by the combination of `id` + `baseUrl`. This means you can define the same model ID (e.g., `"gpt-4o"`) multiple times under a single `authType` as long as each entry has a different `baseUrl` — for example, one pointing to OpenAI directly and another to a proxy endpoint. If two entries share both the same `id` and the same `baseUrl` (or both omit `baseUrl`), the first occurrence wins and subsequent duplicates are skipped with a warning.
|
|
20
20
|
|
|
21
|
+
### Image generation routes
|
|
22
|
+
|
|
23
|
+
Set `supportsImageGeneration: true` when a route can be used by the built-in
|
|
24
|
+
`image_gen` tool. This capability is independent from image input support such
|
|
25
|
+
as `capabilities.vision` or `generationConfig.modalities.image`.
|
|
26
|
+
|
|
27
|
+
Use `imageOnly: true` when the route is dedicated to image generation and must
|
|
28
|
+
not appear in ordinary model selectors. For backward compatibility,
|
|
29
|
+
`imageOnly: true` also implies image-generation capability, so existing settings
|
|
30
|
+
do not need to be migrated.
|
|
31
|
+
|
|
32
|
+
A dual-role route can be selected both as the main model and through
|
|
33
|
+
`/model --image`:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"modelProviders": {
|
|
38
|
+
"openai": [
|
|
39
|
+
{
|
|
40
|
+
"id": "omni-model",
|
|
41
|
+
"envKey": "MODEL_API_KEY",
|
|
42
|
+
"baseUrl": "https://gateway.example.com/model-api",
|
|
43
|
+
"supportsImageGeneration": true
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
A dedicated image route sets both fields. The legacy form with only
|
|
51
|
+
`imageOnly: true` remains valid:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"id": "image-model",
|
|
56
|
+
"envKey": "MODEL_API_KEY",
|
|
57
|
+
"baseUrl": "https://images.example.com/api/v1",
|
|
58
|
+
"supportsImageGeneration": true,
|
|
59
|
+
"imageOnly": true
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The selected route must declare an explicit HTTPS `baseUrl` and a non-empty
|
|
64
|
+
`envKey`. Image generation uses the same endpoint and credential as the route;
|
|
65
|
+
if chat and image generation require different endpoints or credentials,
|
|
66
|
+
configure two routes instead.
|
|
67
|
+
|
|
21
68
|
## Configuration Examples by Auth Type
|
|
22
69
|
|
|
23
70
|
Below are comprehensive configuration examples for different authentication types, showing the available parameters and their combinations.
|
|
@@ -34,6 +81,9 @@ The `modelProviders` object keys must be valid `authType` values. Currently supp
|
|
|
34
81
|
| `qwen-oauth` | Qwen OAuth (hard-coded, cannot be overridden in `modelProviders`) |
|
|
35
82
|
| `vertex-ai` | Google Vertex AI (uses the `gemini` protocol and the `@google/genai` SDK in Vertex AI mode; selecting it sets `GOOGLE_GENAI_USE_VERTEXAI=true`) |
|
|
36
83
|
|
|
84
|
+
> [!note]
|
|
85
|
+
> Vertex AI entries can authenticate with **Application Default Credentials**. Set `GOOGLE_CLOUD_PROJECT` (and optionally `GOOGLE_CLOUD_LOCATION`, which defaults to `global`) and leave `envKey` unset, along with every other key source the resolver reads: `GOOGLE_API_KEY`, `settings.security.auth.apiKey`, and the CLI key flags. Any API key value that reaches a Vertex entry switches the Google SDK to Vertex Express mode, which ignores the project, the location and your ADC credentials. An entry that declares an `envKey` is never routed to ADC, so a key that fails to be injected keeps failing on that variable instead of silently authenticating as a different principal.
|
|
86
|
+
|
|
37
87
|
> [!warning]
|
|
38
88
|
> A provider id that is neither a built-in protocol nor mapped via `providerProtocol` (e.g. a typo like `"openai-custom"`) cannot be routed, so its whole entry is **skipped** with a warning — its models simply won't appear in the `/model` picker. Use one of the supported auth type values above for built-in providers, or add a [`providerProtocol`](#custom-provider-ids-providerprotocol) mapping for a custom id.
|
|
39
89
|
|
|
@@ -270,6 +320,7 @@ Most local inference servers (vLLM, Ollama, LM Studio, etc.) provide an OpenAI-c
|
|
|
270
320
|
"baseUrl": "http://localhost:11434/v1",
|
|
271
321
|
"generationConfig": {
|
|
272
322
|
"timeout": 300000,
|
|
323
|
+
"streamIdleTimeoutMs": 600000,
|
|
273
324
|
"maxRetries": 1,
|
|
274
325
|
"contextWindowSize": 32768,
|
|
275
326
|
"samplingParams": {
|
|
@@ -311,6 +362,13 @@ Most local inference servers (vLLM, Ollama, LM Studio, etc.) provide an OpenAI-c
|
|
|
311
362
|
}
|
|
312
363
|
```
|
|
313
364
|
|
|
365
|
+
For queued or slow local OpenAI-compatible servers, `streamIdleTimeoutMs`
|
|
366
|
+
controls how long this model may stay silent between streamed chunks. It
|
|
367
|
+
overrides the global `QWEN_STREAM_IDLE_TIMEOUT_MS` value for the selected
|
|
368
|
+
provider entry; set it to `0` to disable the idle guard. The separate 15-minute
|
|
369
|
+
stream lifetime cap still applies unless `QWEN_STREAM_MAX_LIFETIME_MS` is raised
|
|
370
|
+
or disabled.
|
|
371
|
+
|
|
314
372
|
For local servers that don't require authentication, you can use any placeholder value for the API key:
|
|
315
373
|
|
|
316
374
|
```bash
|
|
@@ -583,14 +641,15 @@ The optional `reasoning` field under `generationConfig` controls how aggressivel
|
|
|
583
641
|
|
|
584
642
|
### Per-provider behavior
|
|
585
643
|
|
|
586
|
-
| Protocol / provider | Wire shape | Notes
|
|
587
|
-
| --------------------------------------------- | -------------------------------------------------------------------- |
|
|
588
|
-
| **OpenAI / DashScope** (`qwen3.8-max` family) | Flat `reasoning_effort: <effort>` body parameter | The
|
|
589
|
-
| **OpenAI / DeepSeek** (`api.deepseek.com`) | Flat `reasoning_effort: <effort>` body parameter | When `reasoning.effort` is set in the nested config shape, it's rewritten to flat `reasoning_effort` and `'low'`/`'medium'` are normalized to `'high'`, `'xhigh'` to `'max'` — mirroring DeepSeek's [server-side back-compat](https://api-docs.deepseek.com/zh-cn/api/create-chat-completion). Top-level `samplingParams.reasoning_effort` or `extra_body.reasoning_effort` overrides skip this normalization and ship verbatim.
|
|
590
|
-
| **OpenAI** (
|
|
591
|
-
| **
|
|
592
|
-
| **Anthropic** (`api.
|
|
593
|
-
| **
|
|
644
|
+
| Protocol / provider | Wire shape | Notes |
|
|
645
|
+
| --------------------------------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
646
|
+
| **OpenAI / DashScope** (`qwen3.8-max` family) | Flat `reasoning_effort: <effort>` body parameter | The `/effort` tiers are passed through for any model id starting with `qwen3.8-max` (including dated snapshots and `-latest` aliases); DashScope applies any model-specific mapping. This family's ladder stops at `xhigh`, so a configured `max` is clamped to `xhigh` (logged once) rather than sent and rejected. An explicit `reasoning_effort` in `samplingParams` or `extra_body` is a verbatim override and is not clamped. When `reasoning_effort` and `thinking_budget` conflict, the normal `extra_body` > `samplingParams` > `reasoning` precedence keeps only the higher-priority field; an explicit same-layer pair keeps `reasoning_effort`, matching the provider's behavior before cross-layer resolution. If a static field wins, `/effort` reports that field instead of implying the requested tier is effective. When an effort tier wins, a conflicting `enable_thinking` is also dropped. An explicit `enable_thinking: false` in `extra_body` is honoured rather than dropped: it overrides the configured tier as `reasoning_effort: 'none'`, one of the few places `extra_body` does not win verbatim. Other Qwen models continue to map a selected effort to `enable_thinking: true`; a `reasoning_effort` override passes through there unless it conflicts with a `thinking_budget` (a pair DashScope rejects), in which case the inert `reasoning_effort` is dropped and both `enable_thinking` and `thinking_budget` survive. |
|
|
647
|
+
| **OpenAI / DeepSeek** (`api.deepseek.com`) | Flat `reasoning_effort: <effort>` body parameter | When `reasoning.effort` is set in the nested config shape, it's rewritten to flat `reasoning_effort` and `'low'`/`'medium'` are normalized to `'high'`, `'xhigh'` to `'max'` — mirroring DeepSeek's [server-side back-compat](https://api-docs.deepseek.com/zh-cn/api/create-chat-completion). Top-level `samplingParams.reasoning_effort` or `extra_body.reasoning_effort` overrides skip this normalization and ship verbatim. `max` is accepted only on a real DeepSeek hostname; a `deepseek`-named model on another host keeps the generic `xhigh` ceiling, matching the hostname gate on the reshape itself. |
|
|
648
|
+
| **OpenAI / Z.ai** (`z.ai`, `bigmodel.cn`) | Flat `reasoning_effort: <effort>` body parameter | GLM-5.2+ on a Z.ai host takes the full ladder, `max` included, and the nested `reasoning.effort` is rewritten to the flat field. Older GLM ids, and a `glm-*` model reached on any other host, keep the generic `xhigh` ceiling: the model name alone says nothing about what that endpoint accepts. |
|
|
649
|
+
| **OpenAI** (other compatible servers) | `reasoning: { effort, ... }` passed through | A configured `max` is clamped to `xhigh` (logged once), since `max` is a vendor extension rather than part of the generic OpenAI ladder. Set via `samplingParams` (e.g. `samplingParams.reasoning_effort` for GPT-5/o-series) when the provider expects a different shape; an explicit `samplingParams` / `extra_body` value is not clamped. |
|
|
650
|
+
| **Anthropic** (real `api.anthropic.com`) | `output_config: { effort }` plus the `effort-2025-11-24` beta header | Real Anthropic accepts `'low'`/`'medium'`/`'high'` only. `'max'` is **clamped to `'high'`** with a `debugLogger.warn` line (once per generator); if you want max effort, switch the baseURL to a DeepSeek-compatible endpoint that supports it. |
|
|
651
|
+
| **Anthropic** (`api.deepseek.com/anthropic`) | Same `output_config: { effort }` + beta header | `'max'` is passed through unchanged. |
|
|
652
|
+
| **Gemini** (`@google/genai`) | `thinkingConfig: { includeThoughts: true, thinkingLevel }` | `'low'` → `LOW`, `'high'`/`'max'` → `HIGH`, others → `THINKING_LEVEL_UNSPECIFIED` (Gemini has no `MAX` tier). |
|
|
594
653
|
|
|
595
654
|
### `reasoning: false`
|
|
596
655
|
|
|
@@ -598,11 +657,13 @@ Setting `reasoning: false` (the literal boolean) explicitly disables thinking on
|
|
|
598
657
|
|
|
599
658
|
On a `api.deepseek.com` baseURL, the OpenAI pipeline emits the explicit `thinking: { type: 'disabled' }` field that DeepSeek V4+ requires — the server-side default is `'enabled'`, so simply omitting `reasoning_effort` would still pay thinking latency/cost. Self-hosted DeepSeek backends (sglang/vllm) and other OpenAI-compatible servers do **not** receive this field; if you need to disable thinking on those, inject `thinking: { type: 'disabled' }` (or whatever knob your inference framework exposes) via `samplingParams`/`extra_body`.
|
|
600
659
|
|
|
660
|
+
On an `openrouter.ai` baseURL, the OpenAI pipeline emits OpenRouter's provider-level `reasoning: { enabled: false }` field when reasoning is disabled. Other OpenAI-compatible servers do not receive this OpenRouter-specific field; use `samplingParams`/`extra_body` for their native disable knob.
|
|
661
|
+
|
|
601
662
|
### Interaction with `samplingParams` (OpenAI-compatible only)
|
|
602
663
|
|
|
603
664
|
> [!warning]
|
|
604
665
|
>
|
|
605
|
-
> When `generationConfig.samplingParams` is set on an OpenAI-compatible provider, the pipeline ships those keys to the wire **verbatim** and skips the separate `reasoning` injection entirely. So a config like `{ samplingParams: { temperature: 0.5 }, reasoning: { effort: 'max' } }` will silently drop the reasoning field on OpenAI/DeepSeek requests.
|
|
666
|
+
> When `generationConfig.samplingParams` is set on an OpenAI-compatible provider, the pipeline ships those keys to the wire **verbatim** and skips the separate `reasoning` injection entirely. So a config like `{ samplingParams: { temperature: 0.5 }, reasoning: { effort: 'max' } }` will silently drop the reasoning field on OpenAI/DeepSeek requests. A `reasoning` object placed inside `samplingParams` is your own value and ships unchanged: the effort ceiling above applies only to the tier the pipeline injects from `/effort`.
|
|
606
667
|
>
|
|
607
668
|
> DashScope Qwen models are an exception: their provider reads `reasoning` directly and maps it to `reasoning_effort` or `enable_thinking`. On the qwen3.8-max family, provider-specific `samplingParams` fields still take precedence when the wire parameters conflict; on older qwen hybrids, a configured effort tier collapses to `enable_thinking: true`, which overrides a `samplingParams.enable_thinking` value.
|
|
608
669
|
>
|