@qwen-code/qwen-code 0.22.2-preview.1 → 0.22.3-nightly.20260829.e5cb60ad48
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 +3 -3
- package/bundled/goal-draft/SKILL.md +109 -0
- package/bundled/qc-helper/docs/configuration/settings.md +37 -36
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +34 -3
- package/bundled/qc-helper/docs/features/code-review.md +3 -3
- package/bundled/qc-helper/docs/features/commands.md +2 -1
- package/bundled/qc-helper/docs/features/computer-use.md +2 -2
- package/bundled/qc-helper/docs/features/goals.md +58 -0
- package/bundled/qc-helper/docs/features/headless.md +13 -11
- package/bundled/qc-helper/docs/features/status-line.md +3 -3
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +1 -1
- package/bundled/review/SKILL.md +81 -31
- package/bundled/review/references/persistence.md +7 -3
- package/bundled/review/references/posting.md +10 -4
- package/chunks/MaxSizedBox-JK4LFKJ3.js +111 -0
- package/chunks/{StandaloneSessionPicker-5D2L22SF.js → StandaloneSessionPicker-UA2MQCCS.js} +83 -84
- package/chunks/{acpAgent-4DCKLA32.js → acpAgent-ZKIVHQKW.js} +1159 -360
- package/chunks/{agent-B4AFZL6H.js → agent-Z3Q5C3RX.js} +46 -47
- package/chunks/agent-headless-BIVZ3KYZ.js +86 -0
- package/chunks/{anthropicContentGenerator-U76GTVB6.js → anthropicContentGenerator-YVTB6QX7.js} +46 -50
- package/chunks/{artifact-tool-XDJCZZCF.js → artifact-tool-XSMPHZBT.js} +11 -3
- package/chunks/{askUserQuestion-ZXXERLEV.js → askUserQuestion-66I3U2QX.js} +31 -7
- package/chunks/bridge-KDQTHAR7.js +120 -0
- package/chunks/{channel-management-service-HXXS3HOZ.js → channel-management-service-HQ6KDS7C.js} +6 -6
- package/chunks/channel-settings-store-X4WWBVYW.js +121 -0
- package/chunks/{channel-worker-group-EVDC2P4K.js → channel-worker-group-6NA6BBZV.js} +8 -7
- package/chunks/{channel-worker-manager-IJJZHGEI.js → channel-worker-manager-NEZ2J6RK.js} +10 -8
- package/chunks/{channel-worker-supervisor-YSKB5GVB.js → channel-worker-supervisor-FKU7DIHJ.js} +6 -5
- package/chunks/{chunk-7QGEJI7M.js → chunk-23RFD54N.js} +1 -1
- package/chunks/{chunk-7DPKPBOQ.js → chunk-2AEHQRY2.js} +2 -2
- package/chunks/{chunk-LJP2BBMK.js → chunk-2SXSLSQE.js} +4 -4
- package/chunks/chunk-2TNL5KPM.js +49 -0
- package/chunks/chunk-36LGBEM6.js +130 -0
- package/chunks/{chunk-QR4AHMGQ.js → chunk-3CAI35FS.js} +13 -13
- package/chunks/{chunk-ZWKGZB2K.js → chunk-3JXM2CVW.js} +3 -3
- package/chunks/{chunk-CZFQ62RM.js → chunk-3WJLDA3X.js} +4 -4
- package/chunks/{chunk-ILPXSKGQ.js → chunk-3WK3QDNV.js} +2 -2
- package/chunks/{chunk-IKN3IUJP.js → chunk-3XKLXHGK.js} +17 -9
- package/chunks/{chunk-ZLTEQYNC.js → chunk-42IDLQWS.js} +26 -20
- package/chunks/{chunk-7UJTY5V3.js → chunk-44LKG3IY.js} +1 -1
- package/chunks/chunk-4CMJKUND.js +95 -0
- package/chunks/{chunk-77TOMRBG.js → chunk-4K7KNVWH.js} +3 -3
- package/chunks/{chunk-SQPOJ4ZI.js → chunk-4NDLQAY2.js} +27 -270
- package/chunks/{chunk-V3GINY6K.js → chunk-4QHPPXK2.js} +16 -8
- package/chunks/chunk-4VQBQLIZ.js +293 -0
- package/chunks/{chunk-FJAITR4L.js → chunk-5CALJAH7.js} +2 -2
- package/chunks/{chunk-TDQBVEPK.js → chunk-5SBVOOA2.js} +10 -8
- package/chunks/{chunk-R7G7GKOX.js → chunk-5ZJL3AIV.js} +3 -3
- package/chunks/{chunk-UCSV2IZW.js → chunk-62GQFYID.js} +3 -3
- package/chunks/{chunk-SLEWBQWM.js → chunk-6DIGWMGT.js} +2 -2
- package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
- package/chunks/{chunk-PVBT5QPD.js → chunk-6PJOTWAN.js} +1 -1
- package/chunks/{chunk-5CMWFBML.js → chunk-6XOIV7MI.js} +1 -1
- package/chunks/{chunk-ELY4QVIB.js → chunk-7EQQR46F.js} +1 -1
- package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
- package/chunks/chunk-7GUOXWPY.js +2597 -0
- package/chunks/chunk-7J6OTNGO.js +424 -0
- package/chunks/{chunk-DIMEPKCW.js → chunk-7S226YTK.js} +1 -1
- package/chunks/{chunk-2MHGD7EE.js → chunk-A3LWD5MK.js} +1 -1
- package/chunks/{chunk-E4I5MVBR.js → chunk-ABS25QER.js} +1 -1
- package/chunks/{chunk-F7M6ZFGU.js → chunk-AMLXTTJJ.js} +8 -8
- package/chunks/{chunk-AA7VBRBG.js → chunk-ARF6IJHM.js} +8 -8
- package/chunks/{chunk-NEZZHGEI.js → chunk-AYFA7MZV.js} +6 -6
- package/chunks/{chunk-XMSMTU6H.js → chunk-B42A5ZHA.js} +4 -4
- package/chunks/{chunk-FVDQ5E67.js → chunk-B466ZSHZ.js} +3 -3
- package/chunks/{chunk-6US7BF3G.js → chunk-B5PHIJGI.js} +183 -5
- package/chunks/{chunk-4TPAG3O7.js → chunk-BFPESSTR.js} +1 -1
- package/chunks/{chunk-5URK47RN.js → chunk-BFYGL2XL.js} +11629 -10405
- package/chunks/{chunk-66GIFJ63.js → chunk-BIJEBAAQ.js} +1 -1
- package/chunks/{chunk-WBT3STGU.js → chunk-BKWNKLZB.js} +20 -20
- package/chunks/{chunk-T45CL2NT.js → chunk-BOWFGCEU.js} +3 -3
- package/chunks/{chunk-GTUZ3R6I.js → chunk-BP5PTNCU.js} +357 -117
- package/chunks/{chunk-IPQA4SR5.js → chunk-BWORX6FA.js} +1 -1
- package/chunks/{chunk-BKDAF7ES.js → chunk-BXDAPVQU.js} +2 -2
- package/chunks/{chunk-ZEADBZLO.js → chunk-C2X7KY45.js} +3 -3
- package/chunks/{chunk-7OBH4AM2.js → chunk-CAJTKR6W.js} +5 -5
- package/chunks/{chunk-2FN2HNTI.js → chunk-CFJY4DGX.js} +2 -2
- package/chunks/{chunk-W2WRNJKX.js → chunk-CLWO3B77.js} +6 -6
- package/chunks/{chunk-U45D46O5.js → chunk-CMHFCLBU.js} +1 -1
- package/chunks/{chunk-LRKMQPMD.js → chunk-CQH5KTKC.js} +1 -1
- package/chunks/{chunk-TR7G7XFQ.js → chunk-CVUBULIX.js} +5 -5
- package/chunks/{chunk-MCKJTBZN.js → chunk-CWQZUDB7.js} +2 -2
- package/chunks/{chunk-JECO75XD.js → chunk-D5LUXLUH.js} +2 -2
- package/chunks/chunk-DJBQCO2E.js +842 -0
- package/chunks/{chunk-BQBUZDDH.js → chunk-DJECZIJX.js} +42 -42
- package/chunks/{chunk-VYWCFWI5.js → chunk-DMLVSW7L.js} +542 -654
- package/chunks/{chunk-EB4VDXNI.js → chunk-DYXFD5RO.js} +182 -3
- package/chunks/{chunk-ZKAZP2ZG.js → chunk-EB6QRGHM.js} +3 -3
- package/chunks/{chunk-XIRDDFRS.js → chunk-ECE3UYVO.js} +5266 -6055
- package/chunks/{chunk-3UZCLCXR.js → chunk-EKSCLBBF.js} +3 -3
- package/chunks/{chunk-624NHDGB.js → chunk-ERFDKH32.js} +11 -0
- package/chunks/{chunk-3JKUX4PB.js → chunk-F5RB4S23.js} +9 -9
- package/chunks/{chunk-VBF4KZRQ.js → chunk-FIKYKQOO.js} +1 -1
- package/chunks/{chunk-DID6IRGC.js → chunk-FKET6VOO.js} +56 -39
- package/chunks/{chunk-4K44OMLI.js → chunk-FROAFEFB.js} +3 -3
- package/chunks/{chunk-MZS7GEC7.js → chunk-FTF2YIZ5.js} +1 -1
- package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
- package/chunks/{chunk-ZJG323IA.js → chunk-G6FECKTJ.js} +7 -5
- package/chunks/{chunk-H3HZ4AWW.js → chunk-GIHXH2KO.js} +1 -1
- package/chunks/{chunk-ZGWDHSUM.js → chunk-H4LCV44K.js} +4 -4
- package/chunks/{chunk-OLS3MAXQ.js → chunk-H5WQZTAW.js} +15 -9
- package/chunks/chunk-H72BQNM3.js +645 -0
- package/chunks/{chunk-Z4X5MTRT.js → chunk-HCOBAG2L.js} +2 -4
- package/chunks/{chunk-ATLGYSYH.js → chunk-HHQJANFM.js} +4 -4
- package/chunks/{chunk-7JPW6IYH.js → chunk-HVC3PNVC.js} +1 -1
- package/chunks/{chunk-OI2DR6QB.js → chunk-I6LYRJPB.js} +3 -3
- package/chunks/{chunk-E55H6BZ7.js → chunk-ICURCKIU.js} +1335 -119
- package/chunks/{chunk-2YDYDDE2.js → chunk-IJMEPQ5N.js} +3 -3
- package/chunks/{chunk-PAJGKZAA.js → chunk-ISKH4QX3.js} +14 -12
- package/chunks/{chunk-VOEMVOM4.js → chunk-IZDKYNKN.js} +2 -2
- package/chunks/{chunk-FCSWZAS3.js → chunk-J7SS77YW.js} +5 -5
- package/chunks/{chunk-AYVIGUUK.js → chunk-JB4JIVTJ.js} +1 -1
- package/chunks/chunk-JCMS65DJ.js +1584 -0
- package/chunks/{chunk-BHTJAO36.js → chunk-JHDPOPQG.js} +7 -7
- package/chunks/{chunk-FN5C6C7G.js → chunk-JHYH6PYQ.js} +192 -478
- package/chunks/{chunk-T6OODF2U.js → chunk-JWALNCLT.js} +1 -1
- package/chunks/{chunk-KQYW2GB5.js → chunk-JWDMKJG5.js} +6 -6
- package/chunks/{chunk-SKNVVYIJ.js → chunk-K5KXUXWC.js} +3 -3
- package/chunks/{chunk-TFV4RXPU.js → chunk-K6CTN5TU.js} +1 -1
- package/chunks/{chunk-X3XGCJ32.js → chunk-KEIMKAM4.js} +28 -111
- package/chunks/{chunk-XUX6O2ZT.js → chunk-KID24ZFN.js} +4 -1
- package/chunks/{chunk-I6DY753S.js → chunk-KJO2LBUK.js} +944 -18
- package/chunks/{chunk-5T4LWWNX.js → chunk-KYWTPLBJ.js} +18 -21
- package/chunks/chunk-LGO7DEXL.js +1186 -0
- package/chunks/{chunk-TOF4UZHH.js → chunk-LUEHOUHM.js} +3 -3
- package/chunks/{chunk-GNMJNDZE.js → chunk-M6FOJXW3.js} +1 -1
- package/chunks/{chunk-JLU3FPQR.js → chunk-MAQ2W4IF.js} +5 -5
- package/chunks/{chunk-K3LPAED5.js → chunk-MQM5PJML.js} +24 -4
- package/chunks/{chunk-AKQA3WCH.js → chunk-MVDPFLWM.js} +723 -3399
- package/chunks/{chunk-5PA6UEYA.js → chunk-MZCJWS5Y.js} +1 -1
- package/chunks/{chunk-BGXZBI5B.js → chunk-N4X7G4J2.js} +2 -1
- package/chunks/{chunk-WXDZZFH3.js → chunk-NEBSNUMX.js} +6 -6
- package/chunks/{chunk-J3CBIEDS.js → chunk-NENQE7VH.js} +32 -15
- package/chunks/{chunk-TMGAS5TO.js → chunk-NHDNYMBU.js} +26 -4
- package/chunks/{chunk-27ONXAFY.js → chunk-NIFYWDYN.js} +1 -1
- package/chunks/{chunk-IJVDHPKD.js → chunk-NU7RKEZR.js} +2 -2
- package/chunks/{chunk-CDUN63IN.js → chunk-OJEMXKA4.js} +3 -3
- package/chunks/{chunk-RRKNX553.js → chunk-PDQGMSZK.js} +1 -1
- package/chunks/{chunk-R3T33BG5.js → chunk-PI6HYGBE.js} +3 -3
- package/chunks/{chunk-5SM2AK65.js → chunk-PO6YCWIQ.js} +5 -5
- package/chunks/{chunk-GTUKW3I6.js → chunk-PPKZ7JOE.js} +1 -1
- package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
- package/chunks/{chunk-ALTQLFEG.js → chunk-PQZBDDNG.js} +5 -194
- package/chunks/{chunk-WEGXPP5E.js → chunk-QFCDF5PL.js} +1 -1
- package/chunks/{chunk-DEYPMJPD.js → chunk-QJNDUTOL.js} +45 -239
- package/chunks/{chunk-OF2DPXUS.js → chunk-QYMAKPY5.js} +119 -24
- package/chunks/{chunk-JVPFTDBK.js → chunk-RFIDDFAL.js} +1 -1
- package/chunks/chunk-RKFGE7JH.js +93 -0
- package/chunks/{chunk-CPPYZHBN.js → chunk-RU7BK6B3.js} +1 -1
- package/chunks/{chunk-KPF2K55D.js → chunk-RZKOA4JE.js} +39 -8
- package/chunks/{chunk-AWFZDYSD.js → chunk-SEDFP3ZI.js} +1 -1
- package/chunks/chunk-SEONHUS3.js +275 -0
- package/chunks/chunk-SS4MRMKE.js +3525 -0
- package/chunks/{chunk-BPMVPWBT.js → chunk-SS5SDCD3.js} +6 -6
- package/chunks/{chunk-J5352S3S.js → chunk-ST5V3ZOC.js} +3 -3
- package/chunks/{chunk-7CWEZQ6T.js → chunk-STUJ7IMZ.js} +0 -77
- package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
- package/chunks/{chunk-TWSKM647.js → chunk-T7KMERIX.js} +1 -1
- package/chunks/{chunk-HPECDZ6X.js → chunk-TGJ2PKCW.js} +4341 -1408
- package/chunks/{chunk-EC5BONC3.js → chunk-TPI7O7HR.js} +1 -1
- package/chunks/{chunk-T2CRBIDJ.js → chunk-TTX2JUE6.js} +1 -1
- package/chunks/{chunk-AP7WZONS.js → chunk-TU6WVK67.js} +19 -9
- package/chunks/chunk-U54AYGEC.js +337 -0
- package/chunks/{chunk-3WBMPR3S.js → chunk-UAOTD2BN.js} +1 -1
- package/chunks/{chunk-2NNTE2ED.js → chunk-UHQFIS7N.js} +15 -0
- package/chunks/{chunk-SUE2ZMUH.js → chunk-UI4DXRZW.js} +49 -31
- package/chunks/{chunk-76WGY6LW.js → chunk-URE3QBBB.js} +3 -3
- package/chunks/{chunk-KOJ6MHD5.js → chunk-UTLCH2FK.js} +1 -1
- package/chunks/chunk-UVY67MSH.js +205 -0
- package/chunks/{chunk-FJWICLG7.js → chunk-V4264FEG.js} +9 -9
- package/chunks/{chunk-XR7OIAQF.js → chunk-V5J4J5TP.js} +2 -2
- package/chunks/{chunk-Z6L3C4VF.js → chunk-VBCPNIQD.js} +39 -39
- package/chunks/{chunk-HABT2Z7R.js → chunk-VKCJPNGU.js} +4 -4
- package/chunks/{chunk-UCQOSV6A.js → chunk-VKIGT4OG.js} +3 -3
- package/chunks/{chunk-JSY43GMI.js → chunk-VNMZLAVG.js} +185 -174
- package/chunks/{chunk-X2UOOG5V.js → chunk-VQUGEVGR.js} +1 -1
- package/chunks/{chunk-XJS54K4A.js → chunk-VTHREBQM.js} +2 -2
- package/chunks/{chunk-PTQF7WRA.js → chunk-W3CY4QIO.js} +6 -6
- package/chunks/{chunk-LWLEPXKK.js → chunk-W4XG7IZ4.js} +19 -2
- package/chunks/{chunk-IOGKXPL3.js → chunk-W7HH77GN.js} +6 -6
- package/chunks/{chunk-FPH6TXD3.js → chunk-WAOIHTJS.js} +1 -1
- package/chunks/{chunk-3D6PDLNJ.js → chunk-WD3WSEW3.js} +49 -32
- package/chunks/chunk-WLEYH7CD.js +332 -0
- package/chunks/{chunk-JLGFGPZJ.js → chunk-WNPDGUJO.js} +22 -3
- package/chunks/{chunk-O3BUXIPM.js → chunk-WXEA74YB.js} +3 -3
- package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
- package/chunks/{chunk-VL4YX3FH.js → chunk-XF63PKEN.js} +1 -1
- package/chunks/{chunk-3FSBMAYD.js → chunk-XQFT3QUF.js} +1 -1
- package/chunks/{chunk-5JCZ3UKB.js → chunk-Y5S7LBOZ.js} +44 -7
- package/chunks/{chunk-WZ3QKPMQ.js → chunk-YN44TEOZ.js} +19 -31
- package/chunks/{chunk-2SERYG4T.js → chunk-YTDVNSUQ.js} +1 -1
- package/chunks/{chunk-UWICO5KN.js → chunk-Z44FUM77.js} +3 -3
- package/chunks/{chunk-OT4YKUUV.js → chunk-ZU4UDIWX.js} +2 -2
- package/chunks/{chunk-L436XFLJ.js → chunk-ZZUKP7HV.js} +1 -1
- package/chunks/config-utils-NOCNFTQP.js +114 -0
- package/chunks/contextCommand-DH2NOQBI.js +107 -0
- package/chunks/{core-runtime-CEJRHCRF.js → core-runtime-OLW4OXMV.js} +61 -62
- package/chunks/{create-sub-session-RVHSWVAP.js → create-sub-session-23ITIELI.js} +3 -3
- package/chunks/{create-sub-session-DFZVIG56.js → create-sub-session-ZCGPQTIE.js} +166 -86
- package/chunks/{cron-create-IJGVR5R2.js → cron-create-KJ4IY6PP.js} +57 -10
- package/chunks/{cron-delete-4N5BI6GL.js → cron-delete-MBLQCAYY.js} +4 -4
- package/chunks/{cron-list-2CATIPUX.js → cron-list-DWH2PQ47.js} +4 -4
- package/chunks/{daemon-NAYK4XXU.js → daemon-3GNHB3M2.js} +523 -8
- package/chunks/{daemon-git-worktree-guard-L6ZUFKF7.js → daemon-git-worktree-guard-SHIU7MPJ.js} +58 -59
- package/chunks/daemon-status-provider-WECDBDF7.js +118 -0
- package/chunks/daemon-trust-policy-MX4OYXF3.js +113 -0
- package/chunks/{daemon-trust-policy-monitor-2G3EKQEU.js → daemon-trust-policy-monitor-73WXIKNL.js} +66 -67
- package/chunks/deferred-core-runtime-BKS7O3D6.js +115 -0
- package/chunks/{display-image-6KHQNEAE.js → display-image-BE7I6ZB6.js} +5 -5
- package/chunks/{dist-DJBNNPLN.js → dist-4WXLCBDR.js} +1 -1
- package/chunks/{dist-TJUDJTCB.js → dist-5VXFRTWU.js} +280 -48
- package/chunks/{dist-6H6RZ5H6.js → dist-6BPYWHVD.js} +89 -65
- package/chunks/{dist-ZBVOXSKF.js → dist-GFN5DCBX.js} +74 -65
- package/chunks/{dist-SATKXKUR.js → dist-HZNT6GQS.js} +1 -1
- package/chunks/{dist-FVJZSIO4.js → dist-LVZCXVPF.js} +72 -20
- package/chunks/{dist-7CKN54NL.js → dist-N6W6E753.js} +71 -64
- package/chunks/{dist-4Q7NTUNB.js → dist-NSV4NBPK.js} +31 -14
- package/chunks/{dist-UQUFZDIY.js → dist-SWQMYP2Q.js} +18 -16
- package/chunks/earlyInputCapture-5NNZSVL7.js +108 -0
- package/chunks/{edit-ZERGX3RV.js → edit-IGHPT4I2.js} +47 -48
- package/chunks/{en-6MDBWMTG.js → en-YLXBXM4Z.js} +2 -1
- package/chunks/{enter-worktree-UOZ6ZTP7.js → enter-worktree-35QCAAFP.js} +7 -7
- package/chunks/{enterPlanMode-W2RP3P5B.js → enterPlanMode-LVTPJSAA.js} +51 -52
- package/chunks/environment-HC2PPYDO.js +130 -0
- package/chunks/errors-VCWSG25A.js +114 -0
- package/chunks/{exit-worktree-G2QATUCV.js → exit-worktree-XQD6D543.js} +7 -7
- package/chunks/exitPlanMode-RHI2K2O7.js +84 -0
- package/chunks/{fast-path-4MWBCEUF.js → fast-path-IQNCJOPE.js} +7 -7
- package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-XH426LUU.js} +3 -3
- package/chunks/{glob-DKTNG32L.js → glob-EANAXPNR.js} +46 -47
- package/chunks/{goal-tools-CNVXMSZD.js → goal-tools-PTD3MBA7.js} +10 -8
- package/chunks/{grep-3NLSS32D.js → grep-3REG7TO6.js} +9 -7
- package/chunks/handleAutoUpdate-PVVFLDQ4.js +110 -0
- package/chunks/i18n-VOKX5QIF.js +125 -0
- package/chunks/{image-gen-63NN2H5N.js → image-gen-J6FDGUZP.js} +8 -10
- package/chunks/initializer-SZVVTGZL.js +114 -0
- package/chunks/installationInfo-R22453J5.js +108 -0
- package/chunks/{keychain-token-storage-3MGFRYGM.js → keychain-token-storage-37XPR34V.js} +2 -2
- package/chunks/list-LK5M5W2N.js +117 -0
- package/chunks/{list-agents-EXRSHIDJ.js → list-agents-DI3YFTDT.js} +2 -2
- package/chunks/{gemini-X5GQHQYF.js → llm-6RQJUVIS.js} +120 -115
- package/chunks/{geminiContentGenerator-UDSWXZXL.js → llm-content-generator-Q7JJDSJR.js} +29 -29
- package/chunks/loadedSettingsAdapter-KF2ZPSPG.js +111 -0
- package/chunks/{loggingContentGenerator-73C7TKDK.js → loggingContentGenerator-SBCIJG2J.js} +330 -37
- package/chunks/{loop-wakeup-XBPB2BRO.js → loop-wakeup-XJFONSQ7.js} +5 -5
- package/chunks/{ls-WFONAND2.js → ls-3VAT2J7A.js} +4 -4
- package/chunks/{lsp-DUKPDUXN.js → lsp-5W7IRUBH.js} +2 -2
- package/chunks/{managed-npm-update-H2KOLQZU.js → managed-npm-update-UG324XFY.js} +59 -60
- package/chunks/mcp-PUSCFGS5.js +111 -0
- package/chunks/{monitor-TGCMNJJH.js → monitor-RJW5AP64.js} +46 -47
- package/chunks/nonInteractiveCli-OIXN4WSR.js +187 -0
- package/chunks/{notebook-edit-YEUNZYDX.js → notebook-edit-5MWEIMS2.js} +47 -48
- package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-YN3QZHVM.js} +1 -1
- package/chunks/{openaiContentGenerator-J7LD4VSL.js → openaiContentGenerator-AGTNYSCJ.js} +26 -28
- package/chunks/pidfile-LTA6NT3P.js +112 -0
- package/chunks/process-registry-OAEG6WGC.js +662 -0
- package/chunks/{processUtils-ZHFC7CSL.js → processUtils-GY3Q66CJ.js} +2 -2
- package/chunks/prompt-terminal-ledger-3QS6TCMF.js +106 -0
- package/chunks/{qwenContentGenerator-YEWWK3JQ.js → qwenContentGenerator-NU6PCDA7.js} +51 -52
- package/chunks/{qwenOAuth2-JIYAWXTW.js → qwenOAuth2-OF5WRBQT.js} +7 -9
- package/chunks/{read-file-ZQI3WPVK.js → read-file-DTQL5V62.js} +13 -13
- package/chunks/{read-mcp-resource-7A7NFSFL.js → read-mcp-resource-XD257PGJ.js} +2 -2
- package/chunks/{record-artifact-CPJ4IJSD.js → record-artifact-VW23GS4F.js} +4 -4
- package/chunks/{report-findings-VFM5DENC.js → report-findings-AO5VYFLR.js} +9 -5
- package/chunks/{request-shutdown-6IW46GD7.js → request-shutdown-BCLA3JV2.js} +7 -7
- package/chunks/resumeHistoryUtils-PZ4BER55.js +119 -0
- package/chunks/ripGrep-A2FGBZGY.js +39 -0
- package/chunks/{run-qwen-serve-WHWU7NZ6.js → run-qwen-serve-AESOSKFC.js} +371 -357
- package/chunks/{runtime-E7BSPWQP.js → runtime-YQHSEKG4.js} +71 -72
- package/chunks/scheduled-tasks-XG6KK6NY.js +128 -0
- package/chunks/{scheduler-TJPATFOM.js → scheduler-I4WKXWRZ.js} +60 -61
- package/chunks/{sdk-exporters-http-XXSKBD2C.js → sdk-exporters-http-TTU2CHBU.js} +2 -2
- package/chunks/{sdk-impl-VPNBLV7I.js → sdk-impl-UUMVYMAL.js} +11 -5
- package/chunks/{send-message-OXZK6USO.js → send-message-AJ4OCUBV.js} +25 -9
- package/chunks/serve-MQDTVC7X.js +119 -0
- package/chunks/{server-AXCN7QBJ.js → server-L5ETIKEW.js} +6083 -4965
- package/chunks/{session-HO4US3AG.js → session-LKKXRUJM.js} +116 -114
- package/chunks/session-pr-refresh-5OWA6MC2.js +365 -0
- package/chunks/{settings-B2PFJJN4.js → settings-S6KG7JST.js} +65 -66
- package/chunks/shell-JEQE5AHC.js +94 -0
- package/chunks/{skill-NL3VH562.js → skill-QEGMZXKI.js} +68 -24
- package/chunks/skill-settings-EVY7QF4H.js +119 -0
- package/chunks/spawnChannel-AQP72WPN.js +113 -0
- package/chunks/standalone-update-JUJA4BKV.js +119 -0
- package/chunks/{startInteractiveUI-G2XKSCQ7.js → startInteractiveUI-5ZMSJZ3J.js} +3081 -2477
- package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
- package/chunks/{syntheticOutput-5AJ444QT.js → syntheticOutput-ML43GEFN.js} +3 -3
- package/chunks/{task-create-TY7P6UHG.js → task-create-QN4LYRSE.js} +11 -11
- package/chunks/{task-list-BELMPA75.js → task-list-JPLGK45U.js} +5 -5
- package/chunks/{task-stop-U3S3KZG2.js → task-stop-CXEH5L2D.js} +2 -2
- package/chunks/{task-update-O4IGDPCK.js → task-update-IWEOJFV2.js} +11 -11
- package/chunks/{team-create-IYBUOORE.js → team-create-ZEGP7KVD.js} +46 -47
- package/chunks/{team-delete-YWFXX77L.js → team-delete-RZVVSGCY.js} +5 -5
- package/chunks/{team-plan-approval-YKU57LBM.js → team-plan-approval-SXWT2WZN.js} +46 -47
- package/chunks/terminal-image-renderer-42B6N55E.js +115 -0
- package/chunks/theme-manager-DDYUBC25.js +103 -0
- package/chunks/{todoWrite-435EO2CS.js → todoWrite-WDJNQEMW.js} +43 -25
- package/chunks/{tool-search-4Q3KASIQ.js → tool-search-GDDBA4X4.js} +22 -22
- package/chunks/total-session-admission-6MYP4GBA.js +115 -0
- package/chunks/trustedFolders-LPEIY3GE.js +123 -0
- package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
- package/chunks/{update-relaunch-4DC2KKFS.js → update-relaunch-BOIIZNT3.js} +6 -6
- package/chunks/updateCheck-KSVHYJYE.js +119 -0
- package/chunks/useAutoAcceptIndicator-43D2A4ZN.js +121 -0
- package/chunks/{validateNonInterActiveAuth-YAE4YPO3.js → validateNonInterActiveAuth-WSD4SOIM.js} +108 -106
- package/chunks/{version-QFP7OGWX.js → version-B4CM7RNG.js} +1 -1
- package/chunks/{web-fetch-6T23IK6Q.js → web-fetch-MOHILUZL.js} +16 -18
- package/chunks/{web-search-WBWTCZK2.js → web-search-G4HIMY2V.js} +9 -11
- package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-HNB4FDOE.js} +2 -2
- package/chunks/{workflow-FMAA3D4R.js → workflow-H3PCYU5F.js} +130 -95
- package/chunks/workspace-providers-status-AAX7VWMT.js +115 -0
- package/chunks/{workspace-registration-store-CMMX7EPX.js → workspace-registration-store-YTHZ6SL4.js} +1 -1
- package/chunks/workspace-registry-URHGBL4U.js +124 -0
- package/chunks/workspace-service-XJMSLRCU.js +127 -0
- package/chunks/workspace-skills-status-JGEDANNT.js +114 -0
- package/chunks/{workspace-trust-reconciler-PJDQUTJL.js → workspace-trust-reconciler-ZHI5TDYB.js} +74 -73
- package/chunks/write-file-5O4S63L6.js +89 -0
- package/chunks/{zh-TW-MV4FWFB6.js → zh-TW-RPTMRTHG.js} +2 -1
- package/chunks/{zh-X3WGU6SI.js → zh-UNY63FR3.js} +2 -1
- package/chunks/{zoom-image-WVYVFRXF.js → zoom-image-N2IBUVXE.js} +13 -13
- package/cli.js +130 -93
- package/locales/en.js +2 -0
- package/locales/zh-TW.js +2 -0
- package/locales/zh.js +2 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-d-8xa8uz.js → abnfDiagram-VCTEODGH-OJQpqC9m.js} +1 -1
- package/web-shell/assets/{arc-BhB7CrGK.js → arc-BxH0YR17.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BDCd_IcJ.js → architectureDiagram-5GKGNRK7-CxyWiGfF.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-C-AHu6mi.js → blockDiagram-NRAW4CY4-DukXbJQ7.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-CFjQt0vl.js → c4Diagram-UCG6FXSJ-DvS1T6pK.js} +1 -1
- package/web-shell/assets/channel-Dbbg7P-u.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-DRjwqaDq.js → chunk-2Q5K7J3B-qvqfJ7VZ.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-eHM9noJE.js → chunk-5VM5RSS4-BJ3kJYte.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-CcSWUYn1.js → chunk-F27PBJKO-BYPVESil.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-DNr-RF5S.js → chunk-G27WJ6UU-B4UYFElk.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-rVJHoNF8.js → chunk-JWPE2WC7-8zGKVNUU.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-B2aX0Gzy.js → chunk-LCL6LL3I-CbaHONpI.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-DVp07n32.js → chunk-POPQ4Y6H-f8kAjzlF.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-C6QB_KUr.js → chunk-SVP7TREG-Dm8ahq7K.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CLVxDNCy.js → chunk-XXDRQBXY-yrcLzv8z.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-cDYs8iT0.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-cDYs8iT0.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-B_aKX3A3.js → cose-bilkent-JH36ORCC-DN1C22IH.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-BBw2pPUa.js → cynefin-OW5HDTMX-B2oF7XD_.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-WWPiBTwk.js → cynefinDiagram-5FMLGOSQ-DGgIKpiM.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-CPtIdka-.js → dagre-3AP2YEHR-BHKawzoP.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-Dj5og1Xi.js → diagram-S7CK7UJ4-6UgKqreR.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-CC_x70YC.js → diagram-UQ7AKVKN-BXJbPJ6F.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-rXMfsO4n.js → diagram-VSXAHHWV-DVnYFPkS.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-DEmLYQbh.js → diagram-VX7I27RA-CjBoC0Rq.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-B0ys6Vxx.js → diagram-Z3DM3KII-KZdUceQT.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-Bq6y6lKH.js → ebnfDiagram-PWID7BFC-5UekGScM.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-l69JeBZ4.js → erDiagram-SSCWMZ5O-TRWexoj1.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-Cm-EzGY4.js → flowDiagram-A5DVABFB-Di5bhBVo.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BRS9ZOp7.js → ganttDiagram-EL5Y4UJY-DpJUJ8Dp.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DAMRKgLk.js → gitGraphDiagram-WWUBYQGX-b08xIx2C.js} +1 -1
- package/web-shell/assets/index-BvDpDHTN.css +36 -0
- package/web-shell/assets/index-Cg60lhnI.js +1913 -0
- package/web-shell/assets/{index-Bncx8E8M.js → index-n6dFH09O.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-DasffaZp.js → infoDiagram-RXCK75RN-Cz14FAt7.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-CmRUt3C-.js → ishikawaDiagram-5VMMS53U-7nxp2bIU.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-DzhE_c1Z.js → journeyDiagram-EYS64GPL-CjL47fk0.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-BH5b6nn3.js → kanban-definition-3QL26DDD-CWFl-mHs.js} +1 -1
- package/web-shell/assets/{layout-BxoLK-LY.js → layout-BUP1BcwB.js} +1 -1
- package/web-shell/assets/{linear-CqDPvVI7.js → linear-CqbwqSbW.js} +1 -1
- package/web-shell/assets/{mermaid.core-DBoN4plo.js → mermaid.core-C_50HLol.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-DJJtXPEM.js → mindmap-definition-FBJOCRG2-DbyD_AoU.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DmgPXP5l.js → pegDiagram-XKGWAZYB-VozWyqyY.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-1ezjzcI5.js → pieDiagram-E7YTZNPT-O7EKamBL.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-ChKARz3k.js → quadrantDiagram-AXDQQJYC-DOmPZxHg.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-k7mNB_QT.js → railroadDiagram-O6MQD6OU-ElyfC2zE.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-B0XFsii0.js → requirementDiagram-EFPCY7ZU-DbnqPbzR.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-repJ2Ukk.js → sankeyDiagram-P5KCCOFB-yPWliSHr.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D0gUSKGu.js → sequenceDiagram-WJ2MYXX4-BImQFomC.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CE463F74.js → sizeCapture-X5ZJPWSS-DEvqeEHo.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-003zYtJa.js → stateDiagram-HBIQ2CUA-BbLtiF9u.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DGtlzdpx.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-DBj8MFpu.js → swimlanes-XN3QIQJK-RFewDF6v.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-CITCVFdx.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-D2aCh4a9.js → timeline-definition-24CTP7MA-DF4L3-UR.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-BHMfWBpl.js → vennDiagram-4TSXK5OY-BtlSJXaA.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-RdHAj66j.js → wardleyDiagram-VM6X3IG4-C8ogG8Fh.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-BgJWOvq0.js → xychartDiagram-S5SC5T6Z-C5QVfsGQ.js} +1 -1
- package/web-shell/index.html +3 -3
- package/chunks/MaxSizedBox-BFVLZP2E.js +0 -112
- package/chunks/agent-headless-UCBCS4V4.js +0 -87
- package/chunks/bridge-FRNYLYY7.js +0 -119
- package/chunks/channel-settings-store-IV4KDL7N.js +0 -117
- package/chunks/chunk-I6VVOZDK.js +0 -202
- package/chunks/chunk-JS73NNWF.js +0 -30
- package/chunks/chunk-K2OJUPOE.js +0 -78
- package/chunks/chunk-P3QQPMQA.js +0 -19
- package/chunks/chunk-SDVF6A42.js +0 -945
- package/chunks/chunk-T26EAKDL.js +0 -13
- package/chunks/chunk-VGHZT6JR.js +0 -51
- package/chunks/config-utils-PMX4QZ5Y.js +0 -113
- package/chunks/contextCommand-NZRLVAFC.js +0 -108
- package/chunks/daemon-status-provider-FTTYZEKN.js +0 -118
- package/chunks/daemon-trust-policy-WMGFPA3Z.js +0 -114
- package/chunks/deferred-core-runtime-BUFEFYNA.js +0 -116
- package/chunks/earlyInputCapture-ROPLMXA7.js +0 -109
- package/chunks/environment-ZBJ23YVR.js +0 -131
- package/chunks/errors-U5KNAADB.js +0 -115
- package/chunks/exitPlanMode-VFJ5R5DD.js +0 -85
- package/chunks/handleAutoUpdate-W4BUYFT7.js +0 -111
- package/chunks/i18n-KX7FEKJJ.js +0 -126
- package/chunks/initializer-SNVVLS7Y.js +0 -115
- package/chunks/installationInfo-D4XGQNHJ.js +0 -109
- package/chunks/list-WYECMLXZ.js +0 -118
- package/chunks/loadedSettingsAdapter-5WZBXBCR.js +0 -112
- package/chunks/mcp-CBWAROY3.js +0 -112
- package/chunks/nonInteractiveCli-O232UUV7.js +0 -185
- package/chunks/pidfile-MSPQ255Y.js +0 -113
- package/chunks/process-registry-PMJOA5CO.js +0 -172
- package/chunks/prompt-terminal-ledger-YPGMNDXT.js +0 -107
- package/chunks/resumeHistoryUtils-35D4KAVT.js +0 -120
- package/chunks/ripGrep-46N4FLOS.js +0 -39
- package/chunks/serve-WQ54UIYG.js +0 -120
- package/chunks/shell-7XMSANI3.js +0 -95
- package/chunks/skill-settings-SKMN5YXC.js +0 -120
- package/chunks/spawnChannel-NE43EEO3.js +0 -113
- package/chunks/standalone-update-XOCWGXAH.js +0 -120
- package/chunks/terminal-image-renderer-NREKYTAD.js +0 -116
- package/chunks/theme-manager-IJS6OICX.js +0 -104
- package/chunks/total-session-admission-L5RPEFZ2.js +0 -114
- package/chunks/trustedFolders-OILZCHRD.js +0 -124
- package/chunks/updateCheck-AK4COHNK.js +0 -120
- package/chunks/useAutoAcceptIndicator-O2N2Q6KG.js +0 -122
- package/chunks/workspace-providers-status-OCFEWIPQ.js +0 -116
- package/chunks/workspace-registry-WJLZPRTG.js +0 -123
- package/chunks/workspace-service-5ZOBMMIB.js +0 -131
- package/chunks/workspace-skills-status-B6NJZD4B.js +0 -115
- package/chunks/write-file-B2RNX6SU.js +0 -90
- package/web-shell/assets/channel-CU-Zyv0r.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C0J2_LKs.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C0J2_LKs.js +0 -1
- package/web-shell/assets/index-C-XlQn24.css +0 -5
- package/web-shell/assets/index-gdvMN4J1.js +0 -1860
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-2uACDdJN.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C4JJkavU.js +0 -8
|
@@ -24,8 +24,8 @@ Run `qwen mcp list` to check whether the `node-repl` server is configured. If it
|
|
|
24
24
|
is not configured, run both commands yourself:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.
|
|
28
|
-
npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.
|
|
27
|
+
qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.1
|
|
28
|
+
npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.2
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Tell the user to restart Qwen Code after adding the MCP server, then stop. Do
|
|
@@ -35,7 +35,7 @@ If `node_repl` is available but the SDK import fails, run the SDK installation
|
|
|
35
35
|
command yourself from the current workspace, then retry the import:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.
|
|
38
|
+
npm install --no-save --package-lock=false @qwen-code/cua-sdk@0.20.2
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
## Bootstrap
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: goal-draft
|
|
3
|
+
description: Turn a fuzzy intention into a /goal objective the Goal verifier can actually judge - one outcome, numbered binary "Done when" checks that leave evidence in the transcript, guardrails, a budget, and a block protocol. Use when the user wants to set or define a goal, asks whether a goal is good enough, or says "keep going until X". Usage - /goal-draft <what you want done>, or /goal-draft <existing goal> to tighten it. This skill only writes the objective; it never starts the work.
|
|
4
|
+
argument-hint: '[intent, or an existing goal to tighten]'
|
|
5
|
+
allowedTools:
|
|
6
|
+
- get_goal
|
|
7
|
+
- read_file
|
|
8
|
+
- glob
|
|
9
|
+
- grep_search
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# /goal-draft — write a Goal the verifier can judge
|
|
13
|
+
|
|
14
|
+
You are already inside the loaded `goal-draft` skill — do not call the `skill` tool to invoke it again; start with Step 0.
|
|
15
|
+
|
|
16
|
+
You are drafting the text for `/goal set`. You are NOT doing the work the goal describes. Do not edit files, do not run the checks, do not start on the task. The only deliverable is the objective text and the `/goal set` line the user can run.
|
|
17
|
+
|
|
18
|
+
## How Goals are judged (why the format below matters)
|
|
19
|
+
|
|
20
|
+
An active Goal is re-fed to the model every turn, and its completion is judged by an independent verifier that sees ONLY transcript evidence:
|
|
21
|
+
|
|
22
|
+
- Visible assistant output and tool results count as evidence. The objective itself, user prompts, and hidden reasoning do not.
|
|
23
|
+
- `delivered_output` evidence proves only that text was printed. It cannot prove that tests passed, files changed, or remote state changed — those need a tool result in the transcript (an `external_fact`).
|
|
24
|
+
- A claim that the user confirmed, chose, or approved something needs a real user message as evidence; otherwise the completion proposal is rejected.
|
|
25
|
+
- Vague, subjective, or open-ended conditions never accumulate enough evidence; the loop then runs until a limit is hit.
|
|
26
|
+
|
|
27
|
+
So a good objective makes the agent PRODUCE evidence: run the named check and paste the decisive output line.
|
|
28
|
+
|
|
29
|
+
## Step 0 — should this be a Goal at all?
|
|
30
|
+
|
|
31
|
+
Say no, briefly, when the request is a normal one-shot task, needs a design or product judgement call, or has no way to be checked from the agent's own output. Offer to just do it, or to write a plan instead. A goal that cannot be checked is a prompt, not a goal.
|
|
32
|
+
|
|
33
|
+
## Step 1 — check the active Goal
|
|
34
|
+
|
|
35
|
+
Call `get_goal`. If a Goal is active, ask whether to edit it (same goal, tighter wording → `/goal edit`) or replace it (`/goal set`). Never draft a second concurrent goal.
|
|
36
|
+
|
|
37
|
+
## Step 2 — ground the draft in the workspace
|
|
38
|
+
|
|
39
|
+
Before asking anything, verify what you can with `read_file`, `glob`, and `grep_search`: that named files and packages exist, and what the real check commands are (`package.json` scripts, `Makefile`, CI workflow, test config). Use those exact commands in "Done when". Never invent paths, IDs, or commands; write `<TODO: …>` for anything you cannot confirm.
|
|
40
|
+
|
|
41
|
+
## Step 3 — at most one round of questions
|
|
42
|
+
|
|
43
|
+
Ask with `ask_user_question`, 1–3 questions in one call, each with options and a recommended default. Ask only when the answer changes the check, the scope, or the budget. Typical questions:
|
|
44
|
+
|
|
45
|
+
- Which check defines success: a test command, a build, a metric threshold, a file or state assertion?
|
|
46
|
+
- Which environment: local, CI, staging?
|
|
47
|
+
- What is off limits: which files, which actions (push, delete, publish)?
|
|
48
|
+
- How long to try before stopping as blocked?
|
|
49
|
+
|
|
50
|
+
Rules for the questions:
|
|
51
|
+
|
|
52
|
+
- Never ask what you could find out by reading the workspace.
|
|
53
|
+
- Batch them into one `ask_user_question` call; do not drip one per turn.
|
|
54
|
+
- Only ask things only the user can answer: what counts as done, what is off limits, how long to try.
|
|
55
|
+
- If you cannot find a concrete way to verify the outcome, you MUST ask, offering 2–3 candidate checks. Do not skip this and do not invent one.
|
|
56
|
+
|
|
57
|
+
If you cannot ask (headless, or a client without prompts), take the recommended default and mark it `[ASSUMPTION]` in Context.
|
|
58
|
+
|
|
59
|
+
## Step 4 — draft the objective
|
|
60
|
+
|
|
61
|
+
Use exactly these labels, in this order. Keep the whole objective on one line when you hand it over — the `/goal` parser joins lines with spaces, so number items instead of relying on newlines. Body text follows the user's language; labels stay English so the verifier can match them.
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
Outcome: <one sentence: what is true when done>
|
|
65
|
+
Done when: 1) <command> exits 0 and its output shows <…> (paste that line); 2) <file/state assertion provable via read or grep>; 3) …
|
|
66
|
+
Must not: <files not to touch; tests/thresholds not to weaken; irreversible actions not to take>
|
|
67
|
+
Budget: stop as blocked after <N> turns (default 20) or <M> minutes without measurable progress
|
|
68
|
+
On block: propose blocked with the exact blocker and the decision a human must make; never claim completion without evidence for every Done-when item
|
|
69
|
+
Context: <only facts the agent cannot derive: paths, branch, environment, earlier decisions>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Rules of thumb:
|
|
73
|
+
|
|
74
|
+
- One Outcome. Several outcomes = several goals, or a checklist file plus a single "every item in `<file>` is checked" goal.
|
|
75
|
+
- Every Done-when item is binary, and at least one is tool-observable (a command with an exit code or output line, a file that exists, a grep that matches).
|
|
76
|
+
- Prefer "the smallest safe change in `<scope>`" over open-ended refactors.
|
|
77
|
+
- Put anything that must not change on the way into Must not — this is what stops the loop from deleting a failing test to "pass".
|
|
78
|
+
- Keep it short: everything the agent can derive from the workspace stays out. Aim for under ~1200 characters.
|
|
79
|
+
|
|
80
|
+
### Weak → strong
|
|
81
|
+
|
|
82
|
+
| Weak | Strong |
|
|
83
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
84
|
+
| make checkout faster | Outcome: checkout API p95 is below 250 ms on the documented slow path. Done when: 1) `npm run bench:checkout` exits 0 and prints a p95 below 250 (paste the line); 2) `npm test` exits 0. Must not: change the benchmark, skip tests, touch files outside `src/checkout`. Budget: stop as blocked after 20 turns. On block: report the measured p95 and what blocks it. |
|
|
85
|
+
| keep handling the PR comments | Outcome: every unresolved review thread on PR #123 is fixed or answered. Done when: 1) the review-threads query shows zero unresolved threads (paste the count); 2) CI on the head commit is green (paste the check summary). Must not: force-push, resolve a thread without replying to it. Budget: stop as blocked after 30 turns. On block: list the threads that need a maintainer decision. |
|
|
86
|
+
| clean up the auth module | Not a goal — "clean" has no check. Ask what would be observable (zero lint warnings in `src/auth`? a file count? a coverage threshold?) or offer a refactor plan instead. |
|
|
87
|
+
| get the release out | Not a goal as written — publishing is irreversible. Either narrow it to a checkable pre-release state (tag exists, changelog entry present, `npm run release:dry-run` exits 0) and put "do not publish" in Must not, or leave publishing to a human. |
|
|
88
|
+
|
|
89
|
+
## Step 5 — self-check, then hand off
|
|
90
|
+
|
|
91
|
+
Check every line before printing:
|
|
92
|
+
|
|
93
|
+
1. "Done when" exists, its items are numbered, and each is binary.
|
|
94
|
+
2. At least one item names a command, exit code, file, or grep pattern and asks to paste the output.
|
|
95
|
+
3. No subjective adjectives as conditions (clean, better, robust, elegant, reasonable, …).
|
|
96
|
+
4. No "after the user confirms/approves" as a completion condition — that belongs in On block as a decision a human must make.
|
|
97
|
+
5. Budget or On block is present.
|
|
98
|
+
6. Exactly one Outcome.
|
|
99
|
+
7. Every path and command in Context was verified in the workspace or is marked `<TODO>`.
|
|
100
|
+
8. Under ~1200 characters.
|
|
101
|
+
9. Irreversible actions (push, delete, publish) are listed in Must not, or the user explicitly allowed them.
|
|
102
|
+
|
|
103
|
+
Then print, and nothing else:
|
|
104
|
+
|
|
105
|
+
1. The objective in a fenced code block.
|
|
106
|
+
2. One line the user can run as-is: `/goal set <objective on one line>` (or `/goal edit …` when tightening the active goal). Print it as plain text with no code markers, so it can be copied verbatim.
|
|
107
|
+
3. One sentence on what you assumed (`[ASSUMPTION]` / `<TODO>` items), if any.
|
|
108
|
+
|
|
109
|
+
Do not run /goal yourself. Do not begin the task. Stop and wait for the user.
|
|
@@ -112,9 +112,9 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
112
112
|
| Setting | Type | Description | Default |
|
|
113
113
|
| --------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
114
114
|
| `review.attribution` | boolean | Append the attribution footer naming the model and CLI version (e.g. `_— qwen3-coder via Qwen Code /review (v0.21.2)_`) to review bodies and inline comments posted by `/review`. Disable to post reviews without visible AI attribution: the footer is omitted and posted comments and body lists lose their `**[Critical]**`/`**[Suggestion]**` markers. The posts stay identifiable in the raw source: each carries an invisible severity marker (`<!-- qwen-review critical -->`) and the review body carries a ledger marker (`<!-- qwen-review-ledger ... -->`) — anything reading comment bodies (GitHub API automation, the workflows this setting couples to) still recognizes a `/review` artifact, and presubmit duplicate detection recognizes the reviewing account's earlier posts by the severity marker, though unattributed posts from other accounts escape it. Another consequence: qwen-autofix's Critical-only mode (engaged after round 5, or earlier when a counting window's diff-growth budget trips) no longer recognizes the posted findings as Critical and defers them. Disabling also withholds the model from the machine-ledger marker embedded in the review body, so in a fresh environment (CI, another clone — anywhere without a review cache) the incremental anchor recovered from the last posted review fails the same-model check and the re-review falls back to full-range. | `true` |
|
|
115
|
-
| `review.effort` | enum | Default effort for `/review` when `--effort`
|
|
115
|
+
| `review.effort` | enum | Default effort for `/review` when neither `--effort` nor a project-remembered explicitly typed level applies: `"low"`, `"medium"`, `"high"`, or `"auto"` (the built-in rule: high for PRs, medium for local changes). An explicit or remembered level wins; an effective `--comment` still forces high and `--fix` still floors at medium. | `"auto"` |
|
|
116
116
|
| `review.comment` | boolean | Treat every PR `/review` as if `--comment` was passed: findings are posted to the pull request without the flag. The post still binds to the PR named in the invocation. Enable only if you always want reviews published. | `false` |
|
|
117
|
-
| `review.severityFloor` | enum | The lowest severity a PR `/review` posts when `--severity-floor` is not given: `"auto"` (the round-adaptive default — Suggestions post through round 5, only Criticals from round 6, with otherwise-postable high-confidence Suggestions recorded and deferred, and rounds 2–5 deferring new Suggestions on code unchanged since the previous round; low-confidence and Nice-to-have findings stay terminal-only), `"critical"` (that posture from round 1), or `"suggestion"` (Suggestions post at every round; turns the convergence posture off). Non-PR targets have no rounds and ignore this.
|
|
117
|
+
| `review.severityFloor` | enum | The lowest severity a PR `/review` posts when `--severity-floor` is not given: `"auto"` (the round-adaptive default — Suggestions post through round 5, only Criticals from round 6, with otherwise-postable high-confidence Suggestions — and a Critical classified fails-closed on new surface — recorded and deferred, and rounds 2–5 deferring new Suggestions on code unchanged since the previous round; low-confidence and Nice-to-have findings stay terminal-only), `"critical"` (that posture from round 1), or `"suggestion"` (Suggestions post at every round; turns the convergence posture off). Non-PR targets have no rounds and ignore this. | `"auto"` |
|
|
118
118
|
| `review.reverseAuditRounds` | number | Lower the reverse-audit loop's round cap for every high-effort review. The cap otherwise follows the diff topology (10 small / 5 chunked; a huge diff is 3 with a review deadline and 5 without). This can only **lower** whichever tier applies: a value below 3, above the tier, or not a whole number above zero is ignored. Cutting the cap does not make reviews converge sooner — the loop ends on two consecutive dry rounds — it makes them stop before converging more often, and every such stop caps the verdict at Comment. | `0` (unset) |
|
|
119
119
|
|
|
120
120
|
These settings are read from operator scopes only (User, System, and SystemDefaults); values in a workspace `.qwen/settings.json` are ignored, so a repository cannot set review policy for its reviewers.
|
|
@@ -357,33 +357,34 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
|
|
|
357
357
|
|
|
358
358
|
#### tools
|
|
359
359
|
|
|
360
|
-
| Setting | Type | Description
|
|
361
|
-
| ------------------------------------ | ----------------- |
|
|
362
|
-
| `tools.sandbox` | boolean or string | Sandbox execution environment (can be a boolean or a path string).
|
|
363
|
-
| `tools.sandboxImage` | string | Sandbox image URI used by Docker/Podman when `--sandbox-image` and `QWEN_SANDBOX_IMAGE` are not set.
|
|
364
|
-
| `tools.shell.enableInteractiveShell` | boolean | Use `node-pty` for an interactive shell experience. Fallback to `child_process` still applies.
|
|
365
|
-
| `tools.shell.defaultTimeoutMs` | number | Default timeout, in milliseconds, for foreground shell commands started by the agent. A per-call timeout on the shell tool overrides this. When unset, foreground commands time out after 120000 ms (2 minutes). Set to 0 to disable the timeout.
|
|
366
|
-
| `tools.shell.heartbeatIntervalMs` | number | Interval, in milliseconds, between liveness heartbeats emitted while a foreground shell command produces no output. Heartbeats are forwarded to ACP clients and stream-json consumers so they can tell a silent command from a dead session. When unset, heartbeats fire every 10000 ms (10 seconds). Set to 0 to disable heartbeats.
|
|
367
|
-
| `tools.core` | array of strings | **Deprecated.** Will be removed in next version.
|
|
368
|
-
| `tools.exclude` | array of strings | **Deprecated.** Use `permissions.deny` instead. Tool names to exclude from discovery.
|
|
369
|
-
| `tools.disabled` | array of strings | Tool names hidden from the registry entirely. Unlike `permissions.deny` (which blocks calls at runtime), disabled tools are never registered, so they do not appear in `/tools` and cannot be discovered or called by the model. For example, `["enter_plan_mode"]` prevents the model from switching into plan mode on its own. Merged as a union across scopes.
|
|
370
|
-
| `tools.visible` | array of strings | Deferred tool names made visible at startup without requiring `tool_search`. Listed tools appear alongside core tools in the initial session. Merged as a union across scopes.
|
|
371
|
-
| `tools.
|
|
372
|
-
| `tools.
|
|
373
|
-
| `tools.
|
|
374
|
-
| `tools.
|
|
375
|
-
| `tools.
|
|
376
|
-
| `tools.
|
|
377
|
-
| `tools.
|
|
378
|
-
| `tools.
|
|
379
|
-
| `tools.
|
|
380
|
-
| `tools.
|
|
381
|
-
| `tools.toolSearch.
|
|
382
|
-
| `tools.
|
|
360
|
+
| Setting | Type | Description | Default | Notes |
|
|
361
|
+
| ------------------------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
362
|
+
| `tools.sandbox` | boolean or string | Sandbox execution environment (can be a boolean or a path string). | `undefined` | |
|
|
363
|
+
| `tools.sandboxImage` | string | Sandbox image URI used by Docker/Podman when `--sandbox-image` and `QWEN_SANDBOX_IMAGE` are not set. | `undefined` | |
|
|
364
|
+
| `tools.shell.enableInteractiveShell` | boolean | Use `node-pty` for an interactive shell experience. Fallback to `child_process` still applies. | `true` | |
|
|
365
|
+
| `tools.shell.defaultTimeoutMs` | number | Default timeout, in milliseconds, for foreground shell commands started by the agent. A per-call timeout on the shell tool overrides this. When unset, foreground commands time out after 120000 ms (2 minutes). Set to 0 to disable the timeout. | `undefined` | |
|
|
366
|
+
| `tools.shell.heartbeatIntervalMs` | number | Interval, in milliseconds, between liveness heartbeats emitted while a foreground shell command produces no output. Heartbeats are forwarded to ACP clients and stream-json consumers so they can tell a silent command from a dead session. When unset, heartbeats fire every 10000 ms (10 seconds). Set to 0 to disable heartbeats. | `undefined` | |
|
|
367
|
+
| `tools.core` | array of strings | **Deprecated.** Will be removed in next version. A non-empty list restricts the core tool set (file, shell, search and related built-ins) to an allowlist: core tools not in the list are disabled (fail-closed). Tools outside that set — dynamically discovered tools (MCP, skill) and synthetic/system built-ins such as `agent`, `list_agents`, plan-mode lifecycle tools, goal tools, `task_stop`, `send_message` and `tool_search` — bypass the allowlist by design; use `permissions.deny` to remove a tool outright. An empty list (`[]`) is treated as unset and disables nothing. `permissions.allow` cannot reproduce this restriction — it is pure auto-approval (#10075). Use `tools.eager` to restrict which eager-by-default tool schemas are sent initially (unlisted tools are deferred, not disabled — they stay loadable via `tool_search`), and `permissions.deny` to block tools outright. | `undefined` | |
|
|
368
|
+
| `tools.exclude` | array of strings | **Deprecated.** Use `permissions.deny` instead. Tool names to exclude from discovery. Not automatically migrated; the legacy setting remains honoured at startup. | `undefined` | |
|
|
369
|
+
| `tools.disabled` | array of strings | Tool names hidden from the registry entirely. Unlike `permissions.deny` (which blocks calls at runtime), disabled tools are never registered, so they do not appear in `/tools` and cannot be discovered or called by the model. For example, `["enter_plan_mode"]` prevents the model from switching into plan mode on its own. Merged as a union across scopes. | `undefined` | |
|
|
370
|
+
| `tools.visible` | array of strings | Deferred tool names made visible at startup without requiring `tool_search`. Listed tools appear alongside core tools in the initial session. Merged as a union across scopes. | `undefined` | |
|
|
371
|
+
| `tools.eager` | array of strings | Allowlist of eager-by-default built-in tool names whose schemas remain eligible for the initial model request. Unlisted non-exempt tools are deferred instead: still registered, listed in `/tools`, callable, and discoverable via `tool_search`. Tools already deferred by default stay on demand even when listed; use `tools.visible` to surface one at startup. `tool_search`, `structured_output`, plan-mode lifecycle tools, `task_stop`, MCP tools, and `computer_use__*` tools are unaffected and keep their normal loading behaviour. An explicitly empty list (`[]`) is active and defers every non-exempt eager-by-default tool; omitting the setting means no restriction. Pairs with `tool_search`: when ToolSearch is not registered — `tools.toolSearch.enabled: false`, a `tool_search` deny rule, or the automatic opt-out for DeepSeek models — the allowlist still withholds the schemas, but nothing can load them back, so the demoted tools are out of reach for that session (they stay in `/tools`, and a warning is logged). Use `permissions.deny` if you meant to remove them, or leave ToolSearch on. Unusable entries (empty or malformed) are dropped with a warning and leave the rest of the list active. Later scopes replace earlier lists. Requires restart. | `undefined` | |
|
|
372
|
+
| `tools.allowed` | array of strings | **Deprecated.** Use `permissions.allow` instead. Tool names that bypass the confirmation dialog. Not automatically migrated; the legacy setting remains honoured at startup. | `undefined` | |
|
|
373
|
+
| `tools.approvalMode` | string | Sets the default approval mode for tool usage. | `auto` | Possible values: `plan` (analyze only, do not modify files or execute commands), `default` (require approval before file edits or shell commands run), `auto-edit` (automatically approve file edits), `auto` (LLM classifier auto-approves safe actions, blocks risky ones), `yolo` (automatically approve all tool calls) |
|
|
374
|
+
| `tools.discoveryCommand` | string | Command to run for tool discovery. When the `tools.eager` allowlist is active, a discovered tool not named in it is registered as deferred: it stays in `/tools` and is loadable via `tool_search`, but its schema is not sent in the initial model request. | `undefined` | |
|
|
375
|
+
| `tools.callCommand` | string | Defines a custom shell command for calling a specific tool that was discovered using `tools.discoveryCommand`. The shell command must meet the following criteria: It must take function `name` (exactly as in [function declaration](https://ai.google.dev/gemini-api/docs/function-calling#function-declarations)) as first command line argument. It must read function arguments as JSON on `stdin`, analogous to [`functionCall.args`](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/inference#functioncall). It must return function output as JSON on `stdout`, analogous to [`functionResponse.response.content`](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/inference#functionresponse). | `undefined` | |
|
|
376
|
+
| `tools.useRipgrep` | boolean | Use ripgrep for file content search instead of the fallback implementation. Provides faster search performance. | `true` | |
|
|
377
|
+
| `tools.useBuiltinRipgrep` | boolean | Use the bundled ripgrep binary. When set to `false`, the system-level `rg` command will be used instead. This setting is only effective when `tools.useRipgrep` is `true`. | `true` | |
|
|
378
|
+
| `tools.workflowsEnabled` | boolean | Enable the Workflow tool, which lets the model author and run a script that orchestrates subagents in parallel. Off by default; a run can dispatch many subagents and spend tokens accordingly. | `false` | User, System, and SystemDefaults scopes only; workspace values are ignored. Requires restart: Yes. Env overrides: `QWEN_CODE_ENABLE_WORKFLOWS=1` forces on; `QWEN_CODE_DISABLE_WORKFLOWS=1` forces off (disable wins). |
|
|
379
|
+
| `tools.truncateToolOutputThreshold` | number | Truncate tool output if it is larger than this many characters. Applies to Shell, Grep, Glob, ReadFile and ReadManyFiles tools. | `25000` | Requires restart: Yes |
|
|
380
|
+
| `tools.truncateToolOutputLines` | number | Maximum lines or entries kept when truncating tool output. Applies to Shell, Grep, Glob, ReadFile and ReadManyFiles tools. | `1000` | Requires restart: Yes |
|
|
381
|
+
| `tools.toolSearch.enabled` | boolean | Load MCP tools on demand via ToolSearch to reduce prompt size. Disable this for models that rely on prefix-based KV caching (e.g. DeepSeek) to keep the prompt prefix stable and maximize cache hit rates. | `true` | Requires restart: Yes |
|
|
382
|
+
| `tools.toolSearch.threshold` | number | Context-window percentage used as the session-start budget for preloading ordinary deferred tools (bundled built-ins and MCP alike). When their combined schemas fit within this budget, they are declared upfront instead of loaded on demand via ToolSearch. Tools demoted by `tools.eager` are excluded from this preload and stay on demand. Set `0` to always load deferred tools on demand. | `10` | Requires restart: Yes |
|
|
383
|
+
| `tools.listDirectory.enabled` | boolean | Enable the built-in `list_directory` tool. Disabled by default because `glob` covers directory listing in most cases; the tool is also re-enabled automatically when explicitly listed in the `coreTools` allowlist (`--core-tools` / `tools.core`). | `false` | Requires restart: Yes |
|
|
383
384
|
|
|
384
385
|
> [!note]
|
|
385
386
|
>
|
|
386
|
-
> **Migrating from `tools.core` / `tools.exclude` / `tools.allowed`:** These legacy settings are **deprecated**
|
|
387
|
+
> **Migrating from `tools.core` / `tools.exclude` / `tools.allowed`:** These legacy settings are **deprecated** but are not automatically migrated; they continue to work at startup. Migrate `tools.allowed` and `tools.exclude` manually to `permissions.allow` and `permissions.deny`. `tools.core` has no exact replacement; see the table below.
|
|
387
388
|
|
|
388
389
|
#### memory
|
|
389
390
|
|
|
@@ -416,11 +417,11 @@ The permissions system provides fine-grained control over which tools can run, w
|
|
|
416
417
|
|
|
417
418
|
The first matching rule wins. Rules use the format `"ToolName"` or `"ToolName(specifier)"`.
|
|
418
419
|
|
|
419
|
-
| Setting | Type | Description
|
|
420
|
-
| ------------------- | ---------------- |
|
|
421
|
-
| `permissions.allow` | array of strings | Rules for auto-approved tool calls (no confirmation needed). Merged across all scopes (user + project + system).
|
|
422
|
-
| `permissions.ask` | array of strings | Rules for tool calls that always require user confirmation. Takes priority over `allow`.
|
|
423
|
-
| `permissions.deny` | array of strings | Rules for blocked tool calls. Highest priority — overrides both `allow` and `ask`. A whole-tool deny rule (no specifier) also removes the tool from the registry — for built-in tools and tools found via `tools.discoveryCommand`. MCP tools are exempt (their registration path only honours `disabledTools`): hide them with the per-server `excludeTools` / `tools.disabled` filters instead. Deny rules still block MCP tool calls at runtime.
|
|
420
|
+
| Setting | Type | Description | Default |
|
|
421
|
+
| ------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
422
|
+
| `permissions.allow` | array of strings | Rules for auto-approved tool calls (no confirmation needed). Merged across all scopes (user + project + system). This key is PURE auto-approval: it never removes, demotes, or hides a tool, and every built-in stays registered regardless of which tools the rules cover; tools deferred by default (such as `task_stop` or `monitor`) keep their usual on-demand loading via `tool_search` (#10075). To keep a tool's schema out of the initial model request, use `tools.eager`; to block a tool outright, use a whole-tool `permissions.deny` rule — MCP tools are exempt from deny-based removal (see the `permissions.deny` row): hide them with the per-server `excludeTools` / `tools.disabled` filters. Exception: under the AUTO approval mode, dangerous allow rules are stashed rather than active, so a mid-session removal cannot touch the stash — when AUTO mode is exited the stashed rule is restored and auto-approves again until the session restarts. | `undefined` |
|
|
423
|
+
| `permissions.ask` | array of strings | Rules for tool calls that always require user confirmation. Takes priority over `allow`. Like `allow`, this never affects whether a tool is registered. | `undefined` |
|
|
424
|
+
| `permissions.deny` | array of strings | Rules for blocked tool calls. Highest priority — overrides both `allow` and `ask`. A whole-tool deny rule (no specifier) also removes the tool from the registry — for built-in tools and tools found via `tools.discoveryCommand`. MCP tools are exempt (their registration path only honours `disabledTools`): hide them with the per-server `excludeTools` / `tools.disabled` filters instead. Deny rules still block MCP tool calls at runtime. | `undefined` |
|
|
424
425
|
|
|
425
426
|
**Tool name aliases (any of these work in rules):**
|
|
426
427
|
|
|
@@ -482,11 +483,11 @@ Permission rules for `Read`, `Edit`, and `WebFetch` are also enforced when the a
|
|
|
482
483
|
|
|
483
484
|
**Migrating from legacy settings:**
|
|
484
485
|
|
|
485
|
-
| Legacy setting | Equivalent `permissions` rule
|
|
486
|
-
| --------------- |
|
|
487
|
-
| `tools.allowed` | `permissions.allow`
|
|
488
|
-
| `tools.exclude` | `permissions.deny`
|
|
489
|
-
| `tools.core` | `
|
|
486
|
+
| Legacy setting | Equivalent `permissions` rule | Notes |
|
|
487
|
+
| --------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
488
|
+
| `tools.allowed` | `permissions.allow` | Not automatically migrated; still honoured at startup |
|
|
489
|
+
| `tools.exclude` | `permissions.deny` | Not automatically migrated; still honoured at startup |
|
|
490
|
+
| `tools.core` | `tools.eager` (+ `permissions.deny`) | Not auto-migrated to `permissions.allow`, which is pure auto-approval and cannot reproduce the allowlist restriction (#10075). `tools.eager` defers unlisted eager-by-default tools (they stay loadable via `tool_search`); `permissions.deny` removes tools entirely. Neither preserves a non-empty `tools.core` allowlist's fail-closed guarantee over the core tool set: a built-in added in a future release registers until explicitly denied, so a deny list must be re-audited per release. An empty `tools.core` list is treated as unset and disables nothing. |
|
|
490
491
|
|
|
491
492
|
**Example configuration:**
|
|
492
493
|
|
|
@@ -77,6 +77,8 @@ qwen channel pairing approve dws-work CODE
|
|
|
77
77
|
|
|
78
78
|
Group mentions use the real-time personal event stream first. The channel also checks recent `@` message history every five seconds, so mentions from external groups are recovered when DingTalk omits them from the personal event stream. Messages are deduplicated by conversation and message ID across both paths.
|
|
79
79
|
|
|
80
|
+
Ordinary direct messages are recovered the same way: a five-second history check re-drives any direct message the real-time stream omitted, deduplicated by conversation and message ID across both paths.
|
|
81
|
+
|
|
80
82
|
When a message quotes another DingTalk message, the quoted text is included as reply context for the agent on both the real-time and history fallback paths.
|
|
81
83
|
|
|
82
84
|
## Document Mentions
|
|
@@ -62,6 +62,7 @@ Channels are configured under the `channels` key in `settings.json`. Each channe
|
|
|
62
62
|
| `senderPolicy` | No | Who can talk to the bot: `allowlist` (default), `open`, or `pairing` |
|
|
63
63
|
| `allowedUsers` | No | List of user IDs allowed to use the bot (used by `allowlist` and `pairing` policies) |
|
|
64
64
|
| `sessionScope` | No | How sessions are scoped: `user` (default), `chat_thread`, or `single`. Legacy `thread` remains compatible when already configured but is not offered for new Web Shell configurations |
|
|
65
|
+
| `multiSession` | No | Retain up to eight owner-scoped named tasks in one chat. Requires daemon-managed mode, `sessionScope: "user"`, no webhooks or group-history backfill, and no enabled Channel loops |
|
|
65
66
|
| `cwd` | No | Working directory for the agent. Defaults to the current directory |
|
|
66
67
|
| `approvalMode` | No | Tool approval mode for channel sessions. Unattended webhook tasks require `yolo`; the setting applies to every session on the channel |
|
|
67
68
|
| `instructions` | No | Custom instructions prepended to the first message of each session |
|
|
@@ -88,9 +89,32 @@ Controls who can interact with the bot:
|
|
|
88
89
|
Controls how conversation sessions are managed:
|
|
89
90
|
|
|
90
91
|
- **`user`** (default) — One session per user. All messages from the same user share a conversation.
|
|
91
|
-
- **`
|
|
92
|
+
- **`chat_thread`** — One session per chat thread/topic, shared by participants in that thread.
|
|
93
|
+
- **`thread`** — Legacy thread/topic routing retained for existing configurations.
|
|
92
94
|
- **`single`** — One shared session for all users. Everyone shares the same conversation.
|
|
93
95
|
|
|
96
|
+
### Named Tasks
|
|
97
|
+
|
|
98
|
+
Daemon-managed Channels can retain several named conversations for the same user in one chat:
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"channels": {
|
|
103
|
+
"my-channel": {
|
|
104
|
+
"type": "telegram",
|
|
105
|
+
"sessionScope": "user",
|
|
106
|
+
"multiSession": true
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The catalog is private to the exact channel, chat, and sender. Task names use 1–32 ASCII letters, numbers, underscores, or hyphens, and are unique case-insensitively. Up to eight tasks may be open; closing a task detaches it without deleting its transcript, so selecting it later reopens the exact conversation. Session IDs are never accepted by or shown in chat commands.
|
|
113
|
+
|
|
114
|
+
Part 2 uses one selected task at a time and a shared working directory. Creating a task or switching away from the selected task is rejected while that task is still running or waiting for permission, and a busy task cannot be closed. Concurrent running-task switching, named cancellation, and task labels are planned for Part 3; per-task worktrees are planned for Part 4. Channel memory remains scoped to the chat rather than to a named task.
|
|
115
|
+
|
|
116
|
+
This mode is unavailable in standalone `qwen channel start`, with webhooks, with non-zero channel or group `groupHistoryLimit`, or with Channel loops. If an enabled loop already exists for that channel, the daemon worker refuses to start until the loop is disabled.
|
|
117
|
+
|
|
94
118
|
### Channel Memory
|
|
95
119
|
|
|
96
120
|
Channel memory stores durable context for one chat or thread. Entries have stable
|
|
@@ -463,14 +487,21 @@ Channels support slash commands. These are handled locally (no agent round-trip)
|
|
|
463
487
|
- `/help` — List available commands
|
|
464
488
|
- `/clear` — Clear your session and start fresh (aliases: `/reset`, `/new`)
|
|
465
489
|
- `/status` — Show session info and access policy
|
|
490
|
+
- `/sessions [all]` — List open named tasks, or include closed tasks; available only with `multiSession: true`
|
|
491
|
+
- `/session current` — Show the selected named task
|
|
492
|
+
- `/session new <name>` — Create and select a shared-workspace task
|
|
493
|
+
- `/session new <name> --worktree` — Recognized but deferred to Part 4
|
|
494
|
+
- `/session use <name>` — Select an open task or reopen a closed task
|
|
495
|
+
- `/session cancel [<name>]` — Recognized but deferred to Part 3. Wait for the selected task to finish before switching; Telegram users can use `/cancel` for the selected task
|
|
496
|
+
- `/session close <name>` — Close a task without deleting its transcript
|
|
466
497
|
- `/loop add "<cron>" <prompt>` — Create a persistent scheduled channel loop
|
|
467
498
|
- `/loop list` — List loops for the current chat
|
|
468
499
|
- `/loop inspect <id>` — Show loop status and run details
|
|
469
500
|
- `/loop cancel <id>` — Disable a loop
|
|
470
501
|
|
|
471
|
-
All other slash commands (e.g., `/compress`, `/summary`) are forwarded to the agent.
|
|
502
|
+
All other slash commands (e.g., `/compress`, `/summary`) are forwarded to the agent. Named-task commands are registered only when the mode is enabled, so `/sessions` remains agent-visible for existing configurations.
|
|
472
503
|
|
|
473
|
-
|
|
504
|
+
Named-task commands work on all channel types (Telegram, WeChat, QQ, DingTalk, WeCom, Feishu, GitHub). `/cancel` is currently registered only by Telegram, and loop creation requires proactive delivery support for the current adapter and target.
|
|
474
505
|
|
|
475
506
|
## Running
|
|
476
507
|
|
|
@@ -41,7 +41,7 @@ If there are no uncommitted changes, `/review` will let you know and stop — no
|
|
|
41
41
|
| `medium` | The high pipeline minus its most expensive passes: the parallel finder fan-out over a reduced dimension set, plus build/test and a single verification pass | Uncapped (verified) | Approve capped at Comment | Never |
|
|
42
42
|
| `high` | Full pipeline: up to 16 parallel agents → sharded verification → iterative reverse audit | Uncapped (verified) | Approve / Request changes / Comment | With `--comment` |
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
`/review` resolves effort in this order: an explicit `--effort`, the last level explicitly typed for this project, the operator `review.effort` setting, then the built-in target default (**high** for PR reviews, **medium** for local and file reviews). When a remembered level applies, `/review` announces it before work begins; type a new `--effort` to replace it. An effective `--comment` forces high (posted comments must survive verification) — on a non-PR target `--comment` is ignored with a warning and does **not** change the effort. Medium keeps the security and test-coverage agents and build/test, and drops the adversarial personas, the language-pitfall and wrapper/proxy specialists (Agents 1d/1e), the diff-specialist finders and the reverse audit — so a subtle Critical only the second look would surface can slip; use `--effort high` for security-sensitive or pre-release reviews. Only `low` is unverified. Worktree isolation applies to same-repo PR reviews; cross-repo PRs run in lightweight mode (diff-only, no worktree or build/test). The low pass is labeled unverified, emits no verdict, and never writes the incremental review cache, so a later `--effort high` run is never skipped as "already reviewed"; medium is verified but its Approve is capped at Comment, because nothing looked twice for what the first pass missed. The diff-obtaining mechanics are identical at every level — PR reviews always use the isolated worktree and the same base resolution, so the review is never against the wrong base. One scope difference remains: the incremental cache is high-only, so a high re-review may cover just the new commits (`lastCommitSha..HEAD`) while low/medium always review the full PR diff.
|
|
45
45
|
|
|
46
46
|
## How It Works
|
|
47
47
|
|
|
@@ -240,7 +240,7 @@ A long review that dies part-way — a dropped connection, a timeout, a killed t
|
|
|
240
240
|
|
|
241
241
|
It applies to **PR targets only** (a local review's diff comes from a live working tree, which has no stable interrupted state to continue), and it is safe to pass whenever you are unsure: the review rules on the on-disk state itself — the worktree still at the fetched commit and clean, the captured diff unchanged byte for byte, the PR head unmoved, the resume limit unspent — and silently starts fresh whenever anything no longer matches, telling you which check refused. A continuation reuses the earlier attempt's certified agent results, so the report says how many were recovered; it is disclosed, never a coverage gap.
|
|
242
242
|
|
|
243
|
-
Two things to know.
|
|
243
|
+
Two things to know. With only the built-in target default, a continuation keeps the interrupted run's recorded **effort**. An explicit `--effort`, a project-remembered level, the operator `review.effort` setting, or an effective `--comment` supplies a required level; if it differs from the interrupted run, resume is refused and a fresh run starts at that level, because different effort is different work. And if the PR head moved while the review was down, the resume refuses (`head-moved`) and the fresh run reviews the new commits — which is what you want, and it counts as this review's one restart.
|
|
244
244
|
|
|
245
245
|
## Findings as Data
|
|
246
246
|
|
|
@@ -410,7 +410,7 @@ The exit code is the contract a gate should read:
|
|
|
410
410
|
|
|
411
411
|
`3` (not `2`) lets a gate distinguish "the review is blocking" from "the tool broke" — yargs already uses `1` for usage errors — without parsing any output. `--timeout-minutes` (default 120, floored at 1) terminates a hung review and exits `1`, and cancelling the command (Ctrl+C / SIGTERM) terminates the review's process group rather than orphaning it.
|
|
412
412
|
|
|
413
|
-
`--resume` continues an interrupted review of the same PR instead of starting over — when a long local run dies part-way (a dropped connection, a timeout, a killed terminal), the retry would otherwise re-fetch, re-chunk and re-launch agents whose work is already on disk. It is safe to pass unconditionally on a retry: `fetch-pr` rules on the on-disk state itself (worktree still at the fetched SHA and clean, diff bytes unchanged, PR head unmoved, resume cap unspent) and silently falls back to a fresh review whenever anything no longer matches, so the flag never fails a run that could start over.
|
|
413
|
+
`--resume` continues an interrupted review of the same PR instead of starting over — when a long local run dies part-way (a dropped connection, a timeout, a killed terminal), the retry would otherwise re-fetch, re-chunk and re-launch agents whose work is already on disk. It is safe to pass unconditionally on a retry: `fetch-pr` rules on the on-disk state itself (worktree still at the fetched SHA and clean, diff bytes unchanged, PR head unmoved, resume cap unspent) and silently falls back to a fresh review whenever anything no longer matches, so the flag never fails a run that could start over. When the current invocation has only the built-in target default, a continuation stays pinned to the interrupted run's recorded effort. An explicit `--effort`, a project-remembered level, the operator `review.effort` setting, or an effective `--comment` supplies a required level; a mismatch refuses the resume and runs fresh at that level. PR targets only (a local review's diff is captured from a live working tree, which has no stable interrupted state to continue). Resume is a **local convenience**: the repository's own CI review workflow does **not** resume — each retry re-runs fresh, because a CI attempt runs no-sandbox and its worktree is deleted on exit, leaving no interrupted state to continue.
|
|
414
414
|
|
|
415
415
|
A time-budgeted run can also export a **soft** deadline so the review stops its open-ended reverse-audit loop while there is still time to verify, compose and post: `QWEN_REVIEW_DEADLINE_EPOCH` is the Unix-seconds moment the run will be killed, and `QWEN_REVIEW_DEADLINE_RESERVE_SECONDS` (default 3600; `0` keeps only the round estimate) is the tail that must remain for the last round's verification, `compose-review` and submission. When the remaining budget no longer fits another round plus that tail, the round builder refuses to build it, and the composed verdict discloses the truncated audit (an otherwise-Approve verdict is capped at Comment). A missing or malformed deadline leaves the review ungated — the outer timeout still bounds the run.
|
|
416
416
|
|