@qwen-code/qwen-code 0.18.2 → 0.18.3-nightly.20260621.6b2f800ab
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/README.md +64 -492
- package/bundled/loop/SKILL.md +53 -26
- package/bundled/loop/SKILL.test.ts +67 -0
- package/bundled/qc-helper/docs/configuration/auth.md +7 -6
- package/bundled/qc-helper/docs/configuration/model-providers.md +16 -2
- package/bundled/qc-helper/docs/configuration/settings.md +51 -44
- package/bundled/qc-helper/docs/extension/introduction.md +38 -0
- package/bundled/qc-helper/docs/features/approval-mode.md +2 -0
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +4 -4
- package/bundled/qc-helper/docs/features/channels/qqbot.md +179 -0
- package/bundled/qc-helper/docs/features/commands.md +49 -0
- package/bundled/qc-helper/docs/features/followup-suggestions.md +10 -6
- package/bundled/qc-helper/docs/features/hooks.md +6 -3
- package/bundled/qc-helper/docs/features/status-line.md +4 -2
- package/bundled/qc-helper/docs/qwen-serve.md +9 -4
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +11 -5
- package/bundled/qc-helper/docs/support/troubleshooting.md +5 -0
- package/chunks/{agent-P5U6QLWL.js → agent-66UJLGYF.js} +24 -23
- package/chunks/{agent-headless-24356DC7.js → agent-headless-XWKLG7OO.js} +24 -23
- package/chunks/{anthropicContentGenerator-KLBHYGH6.js → anthropicContentGenerator-5S4OMMNL.js} +9 -7
- package/chunks/{askUserQuestion-QPZXR3UO.js → askUserQuestion-WHVYL2S2.js} +2 -2
- package/chunks/{ca-RK4QPLIX.js → ca-K6MD665I.js} +42 -2
- package/chunks/{chunk-WPTCDQN6.js → chunk-26ZYKTYZ.js} +2 -2
- package/chunks/{chunk-O4PICXES.js → chunk-2MPVVENX.js} +14 -6
- package/chunks/{chunk-VIEIRAK3.js → chunk-2O3NAOJG.js} +4 -2
- package/chunks/{chunk-NNIYWQIS.js → chunk-42HGOMED.js} +2 -1
- package/chunks/{chunk-B4ZF2KSI.js → chunk-AE6RQU6F.js} +2 -2
- package/chunks/{chunk-FIQECJTQ.js → chunk-ATLUHLZE.js} +1 -1
- package/chunks/{chunk-BJ5HQ23U.js → chunk-C6MI2ASN.js} +9 -10
- package/chunks/{chunk-LYRSMKLS.js → chunk-CTHZVIMD.js} +2 -2
- package/chunks/{chunk-MN5RAXVB.js → chunk-CX3SGIPK.js} +18 -6
- package/chunks/{chunk-IQHSD7K5.js → chunk-FH4P6RQA.js} +1 -1
- package/chunks/{chunk-LYSND7KR.js → chunk-G4BUMVEY.js} +12 -2
- package/chunks/{chunk-YJDVHAGL.js → chunk-GBN55AWZ.js} +2 -2
- package/chunks/{chunk-ZNUMXPNK.js → chunk-GOMVJKBL.js} +7 -3
- package/chunks/{chunk-NGDXHX3A.js → chunk-GRVAP37P.js} +63 -11
- package/chunks/{chunk-CPVI5J2L.js → chunk-ID533GA3.js} +1 -1
- package/chunks/{chunk-VU6A2OBJ.js → chunk-JXQ23SNT.js} +217 -219
- package/chunks/{chunk-ZMIBJS45.js → chunk-KGV3F6UF.js} +1 -1
- package/chunks/{chunk-SFRV6BGY.js → chunk-LF6BKGZT.js} +3 -3
- package/chunks/{chunk-LXYWINWF.js → chunk-LTN3VYMZ.js} +1 -1
- package/chunks/{chunk-IDYDPBBN.js → chunk-MSJ2MXJ6.js} +3 -3
- package/chunks/{chunk-25FFAMED.js → chunk-NLCTUNOS.js} +1048 -295
- package/chunks/{chunk-JZEKEWO5.js → chunk-TOSAOARP.js} +6 -6
- package/chunks/{chunk-M7OBURJM.js → chunk-VIA5MAE5.js} +24 -12
- package/chunks/{chunk-RTTAC5VW.js → chunk-VKILGMZQ.js} +1 -1
- package/chunks/{chunk-QFJ67S5R.js → chunk-VN7FXOAW.js} +732 -617
- package/chunks/{chunk-HA2UEYZP.js → chunk-WE6TNQJU.js} +13 -6
- package/chunks/chunk-XGU3ETVO.js +1026 -0
- package/chunks/{chunk-ZOFNJQNJ.js → chunk-XU7BKR3B.js} +3 -3
- package/chunks/{chunk-QP4R5FTG.js → chunk-Z7XXFPGP.js} +4 -3
- package/chunks/{chunk-TW522KN6.js → chunk-ZTQ26VBE.js} +13 -6
- package/chunks/{chunk-EQ5NHJBY.js → chunk-ZV5QED4A.js} +109573 -106663
- package/chunks/{computer-use-EGW2I2HZ.js → computer-use-5AHVGVR3.js} +26 -24
- package/chunks/contextCommand-PTDKJROT.js +54 -0
- package/chunks/{cron-create-DQKRQMCP.js → cron-create-THNDTYXU.js} +6 -6
- package/chunks/{cron-delete-DOFPHFTI.js → cron-delete-BS5H6TFJ.js} +6 -6
- package/chunks/{cron-list-RCVOO3CB.js → cron-list-7OBVHT7K.js} +24 -10
- package/chunks/{de-FGPM4KW5.js → de-K2F3T3TR.js} +41 -1
- package/chunks/{dist-2UCAYOX7.js → dist-BD27IA3L.js} +16 -5
- package/chunks/{dist-UH7CYT7F.js → dist-DZ6AJDX4.js} +52 -11
- package/chunks/{dist-KF43SZZV.js → dist-GKRNVFBH.js} +5 -1
- package/chunks/{dist-33LHH26D.js → dist-KIYB7DQW.js} +1 -1
- package/chunks/dist-QFFZWACU.js +2136 -0
- package/chunks/{edit-FJSOCDO2.js → edit-ADXZN3M7.js} +26 -27
- package/chunks/{en-VP6XPGEC.js → en-KGSAKBJP.js} +232 -0
- package/chunks/{enter-worktree-X6MVFDLR.js → enter-worktree-F5SJSHNH.js} +24 -23
- package/chunks/{enterPlanMode-MZAEQZH3.js → enterPlanMode-MCQ4HWPP.js} +52 -28
- package/chunks/{exit-worktree-RM2UPOYQ.js → exit-worktree-26AFS3YQ.js} +191 -41
- package/chunks/{exitPlanMode-7BVY3CWJ.js → exitPlanMode-UOPIPSEA.js} +85 -46
- package/chunks/{fr-ATYBVCLT.js → fr-2CAQEOK6.js} +41 -1
- package/chunks/{geminiContentGenerator-A6JHLUHK.js → geminiContentGenerator-RJA7BIHQ.js} +4 -4
- package/chunks/{glob-L3AZLCV6.js → glob-AWTDID4C.js} +26 -24
- package/chunks/{grep-SNCPCXIP.js → grep-QJ5TEMYZ.js} +96 -43
- package/chunks/{ja-W2QEA2OI.js → ja-QWL7V6OJ.js} +41 -1
- package/chunks/{keychain-token-storage-QSTRHKKL.js → keychain-token-storage-YHXIWXIB.js} +2 -2
- package/chunks/loop-wakeup-SSBWZ64K.js +167 -0
- package/chunks/{ls-TRD77UTS.js → ls-YPFUHZRQ.js} +3 -3
- package/chunks/{lsp-2VFWQPZS.js → lsp-FD6DNVAF.js} +2 -2
- package/chunks/{monitor-TS6WL6DN.js → monitor-SQYLCQAK.js} +24 -23
- package/chunks/{notebook-edit-26RNH24J.js → notebook-edit-7RR3ABQ5.js} +25 -26
- package/chunks/{openaiContentGenerator-7CA63X5G.js → openaiContentGenerator-2CHXJZ4A.js} +14 -11
- package/chunks/{pt-ZKEWJFBW.js → pt-2SPOLMAY.js} +41 -1
- package/chunks/{qwenContentGenerator-4WJTJXFZ.js → qwenContentGenerator-ZXEKDN2J.js} +27 -26
- package/chunks/{qwenOAuth2-KK433U33.js → qwenOAuth2-WZ54YZ4J.js} +4 -4
- package/chunks/{read-file-EUIHK6HD.js → read-file-AZAKLZFP.js} +9 -8
- package/chunks/{ripGrep-7J5B22W2.js → ripGrep-T5PS4VWB.js} +24 -23
- package/chunks/{ru-VEKTPJ74.js → ru-35IVJTEH.js} +41 -1
- package/chunks/{scheduler-J3OUGTTS.js → scheduler-VZ5KYSX6.js} +24 -23
- package/chunks/{send-message-QZOC5GA2.js → send-message-FWFTX62Q.js} +2 -2
- package/chunks/{serve-VF4ZNUJP.js → serve-RN6CHKG3.js} +1308 -291
- package/chunks/{shell-G6XCJAG3.js → shell-ANALFMWT.js} +24 -23
- package/chunks/{skill-7OVC6JIH.js → skill-JIKQTL4U.js} +11 -10
- package/chunks/{src-XV5MLRND.js → src-EMRXVZY7.js} +159 -59
- package/chunks/{syntheticOutput-WJSUK4SZ.js → syntheticOutput-JY5NEDTV.js} +3 -3
- package/chunks/{task-create-GGSC27HO.js → task-create-IGILDV25.js} +7 -7
- package/chunks/{task-list-EDHHHSK4.js → task-list-KBEJVAAG.js} +6 -6
- package/chunks/{task-stop-WR5PDVZY.js → task-stop-WFTMQ6AC.js} +2 -2
- package/chunks/{task-update-UR7NUHBV.js → task-update-UIVX7ZEV.js} +7 -7
- package/chunks/{team-create-JXSC7ROC.js → team-create-BVKQF4WK.js} +26 -25
- package/chunks/{team-delete-FC33URJK.js → team-delete-LPOXDPVB.js} +6 -6
- package/chunks/{todoWrite-GO2ME7ZV.js → todoWrite-R4RIJKOD.js} +4 -4
- package/chunks/{tool-search-YRWSWA2H.js → tool-search-E4VYDNQO.js} +9 -8
- package/chunks/{web-fetch-NLLATYIL.js → web-fetch-JU7SS6KE.js} +5 -5
- package/chunks/{workflow-ZN3DYFMU.js → workflow-VDPJJYAF.js} +242 -39
- package/chunks/{write-file-355M4V7Z.js → write-file-NCN66V2C.js} +26 -27
- package/chunks/{zh-TW-6YFNCKTA.js → zh-TW-BSG6BUWK.js} +232 -2
- package/chunks/{zh-OIXDDQHB.js → zh-X4KM6MTW.js} +233 -0
- package/cli.js +11094 -5768
- package/examples/agent/agents/diary.md +1 -1
- package/examples/mcp-server/qwen-extension.json +8 -1
- package/examples/starter/agents/diary.md +1 -1
- package/locales/ca.js +67 -2
- package/locales/de.js +68 -2
- package/locales/en.js +304 -0
- package/locales/fr.js +69 -2
- package/locales/ja.js +65 -2
- package/locales/pt.js +67 -2
- package/locales/ru.js +68 -2
- package/locales/zh-TW.js +288 -2
- package/locales/zh.js +288 -0
- package/package.json +4 -3
- package/web-shell/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/web-shell/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web-shell/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web-shell/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web-shell/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web-shell/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/web-shell/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web-shell/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/web-shell/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web-shell/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web-shell/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web-shell/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/web-shell/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web-shell/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/web-shell/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web-shell/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/web-shell/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web-shell/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web-shell/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/web-shell/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web-shell/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web-shell/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web-shell/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web-shell/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/web-shell/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/web-shell/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web-shell/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web-shell/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web-shell/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/web-shell/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web-shell/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web-shell/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web-shell/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web-shell/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/web-shell/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web-shell/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/web-shell/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web-shell/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web-shell/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web-shell/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/web-shell/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web-shell/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/web-shell/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web-shell/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web-shell/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web-shell/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web-shell/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web-shell/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/web-shell/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web-shell/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/web-shell/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web-shell/assets/abap-DsBKuouk.js +1 -0
- package/web-shell/assets/actionscript-3-D_z4Izcz.js +1 -0
- package/web-shell/assets/ada-727ZlQH0.js +1 -0
- package/web-shell/assets/andromeeda-C3khCPGq.js +1 -0
- package/web-shell/assets/angular-html-LfdN0zeE.js +1 -0
- package/web-shell/assets/angular-ts-CKsD7JZE.js +1 -0
- package/web-shell/assets/apache-Dn00JSTd.js +1 -0
- package/web-shell/assets/apex-COJ4H7py.js +1 -0
- package/web-shell/assets/apl-BBq3IX1j.js +1 -0
- package/web-shell/assets/applescript-Bu5BbsvL.js +1 -0
- package/web-shell/assets/ara-7O62HKoU.js +1 -0
- package/web-shell/assets/arc-CRFN10gD.js +1 -0
- package/web-shell/assets/architectureDiagram-3BPJPVTR-IRlu1CpH.js +36 -0
- package/web-shell/assets/asciidoc-BPT9niGB.js +1 -0
- package/web-shell/assets/asm-Dhn9LcZ4.js +1 -0
- package/web-shell/assets/astro-CqkE3fuf.js +1 -0
- package/web-shell/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/web-shell/assets/awk-eg146-Ew.js +1 -0
- package/web-shell/assets/ayu-dark-Cv9koXgw.js +1 -0
- package/web-shell/assets/ballerina-Du268qiB.js +1 -0
- package/web-shell/assets/bat-fje9CFhw.js +1 -0
- package/web-shell/assets/beancount-BwXTMy5W.js +1 -0
- package/web-shell/assets/berry-3xVqZejG.js +1 -0
- package/web-shell/assets/bibtex-xW4inM5L.js +1 -0
- package/web-shell/assets/bicep-DHo0CJ0O.js +1 -0
- package/web-shell/assets/blade-a8OxSdnT.js +1 -0
- package/web-shell/assets/blockDiagram-GPEHLZMM-htIZ6iw8.js +132 -0
- package/web-shell/assets/bsl-Dgyn0ogV.js +1 -0
- package/web-shell/assets/c-C3t2pwGQ.js +1 -0
- package/web-shell/assets/c4Diagram-AAUBKEIU-A2GoRq3O.js +10 -0
- package/web-shell/assets/cadence-DNquZEk8.js +1 -0
- package/web-shell/assets/cairo--RitsXJZ.js +1 -0
- package/web-shell/assets/catppuccin-frappe-CD_QflpE.js +1 -0
- package/web-shell/assets/catppuccin-latte-DRW-0cLl.js +1 -0
- package/web-shell/assets/catppuccin-macchiato-C-_shW-Y.js +1 -0
- package/web-shell/assets/catppuccin-mocha-LGGdnPYs.js +1 -0
- package/web-shell/assets/channel-WwImfsc7.js +1 -0
- package/web-shell/assets/chunk-2J33WTMH-CdP2AC6u.js +1 -0
- package/web-shell/assets/chunk-4BX2VUAB-DrA07nW2.js +1 -0
- package/web-shell/assets/chunk-55IACEB6-CFGnVU2f.js +1 -0
- package/web-shell/assets/chunk-727SXJPM-BTMkq3Tk.js +206 -0
- package/web-shell/assets/chunk-AQP2D5EJ-C9sYg04Z.js +231 -0
- package/web-shell/assets/chunk-FMBD7UC4-Cag-cj6I.js +15 -0
- package/web-shell/assets/chunk-ND2GUHAM-CDSTFoR7.js +1 -0
- package/web-shell/assets/chunk-QZHKN3VN-CN9Z6oOs.js +1 -0
- package/web-shell/assets/clarity-BHOwM8T6.js +1 -0
- package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +1 -0
- package/web-shell/assets/clojure-DxSadP1t.js +1 -0
- package/web-shell/assets/cmake-DbXoA79R.js +1 -0
- package/web-shell/assets/cobol-PTqiYgYu.js +1 -0
- package/web-shell/assets/codeowners-Bp6g37R7.js +1 -0
- package/web-shell/assets/codeql-sacFqUAJ.js +1 -0
- package/web-shell/assets/coffee-dyiR41kL.js +1 -0
- package/web-shell/assets/common-lisp-C7gG9l05.js +1 -0
- package/web-shell/assets/coq-Dsg_Bt_b.js +1 -0
- package/web-shell/assets/cose-bilkent-S5V4N54A-DuN9j8Du.js +1 -0
- package/web-shell/assets/cpp-BksuvNSY.js +1 -0
- package/web-shell/assets/crystal-DtDmRg-F.js +1 -0
- package/web-shell/assets/csharp-D9R-vmeu.js +1 -0
- package/web-shell/assets/css-BPhBrDlE.js +1 -0
- package/web-shell/assets/csv-B0qRVHPH.js +1 -0
- package/web-shell/assets/cue-DtFQj3wx.js +1 -0
- package/web-shell/assets/cypher-m2LEI-9-.js +1 -0
- package/web-shell/assets/cytoscape.esm-CUqq0XTU.js +331 -0
- package/web-shell/assets/d-BoXegm-a.js +1 -0
- package/web-shell/assets/dagre-BM42HDAG-ByCWe45f.js +4 -0
- package/web-shell/assets/dark-plus-C3mMm8J8.js +1 -0
- package/web-shell/assets/dart-B9wLZaAG.js +1 -0
- package/web-shell/assets/dax-ClGRhx96.js +1 -0
- package/web-shell/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/web-shell/assets/desktop-DEIpsLCJ.js +1 -0
- package/web-shell/assets/diagram-2AECGRRQ-eWyU_pKZ.js +43 -0
- package/web-shell/assets/diagram-5GNKFQAL-0Bfu3Fq5.js +10 -0
- package/web-shell/assets/diagram-KO2AKTUF-B6KBKkQP.js +3 -0
- package/web-shell/assets/diagram-LMA3HP47-TToDmeA_.js +24 -0
- package/web-shell/assets/diagram-OG6HWLK6-CQCkC2Yx.js +24 -0
- package/web-shell/assets/diff-BgYniUM_.js +1 -0
- package/web-shell/assets/docker-COcR7UxN.js +1 -0
- package/web-shell/assets/dotenv-BjQB5zDj.js +1 -0
- package/web-shell/assets/dracula-BzJJZx-M.js +1 -0
- package/web-shell/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/web-shell/assets/dream-maker-C-nORZOA.js +1 -0
- package/web-shell/assets/edge-D5gP-w-T.js +1 -0
- package/web-shell/assets/elixir-CLiX3zqd.js +1 -0
- package/web-shell/assets/elm-CmHSxxaM.js +1 -0
- package/web-shell/assets/emacs-lisp-BX77sIaO.js +1 -0
- package/web-shell/assets/erDiagram-TEJ5UH35-Cm9ls1iB.js +85 -0
- package/web-shell/assets/erb-BYTLMnw6.js +1 -0
- package/web-shell/assets/erlang-B-DoSBHF.js +1 -0
- package/web-shell/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/web-shell/assets/everforest-light-C8M2exoo.js +1 -0
- package/web-shell/assets/fennel-bCA53EVm.js +1 -0
- package/web-shell/assets/fish-w-ucz2PV.js +1 -0
- package/web-shell/assets/flowDiagram-I6XJVG4X-Dyoz80Pv.js +162 -0
- package/web-shell/assets/fluent-Dayu4EKP.js +1 -0
- package/web-shell/assets/fortran-fixed-form-TqA4NnZg.js +1 -0
- package/web-shell/assets/fortran-free-form-DKXYxT9g.js +1 -0
- package/web-shell/assets/fsharp-XplgxFYe.js +1 -0
- package/web-shell/assets/ganttDiagram-6RSMTGT7-Cfut9yaU.js +292 -0
- package/web-shell/assets/gdresource-BHYsBjWJ.js +1 -0
- package/web-shell/assets/gdscript-DfxzS6Rs.js +1 -0
- package/web-shell/assets/gdshader-SKMF96pI.js +1 -0
- package/web-shell/assets/genie-ajMbGru0.js +1 -0
- package/web-shell/assets/gherkin--30QC5Em.js +1 -0
- package/web-shell/assets/git-commit-i4q6IMui.js +1 -0
- package/web-shell/assets/git-rebase-B-v9cOL2.js +1 -0
- package/web-shell/assets/gitGraphDiagram-PVQCEYII-BCuJdlfD.js +106 -0
- package/web-shell/assets/github-dark-DHJKELXO.js +1 -0
- package/web-shell/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/web-shell/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/web-shell/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/web-shell/assets/github-light-DAi9KRSo.js +1 -0
- package/web-shell/assets/github-light-default-D7oLnXFd.js +1 -0
- package/web-shell/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/web-shell/assets/gleam-B430Bg39.js +1 -0
- package/web-shell/assets/glimmer-js-D-cwc0-E.js +1 -0
- package/web-shell/assets/glimmer-ts-pgjy16dm.js +1 -0
- package/web-shell/assets/glsl-DBO2IWDn.js +1 -0
- package/web-shell/assets/gnuplot-CM8KxXT1.js +1 -0
- package/web-shell/assets/go-B1SYOhNW.js +1 -0
- package/web-shell/assets/graph-qsFoMdT2.js +1 -0
- package/web-shell/assets/graphql-cDcHW_If.js +1 -0
- package/web-shell/assets/groovy-DkBy-JyN.js +1 -0
- package/web-shell/assets/hack-D1yCygmZ.js +1 -0
- package/web-shell/assets/haml-B2EZWmdv.js +1 -0
- package/web-shell/assets/handlebars-BQGss363.js +1 -0
- package/web-shell/assets/haskell-BILxekzW.js +1 -0
- package/web-shell/assets/haxe-C5wWYbrZ.js +1 -0
- package/web-shell/assets/hcl-HzYwdGDm.js +1 -0
- package/web-shell/assets/hjson-T-Tgc4AT.js +1 -0
- package/web-shell/assets/hlsl-ifBTmRxC.js +1 -0
- package/web-shell/assets/houston-DnULxvSX.js +1 -0
- package/web-shell/assets/html-C2L_23MC.js +1 -0
- package/web-shell/assets/html-derivative-CSfWNPLT.js +1 -0
- package/web-shell/assets/http-FRrOvY1W.js +1 -0
- package/web-shell/assets/hxml-TIA70rKU.js +1 -0
- package/web-shell/assets/hy-BMj5Y0dO.js +1 -0
- package/web-shell/assets/imba-bv_oIlVt.js +1 -0
- package/web-shell/assets/index-BDZiTAkl.css +1 -0
- package/web-shell/assets/index-DaebdpHq.js +516 -0
- package/web-shell/assets/infoDiagram-5YYISTIA-CXKxF2VL.js +2 -0
- package/web-shell/assets/ini-BjABl1g7.js +1 -0
- package/web-shell/assets/init-Gi6I4Gst.js +1 -0
- package/web-shell/assets/ishikawaDiagram-YF4QCWOH-DE7HWSU8.js +70 -0
- package/web-shell/assets/java-xI-RfyKK.js +1 -0
- package/web-shell/assets/javascript-ySlJ1b_l.js +1 -0
- package/web-shell/assets/jinja-DGy0s7-h.js +1 -0
- package/web-shell/assets/jison-BqZprYcd.js +1 -0
- package/web-shell/assets/journeyDiagram-JHISSGLW-D__YUfds.js +139 -0
- package/web-shell/assets/json-BQoSv7ci.js +1 -0
- package/web-shell/assets/json5-w8dY5SsB.js +1 -0
- package/web-shell/assets/jsonc-TU54ms6u.js +1 -0
- package/web-shell/assets/jsonl-DREVFZK8.js +1 -0
- package/web-shell/assets/jsonnet-BfivnA6A.js +1 -0
- package/web-shell/assets/jssm-P4WzXJd0.js +1 -0
- package/web-shell/assets/jsx-BAng5TT0.js +1 -0
- package/web-shell/assets/julia-BBuGR-5E.js +1 -0
- package/web-shell/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/web-shell/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/web-shell/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/web-shell/assets/kanban-definition-UN3LZRKU-D82R169M.js +89 -0
- package/web-shell/assets/kotlin-B5lbUyaz.js +1 -0
- package/web-shell/assets/kusto-mebxcVVE.js +1 -0
- package/web-shell/assets/laserwave-DUszq2jm.js +1 -0
- package/web-shell/assets/latex-C-cWTeAZ.js +1 -0
- package/web-shell/assets/layout-CNYaLpI5.js +1 -0
- package/web-shell/assets/lean-XBlWyCtg.js +1 -0
- package/web-shell/assets/less-BfCpw3nA.js +1 -0
- package/web-shell/assets/light-plus-B7mTdjB0.js +1 -0
- package/web-shell/assets/linear-DpyMbKqT.js +1 -0
- package/web-shell/assets/liquid-D3W5UaiH.js +1 -0
- package/web-shell/assets/log-Cc5clBb7.js +1 -0
- package/web-shell/assets/logo-IuBKFhSY.js +1 -0
- package/web-shell/assets/lua-CvWAzNxB.js +1 -0
- package/web-shell/assets/luau-Du5NY7AG.js +1 -0
- package/web-shell/assets/make-Bvotw-X0.js +1 -0
- package/web-shell/assets/markdown-UIAJJxZW.js +1 -0
- package/web-shell/assets/marko-z0MBrx5-.js +1 -0
- package/web-shell/assets/material-theme-D5KoaKCx.js +1 -0
- package/web-shell/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/web-shell/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/web-shell/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/web-shell/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/web-shell/assets/matlab-D9-PGadD.js +1 -0
- package/web-shell/assets/mdc-DB_EDNY_.js +1 -0
- package/web-shell/assets/mdx-sdHcTMYB.js +1 -0
- package/web-shell/assets/mermaid-Ci6OQyBP.js +1 -0
- package/web-shell/assets/mermaid.core-D1KEFDhn.js +309 -0
- package/web-shell/assets/min-dark-CafNBF8u.js +1 -0
- package/web-shell/assets/min-light-CTRr51gU.js +1 -0
- package/web-shell/assets/mindmap-definition-RKZ34NQL-BwVUFGFE.js +96 -0
- package/web-shell/assets/mipsasm-BC5c_5Pe.js +1 -0
- package/web-shell/assets/mojo-Tz6hzZYG.js +1 -0
- package/web-shell/assets/monokai-D4h5O-jR.js +1 -0
- package/web-shell/assets/move-DB_GagMm.js +1 -0
- package/web-shell/assets/narrat-DLbgOhZU.js +1 -0
- package/web-shell/assets/nextflow-B0XVJmRM.js +1 -0
- package/web-shell/assets/nginx-D_VnBJ67.js +1 -0
- package/web-shell/assets/night-owl-C39BiMTA.js +1 -0
- package/web-shell/assets/nim-ZlGxZxc3.js +1 -0
- package/web-shell/assets/nix-shcSOmrb.js +1 -0
- package/web-shell/assets/nord-Ddv68eIx.js +1 -0
- package/web-shell/assets/nushell-D4Tzg5kh.js +1 -0
- package/web-shell/assets/objective-c-Deuh7S70.js +1 -0
- package/web-shell/assets/objective-cpp-BUEGK8hf.js +1 -0
- package/web-shell/assets/ocaml-BNioltXt.js +1 -0
- package/web-shell/assets/one-dark-pro-GBQ2dnAY.js +1 -0
- package/web-shell/assets/one-light-PoHY5YXO.js +1 -0
- package/web-shell/assets/ordinal-Cboi1Yqb.js +1 -0
- package/web-shell/assets/pascal-JqZropPD.js +1 -0
- package/web-shell/assets/perl-CHQXSrWU.js +1 -0
- package/web-shell/assets/php-B5ebYQev.js +1 -0
- package/web-shell/assets/pieDiagram-4H26LBE5-BO_qoEGx.js +30 -0
- package/web-shell/assets/plastic-3e1v2bzS.js +1 -0
- package/web-shell/assets/plsql-LKU2TuZ1.js +1 -0
- package/web-shell/assets/po-BFLt1xDp.js +1 -0
- package/web-shell/assets/poimandres-CS3Unz2-.js +1 -0
- package/web-shell/assets/polar-DKykz6zU.js +1 -0
- package/web-shell/assets/postcss-B3ZDOciz.js +1 -0
- package/web-shell/assets/powerquery-CSHBycmS.js +1 -0
- package/web-shell/assets/powershell-BIEUsx6d.js +1 -0
- package/web-shell/assets/prisma-B48N-Iqd.js +1 -0
- package/web-shell/assets/prolog-BY-TUvya.js +1 -0
- package/web-shell/assets/proto-zocC4JxJ.js +1 -0
- package/web-shell/assets/pug-CM9l7STV.js +1 -0
- package/web-shell/assets/puppet-Cza_XSSt.js +1 -0
- package/web-shell/assets/purescript-Bg-kzb6g.js +1 -0
- package/web-shell/assets/python-DhUJRlN_.js +1 -0
- package/web-shell/assets/qml-D8XfuvdV.js +1 -0
- package/web-shell/assets/qmldir-C8lEn-DE.js +1 -0
- package/web-shell/assets/qss-DhMKtDLN.js +1 -0
- package/web-shell/assets/quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js +7 -0
- package/web-shell/assets/r-CwjWoCRV.js +1 -0
- package/web-shell/assets/racket-CzouJOBO.js +1 -0
- package/web-shell/assets/raku-B1bQXN8T.js +1 -0
- package/web-shell/assets/razor-CNLDkMZG.js +1 -0
- package/web-shell/assets/red-bN70gL4F.js +1 -0
- package/web-shell/assets/reg-5LuOXUq_.js +1 -0
- package/web-shell/assets/regexp-DWJ3fJO_.js +1 -0
- package/web-shell/assets/rel-DJlmqQ1C.js +1 -0
- package/web-shell/assets/requirementDiagram-4Y6WPE33-BJPXejOA.js +84 -0
- package/web-shell/assets/riscv-QhoSD0DR.js +1 -0
- package/web-shell/assets/rose-pine-CmCqftbK.js +1 -0
- package/web-shell/assets/rose-pine-dawn-Ds-gbosJ.js +1 -0
- package/web-shell/assets/rose-pine-moon-CjDtw9vr.js +1 -0
- package/web-shell/assets/rst-4NLicBqY.js +1 -0
- package/web-shell/assets/ruby-DeZ3UC14.js +1 -0
- package/web-shell/assets/rust-Be6lgOlo.js +1 -0
- package/web-shell/assets/sankeyDiagram-5OEKKPKP-C1xeIL9i.js +40 -0
- package/web-shell/assets/sas-BmTFh92c.js +1 -0
- package/web-shell/assets/sass-BJ4Li9vH.js +1 -0
- package/web-shell/assets/scala-DQVVAn-B.js +1 -0
- package/web-shell/assets/scheme-BJGe-b2p.js +1 -0
- package/web-shell/assets/scss-C31hgJw-.js +1 -0
- package/web-shell/assets/sdbl-BLhTXw86.js +1 -0
- package/web-shell/assets/sequenceDiagram-3UESZ5HK-CSYKQUjf.js +162 -0
- package/web-shell/assets/shaderlab-B7qAK45m.js +1 -0
- package/web-shell/assets/shellscript-atvbtKCR.js +1 -0
- package/web-shell/assets/shellsession-C_rIy8kc.js +1 -0
- package/web-shell/assets/slack-dark-BthQWCQV.js +1 -0
- package/web-shell/assets/slack-ochin-DqwNpetd.js +1 -0
- package/web-shell/assets/smalltalk-DkLiglaE.js +1 -0
- package/web-shell/assets/snazzy-light-Bw305WKR.js +1 -0
- package/web-shell/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/web-shell/assets/solarized-light-L9t79GZl.js +1 -0
- package/web-shell/assets/solidity-C1w2a3ep.js +1 -0
- package/web-shell/assets/soy-C-lX7w71.js +1 -0
- package/web-shell/assets/sparql-bYkjHRlG.js +1 -0
- package/web-shell/assets/splunk-Cf8iN4DR.js +1 -0
- package/web-shell/assets/sql-COK4E0Yg.js +1 -0
- package/web-shell/assets/ssh-config-BknIz3MU.js +1 -0
- package/web-shell/assets/stata-DorPZHa4.js +1 -0
- package/web-shell/assets/stateDiagram-AJRCARHV-d9hiHlAW.js +1 -0
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +1 -0
- package/web-shell/assets/stylus-BeQkCIfX.js +1 -0
- package/web-shell/assets/svelte-MSaWC3Je.js +1 -0
- package/web-shell/assets/swift-BSxZ-RaX.js +1 -0
- package/web-shell/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/web-shell/assets/system-verilog-C7L56vO4.js +1 -0
- package/web-shell/assets/systemd-CUnW07Te.js +1 -0
- package/web-shell/assets/talonscript-C1XDQQGZ.js +1 -0
- package/web-shell/assets/tasl-CQjiPCtT.js +1 -0
- package/web-shell/assets/tcl-DQ1-QYvQ.js +1 -0
- package/web-shell/assets/templ-dwX3ZSMB.js +1 -0
- package/web-shell/assets/terraform-BbSNqyBO.js +1 -0
- package/web-shell/assets/tex-rYs2v40G.js +1 -0
- package/web-shell/assets/timeline-definition-PNZ67QCA-BhCBkq8k.js +120 -0
- package/web-shell/assets/tokyo-night-DBQeEorK.js +1 -0
- package/web-shell/assets/toml-CB2ApiWb.js +1 -0
- package/web-shell/assets/ts-tags-CipyTH0X.js +1 -0
- package/web-shell/assets/tsv-B_m7g4N7.js +1 -0
- package/web-shell/assets/tsx-B6W0miNI.js +1 -0
- package/web-shell/assets/turtle-BMR_PYu6.js +1 -0
- package/web-shell/assets/twig-NC5TFiHP.js +1 -0
- package/web-shell/assets/typescript-Dj6nwHGl.js +1 -0
- package/web-shell/assets/typespec-BpWG_bgh.js +1 -0
- package/web-shell/assets/typst-BVUVsWT6.js +1 -0
- package/web-shell/assets/v-CAQ2eGtk.js +1 -0
- package/web-shell/assets/vala-BFOHcciG.js +1 -0
- package/web-shell/assets/vb-CdO5JTpU.js +1 -0
- package/web-shell/assets/vennDiagram-CIIHVFJN-DPPFWp_y.js +34 -0
- package/web-shell/assets/verilog-CJaU5se_.js +1 -0
- package/web-shell/assets/vesper-BEBZ7ncR.js +1 -0
- package/web-shell/assets/vhdl-DYoNaHQp.js +1 -0
- package/web-shell/assets/viml-m4uW47V2.js +1 -0
- package/web-shell/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/web-shell/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/web-shell/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/web-shell/assets/vue-BuYVFjOK.js +1 -0
- package/web-shell/assets/vue-html-xdeiXROB.js +1 -0
- package/web-shell/assets/vyper-nyqBNV6O.js +1 -0
- package/web-shell/assets/wardley-L42UT6IY-CcOUIgXY.js +173 -0
- package/web-shell/assets/wardleyDiagram-YWT4CUSO-p7oR5X7r.js +78 -0
- package/web-shell/assets/wasm-C6j12Q_x.js +1 -0
- package/web-shell/assets/wasm-CG6Dc4jp.js +1 -0
- package/web-shell/assets/wenyan-7A4Fjokl.js +1 -0
- package/web-shell/assets/wgsl-CB0Krxn9.js +1 -0
- package/web-shell/assets/wikitext-DCE3LsBG.js +1 -0
- package/web-shell/assets/wolfram-C3FkfJm5.js +1 -0
- package/web-shell/assets/xml-e3z08dGr.js +1 -0
- package/web-shell/assets/xsl-Dd0NUgwM.js +1 -0
- package/web-shell/assets/xychartDiagram-2RQKCTM6-Dfr7-SEy.js +7 -0
- package/web-shell/assets/yaml-CVw76BM1.js +1 -0
- package/web-shell/assets/zenscript-HnGAYVZD.js +1 -0
- package/web-shell/assets/zig-BVz_zdnA.js +1 -0
- package/web-shell/index.html +23 -0
- package/chunks/chunk-C64WAJOC.js +0 -117
- package/chunks/contextCommand-HI2X2Y7I.js +0 -53
package/bundled/loop/SKILL.md
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: loop
|
|
3
|
-
description: Create a
|
|
4
|
-
argument-hint: '[interval]
|
|
3
|
+
description: Create a loop that runs a prompt now and follows up either on a fixed schedule or through self-paced wakeups. Usage - /loop check the build, /loop 5m check the build, /loop check the PR every 30m. /loop list to show jobs, /loop clear to cancel all.
|
|
4
|
+
argument-hint: '[interval] [prompt] | list | clear'
|
|
5
5
|
allowedTools:
|
|
6
6
|
- cron_create
|
|
7
7
|
- cron_list
|
|
8
8
|
- cron_delete
|
|
9
|
+
- loop_wakeup
|
|
9
10
|
---
|
|
10
11
|
|
|
11
|
-
# /loop —
|
|
12
|
+
# /loop — run a prompt repeatedly
|
|
12
13
|
|
|
13
14
|
## Subcommands
|
|
14
15
|
|
|
@@ -17,47 +18,73 @@ If the input (after stripping the `/loop` prefix) is exactly one of these keywor
|
|
|
17
18
|
- **`list`** — call CronList and display the results. Done.
|
|
18
19
|
- **`clear`** — call CronList, then call CronDelete for every job returned. Confirm how many were cancelled. Done.
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
## Parsing
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
Parse the input after removing the `/loop` prefix:
|
|
23
24
|
|
|
24
|
-
1. **
|
|
25
|
-
2. **
|
|
26
|
-
3. **
|
|
25
|
+
1. **Empty input**: show usage `/loop [interval] [prompt]` and stop. Do not call CronCreate or LoopWakeup in this slice.
|
|
26
|
+
2. **Leading interval token**: if the first whitespace-delimited token matches `^\d+[smhd]$` (e.g. `5m`, `2h`), this is the fixed-interval recurring path. The rest is the prompt.
|
|
27
|
+
3. **Trailing "every" clause**: otherwise, if the input ends with `every <N><unit>` or `every <N> <unit-word>` (e.g. `every 20m`, `every 5 minutes`, `every 2 hours`), this is the fixed-interval recurring path. Extract that interval and strip it from the prompt. Only match when what follows "every" is a time expression — `check every PR` has no interval.
|
|
28
|
+
4. **Prompt-only input**: otherwise, the entire input is the prompt and this is the prompt-only self-paced path.
|
|
27
29
|
|
|
28
|
-
If the resulting prompt is empty, show usage `/loop [interval]
|
|
30
|
+
If the resulting prompt is empty, show usage `/loop [interval] [prompt]` and stop.
|
|
29
31
|
|
|
30
32
|
Examples:
|
|
31
33
|
|
|
32
|
-
- `5m /babysit-prs` → interval `5m`, prompt `/babysit-prs` (
|
|
33
|
-
- `check the deploy every 20m` → interval `20m`, prompt `check the deploy` (
|
|
34
|
-
- `run tests every 5 minutes` → interval `5m`, prompt `run tests` (
|
|
35
|
-
- `check
|
|
36
|
-
- `check
|
|
34
|
+
- `5m /babysit-prs` → fixed interval `5m`, prompt `/babysit-prs` (leading interval token)
|
|
35
|
+
- `check the deploy every 20m` → fixed interval `20m`, prompt `check the deploy` (trailing "every" clause)
|
|
36
|
+
- `run tests every 5 minutes` → fixed interval `5m`, prompt `run tests` (trailing "every" clause)
|
|
37
|
+
- `check every PR` → prompt-only self-paced path, prompt `check every PR` ("every" is not followed by a time expression)
|
|
38
|
+
- `check the deploy` → prompt-only self-paced path, prompt `check the deploy`
|
|
37
39
|
- `5m` → empty prompt → show usage
|
|
38
40
|
|
|
39
|
-
##
|
|
41
|
+
## Prompt-only self-paced path
|
|
42
|
+
|
|
43
|
+
Use this path only when the user supplied a prompt and no interval.
|
|
44
|
+
|
|
45
|
+
1. Do not call CronCreate for this path.
|
|
46
|
+
2. Run the parsed prompt immediately now.
|
|
47
|
+
- If it is a slash command, invoke it via the Skill tool.
|
|
48
|
+
- Otherwise, act on it directly.
|
|
49
|
+
3. Before ending the turn, decide whether another check is useful.
|
|
50
|
+
- Call LoopWakeup only if continued follow-up is useful.
|
|
51
|
+
- Do not call LoopWakeup if the task is complete.
|
|
52
|
+
- Do not call LoopWakeup if the task is blocked on user input or external state that cannot be checked later.
|
|
53
|
+
- Do not call LoopWakeup just to keep polling when no useful next check exists.
|
|
54
|
+
4. When scheduling a continuation, call LoopWakeup with:
|
|
55
|
+
- `delaySeconds`: the next useful delay in seconds. The runtime clamps to 60–3600 (1–60 min); follow the tool's own guidance on picking a value (it accounts for the prompt-cache window).
|
|
56
|
+
- `prompt`: `/loop ${original prompt}`
|
|
57
|
+
- `reason`: a short reason for the chosen delay.
|
|
58
|
+
5. Briefly tell the user what was done now. If a wakeup was scheduled, include when the next check is expected. If no wakeup was scheduled, say the loop is complete or not continuing.
|
|
59
|
+
|
|
60
|
+
## Fixed-interval recurring path
|
|
61
|
+
|
|
62
|
+
Use this path only for inputs with a leading interval token or a trailing "every" clause.
|
|
63
|
+
|
|
64
|
+
### Interval to cron
|
|
40
65
|
|
|
41
66
|
Supported suffixes: `s` (seconds, rounded up to nearest minute, min 1), `m` (minutes), `h` (hours), `d` (days). Convert:
|
|
42
67
|
|
|
43
|
-
| Interval pattern
|
|
44
|
-
|
|
|
45
|
-
| `Nm` where N
|
|
46
|
-
| `Nm` where N
|
|
47
|
-
| `Nh` where N
|
|
48
|
-
| `Nd`
|
|
49
|
-
| `Ns`
|
|
68
|
+
| Interval pattern | Cron expression | Notes |
|
|
69
|
+
| ------------------ | ---------------------- | ----------------------------------------- |
|
|
70
|
+
| `Nm` where N <= 59 | `*/N * * * *` | every N minutes |
|
|
71
|
+
| `Nm` where N >= 60 | `0 */H * * *` | round to hours (H = N/60, must divide 24) |
|
|
72
|
+
| `Nh` where N <= 23 | `0 */N * * *` | every N hours |
|
|
73
|
+
| `Nd` | `0 0 */N * *` | every N days at midnight local |
|
|
74
|
+
| `Ns` | treat as `ceil(N/60)m` | cron minimum granularity is 1 minute |
|
|
50
75
|
|
|
51
|
-
|
|
76
|
+
If the interval does not cleanly divide its unit (for example `7m` gives uneven gaps at `:56` to `:00`, or `90m` is 1.5 hours which cron cannot express), pick the nearest clean interval and tell the user what you rounded to before scheduling.
|
|
52
77
|
|
|
53
|
-
|
|
78
|
+
### Action
|
|
54
79
|
|
|
55
80
|
1. Call CronCreate with:
|
|
56
81
|
- `cron`: the expression from the table above
|
|
57
82
|
- `prompt`: the parsed prompt from above, verbatim (slash commands are passed through unchanged)
|
|
58
83
|
- `recurring`: `true`
|
|
59
84
|
- `durable`: `true` if the user's language implies persistence ("keep doing this", "set this up permanently", "every day even after restart"). Otherwise omit (defaults to session-only).
|
|
60
|
-
2. Briefly confirm: what
|
|
61
|
-
3.
|
|
85
|
+
2. Briefly confirm: what is scheduled, the cron expression, the human-readable cadence, that recurring tasks auto-expire after 7 days, and that they can cancel sooner with CronDelete (include the job ID).
|
|
86
|
+
3. Then immediately execute the parsed prompt now. Do not wait for the first cron fire.
|
|
87
|
+
- If it is a slash command, invoke it via the Skill tool.
|
|
88
|
+
- Otherwise, act on it directly.
|
|
62
89
|
|
|
63
90
|
## Input
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Qwen
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
import { describe, expect, it } from 'vitest';
|
|
11
|
+
import { parseSkillContent } from '../../skill-load.js';
|
|
12
|
+
|
|
13
|
+
function loadLoopSkill() {
|
|
14
|
+
const skillPath = path.join(
|
|
15
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
16
|
+
'SKILL.md',
|
|
17
|
+
);
|
|
18
|
+
const content = fs.readFileSync(skillPath, 'utf8');
|
|
19
|
+
const config = parseSkillContent(content, skillPath);
|
|
20
|
+
return { config, body: config.body };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe('bundled loop skill', () => {
|
|
24
|
+
it('allows both cron tools and the loop wakeup primitive', () => {
|
|
25
|
+
const { config } = loadLoopSkill();
|
|
26
|
+
|
|
27
|
+
expect(config.allowedTools).toEqual([
|
|
28
|
+
'cron_create',
|
|
29
|
+
'cron_list',
|
|
30
|
+
'cron_delete',
|
|
31
|
+
'loop_wakeup',
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('documents prompt-only input as self-paced and non-recurring', () => {
|
|
36
|
+
const { body } = loadLoopSkill();
|
|
37
|
+
|
|
38
|
+
expect(body).toContain('## Prompt-only self-paced path');
|
|
39
|
+
expect(body).toContain('Do not call CronCreate for this path.');
|
|
40
|
+
expect(body).toContain('Run the parsed prompt immediately now.');
|
|
41
|
+
expect(body).toContain(
|
|
42
|
+
'Call LoopWakeup only if continued follow-up is useful.',
|
|
43
|
+
);
|
|
44
|
+
expect(body).toContain('`prompt`: `/loop ${original prompt}`');
|
|
45
|
+
// Drives the second-resolution wakeup engine — seconds, not minutes.
|
|
46
|
+
expect(body).toContain('`delaySeconds`');
|
|
47
|
+
expect(body).not.toContain('delayMinutes');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('keeps fixed-interval inputs on the recurring cron path', () => {
|
|
51
|
+
const { body } = loadLoopSkill();
|
|
52
|
+
|
|
53
|
+
expect(body).toContain('## Fixed-interval recurring path');
|
|
54
|
+
expect(body).toContain('Leading interval token');
|
|
55
|
+
expect(body).toContain('Trailing "every" clause');
|
|
56
|
+
expect(body).toContain('Call CronCreate with:');
|
|
57
|
+
expect(body).toContain('recurring`: `true`');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('keeps list and clear as management subcommands', () => {
|
|
61
|
+
const { body } = loadLoopSkill();
|
|
62
|
+
|
|
63
|
+
expect(body).toContain('**`list`** — call CronList');
|
|
64
|
+
expect(body).toContain('**`clear`** — call CronList');
|
|
65
|
+
expect(body).toContain('call CronDelete for every job returned');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -101,7 +101,7 @@ If you prefer to skip the interactive `/auth` flow, add the following to `~/.qwe
|
|
|
101
101
|
|
|
102
102
|
## 🚀 Option 3: API Key (flexible)
|
|
103
103
|
|
|
104
|
-
Use this if you want to connect to third-party providers such as OpenAI, Anthropic, Google, Azure OpenAI, OpenRouter, ModelScope, or a self-hosted endpoint. Supports multiple protocols and providers.
|
|
104
|
+
Use this if you want to connect to third-party providers such as OpenAI, Anthropic, Google, Azure OpenAI, OpenRouter, Requesty, ModelScope, or a self-hosted endpoint. Supports multiple protocols and providers.
|
|
105
105
|
|
|
106
106
|
### Recommended: One-file setup via `settings.json`
|
|
107
107
|
|
|
@@ -153,11 +153,11 @@ The key concept is **Model Providers** (`modelProviders`): Qwen Code supports mu
|
|
|
153
153
|
|
|
154
154
|
#### Supported protocols
|
|
155
155
|
|
|
156
|
-
| Protocol | `modelProviders` key | Environment variables | Providers
|
|
157
|
-
| ----------------- | -------------------- | ------------------------------------------------------------ |
|
|
158
|
-
| OpenAI-compatible | `openai` | `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_MODEL` | OpenAI, Azure OpenAI, OpenRouter, ModelScope, Alibaba Cloud, any OpenAI-compatible endpoint |
|
|
159
|
-
| Anthropic | `anthropic` | `ANTHROPIC_API_KEY`, `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL` | Anthropic Claude
|
|
160
|
-
| Google GenAI | `gemini` | `GEMINI_API_KEY`, `GEMINI_MODEL` | Google Gemini
|
|
156
|
+
| Protocol | `modelProviders` key | Environment variables | Providers |
|
|
157
|
+
| ----------------- | -------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
|
|
158
|
+
| OpenAI-compatible | `openai` | `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_MODEL` | OpenAI, Azure OpenAI, OpenRouter, Requesty, ModelScope, Alibaba Cloud, any OpenAI-compatible endpoint |
|
|
159
|
+
| Anthropic | `anthropic` | `ANTHROPIC_API_KEY`, `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL` | Anthropic Claude |
|
|
160
|
+
| Google GenAI | `gemini` | `GEMINI_API_KEY`, `GEMINI_MODEL` | Google Gemini |
|
|
161
161
|
|
|
162
162
|
#### Step 1: Configure models and providers in `~/.qwen/settings.json`
|
|
163
163
|
|
|
@@ -315,6 +315,7 @@ The standalone `qwen auth` CLI command has been removed. Use these replacements
|
|
|
315
315
|
| Interactive authentication setup | Run `qwen`, then use `/auth` |
|
|
316
316
|
| Coding Plan setup | Use `/auth`, or set `BAILIAN_CODING_PLAN_API_KEY` with the Coding Plan base URL |
|
|
317
317
|
| OpenRouter setup | Use `/auth`, or set `OPENROUTER_API_KEY` and `OPENAI_BASE_URL=https://openrouter.ai/api/v1` |
|
|
318
|
+
| Requesty setup | Use `/auth`, or set `REQUESTY_API_KEY` and `OPENAI_BASE_URL=https://router.requesty.ai/v1` |
|
|
318
319
|
| API-key or custom provider setup | Configure `~/.qwen/settings.json`, `.env`, or provider-specific environment variables |
|
|
319
320
|
| Check current authentication | Run `/doctor` inside Qwen Code |
|
|
320
321
|
| OAuth browser flow | Run `qwen` interactively and use `/auth`; OAuth cannot be configured with env vars alone |
|
|
@@ -47,13 +47,14 @@ This means the `baseUrl` you configure should be compatible with the correspondi
|
|
|
47
47
|
|
|
48
48
|
### OpenAI-compatible providers (`openai`)
|
|
49
49
|
|
|
50
|
-
This auth type supports not only OpenAI's official API but also any OpenAI-compatible endpoint, including aggregated model providers like OpenRouter.
|
|
50
|
+
This auth type supports not only OpenAI's official API but also any OpenAI-compatible endpoint, including aggregated model providers like OpenRouter and Requesty.
|
|
51
51
|
|
|
52
52
|
```json
|
|
53
53
|
{
|
|
54
54
|
"env": {
|
|
55
55
|
"OPENAI_API_KEY": "sk-your-actual-openai-key-here",
|
|
56
|
-
"OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here"
|
|
56
|
+
"OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here",
|
|
57
|
+
"REQUESTY_API_KEY": "sk-your-actual-requesty-key-here"
|
|
57
58
|
},
|
|
58
59
|
"modelProviders": {
|
|
59
60
|
"openai": [
|
|
@@ -111,6 +112,19 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
111
112
|
"temperature": 0.7
|
|
112
113
|
}
|
|
113
114
|
}
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "openai/gpt-4o-mini",
|
|
118
|
+
"name": "GPT-4o Mini (via Requesty)",
|
|
119
|
+
"envKey": "REQUESTY_API_KEY",
|
|
120
|
+
"baseUrl": "https://router.requesty.ai/v1",
|
|
121
|
+
"generationConfig": {
|
|
122
|
+
"timeout": 120000,
|
|
123
|
+
"maxRetries": 3,
|
|
124
|
+
"samplingParams": {
|
|
125
|
+
"temperature": 0.7
|
|
126
|
+
}
|
|
127
|
+
}
|
|
114
128
|
}
|
|
115
129
|
]
|
|
116
130
|
}
|
|
@@ -111,13 +111,15 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
111
111
|
| `ui.showLineNumbers` | boolean | Show line numbers in code blocks in the CLI output. | `true` |
|
|
112
112
|
| `ui.renderMode` | string | Default Markdown display mode. Use `"render"` for rich visual previews or `"raw"` to show source-oriented Markdown by default. Toggle during a session with `Alt/Option+M`; on macOS the terminal must send Option as Meta. See [Markdown Rendering](../features/markdown-rendering). | `"render"` |
|
|
113
113
|
| `ui.showCitations` | boolean | Show citations for generated text in the chat. | `false` |
|
|
114
|
+
| `ui.history.collapseOnResume` | boolean | Whether to collapse history by default when resuming a session. Can be toggled via `/history collapse-on-resume` and `/history expand-on-resume`. | `false` |
|
|
114
115
|
| `ui.compactMode` | boolean | Hide tool output and thinking for a cleaner view. Toggle with `Ctrl+O` during a session or via the Settings dialog. Tool approval prompts are never hidden, even in compact mode. The setting persists across sessions. | `false` |
|
|
115
116
|
| `ui.shellOutputMaxLines` | number | Max number of shell output lines shown inline. Set to `0` to disable the cap and show full output. Hidden lines are surfaced via the `+N lines` indicator. Errors, `!`-prefix user-initiated commands, confirming tools, and focused embedded shells always show full output. | `5` |
|
|
116
117
|
| `ui.enableWelcomeBack` | boolean | Show welcome back dialog when returning to a project with conversation history. When enabled, Qwen Code will automatically detect if you're returning to a project with a previously generated project summary (`.qwen/PROJECT_SUMMARY.md`) and show a dialog allowing you to continue your previous conversation or start fresh. If you choose **Start new chat session**, that choice is remembered for the current project until the project summary changes. This feature integrates with the `/summary` command and quit confirmation dialog. | `true` |
|
|
117
118
|
| `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
|
|
118
119
|
| `ui.accessibility.screenReader` | boolean | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | `false` |
|
|
119
120
|
| `ui.customWittyPhrases` | array of strings | A list of custom phrases to display during loading states. When provided, the CLI will cycle through these phrases instead of the default ones. | `[]` |
|
|
120
|
-
| `ui.
|
|
121
|
+
| `ui.showResponseTokensPerSecond` | boolean | Show a live tokens/sec estimate next to the response token counter while the model is streaming. This is a generation-speed hint, not an ETA or completion percentage. Takes effect in the next session. | `false` |
|
|
122
|
+
| `ui.enableFollowupSuggestions` | boolean | Enable [followup suggestions](../features/followup-suggestions) that predict what you want to type next after the model responds. Suggestions appear as placeholder text and are accepted with Tab, Enter, or Right Arrow (which fill the input — they do not auto-submit). On by default; set to `false` to opt out. | `true` |
|
|
121
123
|
| `ui.enableCacheSharing` | boolean | Use cache-aware forked queries for suggestion generation. Reduces cost on providers that support prefix caching (experimental). | `true` |
|
|
122
124
|
| `ui.enableSpeculation` | boolean | Speculatively execute accepted suggestions before submission. Results appear instantly when you accept (experimental). | `false` |
|
|
123
125
|
| `experimental.emitToolUseSummaries` | boolean | Generate short LLM-based labels summarizing each tool-call batch. See [Tool-Use Summaries](../features/tool-use-summaries). Requires `fastModel` to be configured; silently skipped otherwise. Can be overridden per-session with `QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0` or `=1`. | `true` |
|
|
@@ -137,23 +139,23 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
137
139
|
|
|
138
140
|
#### model
|
|
139
141
|
|
|
140
|
-
| Setting | Type | Description
|
|
141
|
-
| -------------------------------------------------- | ------- |
|
|
142
|
-
| `model.name` | string | The Qwen model to use for conversations.
|
|
143
|
-
| `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited.
|
|
144
|
-
| `model.maxWallTimeSeconds` | number | Wall-clock budget for headless / unattended runs, in seconds. `-1` means unlimited. Overridable per-invocation via `--max-wall-time`, which requires a positive duration (`90`, `30s`, `5m`, `1h`, `1.5h`); the minimum is 1 second — sub-second values (`500ms`, `0.5`) are rejected as typos. Omit the flag to fall back to this setting. Aborts with exit code 55 when exceeded.
|
|
145
|
-
| `model.maxToolCalls` | number | Cumulative tool-call budget for a run (counts every executed tool, success or failure; `structured_output` under `--json-schema` is exempt). `-1` means unlimited; `0` means "no tool calls allowed". Capped at 1,000,000 to catch typos. Overridable via `--max-tool-calls`. Aborts with exit code 55 when exceeded.
|
|
146
|
-
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `enableCacheControl`, `splitToolMedia` (default `true`; splits tool-returned media — including images read by the built-in read_file — into a follow-up user message instead of the spec-violating `role: "tool"` message, so strict OpenAI-compatible servers like doubao / new-api / LM Studio can see it; set `false` to restore the legacy embed-in-tool behavior), `contextWindowSize` (override model's context window size), `modalities` (override auto-detected input modalities), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
|
147
|
-
| `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function — no longer user-configurable. Setting this field in `settings.json` is silently ignored (no startup warning). There is currently no replacement for "disable compression entirely" — reactive overflow recovery remains the safety net at the API layer if compression itself fails. (See PR #4345 / `docs/design/auto-compaction-threshold-redesign.md` for the redesign rationale.)
|
|
148
|
-
| `model.chatCompression.maxRecentFilesToRetain` | number | Number of most-recently-touched files whose current content is restored (embedded if small, otherwise referenced by path) into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_FILES`.
|
|
149
|
-
| `model.chatCompression.maxRecentImagesToRetain` | number | Number of most-recent images (tool screenshots / user pastes) restored into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_IMAGES`.
|
|
150
|
-
| `model.chatCompression.enableScreenshotTrigger` | boolean | When `true`, auto-compaction also fires once the number of tool-returned images accumulated in history reaches `screenshotTriggerThreshold`, independent of token usage — aimed at computer-use sessions where frequent screenshots dilute model attention. Counts only images returned inside tool results, not user-pasted images. Env override: `QWEN_COMPACT_SCREENSHOT_TRIGGER` (`1`/`true`/`0`/`false`).
|
|
151
|
-
| `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`.
|
|
152
|
-
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check.
|
|
153
|
-
| `model.skipLoopDetection` | boolean | Disables streaming loop detection checks. Defaults to `true` (loop detection is skipped) to avoid false positives interrupting legitimate workflows. Set to `false` to re-enable streaming loop detection — useful as a guardrail in headless / non-interactive runs where stuck repetition can otherwise waste budget.
|
|
154
|
-
| `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup.
|
|
155
|
-
| `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files.
|
|
156
|
-
| `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory).
|
|
142
|
+
| Setting | Type | Description | Default |
|
|
143
|
+
| -------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
144
|
+
| `model.name` | string | The Qwen model to use for conversations. | `undefined` |
|
|
145
|
+
| `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited. | `-1` |
|
|
146
|
+
| `model.maxWallTimeSeconds` | number | Wall-clock budget for headless / unattended runs, in seconds. `-1` means unlimited. Overridable per-invocation via `--max-wall-time`, which requires a positive duration (`90`, `30s`, `5m`, `1h`, `1.5h`); the minimum is 1 second — sub-second values (`500ms`, `0.5`) are rejected as typos. Omit the flag to fall back to this setting. Aborts with exit code 55 when exceeded. | `-1` |
|
|
147
|
+
| `model.maxToolCalls` | number | Cumulative tool-call budget for a run (counts every executed tool, success or failure; `structured_output` under `--json-schema` is exempt). `-1` means unlimited; `0` means "no tool calls allowed". Capped at 1,000,000 to catch typos. Overridable via `--max-tool-calls`. Aborts with exit code 55 when exceeded. | `-1` |
|
|
148
|
+
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `enableCacheControl`, `splitToolMedia` (default `true`; splits tool-returned media — including images read by the built-in read_file — into a follow-up user message instead of the spec-violating `role: "tool"` message, so strict OpenAI-compatible servers like doubao / new-api / LM Studio can see it; set `false` to restore the legacy embed-in-tool behavior), `toolResultContentFormat` (default `"parts"`; set `"string"` only for legacy OpenAI-compatible runtimes whose tool templates ignore text content parts), `contextWindowSize` (override model's context window size), `modalities` (override auto-detected input modalities), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
|
149
|
+
| `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function — no longer user-configurable. Setting this field in `settings.json` is silently ignored (no startup warning). There is currently no replacement for "disable compression entirely" — reactive overflow recovery remains the safety net at the API layer if compression itself fails. (See PR #4345 / `docs/design/auto-compaction-threshold-redesign.md` for the redesign rationale.) | `N/A` |
|
|
150
|
+
| `model.chatCompression.maxRecentFilesToRetain` | number | Number of most-recently-touched files whose current content is restored (embedded if small, otherwise referenced by path) into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_FILES`. | `5` |
|
|
151
|
+
| `model.chatCompression.maxRecentImagesToRetain` | number | Number of most-recent images (tool screenshots / user pastes) restored into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_IMAGES`. | `3` |
|
|
152
|
+
| `model.chatCompression.enableScreenshotTrigger` | boolean | When `true`, auto-compaction also fires once the number of tool-returned images accumulated in history reaches `screenshotTriggerThreshold`, independent of token usage — aimed at computer-use sessions where frequent screenshots dilute model attention. Counts only images returned inside tool results, not user-pasted images. Env override: `QWEN_COMPACT_SCREENSHOT_TRIGGER` (`1`/`true`/`0`/`false`). | `true` |
|
|
153
|
+
| `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`. | `50` |
|
|
154
|
+
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `true` |
|
|
155
|
+
| `model.skipLoopDetection` | boolean | Disables streaming loop detection checks. Defaults to `true` (loop detection is skipped) to avoid false positives interrupting legitimate workflows. Set to `false` to re-enable streaming loop detection — useful as a guardrail in headless / non-interactive runs where stuck repetition can otherwise waste budget. | `true` |
|
|
156
|
+
| `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup. | `false` |
|
|
157
|
+
| `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files. | `false` |
|
|
158
|
+
| `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory). | `undefined` |
|
|
157
159
|
|
|
158
160
|
**Example model.generationConfig:**
|
|
159
161
|
|
|
@@ -167,6 +169,7 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
167
169
|
"image": true
|
|
168
170
|
},
|
|
169
171
|
"enableCacheControl": true,
|
|
172
|
+
"toolResultContentFormat": "parts",
|
|
170
173
|
"customHeaders": {
|
|
171
174
|
"X-Client-Request-ID": "req-123"
|
|
172
175
|
},
|
|
@@ -195,6 +198,10 @@ This is transparent to users — you may briefly see a retry indicator if escala
|
|
|
195
198
|
|
|
196
199
|
To override this behavior, either set `samplingParams.max_tokens` in your settings or use the `QWEN_CODE_MAX_OUTPUT_TOKENS` environment variable.
|
|
197
200
|
|
|
201
|
+
**toolResultContentFormat:**
|
|
202
|
+
|
|
203
|
+
Controls how text-only tool results are serialized in OpenAI-compatible requests. The default `"parts"` keeps the standard content-part array shape. Set `"string"` only for legacy OpenAI-compatible runtimes whose tool templates ignore text content parts, such as older GLM-5.1 vLLM/SGLang templates. Tool-returned media is still controlled by `splitToolMedia`.
|
|
204
|
+
|
|
198
205
|
**contextWindowSize:**
|
|
199
206
|
|
|
200
207
|
Overrides the default context window size for the selected model. Qwen Code determines the context window using built-in defaults based on model name matching, with a constant fallback value. Use this setting when a provider's effective context limit differs from Qwen Code's default. This value defines the model's assumed maximum context capacity, not a per-request token limit.
|
|
@@ -573,32 +580,32 @@ For authentication-related variables (like `OPENAI_*`) and the recommended `.qwe
|
|
|
573
580
|
|
|
574
581
|
### Environment Variables Table
|
|
575
582
|
|
|
576
|
-
| Variable | Description
|
|
577
|
-
| -------------------------------------------------- |
|
|
578
|
-
| `QWEN_HOME` | Customizes the global configuration directory (default: `~/.qwen`). Accepts an absolute or relative path (relative paths are resolved from the current working directory). Leading `~` is expanded to the user's home directory.
|
|
579
|
-
| `QWEN_RUNTIME_DIR` | Overrides the runtime output directory (conversations, logs, todos). When unset, defaults to the `QWEN_HOME` directory.
|
|
580
|
-
| `QWEN_TELEMETRY_ENABLED` | Set to `true` or `1` to enable telemetry. Any other value is treated as disabling it.
|
|
581
|
-
| `QWEN_TELEMETRY_TARGET` | Sets an informational label for the telemetry destination (`local` or `gcp`). Does not control routing; use `QWEN_TELEMETRY_OTLP_ENDPOINT` or `QWEN_TELEMETRY_OUTFILE` to configure where data is sent.
|
|
582
|
-
| `QWEN_TELEMETRY_OTLP_ENDPOINT` | Sets the OTLP endpoint for telemetry.
|
|
583
|
-
| `QWEN_TELEMETRY_OTLP_PROTOCOL` | Sets the OTLP protocol (`grpc` or `http`).
|
|
584
|
-
| `QWEN_TELEMETRY_LOG_PROMPTS` | Set to `true` or `1` to enable or disable logging of user prompts. Any other value is treated as disabling it.
|
|
585
|
-
| `QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES` | Set to `true` or `1` to attach verbatim user prompts, system prompts, tool I/O, and model responses to native OTel span attributes (and keep `prompt` / `function_args` / `response_text` on log-to-span bridge spans). Any other value disables it.
|
|
586
|
-
| `QWEN_TELEMETRY_OUTFILE` | Sets the file path to write telemetry to. When set, overrides OTLP export.
|
|
587
|
-
| `QWEN_SANDBOX` | Alternative to the `sandbox` setting in `settings.json`.
|
|
588
|
-
| `QWEN_SANDBOX_IMAGE` | Overrides sandbox image selection for Docker/Podman.
|
|
589
|
-
| `SEATBELT_PROFILE` | (macOS specific) Switches the Seatbelt (`sandbox-exec`) profile on macOS.
|
|
590
|
-
| `DEBUG` or `DEBUG_MODE` | (often used by underlying libraries or the CLI itself) Set to `true` or `1` to enable verbose debug logging, which can be helpful for troubleshooting.
|
|
591
|
-
| `NO_COLOR` | Set to any value to disable all color output in the CLI.
|
|
592
|
-
| `FORCE_HYPERLINK` | Override the OSC 8 clickable-link detection in the markdown renderer. Set to `1` (or any non-zero
|
|
593
|
-
| `QWEN_DISABLE_HYPERLINKS` | Set to `1` to hard-disable OSC 8 clickable hyperlinks in the markdown renderer even on terminals that auto-detect as capable.
|
|
594
|
-
| `CLI_TITLE` | Set to a string to customize the title of the CLI.
|
|
595
|
-
| `CODE_ASSIST_ENDPOINT` | Specifies the endpoint for the code assist server.
|
|
596
|
-
| `QWEN_CODE_MAX_OUTPUT_TOKENS` | Overrides the default maximum output tokens per response. When not set, Qwen Code uses an adaptive strategy: starts with 8K tokens and automatically retries with 64K if the response is truncated. Set this to a specific value (e.g., `16000`) to use a fixed limit instead.
|
|
597
|
-
| `QWEN_CODE_UNATTENDED_RETRY` | Set to `true` or `1` to enable persistent retry mode. When enabled, transient API capacity errors (HTTP 429 Rate Limit and 529 Overloaded) are retried indefinitely with exponential backoff (capped at 5 minutes per retry) and heartbeat keepalives every 30 seconds on stderr.
|
|
598
|
-
| `QWEN_CODE_PROFILE_STARTUP` | Set to `1` to enable startup performance profiling. Writes a JSON timing report to `~/.qwen/startup-perf/` with per-phase durations.
|
|
599
|
-
| `QWEN_CODE_PROFILE_STARTUP_OUTER` | Set to `1` together with `QWEN_CODE_PROFILE_STARTUP=1` to also collect a startup profile in the outer (pre-sandbox) process. Outer-process reports get an `outer-` filename prefix to keep them distinct from the sandbox child's report.
|
|
600
|
-
| `QWEN_CODE_PROFILE_STARTUP_NO_HEAP` | Set to `1` together with `QWEN_CODE_PROFILE_STARTUP=1` to skip the per-checkpoint `process.memoryUsage()` snapshots. Useful when measuring the profiler's own Heisenberg overhead.
|
|
601
|
-
| `QWEN_CODE_LEGACY_MCP_BLOCKING` | Set to `1` to restore the pre-progressive-MCP behavior where `Config.initialize()` waits synchronously for every configured MCP server's discover handshake before returning.
|
|
583
|
+
| Variable | Description | Notes |
|
|
584
|
+
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
585
|
+
| `QWEN_HOME` | Customizes the global configuration directory (default: `~/.qwen`). Accepts an absolute or relative path (relative paths are resolved from the current working directory). Leading `~` is expanded to the user's home directory. | Stores credentials, settings, memory, skills, and other global state. When set, project-level `.qwen/` directories are unaffected. An empty string is treated as unset. |
|
|
586
|
+
| `QWEN_RUNTIME_DIR` | Overrides the runtime output directory (conversations, logs, todos). When unset, defaults to the `QWEN_HOME` directory. | Use this to separate ephemeral runtime data from persistent config. Useful when `QWEN_HOME` is on a shared/slow filesystem. |
|
|
587
|
+
| `QWEN_TELEMETRY_ENABLED` | Set to `true` or `1` to enable telemetry. Any other value is treated as disabling it. | Overrides the `telemetry.enabled` setting. |
|
|
588
|
+
| `QWEN_TELEMETRY_TARGET` | Sets an informational label for the telemetry destination (`local` or `gcp`). Does not control routing; use `QWEN_TELEMETRY_OTLP_ENDPOINT` or `QWEN_TELEMETRY_OUTFILE` to configure where data is sent. | Overrides the `telemetry.target` setting. |
|
|
589
|
+
| `QWEN_TELEMETRY_OTLP_ENDPOINT` | Sets the OTLP endpoint for telemetry. | Overrides the `telemetry.otlpEndpoint` setting. |
|
|
590
|
+
| `QWEN_TELEMETRY_OTLP_PROTOCOL` | Sets the OTLP protocol (`grpc` or `http`). | Overrides the `telemetry.otlpProtocol` setting. |
|
|
591
|
+
| `QWEN_TELEMETRY_LOG_PROMPTS` | Set to `true` or `1` to enable or disable logging of user prompts. Any other value is treated as disabling it. | Overrides the `telemetry.logPrompts` setting. |
|
|
592
|
+
| `QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES` | Set to `true` or `1` to attach verbatim user prompts, system prompts, tool I/O, and model responses to native OTel span attributes (and keep `prompt` / `function_args` / `response_text` on log-to-span bridge spans). Any other value disables it. | Overrides the `telemetry.includeSensitiveSpanAttributes` setting. ⚠️ Streams sensitive data to your OTLP backend. |
|
|
593
|
+
| `QWEN_TELEMETRY_OUTFILE` | Sets the file path to write telemetry to. When set, overrides OTLP export. | Overrides the `telemetry.outfile` setting. |
|
|
594
|
+
| `QWEN_SANDBOX` | Alternative to the `sandbox` setting in `settings.json`. | Accepts `true`, `false`, `docker`, `podman`, or a custom command string. |
|
|
595
|
+
| `QWEN_SANDBOX_IMAGE` | Overrides sandbox image selection for Docker/Podman. | Takes precedence over `tools.sandboxImage`. |
|
|
596
|
+
| `SEATBELT_PROFILE` | (macOS specific) Switches the Seatbelt (`sandbox-exec`) profile on macOS. | `permissive-open`: (Default) Restricts writes to the project folder (and a few other folders, see `packages/cli/src/utils/sandbox-macos-permissive-open.sb`) but allows other operations. `strict`: Uses a strict profile that declines operations by default. `<profile_name>`: Uses a custom profile. To define a custom profile, create a file named `sandbox-macos-<profile_name>.sb` in your project's `.qwen/` directory (e.g., `my-project/.qwen/sandbox-macos-custom.sb`). |
|
|
597
|
+
| `DEBUG` or `DEBUG_MODE` | (often used by underlying libraries or the CLI itself) Set to `true` or `1` to enable verbose debug logging, which can be helpful for troubleshooting. | **Note:** These variables are automatically excluded from project `.env` files by default to prevent interference with the CLI behavior. Use `.qwen/.env` files if you need to set these for Qwen Code specifically. |
|
|
598
|
+
| `NO_COLOR` | Set to any value to disable all color output in the CLI. | |
|
|
599
|
+
| `FORCE_HYPERLINK` | Override the OSC 8 clickable-link detection in the markdown renderer. Set to `1` (or any non-zero integer, or empty string) to force-enable; set to `0` or a non-numeric value such as `false` / `off` to force-disable. Honors `NO_COLOR` / `QWEN_DISABLE_HYPERLINKS` opt-outs above it. | Use this to opt into OSC 8 inside `tmux` / GNU `screen` (auto-detection refuses by default because the host terminal's capabilities are hidden behind the multiplexer). Requires `set -g allow-passthrough on` on tmux 3.3+. Also enables Hyper, which isn't auto-detected. |
|
|
600
|
+
| `QWEN_DISABLE_HYPERLINKS` | Set to `1` to hard-disable OSC 8 clickable hyperlinks in the markdown renderer even on terminals that auto-detect as capable. | Useful when a terminal advertises support but breaks on long URLs, or when piping output through an intermediary that mangles escape sequences. The renderer falls back to plain `label (url)` rendering. |
|
|
601
|
+
| `CLI_TITLE` | Set to a string to customize the title of the CLI. | |
|
|
602
|
+
| `CODE_ASSIST_ENDPOINT` | Specifies the endpoint for the code assist server. | This is useful for development and testing. |
|
|
603
|
+
| `QWEN_CODE_MAX_OUTPUT_TOKENS` | Overrides the default maximum output tokens per response. When not set, Qwen Code uses an adaptive strategy: starts with 8K tokens and automatically retries with 64K if the response is truncated. Set this to a specific value (e.g., `16000`) to use a fixed limit instead. | Takes precedence over the capped default (8K) but is overridden by `samplingParams.max_tokens` in settings. Disables automatic escalation when set. Example: `export QWEN_CODE_MAX_OUTPUT_TOKENS=16000` |
|
|
604
|
+
| `QWEN_CODE_UNATTENDED_RETRY` | Set to `true` or `1` to enable persistent retry mode. When enabled, transient API capacity errors (HTTP 429 Rate Limit and 529 Overloaded) are retried indefinitely with exponential backoff (capped at 5 minutes per retry) and heartbeat keepalives every 30 seconds on stderr. | Designed for CI/CD pipelines and background automation where long-running tasks should survive temporary API outages. Must be set explicitly — `CI=true` alone does **not** activate this mode. See [Headless Mode](../features/headless#persistent-retry-mode) for details. Example: `export QWEN_CODE_UNATTENDED_RETRY=1` |
|
|
605
|
+
| `QWEN_CODE_PROFILE_STARTUP` | Set to `1` to enable startup performance profiling. Writes a JSON timing report to `~/.qwen/startup-perf/` with per-phase durations. | Only active inside the sandbox child process (or with `QWEN_CODE_PROFILE_STARTUP_OUTER=1`). Zero overhead when not set. Example: `export QWEN_CODE_PROFILE_STARTUP=1` |
|
|
606
|
+
| `QWEN_CODE_PROFILE_STARTUP_OUTER` | Set to `1` together with `QWEN_CODE_PROFILE_STARTUP=1` to also collect a startup profile in the outer (pre-sandbox) process. Outer-process reports get an `outer-` filename prefix to keep them distinct from the sandbox child's report. | Off by default — only the sandbox child collects, to avoid duplicate reports. Useful for local development where the cli isn't relaunched into a sandbox. |
|
|
607
|
+
| `QWEN_CODE_PROFILE_STARTUP_NO_HEAP` | Set to `1` together with `QWEN_CODE_PROFILE_STARTUP=1` to skip the per-checkpoint `process.memoryUsage()` snapshots. Useful when measuring the profiler's own Heisenberg overhead. | Off by default. Heap snapshots cost ~50 µs each (well below 1% of total startup) so most users should leave this alone. |
|
|
608
|
+
| `QWEN_CODE_LEGACY_MCP_BLOCKING` | Set to `1` to restore the pre-progressive-MCP behavior where `Config.initialize()` waits synchronously for every configured MCP server's discover handshake before returning. | Off by default. Modern qwen-code lets MCP servers come online in the background while the UI is already interactive; the model sees each batch of new tools within ~16 ms of the server settling. This flag is kept as a rollback escape hatch for ≥ 1 release. Example: `export QWEN_CODE_LEGACY_MCP_BLOCKING=1` |
|
|
602
609
|
|
|
603
610
|
When both user-level `.env` files define the same variable, the Qwen-specific
|
|
604
611
|
file wins: `<QWEN_HOME>/.env` (or `~/.qwen/.env` when `QWEN_HOME` is unset) is
|