@qwen-code/qwen-code 0.19.11 → 0.19.12-nightly.20260719.86ad532de
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/batch/SKILL.md +6 -0
- package/bundled/qc-helper/docs/configuration/model-providers.md +11 -0
- package/bundled/qc-helper/docs/configuration/settings.md +11 -10
- package/bundled/qc-helper/docs/features/channels/overview.md +70 -13
- package/bundled/qc-helper/docs/features/sub-agents.md +8 -8
- package/bundled/qc-helper/docs/features/worktree.md +2 -2
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +42 -7
- package/bundled/qc-helper/docs/qwen-serve.md +144 -45
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +2 -2
- package/bundled/review/SKILL.md +66 -51
- package/bundled/simplify/SKILL.md +1 -1
- package/chunks/{MaxSizedBox-L6TGYDM3.js → MaxSizedBox-VN34SVGS.js} +34 -32
- package/chunks/{StandaloneSessionPicker-AKEQHU5P.js → StandaloneSessionPicker-77OEIQM5.js} +54 -50
- package/chunks/acp-startup-profiler-N3RHHXJ3.js +25 -0
- package/chunks/{acpAgent-PTNBGJDN.js → acpAgent-AIROM74S.js} +1859 -506
- package/chunks/{agent-AJOMOZPJ.js → agent-6XWITLS6.js} +26 -27
- package/chunks/{agent-headless-CYKOMAXS.js → agent-headless-ZVIKPSAB.js} +26 -27
- package/chunks/{anthropicContentGenerator-HBRXJSP4.js → anthropicContentGenerator-ZZRGFEES.js} +35 -12
- package/chunks/{artifact-tool-MIZLXBLF.js → artifact-tool-PHO5XEGZ.js} +5 -5
- package/chunks/{askUserQuestion-XMJVPNWM.js → askUserQuestion-CEPBT47X.js} +2 -47
- package/chunks/{bridge-QKISWPCI.js → bridge-FSVN3PIR.js} +31 -32
- package/chunks/build-SSCNEHZZ.js +62 -0
- package/chunks/{ca-CODEN7TD.js → ca-2SL2BXTK.js} +3 -2
- package/chunks/{channel-worker-group-SOUWTFHC.js → channel-worker-group-53CMOPFT.js} +4 -4
- package/chunks/{channel-worker-manager-LOVSV3WW.js → channel-worker-manager-UTXILKC2.js} +4 -4
- package/chunks/{channel-worker-supervisor-XW6MHJBQ.js → channel-worker-supervisor-ZGO2W2MD.js} +3 -3
- package/chunks/{chunk-3DWIFU7L.js → chunk-2HOVDT7W.js} +1 -1
- package/chunks/{chunk-V2DXTLUE.js → chunk-2IZNQ5HD.js} +3 -3
- package/chunks/{chunk-TL4R5TRK.js → chunk-2YJUZPZT.js} +2 -2
- package/chunks/{chunk-L5U3ELZX.js → chunk-335ECZTA.js} +1 -1
- package/chunks/{chunk-NJOFRXTM.js → chunk-33IUKQEP.js} +5376 -3961
- package/chunks/chunk-33W7L67A.js +45 -0
- package/chunks/{chunk-2FO5GFKZ.js → chunk-3DJY4IFO.js} +1 -1
- package/chunks/chunk-3EKXWANE.js +624 -0
- package/chunks/{chunk-5VWYKIMW.js → chunk-3XBT37RB.js} +2 -2
- package/chunks/{chunk-LS56TX3M.js → chunk-3Y47AQYG.js} +1 -1
- package/chunks/chunk-4AEXUO5O.js +37 -0
- package/chunks/{chunk-Y66VOBRP.js → chunk-4CA4WUMS.js} +2 -2
- package/chunks/{chunk-LQIDP6K5.js → chunk-4CHDYDG3.js} +1 -1
- package/chunks/{chunk-FNX3LGAK.js → chunk-4ODB7WIB.js} +1 -1
- package/chunks/{chunk-TV6K2FB4.js → chunk-4RPARQ5D.js} +2 -2
- package/chunks/{chunk-RCEEXIOO.js → chunk-4XCVGEEX.js} +3 -3
- package/chunks/chunk-4ZT26FOU.js +442 -0
- package/chunks/{chunk-QOTQH4CB.js → chunk-5HRAAUK6.js} +49 -16
- package/chunks/{chunk-RP5R7MB6.js → chunk-5QNQJRE3.js} +12 -12
- package/chunks/{chunk-HTHUX2T5.js → chunk-5QWWOFGG.js} +0 -1
- package/chunks/{chunk-CPFIQVZJ.js → chunk-5SMQKZ4B.js} +1 -1
- package/chunks/{chunk-S63Z5V42.js → chunk-63TDC2M5.js} +4 -4
- package/chunks/{chunk-THXDQSTA.js → chunk-6A5LI4XI.js} +82 -274
- package/chunks/{chunk-BXBDC476.js → chunk-6EXXUHUN.js} +5 -5
- package/chunks/{chunk-YGYSMY2R.js → chunk-7DJEFPZD.js} +1785 -1159
- package/chunks/{chunk-6WPJRYLZ.js → chunk-7SX6WZNO.js} +3 -3
- package/chunks/{chunk-Y3KFTWVX.js → chunk-ADBLDNOY.js} +6 -6
- package/chunks/{chunk-6EDDYPI3.js → chunk-ADVNPV4H.js} +4 -4
- package/chunks/{chunk-GNBBAQ6J.js → chunk-AITVKIUP.js} +111 -40
- package/chunks/{chunk-JGUT3LWZ.js → chunk-ANRANWVE.js} +4 -1
- package/chunks/{chunk-MQOVXZAF.js → chunk-AV3CV4JW.js} +529 -61
- package/chunks/{chunk-KXYJPRT5.js → chunk-B3KGZCQN.js} +182 -8
- package/chunks/{chunk-VFX7EZIR.js → chunk-B3TIKQHF.js} +8 -1
- package/chunks/{chunk-3M75MSVA.js → chunk-B7HLFDXN.js} +1 -1
- package/chunks/chunk-B7UOE7BN.js +114 -0
- package/chunks/{chunk-CITWNIXJ.js → chunk-BOLBNPNY.js} +5 -5
- package/chunks/{chunk-CAHY5ABC.js → chunk-CDUQZPSP.js} +1 -1
- package/chunks/{chunk-CH2XVB47.js → chunk-CNUJKQVS.js} +3 -3
- package/chunks/{chunk-BUAXJVNP.js → chunk-CQQ5OE6W.js} +3 -3
- package/chunks/{chunk-4AGTGMCQ.js → chunk-CSYSI5BO.js} +12 -12
- package/chunks/{chunk-JD44PNGJ.js → chunk-DC5I3HU4.js} +10 -5
- package/chunks/{chunk-BYH2JRK3.js → chunk-DWFTNEQN.js} +5 -5
- package/chunks/chunk-EWH3O2GW.js +125 -0
- package/chunks/{chunk-FSA7ERJ2.js → chunk-F2RR4HO2.js} +1 -1
- package/chunks/{chunk-YFVO2HOR.js → chunk-F5R43JUK.js} +5 -5
- package/chunks/{chunk-SQ5BK3GO.js → chunk-GFSWFJAR.js} +1 -1
- package/chunks/{chunk-SUARMD4Q.js → chunk-H2XVO6NE.js} +1 -263
- package/chunks/{chunk-LXLTBIDP.js → chunk-HCCR43AY.js} +1 -1
- package/chunks/chunk-HRYXMOSU.js +1187 -0
- package/chunks/{chunk-NVTQZXR7.js → chunk-II2AAZ5X.js} +101 -2209
- package/chunks/{chunk-HASK4LMI.js → chunk-IQFLUNWU.js} +13 -226
- package/chunks/{chunk-SPJQO2CE.js → chunk-J2MKYJKZ.js} +2 -2
- package/chunks/{chunk-TYLOFD2U.js → chunk-JCJPZMJV.js} +1 -1
- package/chunks/{chunk-4HUDDSO5.js → chunk-K5Y76NRQ.js} +4 -4
- package/chunks/{chunk-A2HWMJVO.js → chunk-LKR7QQ63.js} +3 -3
- package/chunks/{chunk-FBU7WRZI.js → chunk-LPHGXXZX.js} +6 -1
- package/chunks/{chunk-7NMU22Q3.js → chunk-M7A5T6IW.js} +18 -7
- package/chunks/{chunk-N5VIZTND.js → chunk-ML7CX3ZO.js} +1 -1
- package/chunks/{chunk-6WGZDD67.js → chunk-NBMIC7DR.js} +2 -2
- package/chunks/{chunk-OKAIGAYW.js → chunk-NEAETR5W.js} +3 -3
- package/chunks/{chunk-OWT2CAEQ.js → chunk-NEEB7UEN.js} +2354 -1690
- package/chunks/{chunk-ZQIYGQCG.js → chunk-NIJEXGV6.js} +739 -201
- package/chunks/{chunk-JWICTOXS.js → chunk-NV6UUA6T.js} +2 -2
- package/chunks/{chunk-TIOE2OPE.js → chunk-OLMETXLX.js} +2 -2
- package/chunks/{chunk-2Z5UX4KI.js → chunk-OSSDHJDU.js} +1 -1
- package/chunks/{chunk-YUZI3WAC.js → chunk-OWAK7LMW.js} +7 -0
- package/chunks/chunk-P4ASKBGX.js +883 -0
- package/chunks/{chunk-FXKOAEXP.js → chunk-PJOJAFFM.js} +16 -16
- package/chunks/{chunk-QDJ2R4CM.js → chunk-PO3ZIZX2.js} +3 -3
- package/chunks/{chunk-3AYLDB6B.js → chunk-PPT47UUM.js} +1 -1
- package/chunks/{chunk-2OG646IN.js → chunk-Q64UTPKU.js} +4 -4
- package/chunks/{chunk-6Y6ORE2G.js → chunk-QBYO74L6.js} +1358 -576
- package/chunks/{chunk-QYG4BY6Q.js → chunk-QCZKJPGY.js} +1 -1
- package/chunks/{chunk-PZL23GTM.js → chunk-QR6U5QPP.js} +8 -0
- package/chunks/chunk-QSG4ZFG4.js +257 -0
- package/chunks/{chunk-7X7TEQNX.js → chunk-QTERJVPZ.js} +14 -6
- package/chunks/{chunk-AVEOWVOM.js → chunk-R3VWUU2E.js} +1 -1
- package/chunks/{chunk-DOPUYNXO.js → chunk-R52FL6L4.js} +15 -9
- package/chunks/chunk-RS7MT2QG.js +305 -0
- package/chunks/{chunk-GLNHPRZT.js → chunk-SA4X4YGT.js} +1 -1
- package/chunks/{chunk-ARKANCNX.js → chunk-SGPFJMRP.js} +1 -1
- package/chunks/chunk-SV5PQVQE.js +71 -0
- package/chunks/chunk-TDKQP3M6.js +201 -0
- package/chunks/{chunk-FMNYGWOD.js → chunk-TKYQJAS4.js} +14 -8
- package/chunks/{chunk-CF5VJRGC.js → chunk-TUNJICIY.js} +1 -1
- package/chunks/{chunk-4LD5APFL.js → chunk-TYQMGACW.js} +1 -0
- package/chunks/{chunk-7NFB7LBQ.js → chunk-UE5TZ55T.js} +8 -0
- package/chunks/{chunk-F333XEAU.js → chunk-UOA2IHRI.js} +4 -3
- package/chunks/{chunk-AU3MFJPL.js → chunk-UWLXRKGK.js} +8 -8
- package/chunks/{chunk-VRR65QYW.js → chunk-V4PCIS25.js} +5 -1
- package/chunks/chunk-V7RNNPGC.js +44 -0
- package/chunks/{chunk-WIEO4CWB.js → chunk-VAJS2E2D.js} +1 -1
- package/chunks/{chunk-WMNXXRGL.js → chunk-VFZHDNSC.js} +31 -31
- package/chunks/{chunk-574PTLMU.js → chunk-VUN5SFHA.js} +471 -103
- package/chunks/{chunk-5Z452MMD.js → chunk-VXDVXAB3.js} +2282 -1306
- package/chunks/{chunk-STZQCNN3.js → chunk-W7H223ZZ.js} +1 -1
- package/chunks/{chunk-WTNZ6DXB.js → chunk-WEPXQKGP.js} +1 -1
- package/chunks/{chunk-4BJVSIS3.js → chunk-WHQNBBWW.js} +2 -2
- package/chunks/{chunk-7ZYHLN67.js → chunk-WMOPDZQI.js} +26 -75
- package/chunks/{chunk-SY7NEYX4.js → chunk-X2D4YVI7.js} +2 -2
- package/chunks/{chunk-4ROQY23C.js → chunk-X4MDRQ7W.js} +7 -7
- package/chunks/{chunk-L4Y55KIS.js → chunk-X6YQWCIJ.js} +1 -1
- package/chunks/{chunk-Q6TUALBE.js → chunk-XAAEDML2.js} +1 -1
- package/chunks/{chunk-KKRTYONM.js → chunk-XSPFQQRE.js} +3 -3
- package/chunks/{chunk-K7VD4XLT.js → chunk-XTONJ2BO.js} +1 -1
- package/chunks/{chunk-KSZKSE23.js → chunk-Y2ENGUD6.js} +1 -1
- package/chunks/{chunk-ZIXOTAPZ.js → chunk-YD2SMXAD.js} +92 -3
- package/chunks/{chunk-5CNYZ7TN.js → chunk-YWEW33JY.js} +7 -7
- package/chunks/{chunk-T76DGHGG.js → chunk-ZUDXPOWE.js} +5 -5
- package/chunks/{chunk-4IJMTYCB.js → chunk-ZZWZL2NJ.js} +818 -29
- package/chunks/{computer-use-VZZMJEQ7.js → computer-use-WE6DJ3DU.js} +26 -27
- package/chunks/{config-utils-IQQT3GCI.js → config-utils-AHQ6YZ66.js} +3 -3
- package/chunks/{contextCommand-PORKIZSY.js → contextCommand-APLGOUNW.js} +30 -32
- package/chunks/{create-sub-session-EAB2U5XW.js → create-sub-session-DIJOV6HV.js} +2 -2
- package/chunks/{create-sub-session-XVFKHAFW.js → create-sub-session-OTTIX3RM.js} +27 -28
- package/chunks/{cron-create-GMVKSXZT.js → cron-create-X462ERYA.js} +4 -4
- package/chunks/{cron-delete-VDZKUAVK.js → cron-delete-SL5UJUM3.js} +4 -4
- package/chunks/{cron-list-UG7C7RAR.js → cron-list-3MD6SVXI.js} +4 -4
- package/chunks/{daemon-IHR6WSPB.js → daemon-RG2MAI6T.js} +240 -76
- package/chunks/{daemon-status-provider-ABLBA3UJ.js → daemon-status-provider-G5QZVVTH.js} +35 -36
- package/chunks/{de-NOXPCSYN.js → de-I7ZIYXZC.js} +3 -2
- package/chunks/{dist-GXJVCOS7.js → dist-2BHAYBKP.js} +2 -1
- package/chunks/{dist-VYWUKURL.js → dist-2MIU4UUH.js} +1 -1
- package/chunks/{dist-PX2ERZ6I.js → dist-53PZYC5B.js} +2 -2
- package/chunks/{dist-4WCQEZIN.js → dist-AU7NQQRP.js} +1 -1
- package/chunks/{dist-DOPL5LSQ.js → dist-FUTEXY6A.js} +1 -1
- package/chunks/{dist-V2YVLYOW.js → dist-WGTQO7F2.js} +3 -1
- package/chunks/{earlyInputCapture-DJCU5SPU.js → earlyInputCapture-RZCDCUI6.js} +27 -28
- package/chunks/{edit-O4VV5AO6.js → edit-T4YAEHVL.js} +27 -28
- package/chunks/{en-JFVULHTB.js → en-XE34GKAA.js} +7 -3
- package/chunks/{enter-worktree-XQYDDI2I.js → enter-worktree-OLYEPNXA.js} +26 -27
- package/chunks/{enterPlanMode-CESVMQBV.js → enterPlanMode-AXQ7UTER.js} +27 -30
- package/chunks/{environment-5KXOLZNR.js → environment-XUW6EU64.js} +29 -30
- package/chunks/{errors-EBUTCBAQ.js → errors-BPEUP6YP.js} +29 -30
- package/chunks/{exit-worktree-MWGNSPNX.js → exit-worktree-NEKFMEVZ.js} +26 -27
- package/chunks/exitPlanMode-S4BINY7I.js +389 -0
- package/chunks/{fast-path-6V73F2T2.js → fast-path-XMVR6CC3.js} +2 -2
- package/chunks/{fr-HVFNU42H.js → fr-X7KDVZIY.js} +3 -2
- package/chunks/{gemini-TEFJZCIZ.js → gemini-VM2AHAT4.js} +136 -82
- package/chunks/{geminiContentGenerator-M56BEXWI.js → geminiContentGenerator-E37XMSNA.js} +5 -5
- package/chunks/{glob-DMYFEEAZ.js → glob-VYD7XS67.js} +32 -28
- package/chunks/{grep-GYE47MD4.js → grep-BURXFWDL.js} +32 -28
- package/chunks/{handleAutoUpdate-OLUY4L7L.js → handleAutoUpdate-FZXSIFIU.js} +32 -34
- package/chunks/{i18n-462JC7IY.js → i18n-DM4SEIAM.js} +28 -29
- package/chunks/{initializer-Y7WD4D2I.js → initializer-LKQSF7J5.js} +33 -34
- package/chunks/{installationInfo-I2Z3BKCE.js → installationInfo-LSRQCS2L.js} +27 -28
- package/chunks/{ja-PY5AF544.js → ja-2ICT3KXF.js} +3 -2
- package/chunks/{keychain-token-storage-AU22CQI6.js → keychain-token-storage-K23CFKGN.js} +2 -2
- package/chunks/{list-XQ5MSAXP.js → list-6MZCALBI.js} +35 -36
- package/chunks/{loadedSettingsAdapter-TQOWYE7C.js → loadedSettingsAdapter-SUHPE5NW.js} +32 -33
- package/chunks/{loop-wakeup-QXWZSCYM.js → loop-wakeup-6H7OENTB.js} +5 -5
- package/chunks/{ls-2OUTG3IZ.js → ls-APTSOOS5.js} +4 -4
- package/chunks/{lsp-4VMNXZW6.js → lsp-HPACPJAN.js} +2 -2
- package/chunks/{mcp-22LLEEVM.js → mcp-N75YKDQK.js} +32 -33
- package/chunks/{monitor-VKG324X3.js → monitor-2JJAHIM4.js} +26 -27
- package/chunks/nonInteractiveCli-SORFQT24.js +126 -0
- package/chunks/{notebook-edit-FJJRBQ3S.js → notebook-edit-7EEP2DCR.js} +27 -28
- package/chunks/{openaiContentGenerator-4T2OGTR5.js → openaiContentGenerator-E2QCAALJ.js} +13 -14
- package/chunks/{pidfile-XL3MDCBM.js → pidfile-AB24FZKB.js} +27 -28
- package/chunks/{processUtils-7UCFN34D.js → processUtils-UXCL54EN.js} +2 -2
- package/chunks/{pt-A3PRQXMU.js → pt-JJ4XPIBP.js} +3 -2
- package/chunks/{qwenContentGenerator-PQUXJDIZ.js → qwenContentGenerator-ZHX56AH2.js} +30 -31
- package/chunks/{qwenOAuth2-LEYOU7RU.js → qwenOAuth2-U7XSUSZN.js} +22 -5
- package/chunks/react-SG7JAQSZ.js +8 -0
- package/chunks/{read-file-3EYQML7E.js → read-file-H2AYF2AF.js} +9 -10
- package/chunks/{read-mcp-resource-JUFHCKSC.js → read-mcp-resource-C6NT52T6.js} +2 -2
- package/chunks/{record-artifact-DWSMBXYY.js → record-artifact-ENCU7QCL.js} +2 -2
- package/chunks/resumeHistoryUtils-IRKP4PVH.js +78 -0
- package/chunks/{ripGrep-S6WPGQNA.js → ripGrep-LLPVNSO3.js} +26 -27
- package/chunks/{ru-IBCWUTOC.js → ru-STR4KTW7.js} +3 -2
- package/chunks/{run-qwen-serve-NSKBT3HU.js → run-qwen-serve-UHQFJZQY.js} +1472 -162
- package/chunks/{runtime-LG5ZZ3VH.js → runtime-6K6HOC2V.js} +38 -37
- package/chunks/{scheduler-PLX3VVTB.js → scheduler-BR7QEF6U.js} +26 -27
- package/chunks/{send-message-JZ752NWD.js → send-message-5GZ4FX2V.js} +3 -3
- package/chunks/{serve-S2ZLRZZR.js → serve-OB2UY4V5.js} +32 -33
- package/chunks/{server-5ECMV4TM.js → server-BSMFGOCV.js} +1916 -899
- package/chunks/{session-ILSONWG4.js → session-UGRANIDK.js} +108 -77
- package/chunks/{settings-BOE7WWSA.js → settings-HG7ZGQ64.js} +36 -37
- package/chunks/{shell-VW664JIZ.js → shell-2UFD4IRR.js} +26 -27
- package/chunks/{skill-COHV6625.js → skill-JVFBLVKR.js} +11 -12
- package/chunks/{spawnChannel-5UUR5XOZ.js → spawnChannel-ASJR6O2Q.js} +28 -29
- package/chunks/{src-XPKFZ3RN.js → src-RTHJXW3N.js} +119 -72
- package/chunks/{standalone-update-IOOJ2NZQ.js → standalone-update-YHXZTF3M.js} +29 -30
- package/chunks/{startInteractiveUI-3NGJGXXS.js → startInteractiveUI-CIJKT7XL.js} +6456 -2491
- package/chunks/{stdioHelpers-UMY72QRP.js → stdioHelpers-HGIYTWAY.js} +3 -1
- package/chunks/{syntheticOutput-LELY6HAI.js → syntheticOutput-ULOVVLY4.js} +3 -3
- package/chunks/{task-create-QY3BIMNM.js → task-create-DUE2PMNI.js} +7 -7
- package/chunks/{task-list-D2U47WBJ.js → task-list-WVPNX7BZ.js} +5 -5
- package/chunks/{task-stop-N6E5IYLH.js → task-stop-CPEQWOT6.js} +2 -2
- package/chunks/{task-update-HJCQILLB.js → task-update-HY2LNFFB.js} +7 -7
- package/chunks/{team-create-UPLVZQFX.js → team-create-XGD5BSLF.js} +26 -27
- package/chunks/{team-delete-RCWYDRF4.js → team-delete-JJV6IUOA.js} +5 -5
- package/chunks/{team-plan-approval-F5F432RO.js → team-plan-approval-RW6EP5EW.js} +26 -27
- package/chunks/{theme-manager-JJE4BJ67.js → theme-manager-JPWJ4H75.js} +27 -28
- package/chunks/todoWrite-JHHIDOIV.js +358 -0
- package/chunks/{tool-search-LRXI4JLZ.js → tool-search-JQK7UCL3.js} +10 -11
- package/chunks/{total-session-admission-I4DHN6UP.js → total-session-admission-YLXP3P5L.js} +32 -33
- package/chunks/{trustedFolders-SEH7LNX2.js → trustedFolders-67VIPNJF.js} +28 -29
- package/chunks/turndown.cjs-FZHGMUTY.js +17670 -0
- package/chunks/{update-relaunch-T6ZKBUA6.js → update-relaunch-UMZWQZXN.js} +6 -6
- package/chunks/{updateCheck-FWLXZPRO.js → updateCheck-LOJWV4M7.js} +30 -31
- package/chunks/useAutoAcceptIndicator-P4DA73XX.js +80 -0
- package/chunks/{validateNonInterActiveAuth-X6K2VWYT.js → validateNonInterActiveAuth-SLPMMOPF.js} +68 -70
- package/chunks/{version-LIFSOGSE.js → version-6ILPYU7G.js} +1 -1
- package/chunks/web-fetch-IUAE5MLR.js +938 -0
- package/chunks/{workflow-NX2DFWGD.js → workflow-4QYH47BD.js} +29 -30
- package/chunks/{workspace-providers-status-VYD6M2NE.js → workspace-providers-status-27WKTNXB.js} +35 -36
- package/chunks/{workspace-registration-store-2Y6PWOEL.js → workspace-registration-store-KETPENQV.js} +1 -1
- package/chunks/{workspace-registry-PKBDBWCA.js → workspace-registry-5RDV7UHN.js} +32 -33
- package/chunks/{workspace-service-HHORUHTS.js → workspace-service-4KY5LGX5.js} +38 -39
- package/chunks/{workspace-skills-status-O5Q26LIY.js → workspace-skills-status-FNGBSHFL.js} +33 -34
- package/chunks/{write-file-NVAEZ3J2.js → write-file-7AF5MMBK.js} +60 -28
- package/chunks/{zh-PAUNIMHQ.js → zh-6ANG2HTL.js} +7 -3
- package/chunks/{zh-TW-GNEUIUFF.js → zh-TW-4RR3YHNN.js} +7 -3
- package/cli-entry.js +37 -2
- package/cli.js +17 -11
- package/locales/ca.js +3 -2
- package/locales/de.js +3 -2
- package/locales/en.js +10 -5
- package/locales/fr.js +3 -2
- package/locales/ja.js +3 -2
- package/locales/pt.js +3 -2
- package/locales/ru.js +3 -2
- package/locales/zh-TW.js +9 -3
- package/locales/zh.js +9 -3
- package/package.json +3 -3
- package/web-shell/assets/{arc-H74fE8UR.js → arc-z137BnM5.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-DN3kEq-I.js → architectureDiagram-3BPJPVTR-DLAe1aUX.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-BrqbsFUF.js → blockDiagram-GPEHLZMM-BA3s3H1p.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-ClFhU1P-.js → c4Diagram-AAUBKEIU-VcGzhrEv.js} +1 -1
- package/web-shell/assets/channel-U-57In3z.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-jCIcG0_M.js → chunk-2J33WTMH-DOUS2ITi.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DSkGe62-.js → chunk-4BX2VUAB-Dcyeec-L.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-BxBHOGTd.js → chunk-55IACEB6-DTFCNQwe.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-v_DS7dH7.js → chunk-727SXJPM-CxnR6fvf.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-1RzEKRPq.js → chunk-AQP2D5EJ-BMA4LaGW.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-DyrSbLOX.js → chunk-FMBD7UC4-CPjlX2He.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BCmdsZiy.js → chunk-ND2GUHAM-Tew1sAeZ.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-CphHGW2D.js → chunk-QZHKN3VN-C4J1gk1l.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-C1Z054Gw.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-C1Z054Gw.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-D5kRC7Fi.js → cose-bilkent-S5V4N54A-QH-RajmL.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-DIiyJJ0U.js → dagre-BM42HDAG-CnIFmEz1.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BOcuB8xU.js → diagram-2AECGRRQ-CghLGoLe.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-CMgiZ4d3.js → diagram-5GNKFQAL-Dh_00fSs.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-Ctx8pfN0.js → diagram-KO2AKTUF-C-sFs61Z.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BT5REAWC.js → diagram-LMA3HP47-BVN3Pmns.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CJkUqXcp.js → diagram-OG6HWLK6-BsWAi0S3.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DyvNNX6v.js → erDiagram-TEJ5UH35-DQwmzQ9j.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-VBf8_My8.js → flowDiagram-I6XJVG4X-Ba_i6EF9.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CviJnR7B.js → ganttDiagram-6RSMTGT7-CCO9sCgw.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BY66_Oze.js → gitGraphDiagram-PVQCEYII-C5dBdRN9.js} +1 -1
- package/web-shell/assets/{index-DhYuvi3j.js → index-DtBztxRX.js} +1 -1
- package/web-shell/assets/index-XGDFJE-X.css +5 -0
- package/web-shell/assets/index-gr6ZEnYY.js +1187 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-D2jaewWZ.js → infoDiagram-5YYISTIA-Chp3x8ms.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BpnNTyi5.js → ishikawaDiagram-YF4QCWOH-Ck6UCFu5.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CA55GNZF.js → journeyDiagram-JHISSGLW-DXKIR2Ny.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DyiSl_Ts.js → kanban-definition-UN3LZRKU-Dj4eNMwI.js} +1 -1
- package/web-shell/assets/{linear-B-sN3dkV.js → linear-C1qgKQ5Y.js} +1 -1
- package/web-shell/assets/{mermaid.core-xf9SXDdb.js → mermaid.core-BUY1NJxU.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DXhr2kRk.js → mindmap-definition-RKZ34NQL-BMad5mbc.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-DUXpbfGQ.js → pieDiagram-4H26LBE5-CmWcsPTt.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-NeDQYeWw.js → quadrantDiagram-W4KKPZXB-DoKQiGHC.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BSbFRL1A.js → requirementDiagram-4Y6WPE33-CscyVirD.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-gg27cAaN.js → sankeyDiagram-5OEKKPKP-34PeJdjz.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Bi_1TSs4.js → sequenceDiagram-3UESZ5HK-Bz39dKTI.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CboCCRaf.js → stateDiagram-AJRCARHV-Cj5gOYJV.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CHbfyKhi.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DrGpF_jn.js → timeline-definition-PNZ67QCA-CwEXlmaS.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DCaJU67x.js → vennDiagram-CIIHVFJN-xy7w9Od6.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-p0QcW1aP.js → wardley-L42UT6IY-BK3Iy08t.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DiEVxj1W.js → wardleyDiagram-YWT4CUSO-CdDGNLRV.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-iQB8nSlA.js → xychartDiagram-2RQKCTM6-wf0Mg9fL.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-2HRYPZT5.js +0 -25
- package/chunks/chunk-BYB3GF2T.js +0 -582
- package/chunks/chunk-FYQ22K62.js +0 -367
- package/chunks/chunk-QAW7PIHT.js +0 -168
- package/chunks/chunk-RTV5TUYB.js +0 -143
- package/chunks/chunk-YLSSEUAM.js +0 -3212
- package/chunks/chunk-ZPAHLFZU.js +0 -172
- package/chunks/exitPlanMode-HYQL4XMB.js +0 -909
- package/chunks/nonInteractiveCli-UMYUT643.js +0 -129
- package/chunks/todoWrite-FKCGATPJ.js +0 -531
- package/chunks/web-fetch-CFCWTCAP.js +0 -5673
- package/web-shell/assets/channel-NFC5ADAa.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-DHgwjz3X.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DHgwjz3X.js +0 -1
- package/web-shell/assets/index-8xIBbHV3.js +0 -1143
- package/web-shell/assets/index-DLyhlZZO.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CXRqms6P.js +0 -1
package/bundled/batch/SKILL.md
CHANGED
|
@@ -126,23 +126,29 @@ You are a worker agent processing a batch of files.
|
|
|
126
126
|
|
|
127
127
|
### Example Invocation Pattern
|
|
128
128
|
|
|
129
|
+
Set `run_in_background: false` on every worker call so all results return inline
|
|
130
|
+
for aggregation in Step 4.
|
|
131
|
+
|
|
129
132
|
```
|
|
130
133
|
<Agent tool call 1>
|
|
131
134
|
description: "Process batch chunk 1/3"
|
|
132
135
|
prompt: "You are a worker agent... [full prompt as above]"
|
|
133
136
|
subagent_type: "general-purpose"
|
|
137
|
+
run_in_background: false
|
|
134
138
|
</Agent tool call 1>
|
|
135
139
|
|
|
136
140
|
<Agent tool call 2>
|
|
137
141
|
description: "Process batch chunk 2/3"
|
|
138
142
|
prompt: "You are a worker agent... [full prompt as above]"
|
|
139
143
|
subagent_type: "general-purpose"
|
|
144
|
+
run_in_background: false
|
|
140
145
|
</Agent tool call 2>
|
|
141
146
|
|
|
142
147
|
<Agent tool call 3>
|
|
143
148
|
description: "Process batch chunk 3/3"
|
|
144
149
|
prompt: "You are a worker agent... [full prompt as above]"
|
|
145
150
|
subagent_type: "general-purpose"
|
|
151
|
+
run_in_background: false
|
|
146
152
|
</Agent tool call 3>
|
|
147
153
|
```
|
|
148
154
|
|
|
@@ -237,6 +237,17 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
237
237
|
}
|
|
238
238
|
```
|
|
239
239
|
|
|
240
|
+
For a vision model that can also follow the normal Qwen Code agent policy and use tools, opt in to full-turn image routing with both capabilities:
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
"capabilities": {
|
|
244
|
+
"vision": true,
|
|
245
|
+
"agent": true
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
When a text-only primary uses that model as its configured vision fallback, the complete image-bearing turn stays on that exact provider, model, and endpoint across tool calls and retries. The next independent turn returns to the primary, and each model request receives only media modalities supported by its target. Omit `agent` (or set it to `false`) to keep the safer Vision Bridge transcription flow.
|
|
250
|
+
|
|
240
251
|
### Local Self-Hosted Models (via OpenAI-compatible API)
|
|
241
252
|
|
|
242
253
|
Most local inference servers (vLLM, Ollama, LM Studio, etc.) provide an OpenAI-compatible API endpoint. Configure them using the `openai` auth type with a local `baseUrl`:
|
|
@@ -87,7 +87,7 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
87
87
|
| `general.gitCoAuthor.commit` | boolean | Add a Co-authored-by trailer to git commit messages AND attach a per-file AI-attribution git note (`refs/notes/ai-attribution`) for commits made through Qwen Code. Disabling skips both. | `true` |
|
|
88
88
|
| `general.gitCoAuthor.pr` | boolean | Append a Qwen Code attribution line to pull request descriptions when running `gh pr create`. | `true` |
|
|
89
89
|
| `general.defaultFileEncoding` | enum | Default encoding for new files. Use `"utf-8"` (default) for UTF-8 without BOM, or `"utf-8-bom"` for UTF-8 with BOM. Only change this if your project specifically requires BOM. | `"utf-8"` |
|
|
90
|
-
| `general.voice.enabled` | boolean | Enable voice dictation in the prompt input. Also
|
|
90
|
+
| `general.voice.enabled` | boolean | Enable voice dictation in the prompt input. Also toggleable with the `/voice` command. Requires a transcription model (`voiceModel`) to be configured. | `false` |
|
|
91
91
|
| `general.voice.mode` | enum | How push-to-talk behaves: `"hold"` to talk while the key is held, or `"tap"` to start and tap (or pause) to stop and submit. | `"hold"` |
|
|
92
92
|
| `general.voice.language` | string | Preferred spoken language for voice transcription (e.g. `"english"`, `"chinese"`). Leave empty to auto-detect. | `""` |
|
|
93
93
|
| `general.voice.keytermsFile` | string | Path to a custom keyterms file (one term per line, `#` for comments) that biases voice transcription toward domain-specific terms. Relative paths resolve from the workspace root; defaults to `.qwen/voice-keyterms.txt` when present. Read only in trusted workspaces. Only applies to Qwen ASR models (`qwen3-asr-*`). | `""` |
|
|
@@ -139,7 +139,7 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
139
139
|
| `ui.disableWorkflowKeywordTrigger` | boolean | When `true`, mentioning the word `workflow` in a prompt no longer softly steers the turn toward the Workflow tool (and the Footer `workflow active` indicator is suppressed). Only applies when workflows are enabled. | `false` |
|
|
140
140
|
| `ui.enableUserFeedback` | boolean | Show an optional feedback dialog after conversations to help improve Qwen performance. | `true` |
|
|
141
141
|
| `ui.compactInline` | boolean | Compact tool display within each group instead of merging across groups. Requires `ui.compactMode` to be enabled. Requires restart. | `false` |
|
|
142
|
-
| `ui.useTerminalBuffer` | boolean | Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions. Scroll with `Shift+↑/↓` (line), `PgUp`/`PgDn` (page), `Ctrl+Home/End` (top/bottom), or the mouse wheel. Does not use the host terminal scrollback while enabled; hold `Shift` (or `Option` on macOS) while dragging for
|
|
142
|
+
| `ui.useTerminalBuffer` | boolean | Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions. Scroll with `Shift+↑/↓` (line), `PgUp`/`PgDn` (page), `Ctrl+Home/End` (top/bottom), or the mouse wheel. Does not use the host terminal scrollback while enabled; drag to select text (double/triple click selects a word/line), or hold `Shift` (or `Option` on macOS) while dragging for the terminal's own selection. | `false` |
|
|
143
143
|
| `ui.hideBuiltinWorktreeIndicator` | boolean | Hide the built-in `⎇ worktree-<branch> (<slug>)` line in the Footer. The worktree state is still passed to custom statusline scripts via the stdin payload. Keep at the default unless your custom statusline renders the worktree itself. | `false` |
|
|
144
144
|
|
|
145
145
|
#### ide
|
|
@@ -175,7 +175,7 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
175
175
|
| `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`. | `20` |
|
|
176
176
|
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `true` |
|
|
177
177
|
| `model.skipLoopDetection` | boolean | Disables streaming loop detection checks. Defaults to `true` (loop detection is skipped) to avoid false positives interrupting legitimate workflows. Set to `false` to re-enable streaming loop detection — useful as a guardrail in headless / non-interactive runs where stuck repetition can otherwise waste budget. | `true` |
|
|
178
|
-
| `model.maxToolCallsPerTurn` | integer |
|
|
178
|
+
| `model.maxToolCallsPerTurn` | integer | Per-turn tool-call cap (one model turn plus its tool-result continuations; blocking Stop-hook continuations such as `/goal` iterations start a fresh budget). When set explicitly, this value is a hard cap: the turn halts on the next tool call after it is reached (the released behavior). When left unset (default 100), the cap is adaptive: once the turn exceeds 100 it halts only when the model keeps repeating the same call (a stuck loop); a productive turn (diverse calls) continues up to a hard backstop of 1000, which always halts. The adaptive default applies to both the interactive TUI and non-interactive (`-p` / JSON / stream-JSON) core-client runs; the daemon/ACP path always treats the value as a hard cap. Always-on circuit breaker against runaway turns, independent of `model.skipLoopDetection`. Set to `0` or a negative value to disable the cap. Choosing "Disable loop detection for this session" in the loop-detected dialog also suppresses it for the rest of the session. | `100` |
|
|
179
179
|
| `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup. | `false` |
|
|
180
180
|
| `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files. | `false` |
|
|
181
181
|
| `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory). | `undefined` |
|
|
@@ -547,13 +547,14 @@ LSP server configuration is done through `.lsp.json` files in your project root
|
|
|
547
547
|
>
|
|
548
548
|
> **Experimental features.** These toggles gate in-development capabilities and may change or be removed in future releases.
|
|
549
549
|
|
|
550
|
-
| Setting | Type | Description
|
|
551
|
-
| -------------------------------------- | ------- |
|
|
552
|
-
| `experimental.cron` | boolean | Enable in-session cron/loop tools (`cron_create`, `cron_list`, `cron_delete`) so the model can create recurring prompts. Can be disabled via the `QWEN_CODE_DISABLE_CRON=1` environment variable. Requires restart.
|
|
553
|
-
| `experimental.
|
|
554
|
-
| `experimental.
|
|
555
|
-
| `experimental.
|
|
556
|
-
| `experimental.
|
|
550
|
+
| Setting | Type | Description | Default |
|
|
551
|
+
| -------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
|
|
552
|
+
| `experimental.cron` | boolean | Enable in-session cron/loop tools (`cron_create`, `cron_list`, `cron_delete`) so the model can create recurring prompts. Can be disabled via the `QWEN_CODE_DISABLE_CRON=1` environment variable. Requires restart. | `true` |
|
|
553
|
+
| `experimental.todoStopGuard` | boolean | Allow daemon and ACP sessions to continue after a natural model stop when the current work chain successfully wrote an unfinished top-level Todo list. Adds at most two consecutive primary-model calls without new user input; mid-turn user input starts a fresh two-attempt stage. It is not restored after process restart and is forced off in safe, bare, and Approval `plan` modes. Requires restart. | `false` |
|
|
554
|
+
| `experimental.cronRecurringMaxAgeDays` | number | Days a recurring cron/loop job lives before auto-expiring (it fires one final time, then is deleted). Set to `0` to disable expiry so jobs run until deleted — useful for long-running daemon deployments. Can be overridden via the `QWEN_CODE_CRON_MAX_AGE_DAYS` environment variable. Requires restart. | `7` |
|
|
555
|
+
| `experimental.agentTeam` | boolean | Enable agent-team collaboration tools (`team_create`, `task_create`, `task_update`, `send_message`, etc.) for multi-agent coordination. Can also be enabled via `QWEN_CODE_ENABLE_AGENT_TEAM=1`. Requires restart. | `false` |
|
|
556
|
+
| `experimental.artifact` | boolean | Enable artifact tools. Enabled by default. In interactive, non-SDK sessions, the model can publish a self-contained HTML page as an interactive Artifact and open it in the browser. Non-SDK daemon sessions can use metadata-only `record_artifact`. Set this to `false` or use `QWEN_CODE_DISABLE_ARTIFACT=1` to disable both. Requires restart. | `true` |
|
|
557
|
+
| `experimental.emitToolUseSummaries` | boolean | Generate a short LLM-based label after each tool-call batch completes. See [Tool-Use Summaries](../features/tool-use-summaries). Requires a fast model to be configured (`fastModel`); silently skipped otherwise. Can be overridden per-session with `QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0` or `=1`. | `true` |
|
|
557
558
|
|
|
558
559
|
#### mcpServers
|
|
559
560
|
|
|
@@ -92,23 +92,37 @@ Controls how conversation sessions are managed:
|
|
|
92
92
|
Channel memory stores durable context for one chat or thread. Entries have stable
|
|
93
93
|
IDs, so a list response can be used for deterministic follow-up operations.
|
|
94
94
|
|
|
95
|
-
- `记住:默认使用 staging 环境`
|
|
96
|
-
thread.
|
|
95
|
+
- `记住:默认使用 staging 环境` is the deterministic form and saves exactly one
|
|
96
|
+
scalar entry for the current chat or thread.
|
|
97
|
+
- To save several separate facts in one request, use a natural phrase routed
|
|
98
|
+
through the classifier. For example:
|
|
99
|
+
`请记住这三条约定:使用 staging;发布前测试;优先中文回复` creates entries
|
|
100
|
+
that you can manage independently. Exact duplicate facts are skipped and
|
|
101
|
+
reported without creating another entry. Requests containing credential-like
|
|
102
|
+
text are rejected; remove secrets and save the non-sensitive facts separately.
|
|
97
103
|
- `查看记忆` lists entries and their stable IDs. Use `查看第 2 页记忆` to view
|
|
98
104
|
a later page, `查看记忆 <id>` to view one entry, or a natural filtered
|
|
99
105
|
request such as `只看中文偏好` to list the matching entries.
|
|
100
106
|
- `查看刚才那条记忆`, `把关于 staging 的记忆改成默认使用 production`, and
|
|
101
107
|
`忘掉刚才那条` work when the natural reference resolves to exactly one entry.
|
|
102
|
-
|
|
103
|
-
|
|
108
|
+
Natural updates and removals first show the proposed change. Confirm an
|
|
109
|
+
update with `确认更新记忆` or `confirm memory update`, or a removal with
|
|
110
|
+
`确认删除记忆` or `confirm memory removal`, within 60 seconds. Exact-ID
|
|
111
|
+
updates and removals remain immediate and do not need confirmation.
|
|
104
112
|
- `清空记忆` starts the clear-all confirmation flow; `确认清空记忆` completes
|
|
105
113
|
it.
|
|
106
114
|
|
|
107
115
|
When a natural inspect, update, or removal request matches multiple entries,
|
|
108
116
|
the bot returns the candidate IDs and previews without changing memory. There
|
|
109
|
-
is no pending selection
|
|
110
|
-
ID, such as `忘掉 m-a31f0d82c7e4`. Exact-ID operations remain the
|
|
111
|
-
fast path. A natural request with no match reports that no entry
|
|
117
|
+
is no pending selection for an ambiguous result: retry the request with one
|
|
118
|
+
exact ID, such as `忘掉 m-a31f0d82c7e4`. Exact-ID operations remain the
|
|
119
|
+
deterministic fast path. A natural request with no match reports that no entry
|
|
120
|
+
matched.
|
|
121
|
+
|
|
122
|
+
Pending update, removal, and clear confirmations apply only to the sender and
|
|
123
|
+
chat or thread that created them. A newer clear, natural update, or natural
|
|
124
|
+
removal proposal replaces an older pending one for that sender and target.
|
|
125
|
+
Pending confirmations are discarded when the channel process restarts.
|
|
112
126
|
|
|
113
127
|
The legacy slash aliases `/remember-channel`, `/channel-memory`, and
|
|
114
128
|
`/forget-channel` have been removed. They are no longer channel-memory
|
|
@@ -130,10 +144,9 @@ Memory remains keyed to the current chat or thread. It is not injected into a
|
|
|
130
144
|
`sessionScope: single` session, because that session is shared across the whole
|
|
131
145
|
channel rather than scoped to one target.
|
|
132
146
|
|
|
133
|
-
Channel memory does not automatically learn facts from normal conversation
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
entry ID when a natural reference is ambiguous.
|
|
147
|
+
Channel memory does not automatically learn facts from normal conversation or
|
|
148
|
+
accept `第一个` as confirmation for an ambiguous natural reference. Use a clear
|
|
149
|
+
remember request and an exact entry ID when a natural reference is ambiguous.
|
|
137
150
|
|
|
138
151
|
### Token Security
|
|
139
152
|
|
|
@@ -160,7 +173,7 @@ When `senderPolicy` is set to `"pairing"`, unknown senders go through an approva
|
|
|
160
173
|
qwen channel pairing approve my-channel VEQDDWXJ
|
|
161
174
|
```
|
|
162
175
|
|
|
163
|
-
Once approved, the user's ID is saved to `~/.qwen/channels/<name>-allowlist.json` and all future messages go through normally.
|
|
176
|
+
Once approved, the user's ID is saved to the channel's workspace-scoped allowlist (`~/.qwen/channels/<workspace-scope>/<name>-allowlist.json`) and all future messages go through normally. Pairing state is scoped per workspace, so two workspaces using the same channel name keep separate approvals.
|
|
164
177
|
|
|
165
178
|
### Pairing CLI Commands
|
|
166
179
|
|
|
@@ -172,13 +185,15 @@ qwen channel pairing list my-channel
|
|
|
172
185
|
qwen channel pairing approve my-channel <CODE>
|
|
173
186
|
```
|
|
174
187
|
|
|
188
|
+
Run these from the channel's workspace directory (or pass `--cwd <dir>`) — pairing state is stored per workspace.
|
|
189
|
+
|
|
175
190
|
### Pairing Rules
|
|
176
191
|
|
|
177
192
|
- Codes are 8 characters, uppercase, using an unambiguous alphabet (no `0`/`O`/`1`/`I`)
|
|
178
193
|
- Codes expire after 1 hour
|
|
179
194
|
- Maximum 3 pending requests per channel at a time — additional requests are ignored until one expires or is approved
|
|
180
195
|
- Users listed in `allowedUsers` in `settings.json` always skip pairing
|
|
181
|
-
- Approved users are stored in `~/.qwen/channels/<name>-allowlist.json` — treat this file as sensitive
|
|
196
|
+
- Approved users are stored per workspace in `~/.qwen/channels/<workspace-scope>/<name>-allowlist.json` — treat this file as sensitive
|
|
182
197
|
|
|
183
198
|
## Group Chats
|
|
184
199
|
|
|
@@ -473,6 +488,48 @@ Example channel config:
|
|
|
473
488
|
|
|
474
489
|
For DingTalk, set `isGroup` explicitly on every target. A direct-message target uses the DingTalk user ID as `chatId` with `isGroup: false`; a group target uses the group `openConversationId` with `isGroup: true`. Other adapters may require their own proactive target shape.
|
|
475
490
|
|
|
491
|
+
Daemon-managed DingTalk, Feishu, Telegram, and WeCom channels dynamically observe contacts from authorized inbound messages. List contacts observed in the primary workspace during the default seven-day freshness window:
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
curl -H "Authorization: Bearer $QWEN_SERVER_TOKEN" \
|
|
495
|
+
http://127.0.0.1:4170/workspace/channel/observed-contacts
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
Use `GET /workspaces/:workspace/channel/observed-contacts` to select another registered, trusted workspace. Add `?freshWithinSeconds=N` to choose a window from one second through 365 days. The daemon advertises this API with the `workspace_channel_observed_contacts` capability.
|
|
499
|
+
|
|
500
|
+
The response returns complete platform IDs and labels. Group labels use names already present in accepted inbound messages when available: DingTalk supplies `conversationTitle`, and Telegram supplies `chat.title`. Feishu and WeCom group labels currently fall back to their complete IDs; no platform directory or group-detail API is queried. Topic labels also fall back to complete IDs. Each `lastObservedAt` is a canonical ISO 8601 UTC timestamp with millisecond precision; clients can convert it to the user's local time zone for display. Top-level `users` contains users observed in direct messages. `groups` contains observed group conversations, `groups[].users` contains users observed in each group, and `groups[].topics[].users` contains users observed in Feishu or Telegram topics:
|
|
501
|
+
|
|
502
|
+
```json
|
|
503
|
+
{
|
|
504
|
+
"users": [
|
|
505
|
+
{
|
|
506
|
+
"channelName": "feishu-main",
|
|
507
|
+
"label": "Example User",
|
|
508
|
+
"id": "ou_complete_user_id",
|
|
509
|
+
"lastObservedAt": "2026-07-17T08:00:00.000Z"
|
|
510
|
+
}
|
|
511
|
+
],
|
|
512
|
+
"groups": [
|
|
513
|
+
{
|
|
514
|
+
"channelName": "feishu-main",
|
|
515
|
+
"label": "oc_complete_chat_id",
|
|
516
|
+
"id": "oc_complete_chat_id",
|
|
517
|
+
"lastObservedAt": "2026-07-17T08:05:00.000Z",
|
|
518
|
+
"users": [
|
|
519
|
+
{
|
|
520
|
+
"label": "Example User",
|
|
521
|
+
"id": "ou_complete_user_id",
|
|
522
|
+
"lastObservedAt": "2026-07-17T08:05:00.000Z"
|
|
523
|
+
}
|
|
524
|
+
],
|
|
525
|
+
"topics": []
|
|
526
|
+
}
|
|
527
|
+
]
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
These nested users are observed participants, not authoritative group membership. Only messages that pass direct/group, mention, sender, and pairing gates are recorded. Repeated observations refresh labels and timestamps; passive observation cannot detect a leave or deletion until the relationship becomes stale. Message content is never stored. The bounded registry lives under `$QWEN_HOME/channels/daemon/<workspaceHash>/observed-contacts.json`, outside the workspace checkout and partitioned per workspace. Its 500-observation limit is shared by all channels and conversations in that workspace, and observations older than 365 days are removed on the next accepted write. If the registry becomes malformed or uses an unsupported version, delete that file to reset it; accepted traffic recreates it. Webhook configuration and delivery are unchanged.
|
|
532
|
+
|
|
476
533
|
Start `qwen serve` with the channel worker enabled:
|
|
477
534
|
|
|
478
535
|
```bash
|
|
@@ -14,16 +14,16 @@ Subagents are independent AI assistants that:
|
|
|
14
14
|
|
|
15
15
|
## Fork Subagent
|
|
16
16
|
|
|
17
|
-
In addition to named subagents, Qwen Code supports **forking** — selected explicitly with `subagent_type: "fork"` (available in interactive sessions). A fork inherits the parent's full conversation context and runs detached in the background. Omitting `subagent_type` does **not** fork; it launches the general-purpose subagent
|
|
17
|
+
In addition to named subagents, Qwen Code supports **forking** — selected explicitly with `subagent_type: "fork"` (available in interactive sessions). A fork inherits the parent's full conversation context and runs detached in the background. Omitting `subagent_type` does **not** fork; it launches the general-purpose subagent. Top-level named subagents run in the background by default and deliver their results through completion notifications. Set `run_in_background: false` when the current turn must wait for the result inline.
|
|
18
18
|
|
|
19
19
|
### How Fork Differs from Named Subagents
|
|
20
20
|
|
|
21
|
-
| | Named Subagent
|
|
22
|
-
| ------------- |
|
|
23
|
-
| Context | Starts fresh, no parent history
|
|
24
|
-
| System prompt | Uses its own configured prompt
|
|
25
|
-
| Execution |
|
|
26
|
-
| Use case | Specialized tasks (testing, docs)
|
|
21
|
+
| | Named Subagent | Fork Subagent |
|
|
22
|
+
| ------------- | -------------------------------------------------------------- | ----------------------------------------------------- |
|
|
23
|
+
| Context | Starts fresh, no parent history | Inherits parent's full conversation history |
|
|
24
|
+
| System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing) |
|
|
25
|
+
| Execution | Background by default; supports an explicit foreground opt-out | Always detached; parent continues immediately |
|
|
26
|
+
| Use case | Specialized tasks (testing, docs) | Parallel tasks that need the current context |
|
|
27
27
|
|
|
28
28
|
### When Fork is Used
|
|
29
29
|
|
|
@@ -61,7 +61,7 @@ Fork children cannot create further forks. This is enforced at runtime — if a
|
|
|
61
61
|
1. **Configuration**: You create Subagents configurations that define their behavior, tools, and system prompts
|
|
62
62
|
2. **Delegation**: The main AI can automatically delegate tasks to appropriate Subagents — or fork itself (`subagent_type: "fork"`) when it wants to inherit the full conversation context and discard the intermediate output
|
|
63
63
|
3. **Execution**: Subagents work independently, using their configured tools to complete tasks
|
|
64
|
-
4. **Results**:
|
|
64
|
+
4. **Results**: Background runs notify the main conversation when they finish; foreground opt-outs return results inline
|
|
65
65
|
|
|
66
66
|
## Getting Started
|
|
67
67
|
|
|
@@ -181,8 +181,8 @@ The `agent` tool accepts an optional `isolation: "worktree"` parameter. When set
|
|
|
181
181
|
|
|
182
182
|
Two constraints:
|
|
183
183
|
|
|
184
|
-
- `isolation: "worktree"` requires a `subagent_type` — forked sub-agents (
|
|
185
|
-
-
|
|
184
|
+
- `isolation: "worktree"` requires a non-fork `subagent_type` — forked sub-agents (`subagent_type: "fork"`) reuse the parent's full conversation context, so isolating them would split intent from working tree.
|
|
185
|
+
- Agents using `isolation: "worktree"` follow the default background behavior; the cleanup runs when the agent reports completion. Set `run_in_background: false` for an inline result. Caller-owned `working_dir` launches remain foreground by default because their lifecycle is managed externally.
|
|
186
186
|
|
|
187
187
|
### Automatic Stale Cleanup
|
|
188
188
|
|
|
@@ -20,6 +20,34 @@ The daemon reads the bearer token from either `--token <value>` on the CLI or th
|
|
|
20
20
|
|
|
21
21
|
One shell-level `export` covers both server boot and SDK client construction (just keep it scoped to the session, per the note above).
|
|
22
22
|
|
|
23
|
+
## Workspace lifecycle and process boundaries
|
|
24
|
+
|
|
25
|
+
One daemon can host several isolated workspace runtimes under the same listener.
|
|
26
|
+
Repeat `--workspace` with absolute directories to create explicit startup
|
|
27
|
+
runtimes; the first is primary. Primary and other explicit startup/static
|
|
28
|
+
runtimes cannot be removed without restarting the process.
|
|
29
|
+
|
|
30
|
+
Additional workspaces can also be registered while the daemon is running
|
|
31
|
+
through `POST /workspaces`. Pass `persist: true` to retain a dynamic secondary
|
|
32
|
+
in the user-level registration store so it is restored on the next start.
|
|
33
|
+
Untrusted registrations remain visible for diagnostics, bounded file reads,
|
|
34
|
+
and declared persisted reads but cannot start ACP. Dynamic and
|
|
35
|
+
persisted-restored secondaries are removable: a normal removal refuses while
|
|
36
|
+
the runtime is busy, while a forced removal requests termination of active
|
|
37
|
+
resources and commits logical removal before the same cwd can be re-added.
|
|
38
|
+
Cleanup is bounded and best-effort after the persistence commit point; failures
|
|
39
|
+
are logged rather than restoring the removed runtime.
|
|
40
|
+
|
|
41
|
+
Runtime isolation covers cwd, environment overlay, filesystem/trust boundary,
|
|
42
|
+
workspace services, bridge, Voice lease state, channel worker, and the ACP/MCP
|
|
43
|
+
resource boundary. Production attempts to preheat the primary ACP child and
|
|
44
|
+
retries on first use after failure; trusted secondaries start theirs on demand,
|
|
45
|
+
and untrusted secondaries do not start ACP.
|
|
46
|
+
Authentication, HTTP rate limits, listener and Voice admission caps,
|
|
47
|
+
total-session admission, metrics, shutdown, and the process fault radius remain
|
|
48
|
+
daemon-global. Run separate daemons when those process-level boundaries must be
|
|
49
|
+
independent.
|
|
50
|
+
|
|
23
51
|
## Linux: systemd user unit
|
|
24
52
|
|
|
25
53
|
> **Find your `qwen` binary first.** The unit file's `ExecStart=` must hold an **absolute path** — service managers don't read your shell's `PATH`. Run `which qwen` to discover it. Common locations: `/usr/local/bin/qwen` (Linuxbrew, manual installs), `~/.nvm/versions/node/vX.Y.Z/bin/qwen` (nvm), `~/.fnm/aliases/default/bin/qwen` (fnm), `~/.volta/bin/qwen` (Volta). Substitute the actual path everywhere the templates below show `/PATH/TO/qwen`.
|
|
@@ -34,9 +62,9 @@ After=network.target
|
|
|
34
62
|
[Service]
|
|
35
63
|
Type=simple
|
|
36
64
|
# Replace with your project; %h expands to $HOME under user units.
|
|
37
|
-
WorkingDirectory=%h/
|
|
65
|
+
WorkingDirectory=%h/project-a
|
|
38
66
|
# Run `which qwen` to find the absolute path. systemd does NOT read $PATH.
|
|
39
|
-
ExecStart=/PATH/TO/qwen serve --hostname 127.0.0.1 --port 4170
|
|
67
|
+
ExecStart=/PATH/TO/qwen serve --hostname 127.0.0.1 --port 4170 --workspace %h/project-a --workspace %h/project-b
|
|
40
68
|
# Read the bearer token from a chmod 600 file rather than inlining it
|
|
41
69
|
# in the unit. `Environment=` would expose the token in the unit file
|
|
42
70
|
# (typically 644 = world-readable). EnvironmentFile keeps the token in
|
|
@@ -95,10 +123,14 @@ Without `loginctl enable-linger`, the user-level systemd instance shuts down whe
|
|
|
95
123
|
<string>127.0.0.1</string>
|
|
96
124
|
<string>--port</string>
|
|
97
125
|
<string>4170</string>
|
|
126
|
+
<string>--workspace</string>
|
|
127
|
+
<string>/Users/YOUR-USERNAME/project-a</string>
|
|
128
|
+
<string>--workspace</string>
|
|
129
|
+
<string>/Users/YOUR-USERNAME/project-b</string>
|
|
98
130
|
</array>
|
|
99
131
|
<!-- launchd does NOT expand `~` or `$HOME` — use absolute paths. -->
|
|
100
132
|
<key>WorkingDirectory</key>
|
|
101
|
-
<string>/Users/YOUR-USERNAME/
|
|
133
|
+
<string>/Users/YOUR-USERNAME/project-a</string>
|
|
102
134
|
<key>EnvironmentVariables</key>
|
|
103
135
|
<dict>
|
|
104
136
|
<!-- DO NOT COMMIT this file with a real token. Also chmod 600 the
|
|
@@ -153,7 +185,7 @@ After editing the plist (e.g., rotating the token) you must `unload` then `load`
|
|
|
153
185
|
Assumes `QWEN_SERVER_TOKEN` is already exported in your shell (see the setup section above):
|
|
154
186
|
|
|
155
187
|
```bash
|
|
156
|
-
tmux new -d -s qwen-serve "
|
|
188
|
+
tmux new -d -s qwen-serve "qwen serve --hostname 127.0.0.1 --workspace /absolute/path/project-a --workspace /absolute/path/project-b"
|
|
157
189
|
tmux attach -t qwen-serve # see live logs; Ctrl-b d to detach
|
|
158
190
|
tmux kill-session -t qwen-serve
|
|
159
191
|
```
|
|
@@ -165,11 +197,14 @@ tmux kill-session -t qwen-serve
|
|
|
165
197
|
Assumes `QWEN_SERVER_TOKEN` is already exported in your shell:
|
|
166
198
|
|
|
167
199
|
```bash
|
|
168
|
-
nohup
|
|
200
|
+
nohup qwen serve --hostname 127.0.0.1 \
|
|
201
|
+
--workspace /absolute/path/project-a \
|
|
202
|
+
--workspace /absolute/path/project-b \
|
|
203
|
+
> qwen-serve.log 2>&1 &
|
|
169
204
|
echo $! # daemon PID; capture if you want to `kill` cleanly later
|
|
170
205
|
```
|
|
171
206
|
|
|
172
|
-
|
|
207
|
+
Explicit absolute `--workspace` values keep the daemon independent of the shell's current directory. A client should select one of the advertised `capabilities.workspaces[]` entries and pass its cwd when creating a session.
|
|
173
208
|
|
|
174
209
|
OK for one-off "let me run this in the background while I poke at the API" workflows. **Not recommended** for anything beyond a single session — no restart-on-crash, log file grows unbounded, no clean way to find the daemon if you forget the PID. Prefer tmux for interactive supervision or systemd / launchd for anything you want to outlast a reboot.
|
|
175
210
|
|
|
@@ -214,7 +249,7 @@ A daemon **restart** drops all in-memory sessions; clients reconnect and start f
|
|
|
214
249
|
## Out of scope (defers to v0.16.x or later)
|
|
215
250
|
|
|
216
251
|
- **Containerized deployment** — Dockerfile, docker-compose, Kubernetes manifests, nginx + TLS reverse proxy, multi-instance token isolation. Defers to v0.16.x once an enterprise pilot is committed; the doc would otherwise rot from no-one-validating.
|
|
217
|
-
- **Cross-host federation / multi-daemon coordination on one host** —
|
|
252
|
+
- **Cross-host federation / multi-daemon coordination on one host** — one daemon can host multiple registered workspace runtimes, but daemons do not coordinate. Instance-path token keying + stale-token cleanup defer to v0.16.x.
|
|
218
253
|
- **Auto-generated daemon tokens** — alpha is BYO-token. Auto-gen + token-store infrastructure defers to v0.16.x.
|
|
219
254
|
- **Windows native service** (`nssm`, Service Control Manager wrapper) — for now use [WSL2](https://learn.microsoft.com/en-us/windows/wsl/) and follow the systemd section above.
|
|
220
255
|
|