@qwen-code/qwen-code 0.23.1-preview.1 → 0.23.1-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/configuration/settings.md +7 -7
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +26 -0
- package/bundled/qc-helper/docs/features/commands.md +71 -6
- package/bundled/qc-helper/docs/features/skills.md +40 -0
- package/chunks/{MaxSizedBox-5ARLO5PR.js → MaxSizedBox-IYIQ43IZ.js} +26 -27
- package/chunks/{StandaloneSessionPicker-T6B322CB.js → StandaloneSessionPicker-AWB2OHX6.js} +44 -45
- package/chunks/{acp-startup-profiler-6ULXXQMS.js → acp-startup-profiler-BAL4LJTN.js} +2 -2
- package/chunks/{acpAgent-WTDEY5KD.js → acpAgent-ZC57OLS4.js} +148 -96
- package/chunks/{agent-NXPUXEVZ.js → agent-GEBPAEJS.js} +16 -17
- package/chunks/{agent-headless-QQZTWOKO.js → agent-headless-63ZEYAJK.js} +16 -17
- package/chunks/{artifact-tool-DFVVJXL2.js → artifact-tool-P52OKKEF.js} +1 -1
- package/chunks/{askUserQuestion-GF7VQ44M.js → askUserQuestion-3KAYLLMM.js} +2 -2
- package/chunks/{bridge-OHY5OGOZ.js → bridge-MHWO5I5T.js} +30 -31
- package/chunks/{channel-management-service-ZDDG3G5S.js → channel-management-service-NFRZXQFO.js} +4 -4
- package/chunks/{channel-settings-store-7BJAS2SU.js → channel-settings-store-T7PMIHKC.js} +36 -37
- package/chunks/{channel-worker-group-2ISMRENV.js → channel-worker-group-O2BWK5F7.js} +5 -5
- package/chunks/{channel-worker-manager-VSRPVPRH.js → channel-worker-manager-4WP7VJOD.js} +5 -5
- package/chunks/{channel-worker-supervisor-SRJBK72Z.js → channel-worker-supervisor-CCUXD6J5.js} +3 -3
- package/chunks/{chunk-4VZCORNT.js → chunk-22QOQKG4.js} +1 -1
- package/chunks/{chunk-AHBLRVD5.js → chunk-2C3XDBGL.js} +4 -4
- package/chunks/{chunk-WTW36TJ3.js → chunk-2EKVPSIJ.js} +1 -1
- package/chunks/{chunk-ZTAVGFKA.js → chunk-37SOBIA3.js} +1 -1
- package/chunks/{chunk-IXSGOSEG.js → chunk-3RMVM33U.js} +28 -25
- package/chunks/{chunk-H3UDNQLO.js → chunk-4OCYWXKF.js} +1 -1
- package/chunks/{chunk-D6PIMKY3.js → chunk-4VY3ITHR.js} +4 -4
- package/chunks/{chunk-J3O5I5ZD.js → chunk-5FYGZ7E3.js} +3 -3
- package/chunks/{chunk-4JAGXZR3.js → chunk-5V4B3EWA.js} +1 -1
- package/chunks/{chunk-HFTB354P.js → chunk-5Z4FCEPY.js} +60 -6
- package/chunks/{chunk-VDXYYVCD.js → chunk-65GHQ4FX.js} +65 -10
- package/chunks/{chunk-32YDNYXP.js → chunk-6KYWU726.js} +1 -1
- package/chunks/{chunk-4HC4DYKN.js → chunk-6RZX2HIH.js} +1 -1
- package/chunks/{chunk-IFD3BTEA.js → chunk-733KQL63.js} +3 -3
- package/chunks/{chunk-MWHY26G3.js → chunk-75UQFGFE.js} +1 -1
- package/chunks/{chunk-QWZOOIR3.js → chunk-7PMKXGRP.js} +4 -4
- package/chunks/{chunk-KE3Q4JMY.js → chunk-AIMZIXZM.js} +3 -3
- package/chunks/{chunk-G34YLYCS.js → chunk-ANVC5CSK.js} +10 -10
- package/chunks/{chunk-SAZS4IWW.js → chunk-AUJOWIT5.js} +3 -3
- package/chunks/{chunk-Z6WZPXQH.js → chunk-AWDF462I.js} +1 -1
- package/chunks/{chunk-47BZVBTE.js → chunk-AX23QSX3.js} +3 -3
- package/chunks/{chunk-7BZS4ZDV.js → chunk-B5FF3LRF.js} +17 -17
- package/chunks/{chunk-TMWB67LS.js → chunk-BNWIX6BM.js} +2 -2
- package/chunks/{chunk-GZWW2QWR.js → chunk-C4NXRR7T.js} +2 -2
- package/chunks/{chunk-DNPHKA72.js → chunk-C55CR5I4.js} +6 -6
- package/chunks/{chunk-JPEAQJNS.js → chunk-C7M445SS.js} +1 -1
- package/chunks/{chunk-R355CUNQ.js → chunk-CLKE4IY3.js} +1 -77
- package/chunks/{chunk-VUSSAGKI.js → chunk-E4VX6LXB.js} +1 -1
- package/chunks/{chunk-GMNLYQOS.js → chunk-E6TI726I.js} +1 -1
- package/chunks/{chunk-Y3ZKI4RQ.js → chunk-EGRFCIXD.js} +19 -17
- package/chunks/{chunk-D4CU6DKR.js → chunk-EPZWBYQI.js} +5 -5
- package/chunks/{chunk-43NOB5NM.js → chunk-ERMAXPXA.js} +1 -1
- package/chunks/{chunk-KPXRFTT7.js → chunk-FETY36NQ.js} +1 -1
- package/chunks/{chunk-P6LATTDG.js → chunk-FWH4736Q.js} +3 -3
- package/chunks/{chunk-43JNQAHO.js → chunk-FXYNIZPW.js} +2 -2
- package/chunks/{chunk-4VUVBN3Y.js → chunk-G6UUOCUT.js} +87 -0
- package/chunks/{chunk-XY3USGFE.js → chunk-GEV66YGE.js} +1 -1
- package/chunks/{chunk-VEFRT7NX.js → chunk-H3Q3RSKZ.js} +1 -1
- package/chunks/{chunk-BKNY7PDI.js → chunk-HPE4LEWX.js} +1 -1
- package/chunks/{chunk-E4L5BM2B.js → chunk-HWZOOSEB.js} +4 -4
- package/chunks/{chunk-MNEYUNOE.js → chunk-HZS3JRQW.js} +2 -2
- package/chunks/{chunk-2RYWGYB3.js → chunk-I67KJGM6.js} +3 -3
- package/chunks/{chunk-O2GG7H4C.js → chunk-I7UNCY24.js} +2 -2
- package/chunks/{chunk-JLWFGYXU.js → chunk-IGOIYZBG.js} +2 -2
- package/chunks/{chunk-L4R7BCVV.js → chunk-IMWCUWQT.js} +1 -1
- package/chunks/{chunk-QMFOYPGV.js → chunk-J3VZF2AL.js} +2 -2
- package/chunks/{chunk-XOVVCGZX.js → chunk-JOV46WGX.js} +1 -1
- package/chunks/{chunk-LMJQSPWB.js → chunk-KA5HR3G2.js} +1 -1
- package/chunks/{chunk-VY6UVU7G.js → chunk-KAZWXVI3.js} +2 -2
- package/chunks/{chunk-IQN2CCIE.js → chunk-KP5QK3FB.js} +3 -3
- package/chunks/{chunk-2WGJG2KW.js → chunk-KTLT7VCX.js} +4 -4
- package/chunks/{chunk-IKLFS6SC.js → chunk-L36LLVA5.js} +3 -3
- package/chunks/{chunk-MUZCSTOO.js → chunk-LD53HMPV.js} +4 -4
- package/chunks/{chunk-P4RUUG64.js → chunk-LTCI6ZOJ.js} +1 -1
- package/chunks/{chunk-SN5FV4FY.js → chunk-LYHYXJJ3.js} +3 -3
- package/chunks/{chunk-RDKXZ2LS.js → chunk-LYT2OU7D.js} +1 -1
- package/chunks/{chunk-GVVCLL2P.js → chunk-MFCWL4LI.js} +9 -9
- package/chunks/{chunk-RPBMP6BN.js → chunk-MWIO7MF6.js} +3 -0
- package/chunks/{chunk-OECNP26L.js → chunk-N6S3NUYJ.js} +1 -1
- package/chunks/{chunk-NGX4NUNP.js → chunk-O2FEO2CB.js} +131 -6
- package/chunks/{chunk-GXZHYPHZ.js → chunk-OFB36ZBA.js} +4 -1
- package/chunks/{chunk-LDS57224.js → chunk-OWCFKIFQ.js} +1 -1
- package/chunks/{chunk-ZAZ3NFL6.js → chunk-P5Z7VD23.js} +237 -52
- package/chunks/{chunk-5MTARK4Y.js → chunk-PLUAIHZO.js} +4 -4
- package/chunks/{chunk-KK2GZGBK.js → chunk-PMGWY6ZP.js} +10 -10
- package/chunks/{chunk-JRYL3T2O.js → chunk-PQSCGZT2.js} +1 -1
- package/chunks/{chunk-UKKYOIVT.js → chunk-QAZ2MGYT.js} +2 -2
- package/chunks/{chunk-CZACBHAW.js → chunk-QQGAR64U.js} +4 -4
- package/chunks/{chunk-ER273QE6.js → chunk-QW7BUOSI.js} +2 -2
- package/chunks/{chunk-RVNS7NWN.js → chunk-R7TKFIQO.js} +1 -1
- package/chunks/{chunk-GCFZ2LAX.js → chunk-RCUWMVN3.js} +1 -1
- package/chunks/{chunk-CWNC7M73.js → chunk-RD3VPM4E.js} +2 -2
- package/chunks/{chunk-KJJPJYHI.js → chunk-REDVV5NC.js} +7 -7
- package/chunks/{chunk-4IQKBLTQ.js → chunk-RGAQDQ3Z.js} +9 -9
- package/chunks/{chunk-WXC6OAWD.js → chunk-RH344FKI.js} +1 -1
- package/chunks/{chunk-64MQTIX7.js → chunk-RPFJJ33Z.js} +2 -2
- package/chunks/{chunk-LPBQODMR.js → chunk-RQNAO42A.js} +4 -4
- package/chunks/{chunk-LK7S2D6V.js → chunk-RRCNEW2A.js} +4 -4
- package/chunks/{chunk-O45WBTNS.js → chunk-RSU3I6UL.js} +3 -3
- package/chunks/{chunk-AQ5NAGWI.js → chunk-RUMSY4ES.js} +4 -4
- package/chunks/{chunk-QSC5YOEC.js → chunk-SD7Y2PMC.js} +1 -1
- package/chunks/{chunk-SFMCYMVF.js → chunk-SHK2SIR5.js} +4 -4
- package/chunks/{chunk-XUSOYE2I.js → chunk-SHX2HIE7.js} +1 -1
- package/chunks/{chunk-PTFFWTTO.js → chunk-SI6Q52UI.js} +3 -3
- package/chunks/{chunk-JBTZUFR4.js → chunk-T7TP5UQL.js} +6 -6
- package/chunks/{chunk-YCDL2SAS.js → chunk-TDHVOZ65.js} +2 -2
- package/chunks/{chunk-PZV2FASB.js → chunk-TRWQQBVH.js} +1 -1
- package/chunks/{chunk-I72PHOKL.js → chunk-TSLRORQR.js} +93 -95
- package/chunks/{chunk-UEZOXZNI.js → chunk-TXAEXF2B.js} +786 -366
- package/chunks/{chunk-4F2QRVW6.js → chunk-UTVIIA7N.js} +1 -1
- package/chunks/{chunk-WR3SH3EY.js → chunk-VMFPZXRT.js} +131 -60
- package/chunks/{chunk-XHGGYCTA.js → chunk-VYCJITND.js} +1 -1
- package/chunks/{chunk-5YY5MZT6.js → chunk-WFXD5OZH.js} +1 -1
- package/chunks/{chunk-URSCX7S7.js → chunk-WLZRMF3C.js} +2 -2
- package/chunks/{chunk-P5LDR7FI.js → chunk-WQBR7LN5.js} +3 -3
- package/chunks/{chunk-N7VURC4O.js → chunk-WXFCI3O5.js} +2 -2
- package/chunks/{chunk-HJ34U5J4.js → chunk-XNC2TCUO.js} +4 -4
- package/chunks/{chunk-N7EYO2E7.js → chunk-XQ4RDO5B.js} +1 -1
- package/chunks/{chunk-JOPC3FND.js → chunk-XX4MBBFW.js} +5 -5
- package/chunks/{chunk-TDP7UULF.js → chunk-Y3C5COGI.js} +1 -1
- package/chunks/{chunk-54TF2ZIQ.js → chunk-YLFICBYK.js} +3 -3
- package/chunks/{chunk-4MCY33Y2.js → chunk-Z6DDPSGJ.js} +1 -1
- package/chunks/{chunk-WEXA2DNG.js → chunk-Z6KFLEG7.js} +13 -0
- package/chunks/{chunk-PZUOHCWI.js → chunk-ZNI3V2XA.js} +2 -2
- package/chunks/{chunk-6UIACMGH.js → chunk-ZRVFHLLK.js} +1 -1
- package/chunks/{chunk-NAKALAL4.js → chunk-ZT3XUGSU.js} +32 -8
- package/chunks/{config-utils-QXDOTXEQ.js → config-utils-F4CFJ4MW.js} +30 -31
- package/chunks/{contextCommand-RN4KARWC.js → contextCommand-OIIGGOMU.js} +28 -29
- package/chunks/{core-runtime-NAZCOKHB.js → core-runtime-JEHLOGMB.js} +26 -27
- package/chunks/{create-sub-session-BCSM4WKB.js → create-sub-session-MVFBE5RA.js} +35 -30
- package/chunks/{create-sub-session-BQ3SE4TX.js → create-sub-session-TGIX63YU.js} +2 -2
- package/chunks/{cron-create-D6HQ7I7I.js → cron-create-GTPVMJCF.js} +1 -1
- package/chunks/{cron-delete-KK3D2SQV.js → cron-delete-ZBK27Z4K.js} +1 -1
- package/chunks/{cron-list-VBF3IZMF.js → cron-list-KTFKFDKC.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-3K5CAU36.js → daemon-git-worktree-guard-5FTKLJOU.js} +26 -27
- package/chunks/{daemon-status-provider-4X3ZZQTZ.js → daemon-status-provider-P6A5MPMW.js} +35 -36
- package/chunks/{daemon-trust-policy-R45CFUJA.js → daemon-trust-policy-ZJ3NFYUO.js} +32 -33
- package/chunks/{daemon-trust-policy-monitor-DSSFCO3K.js → daemon-trust-policy-monitor-6SDLEW7S.js} +32 -33
- package/chunks/{deferred-core-runtime-UO2M6WYI.js → deferred-core-runtime-DWOXIU5S.js} +26 -27
- package/chunks/{display-image-EVVTBVYE.js → display-image-CTNHJRZC.js} +4 -4
- package/chunks/{dist-PH5RSTEA.js → dist-3H3WODVS.js} +1 -1
- package/chunks/{dist-UVHW2U56.js → dist-AI25RVRA.js} +1 -1
- package/chunks/{dist-AFH3BMZZ.js → dist-I74QLLQS.js} +1 -1
- package/chunks/{dist-SIHF5MU2.js → dist-NXW4DUUX.js} +1 -1
- package/chunks/{dist-MK5PPBRF.js → dist-P6YWBITG.js} +670 -17
- package/chunks/{dist-QUU7TVE3.js → dist-T4PRA5EZ.js} +1 -1
- package/chunks/{dist-SB2XRXZA.js → dist-VCAS67N5.js} +1 -1
- package/chunks/{dist-3T5MDUHP.js → dist-XINEKB5A.js} +1 -1
- package/chunks/{dist-R5Y34V6T.js → dist-YNQU4CKC.js} +2 -2
- package/chunks/{edit-VNBCTRWP.js → edit-WPVXLL3T.js} +16 -17
- package/chunks/{en-JMR535HP.js → en-YJNRUQG4.js} +1 -1
- package/chunks/{enter-worktree-CEVK7MQ2.js → enter-worktree-5A6VW6BN.js} +4 -4
- package/chunks/{enterPlanMode-4KMZMUIA.js → enterPlanMode-JSODW7E2.js} +16 -17
- package/chunks/{environment-S2HYQDON.js → environment-5LLJ3I3W.js} +28 -29
- package/chunks/{errors-DAAN5TL7.js → errors-IQT3YZEP.js} +28 -29
- package/chunks/{exit-worktree-D3YE6MUN.js → exit-worktree-QV7E7KP6.js} +4 -4
- package/chunks/{exitPlanMode-HR36HG3D.js → exitPlanMode-DDVFYNW4.js} +16 -17
- package/chunks/{fast-path-4IWSW3UV.js → fast-path-PAUQQEVU.js} +2 -2
- package/chunks/{glob-IZYB2XH2.js → glob-SQ7CTZ7F.js} +16 -17
- package/chunks/{goal-tools-VGUPKQDJ.js → goal-tools-UWZRCLQB.js} +16 -17
- package/chunks/{grep-OUVLNXG7.js → grep-BLHF2S5D.js} +2 -2
- package/chunks/{handleAutoUpdate-D56FMDTW.js → handleAutoUpdate-RUPZZTSG.js} +29 -30
- package/chunks/{i18n-BKE5WO6T.js → i18n-SF5MPWEB.js} +27 -28
- package/chunks/{image-gen-SHVQ3XID.js → image-gen-Q3RUTVKR.js} +1 -1
- package/chunks/{initializer-MS4SGEHF.js → initializer-CK4WPYZG.js} +32 -33
- package/chunks/{installationInfo-542MGC4S.js → installationInfo-IRPQEYRF.js} +26 -27
- package/chunks/{list-H6XTKUWL.js → list-E3PS3EBJ.js} +35 -36
- package/chunks/{list-agents-ULYBGJXC.js → list-agents-I5TRH3J7.js} +2 -2
- package/chunks/{llm-3NUC4EJY.js → llm-JQKBOYAF.js} +67 -68
- package/chunks/{llm-content-generator-R4NL3OQN.js → llm-content-generator-2QWGBW42.js} +2 -2
- package/chunks/{loadedSettingsAdapter-3XLKYDVT.js → loadedSettingsAdapter-DGXGVYZS.js} +32 -33
- package/chunks/{loggingContentGenerator-ZYSWVNEO.js → loggingContentGenerator-ZYURLJKK.js} +18 -19
- package/chunks/{loop-wakeup-B27BEYRL.js → loop-wakeup-HL6XOWI4.js} +2 -2
- package/chunks/{ls-3IIMMVKF.js → ls-YV7RKLKY.js} +1 -1
- package/chunks/{lsp-VJAT7XKS.js → lsp-NO3AMRZT.js} +1 -1
- package/chunks/{managed-npm-update-L2I53ZAI.js → managed-npm-update-HTHR63EA.js} +26 -27
- package/chunks/{mcp-4PIXQASW.js → mcp-I7G2AEWS.js} +32 -33
- package/chunks/{monitor-O2YQTOZZ.js → monitor-4R76BCRZ.js} +16 -17
- package/chunks/{nonInteractiveCli-LV7CDBA2.js → nonInteractiveCli-24OQ3VP2.js} +64 -65
- package/chunks/{notebook-edit-4RE2ALH4.js → notebook-edit-PPSH7FEX.js} +16 -17
- package/chunks/{openaiContentGenerator-7ND7K5CP.js → openaiContentGenerator-K7V5EO7F.js} +10 -10
- package/chunks/{pidfile-UFTLQ7NP.js → pidfile-TGIUY2GG.js} +26 -27
- package/chunks/{processUtils-3XBB4FYV.js → processUtils-3USXUQWX.js} +2 -2
- package/chunks/{prompt-terminal-ledger-2QASOGMM.js → prompt-terminal-ledger-XHVZRXJI.js} +27 -28
- package/chunks/{qwenContentGenerator-AELTUTH6.js → qwenContentGenerator-MPBOQB64.js} +18 -19
- package/chunks/{read-file-PDWHZPHX.js → read-file-R256LDWQ.js} +4 -4
- package/chunks/{read-mcp-resource-YXJZ75UB.js → read-mcp-resource-D3N75DGF.js} +1 -1
- package/chunks/{record-artifact-WJDOV6XU.js → record-artifact-Q5CRGJTP.js} +2 -2
- package/chunks/{report-findings-Q4UACKWR.js → report-findings-TJ34R7QK.js} +3 -3
- package/chunks/{request-shutdown-2YZ3E3GH.js → request-shutdown-LRKMTBAD.js} +6 -6
- package/chunks/{resumeHistoryUtils-QRXZEEBA.js → resumeHistoryUtils-S43LTFHD.js} +30 -31
- package/chunks/{ripGrep-KSOOLE6H.js → ripGrep-L7HPZ75Y.js} +7 -7
- package/chunks/{run-qwen-serve-RTAREPT6.js → run-qwen-serve-CTFL5R6U.js} +46 -46
- package/chunks/{runtime-ESFSCJRZ.js → runtime-FS5TL6P7.js} +37 -38
- package/chunks/{scheduled-tasks-6ZHRNBH6.js → scheduled-tasks-QXPV3Q35.js} +32 -33
- package/chunks/{scheduler-DQI6KV7T.js → scheduler-EXU5HMVK.js} +28 -29
- package/chunks/{send-message-PQCVSVMN.js → send-message-GQKXGMPI.js} +7 -7
- package/chunks/{serve-FY7ZEW52.js → serve-ITJC7WNN.js} +32 -33
- package/chunks/{server-KNDY6K5F.js → server-6JQY3PTU.js} +66 -67
- package/chunks/{session-MCEPXAZP.js → session-PJDEKXD4.js} +85 -72
- package/chunks/{session-attachments-root-OLNAE6GF.js → session-attachments-root-L37ORSST.js} +26 -27
- package/chunks/{session-pr-refresh-HKJHQQQK.js → session-pr-refresh-WIFD52YL.js} +31 -32
- package/chunks/{settings-VXO4WBMK.js → settings-LO6J5SAZ.js} +31 -32
- package/chunks/{shell-U263OTES.js → shell-ANAFVYGR.js} +16 -17
- package/chunks/{skill-SDODGBKL.js → skill-SHJWKSPH.js} +10 -57
- package/chunks/{skill-settings-YEIA22QJ.js → skill-settings-GX3XHZ5Q.js} +31 -32
- package/chunks/{spawnChannel-4WJZVFPP.js → spawnChannel-WE42VBKM.js} +28 -29
- package/chunks/{standalone-update-ZWVQUO64.js → standalone-update-CWDIKJRP.js} +28 -29
- package/chunks/{start-opentui-ui-BFYCJQRZ.js → start-opentui-ui-BBHGFOTF.js} +70 -71
- package/chunks/{startInteractiveUI-JYAFCMHL.js → startInteractiveUI-FQX7LUYP.js} +172 -110
- package/chunks/{syntheticOutput-AUAJBNXR.js → syntheticOutput-D2P5V6RG.js} +2 -2
- package/chunks/{task-create-LD5ISM3E.js → task-create-PMAFST2T.js} +7 -7
- package/chunks/{task-list-YISJ4RJA.js → task-list-R2HSY2NC.js} +1 -1
- package/chunks/{task-stop-65ZOVATJ.js → task-stop-BFSKRTGV.js} +1 -1
- package/chunks/{task-update-AAN4ZVEY.js → task-update-JYC57USF.js} +7 -7
- package/chunks/{team-create-KU7MABNO.js → team-create-WKTPCH6D.js} +16 -17
- package/chunks/{team-delete-XFRRTJTT.js → team-delete-CBHVBTPB.js} +1 -1
- package/chunks/{team-plan-approval-DPB377A3.js → team-plan-approval-Y23DL7WR.js} +16 -17
- package/chunks/{terminal-image-renderer-WGWRENOF.js → terminal-image-renderer-B646HBDW.js} +28 -29
- package/chunks/{theme-manager-GBUFULSO.js → theme-manager-BNWESY26.js} +26 -27
- package/chunks/{todoWrite-G7NT4IFP.js → todoWrite-5ERKFWAK.js} +3 -5
- package/chunks/{tool-search-6YUXHBPT.js → tool-search-PVQ5O5Y2.js} +9 -9
- package/chunks/{total-session-admission-54R2JQ5L.js → total-session-admission-P5Z43KNW.js} +30 -31
- package/chunks/{trustedFolders-KAJIDJTH.js → trustedFolders-FH2LT2MZ.js} +27 -28
- package/chunks/{update-relaunch-XM4IWBFD.js → update-relaunch-WOWTKJSN.js} +5 -5
- package/chunks/{updateCheck-W6UZFURI.js → updateCheck-3MYFMM35.js} +28 -29
- package/chunks/{useAutoAcceptIndicator-LAWYHY3U.js → useAutoAcceptIndicator-Q7ZRRRKO.js} +33 -34
- package/chunks/{validateNonInterActiveAuth-7WCKHRN2.js → validateNonInterActiveAuth-MYEWJX3G.js} +61 -62
- package/chunks/{version-3ZU43RJ6.js → version-RO2FPO76.js} +1 -1
- package/chunks/{web-fetch-QHI2SQL4.js → web-fetch-QAKY2LUA.js} +4 -4
- package/chunks/{web-search-3KZZKWNY.js → web-search-XA5Z4ZCD.js} +2 -2
- package/chunks/{workflow-HRW7Y2X4.js → workflow-QFIOCMDM.js} +18 -19
- package/chunks/{workspace-providers-status-KTGCWCPC.js → workspace-providers-status-B2UD7RAG.js} +35 -36
- package/chunks/{workspace-registration-store-LHLPPWNE.js → workspace-registration-store-VZLRTI3Q.js} +1 -1
- package/chunks/{workspace-registry-X34MLN52.js → workspace-registry-GYOGG6TM.js} +30 -31
- package/chunks/{workspace-runtime-coordinator-U4PW4P7K.js → workspace-runtime-coordinator-7KRXGQ4V.js} +31 -32
- package/chunks/{workspace-service-KD7BCGYL.js → workspace-service-DJEYGJE4.js} +36 -37
- package/chunks/{workspace-skills-status-YJGO6Y3T.js → workspace-skills-status-MOKNESUC.js} +33 -34
- package/chunks/{workspace-trust-reconciler-EUYHISCH.js → workspace-trust-reconciler-AXOSUTQW.js} +36 -37
- package/chunks/{write-file-EBSB34NJ.js → write-file-QOYVHAKK.js} +18 -19
- package/chunks/{zh-TW-W2GNP2IU.js → zh-TW-N2TBF2F2.js} +1 -1
- package/chunks/{zh-DVFYHRK5.js → zh-VBFCRQBL.js} +1 -1
- package/chunks/{zoom-image-UJ5VKWKP.js → zoom-image-UCCLGFNC.js} +4 -4
- package/cli.js +13 -13
- package/export-transcript-document.js +2 -2
- package/locales/en.js +2 -2
- package/locales/zh-TW.js +2 -2
- package/locales/zh.js +2 -2
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-Dur--luQ.js → abnfDiagram-VCTEODGH-CTstZpXw.js} +1 -1
- package/web-shell/assets/{arc-tYLobxFi.js → arc-DKW0mbPo.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-IG6aXD03.js → architectureDiagram-5GKGNRK7-DkMpJ42t.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-C6eBSkfA.js → blockDiagram-NRAW4CY4-7Cp1_4i3.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BrX3HJqB.js → c4Diagram-UCG6FXSJ-BfaoSlBK.js} +1 -1
- package/web-shell/assets/channel-CQx7VSAp.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-B3fcJ8ee.js → chunk-2Q5K7J3B-_n1qzAio.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-CeC90yKM.js → chunk-5VM5RSS4-0cira5ZV.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-CW44RVki.js → chunk-F27PBJKO-DseRXSHC.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-D1PAMukD.js → chunk-G27WJ6UU-BehQWin0.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-Dt3Y2Fvx.js → chunk-JWPE2WC7-B5ftg1Bb.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-CZHw2lLI.js → chunk-LCL6LL3I-D7rnbVdk.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-ysNAdTGx.js → chunk-POPQ4Y6H-2Bp-Orju.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-BdNXW6YQ.js → chunk-SVP7TREG-CD2goGva.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DgqQ9UA8.js → chunk-XXDRQBXY-DzQt-Rji.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C-Uz8hHk.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C-Uz8hHk.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-BILImXzJ.js → cose-bilkent-JH36ORCC-C-BZXSUn.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-DR88Pund.js → cynefin-OW5HDTMX-BTcvowe1.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BYFbfkA6.js → cynefinDiagram-5FMLGOSQ-BoUE6K81.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-rfpyc6sX.js → dagre-3AP2YEHR-BHxy9xeB.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-BJxLmEwH.js → diagram-S7CK7UJ4-DMiJIvDT.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-H34xm7k3.js → diagram-UQ7AKVKN-DXV09Aes.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-HYxhwNLx.js → diagram-VSXAHHWV-CocpRomV.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-BJazso8F.js → diagram-VX7I27RA-DL7nqtb4.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-Clje1aNy.js → diagram-Z3DM3KII-CPZ2Jux_.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-M93YBkFh.js → ebnfDiagram-PWID7BFC-BX-eVNsX.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-DY8XzSHU.js → erDiagram-SSCWMZ5O-CPy_Ir6y.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CE6Aylcq.js → flowDiagram-A5DVABFB-eknAOte9.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DI-5LL22.js → ganttDiagram-EL5Y4UJY-crAxw_t7.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-C7BZWElk.js → gitGraphDiagram-WWUBYQGX-M29pa3Tc.js} +1 -1
- package/web-shell/assets/{index-CVyqwW7y.js → index-B4TLaxWs.js} +474 -474
- package/web-shell/assets/{index-DclFHns9.js → index-C9R-iojE.js} +1 -1
- package/web-shell/assets/index-CCrkEbzz.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-CGUSy4Pc.js → infoDiagram-RXCK75RN-XqspXdOU.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-B5BVks9q.js → ishikawaDiagram-5VMMS53U-C5KFS-7j.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-CFh6Tf7h.js → journeyDiagram-EYS64GPL-Cc57LVRo.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-B7TlxP7c.js → kanban-definition-3QL26DDD-C81OG-AI.js} +1 -1
- package/web-shell/assets/{layout-Br_pZq2Q.js → layout-CFVu37BB.js} +1 -1
- package/web-shell/assets/{linear-BVlP6fte.js → linear-ChBxdtWf.js} +1 -1
- package/web-shell/assets/{mermaid.core-TrcYWoiF.js → mermaid.core-CMLfue0w.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BJ4LzqjZ.js → mindmap-definition-FBJOCRG2-DFsvJThp.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-1b_MxlOl.js → pegDiagram-XKGWAZYB-BzpRzM4F.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-B8zl0YhY.js → pieDiagram-E7YTZNPT-Cv0Kankl.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CIZO8ukl.js → quadrantDiagram-AXDQQJYC-Bh2BJ3Ay.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CepHSbCj.js → railroadDiagram-O6MQD6OU-y8rNDdDS.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCgxkcSW.js → requirementDiagram-EFPCY7ZU-C0m2DKJ_.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CE5CcoMM.js → sankeyDiagram-P5KCCOFB-BzdGnSF4.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DvgHi-d5.js → sequenceDiagram-WJ2MYXX4-DPzAVmzz.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-T-fAsCPX.js → sizeCapture-X5ZJPWSS-LcHG28Zh.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-DYHaul-5.js → stateDiagram-HBIQ2CUA-C1Bzy3IT.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-LuuL5byY.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-Dbz3Qiej.js → swimlanes-XN3QIQJK-Bftk8V64.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-COmnNq8s.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-9NVRts3N.js → timeline-definition-24CTP7MA-BfXHcN1A.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-C7cb7vnH.js → vennDiagram-4TSXK5OY-DRSlI9-V.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CG-8Ddjm.js → wardleyDiagram-VM6X3IG4-CaLmqGau.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-iGeYAcP4.js → xychartDiagram-S5SC5T6Z-8lgUT6e8.js} +1 -1
- package/web-shell/index.html +6 -3
- package/chunks/chunk-FKJM6JKY.js +0 -98
- package/web-shell/assets/channel-uEkvKckd.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DuPsnhWS.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DuPsnhWS.js +0 -1
- package/web-shell/assets/index-FO7JXPnH.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcYho9a4.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6HsOIgX.js +0 -8
|
@@ -407,13 +407,13 @@ See [Memory](../features/memory) for details on how auto-memory works and how to
|
|
|
407
407
|
|
|
408
408
|
#### agents
|
|
409
409
|
|
|
410
|
-
| Setting | Type | Description
|
|
411
|
-
| ------------------------------ | ---------------- |
|
|
412
|
-
| `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart.
|
|
413
|
-
| `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart.
|
|
414
|
-
| `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart.
|
|
415
|
-
| `agents.crossSessionMessaging` | boolean | Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Turning it on opens this session to peer messages, makes it discoverable to others, and lets its model address them from `send_message`. Requires restart. A workspace may set this to `false` only; a workspace `true` is ignored, with a warning only when it would loosen the operator-set or default value.
|
|
416
|
-
| `agents.crossSessionInbound` | enum | What happens to
|
|
410
|
+
| Setting | Type | Description | Default |
|
|
411
|
+
| ------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
|
|
412
|
+
| `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart. | `inherit` |
|
|
413
|
+
| `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart. | `undefined` |
|
|
414
|
+
| `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart. | `undefined` |
|
|
415
|
+
| `agents.crossSessionMessaging` | boolean | Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Turning it on opens this session to peer messages, makes it discoverable to others, and lets its model address them from `send_message`. Requires restart. A workspace may set this to `false` only; a workspace `true` is ignored, with a warning only when it would loosen the operator-set or default value. | `false` |
|
|
416
|
+
| `agents.crossSessionInbound` | enum | What happens to inbound cross-session messages: `accept` delivers them, `hold` parks them for `/peers` review without letting the model act, and `refuse` opts this session out. Unset means [user-minted controllers](../features/commands.md#trusted-controllers) and this session's own child processes auto-deliver, while other sessions use [review-class parity](../features/commands.md#6-messaging-another-running-session); other messages are held for review. A workspace may only tighten this (`hold` or `refuse`, when stricter than the operator-set value or the unset default); an effective unrecognized value holds every message. | `undefined` |
|
|
417
417
|
|
|
418
418
|
#### permissions
|
|
419
419
|
|
|
@@ -105,6 +105,32 @@ you edit other fields.
|
|
|
105
105
|
|
|
106
106
|
Set `"useConnectionManager": false` to disable Qwen Code's connection manager and fall back to the SDK's keepalive and automatic reconnect behavior.
|
|
107
107
|
|
|
108
|
+
### Background Agent Responses
|
|
109
|
+
|
|
110
|
+
Background Agent output is sent as soon as each response segment is available.
|
|
111
|
+
Every message is labeled with the Agent name so concurrent work remains
|
|
112
|
+
attributable.
|
|
113
|
+
|
|
114
|
+
To buffer each Agent's notification turn and send it as one labeled message,
|
|
115
|
+
enable aggregation for the DingTalk channel in `settings.json`:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"channels": {
|
|
120
|
+
"my-dingtalk": {
|
|
121
|
+
"type": "dingtalk",
|
|
122
|
+
"clientId": "$DINGTALK_CLIENT_ID",
|
|
123
|
+
"clientSecret": "$DINGTALK_CLIENT_SECRET",
|
|
124
|
+
"aggregateBackgroundAgentResponses": true
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Aggregation is disabled by default. A partial labeled message is sent if the
|
|
131
|
+
Agent turn is interrupted, fails before producing a final response, or does
|
|
132
|
+
not finish within ten minutes.
|
|
133
|
+
|
|
108
134
|
## Running
|
|
109
135
|
|
|
110
136
|
```bash
|
|
@@ -100,7 +100,7 @@ Commands for managing AI tools and models.
|
|
|
100
100
|
| → `auto-edit` | Auto-approve edits (trusted environment) | `/approval-mode auto-edit` |
|
|
101
101
|
| → `auto` | Classifier-evaluated approval (autonomous) | `/approval-mode auto` |
|
|
102
102
|
| → `yolo` | Auto-approve everything (quick prototyping) | `/approval-mode yolo` |
|
|
103
|
-
| `/peers` | Review
|
|
103
|
+
| `/peers` | Review held peer messages; manage trusted controllers | `/peers`, `/peers accept <id>`, `/peers deny all`, `/peers controllers`, `/peers revoke <id>` |
|
|
104
104
|
| `/model` | Switch model used in current session | `/model`, `/model <model-id>` (switch immediately) |
|
|
105
105
|
| `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
|
|
106
106
|
| `/model --voice` | Set the model used for voice transcription | `/model --voice <model-id>` |
|
|
@@ -711,10 +711,11 @@ These commands are run from the shell as `qwen <subcommand>` before starting an
|
|
|
711
711
|
|
|
712
712
|
### Session Management
|
|
713
713
|
|
|
714
|
-
| Command
|
|
715
|
-
|
|
|
716
|
-
| `qwen sessions list`
|
|
717
|
-
| `qwen sessions ps`
|
|
714
|
+
| Command | Description | Usage Examples |
|
|
715
|
+
| --------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------- |
|
|
716
|
+
| `qwen sessions list` | List recent conversation sessions | `qwen sessions list`, `qwen sessions list --json --limit 50` |
|
|
717
|
+
| `qwen sessions ps` | List interactive sessions running right now | `qwen sessions ps`, `qwen sessions ps --json` |
|
|
718
|
+
| `qwen sessions controllers` | Manage trusted controller tokens | `qwen sessions controllers add --label <name>`, `qwen sessions controllers list` |
|
|
718
719
|
|
|
719
720
|
#### `qwen sessions list`
|
|
720
721
|
|
|
@@ -780,7 +781,7 @@ object with fields:
|
|
|
780
781
|
|
|
781
782
|
```
|
|
782
783
|
schemaVersion, pid, procStart, pidNs, sessionId, cwd, name, startedAt,
|
|
783
|
-
qwenVersion
|
|
784
|
+
qwenVersion, ipcPath (when peer messaging is available)
|
|
784
785
|
```
|
|
785
786
|
|
|
786
787
|
Nothing else is written to stdout — an empty listing prints nothing at
|
|
@@ -914,3 +915,67 @@ anything else. The model sees it as
|
|
|
914
915
|
`<cross_session_message from="own process" origin="own-process">` with a
|
|
915
916
|
notice that it came from a script or hook the session ran, not from the
|
|
916
917
|
user.
|
|
918
|
+
|
|
919
|
+
### Trusted controllers
|
|
920
|
+
|
|
921
|
+
The rule above holds a message from any sender that does not say which
|
|
922
|
+
review class it is in, and a program that is not a Qwen Code session has
|
|
923
|
+
none to say. That is the right default for a stranger, but not for a
|
|
924
|
+
program you chose: a voice front-end, a dictation bridge, an automation
|
|
925
|
+
daemon relaying your own instructions would have every message parked,
|
|
926
|
+
and approving each one by hand defeats the point.
|
|
927
|
+
|
|
928
|
+
You grant such a program delivery by minting it a token:
|
|
929
|
+
|
|
930
|
+
```bash
|
|
931
|
+
qwen sessions controllers add --label voice-bridge
|
|
932
|
+
```
|
|
933
|
+
|
|
934
|
+
The token is printed once and is not stored anywhere: the file under
|
|
935
|
+
your Qwen home keeps only its SHA-256 hash, so nothing that later reads
|
|
936
|
+
that file can present the token. Put it in the controller's own
|
|
937
|
+
configuration when the command prints it.
|
|
938
|
+
|
|
939
|
+
A controller presents the token the way any other sender does — as the
|
|
940
|
+
first line of the connection — and takes the socket path from the
|
|
941
|
+
session registry (`qwen sessions ps --json` prints one record per live
|
|
942
|
+
session, `ipcPath` being the address):
|
|
943
|
+
|
|
944
|
+
```bash
|
|
945
|
+
{ printf '%s\n' \
|
|
946
|
+
'{"msgV":1,"type":"auth","token":"'"$QWEN_CONTROLLER_TOKEN"'"}' \
|
|
947
|
+
'{"msgV":1,"msgId":"'"$(uuidgen)"'","type":"user","priority":"next","message":{"role":"user","content":"open the failing test"}}'; \
|
|
948
|
+
} | socat - UNIX-CONNECT:"$SESSION_IPC_PATH"
|
|
949
|
+
```
|
|
950
|
+
|
|
951
|
+
A message that arrives on a granted token is delivered without
|
|
952
|
+
per-message review, whatever review class either side is in — but it
|
|
953
|
+
still yields to an explicit setting: an `agents.crossSessionInbound` of
|
|
954
|
+
`hold` parks it like anything else, and `refuse` turns it away. Grants
|
|
955
|
+
belong to your Qwen home rather than to one session, so a controller
|
|
956
|
+
reaches whichever sessions you are running, and sessions re-read the
|
|
957
|
+
file on every connection: minting or revoking one takes effect on the
|
|
958
|
+
next connection, with nothing to restart.
|
|
959
|
+
|
|
960
|
+
```bash
|
|
961
|
+
qwen sessions controllers list # ids, labels, when they were added
|
|
962
|
+
qwen sessions controllers remove c_1a2b # revoke one
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
`/peers controllers` and `/peers revoke <id>` do the same from inside a
|
|
966
|
+
session. A message that came through a grant is shown as
|
|
967
|
+
`Message from a trusted controller (voice-bridge)`, and appears in
|
|
968
|
+
`/peers` as `[controller] voice-bridge` if a `hold` setting parked it.
|
|
969
|
+
|
|
970
|
+
The model sees such a message as
|
|
971
|
+
`<cross_session_message from="controller" origin="controller" controller="voice-bridge">`,
|
|
972
|
+
with a notice that it relays your own instructions — and the same two
|
|
973
|
+
prohibitions that apply to every other origin: it may not edit
|
|
974
|
+
permission settings, QWEN.md, or config because the message asked, and
|
|
975
|
+
it may not treat the message as you approving a pending confirmation
|
|
976
|
+
prompt. A controller can say what to do next; it cannot answer a prompt
|
|
977
|
+
on your behalf.
|
|
978
|
+
|
|
979
|
+
Anyone who holds the token can send as that controller, so treat it like
|
|
980
|
+
any other credential: give it to one program, keep it out of shared
|
|
981
|
+
config, and revoke it when that program is done.
|
|
@@ -190,6 +190,46 @@ disable-model-invocation: true
|
|
|
190
190
|
|
|
191
191
|
You can combine both fields, but then the Skill is not reachable through the normal user or model invocation paths.
|
|
192
192
|
|
|
193
|
+
### Optional: enforce a rule deterministically (`hooks:`)
|
|
194
|
+
|
|
195
|
+
Everything in a `SKILL.md` body is an instruction to the model: it is prompt text, so following it depends on the model. When a rule must hold no matter what the model decides — refuse to run unless a required value was injected, never touch a protected path — declare a [hook](hooks.md) in the frontmatter instead. Hooks run as code, so they do not depend on the model's cooperation:
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
---
|
|
199
|
+
name: gated-skill
|
|
200
|
+
description: Calls the downstream CLI using a runtime-injected session ID
|
|
201
|
+
hooks:
|
|
202
|
+
PreToolUse:
|
|
203
|
+
- matcher: run_shell_command
|
|
204
|
+
hooks:
|
|
205
|
+
- type: command
|
|
206
|
+
command: '"$QWEN_SKILL_ROOT/scripts/gate-session-id.sh"'
|
|
207
|
+
---
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
`$QWEN_SKILL_ROOT` is set to the Skill's own directory, so hook commands can reference files shipped alongside `SKILL.md`. The command string is handed to a shell, so **keep the inner quotes**: unquoted, a project path containing a space splits into two words and the gate never runs. **Make the script executable** (`chmod +x`) too. Both mistakes fail open in the same way: the tool call proceeds, and nothing appears in the transcript or the log to say the gate did not run. A `PreToolUse` hook blocks the tool call when it exits with code `2` (stderr is fed back to the model as the reason), or when it prints `hookSpecificOutput.permissionDecision: "deny"`:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
#!/usr/bin/env bash
|
|
214
|
+
if [ -z "${DOWNSTREAM_SESSION_ID:-}" ]; then
|
|
215
|
+
echo "Required input DOWNSTREAM_SESSION_ID is not available. Cannot proceed." >&2
|
|
216
|
+
exit 2
|
|
217
|
+
fi
|
|
218
|
+
exit 0
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Notes:
|
|
222
|
+
|
|
223
|
+
- Hooks are registered when the Skill is invoked and last for the rest of the session. This is true on both invocation paths — whether the model calls the Skill or you type `/<skill-name>`.
|
|
224
|
+
- Session hooks live only in memory, so resuming a session with `--continue` / `--resume` does **not** restore them, on either invocation path. The Skill's instructions can come back with the replayed conversation while the hooks meant to enforce them are gone — re-run the Skill after resuming to re-arm its gate.
|
|
225
|
+
- Registration is idempotent: re-invoking a Skill does not stack duplicate hooks.
|
|
226
|
+
- Always give a tool event an explicit `matcher:`. An omitted one is stored as the empty pattern, which is compiled to `^$` and matches no tool name — the hook registers and then never fires, with nothing to say so. Use `*` if you mean every tool.
|
|
227
|
+
- The `command:` runs through the platform shell: `bash` on macOS and Linux, and on Windows Git Bash when it is detected (`MSYSTEM`/`TERM`), otherwise `cmd.exe` or PowerShell. The example above is POSIX shell — under `cmd.exe` `$QWEN_SKILL_ROOT` is not expanded and a `.sh` script is not executable, so the gate fails open there. A hook may set `shell: bash` to force bash, but that resolves to whatever `bash` is on `PATH`, so on Windows outside Git Bash write the gate for the shell you actually have.
|
|
228
|
+
- Sessions that disable hooks register none of them — `disableAllHooks`, safe mode, and an ACP client's `skipHooks`. The Skill's body and its `allowedTools` still apply in those sessions, but its gate does not, so a rule you rely on a hook to enforce is not enforced there. Bare mode goes further: no Skills are discovered at all, so there is no body and no `allowedTools` either.
|
|
229
|
+
- A **project** Skill's hooks run repo-supplied commands, so they are registered only in a trusted folder, and trust is re-read every time a hook fires and every time a permission is decided. With an IDE companion connected that value is live: revoking trust silences an already-registered gate — and suspends the Skill's `allowedTools` — at the next tool call, without a restart. Without an IDE connection the value is fixed when the CLI starts, so a change made through the CLI's own trust dialog takes effect on restart. Granting trust never retro-registers: invoke the Skill again.
|
|
230
|
+
- `hooks:` is read for project, user, and bundled Skills. Extension-provided Skills do not support it; use the extension's own manifest-level hooks instead.
|
|
231
|
+
- See [Hooks](hooks.md) for the full event list, matcher syntax, and output format.
|
|
232
|
+
|
|
193
233
|
## Add supporting files
|
|
194
234
|
|
|
195
235
|
Create additional files alongside `SKILL.md`:
|
|
@@ -14,59 +14,58 @@ import "./chunk-47ECGEJC.js";
|
|
|
14
14
|
import "./chunk-2MIN6GRR.js";
|
|
15
15
|
import "./chunk-QHTIBUWB.js";
|
|
16
16
|
import "./chunk-RKUWKYED.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-TXAEXF2B.js";
|
|
18
18
|
import "./chunk-GELRJXE2.js";
|
|
19
19
|
import "./chunk-32CM56LO.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-C7M445SS.js";
|
|
21
|
+
import "./chunk-2EKVPSIJ.js";
|
|
22
22
|
import "./chunk-LJZSMWOH.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-E4VX6LXB.js";
|
|
24
|
+
import "./chunk-RSU3I6UL.js";
|
|
25
25
|
import "./chunk-DJXSOEFB.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-KTLT7VCX.js";
|
|
27
|
+
import "./chunk-J3VZF2AL.js";
|
|
28
|
+
import "./chunk-OWCFKIFQ.js";
|
|
29
29
|
import "./chunk-ZPJWUGCS.js";
|
|
30
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-5Z4FCEPY.js";
|
|
31
31
|
import "./chunk-BUQN5LTI.js";
|
|
32
32
|
import "./chunk-VU7O7CGQ.js";
|
|
33
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-SD7Y2PMC.js";
|
|
34
34
|
import "./chunk-VNOVK4I7.js";
|
|
35
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-TSLRORQR.js";
|
|
36
36
|
import "./chunk-GOFAQQZA.js";
|
|
37
37
|
import "./chunk-3K65MUKD.js";
|
|
38
38
|
import "./chunk-6HUXPLB5.js";
|
|
39
39
|
import "./chunk-TWPJO254.js";
|
|
40
40
|
import "./chunk-CQ35AJ4Z.js";
|
|
41
41
|
import "./chunk-YHDGABDC.js";
|
|
42
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-LYT2OU7D.js";
|
|
43
43
|
import "./chunk-B54PFQS5.js";
|
|
44
|
-
import "./chunk-
|
|
44
|
+
import "./chunk-ERMAXPXA.js";
|
|
45
45
|
import "./chunk-6PVPNMXU.js";
|
|
46
46
|
import "./chunk-565U2ANU.js";
|
|
47
47
|
import "./chunk-FDOGGKAA.js";
|
|
48
48
|
import "./chunk-IRH27ZC2.js";
|
|
49
49
|
import "./chunk-QHWCP53L.js";
|
|
50
50
|
import "./chunk-F53KKZUD.js";
|
|
51
|
-
import "./chunk-
|
|
51
|
+
import "./chunk-TRWQQBVH.js";
|
|
52
52
|
import "./chunk-QJNDUTOL.js";
|
|
53
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-N6S3NUYJ.js";
|
|
54
54
|
import "./chunk-O6GEWCJA.js";
|
|
55
55
|
import "./chunk-CHEIIBT3.js";
|
|
56
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-QAZ2MGYT.js";
|
|
57
57
|
import "./chunk-B44JBZBB.js";
|
|
58
58
|
import "./chunk-BF3RUIVP.js";
|
|
59
59
|
import "./chunk-JX6XHPTX.js";
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-4VUVBN3Y.js";
|
|
60
|
+
import "./chunk-CLKE4IY3.js";
|
|
62
61
|
import "./chunk-ZSTCM3MX.js";
|
|
63
62
|
import "./chunk-NXWYCSPL.js";
|
|
64
63
|
import "./chunk-MLXTMF7H.js";
|
|
65
|
-
import "./chunk-
|
|
64
|
+
import "./chunk-OFB36ZBA.js";
|
|
66
65
|
import "./chunk-3CZ2BQV6.js";
|
|
67
66
|
import "./chunk-PQEISIKS.js";
|
|
68
67
|
import "./chunk-3K456UJF.js";
|
|
69
|
-
import "./chunk-
|
|
68
|
+
import "./chunk-H3Q3RSKZ.js";
|
|
70
69
|
import "./chunk-S6LOFUVP.js";
|
|
71
70
|
import "./chunk-NAVJD2PQ.js";
|
|
72
71
|
import "./chunk-UKADFFL2.js";
|
|
@@ -79,7 +78,7 @@ import "./chunk-W4LL5RZO.js";
|
|
|
79
78
|
import "./chunk-3UMWOKJC.js";
|
|
80
79
|
import "./chunk-KFFCDLKV.js";
|
|
81
80
|
import "./chunk-7OCIQNKX.js";
|
|
82
|
-
import "./chunk-
|
|
81
|
+
import "./chunk-WQBR7LN5.js";
|
|
83
82
|
import "./chunk-5ETULJLP.js";
|
|
84
83
|
import "./chunk-XBVNNDPK.js";
|
|
85
84
|
import "./chunk-VGC4I5JJ.js";
|
|
@@ -89,18 +88,18 @@ import "./chunk-HD7O6WLV.js";
|
|
|
89
88
|
import "./chunk-WZAD4ZNJ.js";
|
|
90
89
|
import "./chunk-FPGTNKCP.js";
|
|
91
90
|
import "./chunk-TIGXX4PA.js";
|
|
92
|
-
import "./chunk-
|
|
91
|
+
import "./chunk-PLUAIHZO.js";
|
|
93
92
|
import "./chunk-XFFRI3WM.js";
|
|
94
93
|
import "./chunk-4HOEU2OR.js";
|
|
95
94
|
import "./chunk-HHJLM3WQ.js";
|
|
96
95
|
import "./chunk-7VEYUF3N.js";
|
|
97
96
|
import "./chunk-74TONY4F.js";
|
|
98
|
-
import "./chunk-
|
|
99
|
-
import "./chunk-
|
|
100
|
-
import "./chunk-
|
|
101
|
-
import "./chunk-
|
|
97
|
+
import "./chunk-E6TI726I.js";
|
|
98
|
+
import "./chunk-4VY3ITHR.js";
|
|
99
|
+
import "./chunk-O2FEO2CB.js";
|
|
100
|
+
import "./chunk-G6UUOCUT.js";
|
|
102
101
|
import "./chunk-IZ2U57NY.js";
|
|
103
|
-
import "./chunk-
|
|
102
|
+
import "./chunk-MWIO7MF6.js";
|
|
104
103
|
import "./chunk-ZAFYHRVY.js";
|
|
105
104
|
import "./chunk-75DOP5OR.js";
|
|
106
105
|
import "./chunk-DMTGGOSA.js";
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
ConfigContext,
|
|
5
5
|
SessionPicker,
|
|
6
6
|
SettingsContext
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-B5FF3LRF.js";
|
|
8
|
+
import "./chunk-KP5QK3FB.js";
|
|
9
|
+
import "./chunk-T7TP5UQL.js";
|
|
10
10
|
import {
|
|
11
11
|
KeypressProvider
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-AWDF462I.js";
|
|
13
|
+
import "./chunk-VYCJITND.js";
|
|
14
|
+
import "./chunk-I67KJGM6.js";
|
|
15
15
|
import "./chunk-3SH53ANB.js";
|
|
16
16
|
import "./chunk-HY3DXYZK.js";
|
|
17
17
|
import "./chunk-4WGODMVR.js";
|
|
@@ -30,86 +30,85 @@ import {
|
|
|
30
30
|
import {
|
|
31
31
|
require_react
|
|
32
32
|
} from "./chunk-5QWWOFGG.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-YLFICBYK.js";
|
|
34
|
+
import "./chunk-22QOQKG4.js";
|
|
35
|
+
import "./chunk-WXFCI3O5.js";
|
|
36
|
+
import "./chunk-XQ4RDO5B.js";
|
|
37
37
|
import "./chunk-EKTCKZV5.js";
|
|
38
|
-
import "./chunk-
|
|
38
|
+
import "./chunk-37SOBIA3.js";
|
|
39
39
|
import "./chunk-47ECGEJC.js";
|
|
40
40
|
import "./chunk-2MIN6GRR.js";
|
|
41
41
|
import "./chunk-QHTIBUWB.js";
|
|
42
42
|
import "./chunk-57OAHC2Y.js";
|
|
43
|
-
import "./chunk-
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
43
|
+
import "./chunk-UTVIIA7N.js";
|
|
44
|
+
import "./chunk-RUMSY4ES.js";
|
|
45
|
+
import "./chunk-QW7BUOSI.js";
|
|
46
46
|
import "./chunk-RKUWKYED.js";
|
|
47
47
|
import "./chunk-BW4333PP.js";
|
|
48
48
|
import "./chunk-IDS7MSUP.js";
|
|
49
|
-
import "./chunk-
|
|
49
|
+
import "./chunk-LD53HMPV.js";
|
|
50
50
|
import "./chunk-5EJZE3FP.js";
|
|
51
|
-
import "./chunk-
|
|
51
|
+
import "./chunk-4OCYWXKF.js";
|
|
52
52
|
import "./chunk-NUQFUXOG.js";
|
|
53
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-GEV66YGE.js";
|
|
54
54
|
import "./chunk-NPQ5ZKRP.js";
|
|
55
55
|
import "./chunk-MR3PXB6E.js";
|
|
56
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-TXAEXF2B.js";
|
|
57
57
|
import "./chunk-GELRJXE2.js";
|
|
58
58
|
import "./chunk-32CM56LO.js";
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-
|
|
59
|
+
import "./chunk-C7M445SS.js";
|
|
60
|
+
import "./chunk-2EKVPSIJ.js";
|
|
61
61
|
import "./chunk-LJZSMWOH.js";
|
|
62
|
-
import "./chunk-
|
|
63
|
-
import "./chunk-
|
|
62
|
+
import "./chunk-E4VX6LXB.js";
|
|
63
|
+
import "./chunk-RSU3I6UL.js";
|
|
64
64
|
import "./chunk-DJXSOEFB.js";
|
|
65
|
-
import "./chunk-
|
|
66
|
-
import "./chunk-
|
|
67
|
-
import "./chunk-
|
|
65
|
+
import "./chunk-KTLT7VCX.js";
|
|
66
|
+
import "./chunk-J3VZF2AL.js";
|
|
67
|
+
import "./chunk-OWCFKIFQ.js";
|
|
68
68
|
import "./chunk-ZPJWUGCS.js";
|
|
69
|
-
import "./chunk-
|
|
69
|
+
import "./chunk-5Z4FCEPY.js";
|
|
70
70
|
import "./chunk-BUQN5LTI.js";
|
|
71
71
|
import "./chunk-VU7O7CGQ.js";
|
|
72
|
-
import "./chunk-
|
|
72
|
+
import "./chunk-SD7Y2PMC.js";
|
|
73
73
|
import "./chunk-VNOVK4I7.js";
|
|
74
74
|
import {
|
|
75
75
|
SessionService
|
|
76
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-TSLRORQR.js";
|
|
77
77
|
import "./chunk-GOFAQQZA.js";
|
|
78
78
|
import "./chunk-3K65MUKD.js";
|
|
79
79
|
import "./chunk-6HUXPLB5.js";
|
|
80
80
|
import "./chunk-TWPJO254.js";
|
|
81
81
|
import "./chunk-CQ35AJ4Z.js";
|
|
82
82
|
import "./chunk-YHDGABDC.js";
|
|
83
|
-
import "./chunk-
|
|
83
|
+
import "./chunk-LYT2OU7D.js";
|
|
84
84
|
import "./chunk-B54PFQS5.js";
|
|
85
|
-
import "./chunk-
|
|
85
|
+
import "./chunk-ERMAXPXA.js";
|
|
86
86
|
import "./chunk-6PVPNMXU.js";
|
|
87
87
|
import "./chunk-565U2ANU.js";
|
|
88
88
|
import "./chunk-FDOGGKAA.js";
|
|
89
89
|
import "./chunk-IRH27ZC2.js";
|
|
90
90
|
import "./chunk-QHWCP53L.js";
|
|
91
91
|
import "./chunk-F53KKZUD.js";
|
|
92
|
-
import "./chunk-
|
|
92
|
+
import "./chunk-TRWQQBVH.js";
|
|
93
93
|
import "./chunk-QJNDUTOL.js";
|
|
94
|
-
import "./chunk-
|
|
94
|
+
import "./chunk-N6S3NUYJ.js";
|
|
95
95
|
import "./chunk-O6GEWCJA.js";
|
|
96
96
|
import "./chunk-CHEIIBT3.js";
|
|
97
|
-
import "./chunk-
|
|
97
|
+
import "./chunk-QAZ2MGYT.js";
|
|
98
98
|
import "./chunk-B44JBZBB.js";
|
|
99
99
|
import "./chunk-BF3RUIVP.js";
|
|
100
100
|
import "./chunk-JX6XHPTX.js";
|
|
101
|
-
import "./chunk-
|
|
102
|
-
import "./chunk-4VUVBN3Y.js";
|
|
101
|
+
import "./chunk-CLKE4IY3.js";
|
|
103
102
|
import "./chunk-ZSTCM3MX.js";
|
|
104
103
|
import "./chunk-NXWYCSPL.js";
|
|
105
104
|
import "./chunk-MLXTMF7H.js";
|
|
106
|
-
import "./chunk-
|
|
105
|
+
import "./chunk-OFB36ZBA.js";
|
|
107
106
|
import {
|
|
108
107
|
getGitBranch
|
|
109
108
|
} from "./chunk-3CZ2BQV6.js";
|
|
110
109
|
import "./chunk-PQEISIKS.js";
|
|
111
110
|
import "./chunk-3K456UJF.js";
|
|
112
|
-
import "./chunk-
|
|
111
|
+
import "./chunk-H3Q3RSKZ.js";
|
|
113
112
|
import "./chunk-S6LOFUVP.js";
|
|
114
113
|
import "./chunk-NAVJD2PQ.js";
|
|
115
114
|
import "./chunk-UKADFFL2.js";
|
|
@@ -122,7 +121,7 @@ import "./chunk-W4LL5RZO.js";
|
|
|
122
121
|
import "./chunk-3UMWOKJC.js";
|
|
123
122
|
import "./chunk-KFFCDLKV.js";
|
|
124
123
|
import "./chunk-7OCIQNKX.js";
|
|
125
|
-
import "./chunk-
|
|
124
|
+
import "./chunk-WQBR7LN5.js";
|
|
126
125
|
import "./chunk-5ETULJLP.js";
|
|
127
126
|
import "./chunk-XBVNNDPK.js";
|
|
128
127
|
import "./chunk-VGC4I5JJ.js";
|
|
@@ -132,20 +131,20 @@ import "./chunk-HD7O6WLV.js";
|
|
|
132
131
|
import "./chunk-WZAD4ZNJ.js";
|
|
133
132
|
import "./chunk-FPGTNKCP.js";
|
|
134
133
|
import "./chunk-TIGXX4PA.js";
|
|
135
|
-
import "./chunk-
|
|
134
|
+
import "./chunk-PLUAIHZO.js";
|
|
136
135
|
import "./chunk-XFFRI3WM.js";
|
|
137
136
|
import "./chunk-4HOEU2OR.js";
|
|
138
137
|
import "./chunk-HHJLM3WQ.js";
|
|
139
138
|
import "./chunk-7VEYUF3N.js";
|
|
140
139
|
import "./chunk-74TONY4F.js";
|
|
141
|
-
import "./chunk-
|
|
142
|
-
import "./chunk-
|
|
143
|
-
import "./chunk-
|
|
144
|
-
import "./chunk-
|
|
140
|
+
import "./chunk-E6TI726I.js";
|
|
141
|
+
import "./chunk-4VY3ITHR.js";
|
|
142
|
+
import "./chunk-O2FEO2CB.js";
|
|
143
|
+
import "./chunk-G6UUOCUT.js";
|
|
145
144
|
import "./chunk-IZ2U57NY.js";
|
|
146
|
-
import "./chunk-
|
|
145
|
+
import "./chunk-MWIO7MF6.js";
|
|
147
146
|
import "./chunk-ZAFYHRVY.js";
|
|
148
|
-
import "./chunk-
|
|
147
|
+
import "./chunk-HPE4LEWX.js";
|
|
149
148
|
import {
|
|
150
149
|
writeStdoutLine
|
|
151
150
|
} from "./chunk-7FA2II6K.js";
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
markAcpStartup,
|
|
10
10
|
recordAcpConfigStartupEvent,
|
|
11
11
|
resetAcpStartupProfilerForTesting
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-IMWCUWQT.js";
|
|
13
|
+
import "./chunk-Z6KFLEG7.js";
|
|
14
14
|
import "./chunk-5O2XNYP6.js";
|
|
15
15
|
import "./chunk-J2S4EL5Y.js";
|
|
16
16
|
export {
|