@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.
Files changed (511) hide show
  1. package/README.md +64 -492
  2. package/bundled/loop/SKILL.md +53 -26
  3. package/bundled/loop/SKILL.test.ts +67 -0
  4. package/bundled/qc-helper/docs/configuration/auth.md +7 -6
  5. package/bundled/qc-helper/docs/configuration/model-providers.md +16 -2
  6. package/bundled/qc-helper/docs/configuration/settings.md +51 -44
  7. package/bundled/qc-helper/docs/extension/introduction.md +38 -0
  8. package/bundled/qc-helper/docs/features/approval-mode.md +2 -0
  9. package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  10. package/bundled/qc-helper/docs/features/channels/overview.md +4 -4
  11. package/bundled/qc-helper/docs/features/channels/qqbot.md +179 -0
  12. package/bundled/qc-helper/docs/features/commands.md +49 -0
  13. package/bundled/qc-helper/docs/features/followup-suggestions.md +10 -6
  14. package/bundled/qc-helper/docs/features/hooks.md +6 -3
  15. package/bundled/qc-helper/docs/features/status-line.md +4 -2
  16. package/bundled/qc-helper/docs/qwen-serve.md +9 -4
  17. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +11 -5
  18. package/bundled/qc-helper/docs/support/troubleshooting.md +5 -0
  19. package/chunks/{agent-P5U6QLWL.js → agent-66UJLGYF.js} +24 -23
  20. package/chunks/{agent-headless-24356DC7.js → agent-headless-XWKLG7OO.js} +24 -23
  21. package/chunks/{anthropicContentGenerator-KLBHYGH6.js → anthropicContentGenerator-5S4OMMNL.js} +9 -7
  22. package/chunks/{askUserQuestion-QPZXR3UO.js → askUserQuestion-WHVYL2S2.js} +2 -2
  23. package/chunks/{ca-RK4QPLIX.js → ca-K6MD665I.js} +42 -2
  24. package/chunks/{chunk-WPTCDQN6.js → chunk-26ZYKTYZ.js} +2 -2
  25. package/chunks/{chunk-O4PICXES.js → chunk-2MPVVENX.js} +14 -6
  26. package/chunks/{chunk-VIEIRAK3.js → chunk-2O3NAOJG.js} +4 -2
  27. package/chunks/{chunk-NNIYWQIS.js → chunk-42HGOMED.js} +2 -1
  28. package/chunks/{chunk-B4ZF2KSI.js → chunk-AE6RQU6F.js} +2 -2
  29. package/chunks/{chunk-FIQECJTQ.js → chunk-ATLUHLZE.js} +1 -1
  30. package/chunks/{chunk-BJ5HQ23U.js → chunk-C6MI2ASN.js} +9 -10
  31. package/chunks/{chunk-LYRSMKLS.js → chunk-CTHZVIMD.js} +2 -2
  32. package/chunks/{chunk-MN5RAXVB.js → chunk-CX3SGIPK.js} +18 -6
  33. package/chunks/{chunk-IQHSD7K5.js → chunk-FH4P6RQA.js} +1 -1
  34. package/chunks/{chunk-LYSND7KR.js → chunk-G4BUMVEY.js} +12 -2
  35. package/chunks/{chunk-YJDVHAGL.js → chunk-GBN55AWZ.js} +2 -2
  36. package/chunks/{chunk-ZNUMXPNK.js → chunk-GOMVJKBL.js} +7 -3
  37. package/chunks/{chunk-NGDXHX3A.js → chunk-GRVAP37P.js} +63 -11
  38. package/chunks/{chunk-CPVI5J2L.js → chunk-ID533GA3.js} +1 -1
  39. package/chunks/{chunk-VU6A2OBJ.js → chunk-JXQ23SNT.js} +217 -219
  40. package/chunks/{chunk-ZMIBJS45.js → chunk-KGV3F6UF.js} +1 -1
  41. package/chunks/{chunk-SFRV6BGY.js → chunk-LF6BKGZT.js} +3 -3
  42. package/chunks/{chunk-LXYWINWF.js → chunk-LTN3VYMZ.js} +1 -1
  43. package/chunks/{chunk-IDYDPBBN.js → chunk-MSJ2MXJ6.js} +3 -3
  44. package/chunks/{chunk-25FFAMED.js → chunk-NLCTUNOS.js} +1048 -295
  45. package/chunks/{chunk-JZEKEWO5.js → chunk-TOSAOARP.js} +6 -6
  46. package/chunks/{chunk-M7OBURJM.js → chunk-VIA5MAE5.js} +24 -12
  47. package/chunks/{chunk-RTTAC5VW.js → chunk-VKILGMZQ.js} +1 -1
  48. package/chunks/{chunk-QFJ67S5R.js → chunk-VN7FXOAW.js} +732 -617
  49. package/chunks/{chunk-HA2UEYZP.js → chunk-WE6TNQJU.js} +13 -6
  50. package/chunks/chunk-XGU3ETVO.js +1026 -0
  51. package/chunks/{chunk-ZOFNJQNJ.js → chunk-XU7BKR3B.js} +3 -3
  52. package/chunks/{chunk-QP4R5FTG.js → chunk-Z7XXFPGP.js} +4 -3
  53. package/chunks/{chunk-TW522KN6.js → chunk-ZTQ26VBE.js} +13 -6
  54. package/chunks/{chunk-EQ5NHJBY.js → chunk-ZV5QED4A.js} +109573 -106663
  55. package/chunks/{computer-use-EGW2I2HZ.js → computer-use-5AHVGVR3.js} +26 -24
  56. package/chunks/contextCommand-PTDKJROT.js +54 -0
  57. package/chunks/{cron-create-DQKRQMCP.js → cron-create-THNDTYXU.js} +6 -6
  58. package/chunks/{cron-delete-DOFPHFTI.js → cron-delete-BS5H6TFJ.js} +6 -6
  59. package/chunks/{cron-list-RCVOO3CB.js → cron-list-7OBVHT7K.js} +24 -10
  60. package/chunks/{de-FGPM4KW5.js → de-K2F3T3TR.js} +41 -1
  61. package/chunks/{dist-2UCAYOX7.js → dist-BD27IA3L.js} +16 -5
  62. package/chunks/{dist-UH7CYT7F.js → dist-DZ6AJDX4.js} +52 -11
  63. package/chunks/{dist-KF43SZZV.js → dist-GKRNVFBH.js} +5 -1
  64. package/chunks/{dist-33LHH26D.js → dist-KIYB7DQW.js} +1 -1
  65. package/chunks/dist-QFFZWACU.js +2136 -0
  66. package/chunks/{edit-FJSOCDO2.js → edit-ADXZN3M7.js} +26 -27
  67. package/chunks/{en-VP6XPGEC.js → en-KGSAKBJP.js} +232 -0
  68. package/chunks/{enter-worktree-X6MVFDLR.js → enter-worktree-F5SJSHNH.js} +24 -23
  69. package/chunks/{enterPlanMode-MZAEQZH3.js → enterPlanMode-MCQ4HWPP.js} +52 -28
  70. package/chunks/{exit-worktree-RM2UPOYQ.js → exit-worktree-26AFS3YQ.js} +191 -41
  71. package/chunks/{exitPlanMode-7BVY3CWJ.js → exitPlanMode-UOPIPSEA.js} +85 -46
  72. package/chunks/{fr-ATYBVCLT.js → fr-2CAQEOK6.js} +41 -1
  73. package/chunks/{geminiContentGenerator-A6JHLUHK.js → geminiContentGenerator-RJA7BIHQ.js} +4 -4
  74. package/chunks/{glob-L3AZLCV6.js → glob-AWTDID4C.js} +26 -24
  75. package/chunks/{grep-SNCPCXIP.js → grep-QJ5TEMYZ.js} +96 -43
  76. package/chunks/{ja-W2QEA2OI.js → ja-QWL7V6OJ.js} +41 -1
  77. package/chunks/{keychain-token-storage-QSTRHKKL.js → keychain-token-storage-YHXIWXIB.js} +2 -2
  78. package/chunks/loop-wakeup-SSBWZ64K.js +167 -0
  79. package/chunks/{ls-TRD77UTS.js → ls-YPFUHZRQ.js} +3 -3
  80. package/chunks/{lsp-2VFWQPZS.js → lsp-FD6DNVAF.js} +2 -2
  81. package/chunks/{monitor-TS6WL6DN.js → monitor-SQYLCQAK.js} +24 -23
  82. package/chunks/{notebook-edit-26RNH24J.js → notebook-edit-7RR3ABQ5.js} +25 -26
  83. package/chunks/{openaiContentGenerator-7CA63X5G.js → openaiContentGenerator-2CHXJZ4A.js} +14 -11
  84. package/chunks/{pt-ZKEWJFBW.js → pt-2SPOLMAY.js} +41 -1
  85. package/chunks/{qwenContentGenerator-4WJTJXFZ.js → qwenContentGenerator-ZXEKDN2J.js} +27 -26
  86. package/chunks/{qwenOAuth2-KK433U33.js → qwenOAuth2-WZ54YZ4J.js} +4 -4
  87. package/chunks/{read-file-EUIHK6HD.js → read-file-AZAKLZFP.js} +9 -8
  88. package/chunks/{ripGrep-7J5B22W2.js → ripGrep-T5PS4VWB.js} +24 -23
  89. package/chunks/{ru-VEKTPJ74.js → ru-35IVJTEH.js} +41 -1
  90. package/chunks/{scheduler-J3OUGTTS.js → scheduler-VZ5KYSX6.js} +24 -23
  91. package/chunks/{send-message-QZOC5GA2.js → send-message-FWFTX62Q.js} +2 -2
  92. package/chunks/{serve-VF4ZNUJP.js → serve-RN6CHKG3.js} +1308 -291
  93. package/chunks/{shell-G6XCJAG3.js → shell-ANALFMWT.js} +24 -23
  94. package/chunks/{skill-7OVC6JIH.js → skill-JIKQTL4U.js} +11 -10
  95. package/chunks/{src-XV5MLRND.js → src-EMRXVZY7.js} +159 -59
  96. package/chunks/{syntheticOutput-WJSUK4SZ.js → syntheticOutput-JY5NEDTV.js} +3 -3
  97. package/chunks/{task-create-GGSC27HO.js → task-create-IGILDV25.js} +7 -7
  98. package/chunks/{task-list-EDHHHSK4.js → task-list-KBEJVAAG.js} +6 -6
  99. package/chunks/{task-stop-WR5PDVZY.js → task-stop-WFTMQ6AC.js} +2 -2
  100. package/chunks/{task-update-UR7NUHBV.js → task-update-UIVX7ZEV.js} +7 -7
  101. package/chunks/{team-create-JXSC7ROC.js → team-create-BVKQF4WK.js} +26 -25
  102. package/chunks/{team-delete-FC33URJK.js → team-delete-LPOXDPVB.js} +6 -6
  103. package/chunks/{todoWrite-GO2ME7ZV.js → todoWrite-R4RIJKOD.js} +4 -4
  104. package/chunks/{tool-search-YRWSWA2H.js → tool-search-E4VYDNQO.js} +9 -8
  105. package/chunks/{web-fetch-NLLATYIL.js → web-fetch-JU7SS6KE.js} +5 -5
  106. package/chunks/{workflow-ZN3DYFMU.js → workflow-VDPJJYAF.js} +242 -39
  107. package/chunks/{write-file-355M4V7Z.js → write-file-NCN66V2C.js} +26 -27
  108. package/chunks/{zh-TW-6YFNCKTA.js → zh-TW-BSG6BUWK.js} +232 -2
  109. package/chunks/{zh-OIXDDQHB.js → zh-X4KM6MTW.js} +233 -0
  110. package/cli.js +11094 -5768
  111. package/examples/agent/agents/diary.md +1 -1
  112. package/examples/mcp-server/qwen-extension.json +8 -1
  113. package/examples/starter/agents/diary.md +1 -1
  114. package/locales/ca.js +67 -2
  115. package/locales/de.js +68 -2
  116. package/locales/en.js +304 -0
  117. package/locales/fr.js +69 -2
  118. package/locales/ja.js +65 -2
  119. package/locales/pt.js +67 -2
  120. package/locales/ru.js +68 -2
  121. package/locales/zh-TW.js +288 -2
  122. package/locales/zh.js +288 -0
  123. package/package.json +4 -3
  124. package/web-shell/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  125. package/web-shell/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  126. package/web-shell/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  127. package/web-shell/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  128. package/web-shell/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  129. package/web-shell/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  130. package/web-shell/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  131. package/web-shell/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  132. package/web-shell/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  133. package/web-shell/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  134. package/web-shell/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  135. package/web-shell/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  136. package/web-shell/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  137. package/web-shell/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  138. package/web-shell/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  139. package/web-shell/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  140. package/web-shell/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  141. package/web-shell/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  142. package/web-shell/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  143. package/web-shell/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  144. package/web-shell/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  145. package/web-shell/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  146. package/web-shell/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  147. package/web-shell/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  148. package/web-shell/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  149. package/web-shell/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  150. package/web-shell/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  151. package/web-shell/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  152. package/web-shell/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  153. package/web-shell/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  154. package/web-shell/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  155. package/web-shell/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  156. package/web-shell/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  157. package/web-shell/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  158. package/web-shell/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  159. package/web-shell/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  160. package/web-shell/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  161. package/web-shell/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  162. package/web-shell/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  163. package/web-shell/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  164. package/web-shell/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  165. package/web-shell/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  166. package/web-shell/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  167. package/web-shell/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  168. package/web-shell/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  169. package/web-shell/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  170. package/web-shell/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  171. package/web-shell/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  172. package/web-shell/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  173. package/web-shell/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  174. package/web-shell/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  175. package/web-shell/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  176. package/web-shell/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  177. package/web-shell/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  178. package/web-shell/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  179. package/web-shell/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  180. package/web-shell/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  181. package/web-shell/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  182. package/web-shell/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  183. package/web-shell/assets/abap-DsBKuouk.js +1 -0
  184. package/web-shell/assets/actionscript-3-D_z4Izcz.js +1 -0
  185. package/web-shell/assets/ada-727ZlQH0.js +1 -0
  186. package/web-shell/assets/andromeeda-C3khCPGq.js +1 -0
  187. package/web-shell/assets/angular-html-LfdN0zeE.js +1 -0
  188. package/web-shell/assets/angular-ts-CKsD7JZE.js +1 -0
  189. package/web-shell/assets/apache-Dn00JSTd.js +1 -0
  190. package/web-shell/assets/apex-COJ4H7py.js +1 -0
  191. package/web-shell/assets/apl-BBq3IX1j.js +1 -0
  192. package/web-shell/assets/applescript-Bu5BbsvL.js +1 -0
  193. package/web-shell/assets/ara-7O62HKoU.js +1 -0
  194. package/web-shell/assets/arc-CRFN10gD.js +1 -0
  195. package/web-shell/assets/architectureDiagram-3BPJPVTR-IRlu1CpH.js +36 -0
  196. package/web-shell/assets/asciidoc-BPT9niGB.js +1 -0
  197. package/web-shell/assets/asm-Dhn9LcZ4.js +1 -0
  198. package/web-shell/assets/astro-CqkE3fuf.js +1 -0
  199. package/web-shell/assets/aurora-x-D-2ljcwZ.js +1 -0
  200. package/web-shell/assets/awk-eg146-Ew.js +1 -0
  201. package/web-shell/assets/ayu-dark-Cv9koXgw.js +1 -0
  202. package/web-shell/assets/ballerina-Du268qiB.js +1 -0
  203. package/web-shell/assets/bat-fje9CFhw.js +1 -0
  204. package/web-shell/assets/beancount-BwXTMy5W.js +1 -0
  205. package/web-shell/assets/berry-3xVqZejG.js +1 -0
  206. package/web-shell/assets/bibtex-xW4inM5L.js +1 -0
  207. package/web-shell/assets/bicep-DHo0CJ0O.js +1 -0
  208. package/web-shell/assets/blade-a8OxSdnT.js +1 -0
  209. package/web-shell/assets/blockDiagram-GPEHLZMM-htIZ6iw8.js +132 -0
  210. package/web-shell/assets/bsl-Dgyn0ogV.js +1 -0
  211. package/web-shell/assets/c-C3t2pwGQ.js +1 -0
  212. package/web-shell/assets/c4Diagram-AAUBKEIU-A2GoRq3O.js +10 -0
  213. package/web-shell/assets/cadence-DNquZEk8.js +1 -0
  214. package/web-shell/assets/cairo--RitsXJZ.js +1 -0
  215. package/web-shell/assets/catppuccin-frappe-CD_QflpE.js +1 -0
  216. package/web-shell/assets/catppuccin-latte-DRW-0cLl.js +1 -0
  217. package/web-shell/assets/catppuccin-macchiato-C-_shW-Y.js +1 -0
  218. package/web-shell/assets/catppuccin-mocha-LGGdnPYs.js +1 -0
  219. package/web-shell/assets/channel-WwImfsc7.js +1 -0
  220. package/web-shell/assets/chunk-2J33WTMH-CdP2AC6u.js +1 -0
  221. package/web-shell/assets/chunk-4BX2VUAB-DrA07nW2.js +1 -0
  222. package/web-shell/assets/chunk-55IACEB6-CFGnVU2f.js +1 -0
  223. package/web-shell/assets/chunk-727SXJPM-BTMkq3Tk.js +206 -0
  224. package/web-shell/assets/chunk-AQP2D5EJ-C9sYg04Z.js +231 -0
  225. package/web-shell/assets/chunk-FMBD7UC4-Cag-cj6I.js +15 -0
  226. package/web-shell/assets/chunk-ND2GUHAM-CDSTFoR7.js +1 -0
  227. package/web-shell/assets/chunk-QZHKN3VN-CN9Z6oOs.js +1 -0
  228. package/web-shell/assets/clarity-BHOwM8T6.js +1 -0
  229. package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +1 -0
  230. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +1 -0
  231. package/web-shell/assets/clojure-DxSadP1t.js +1 -0
  232. package/web-shell/assets/cmake-DbXoA79R.js +1 -0
  233. package/web-shell/assets/cobol-PTqiYgYu.js +1 -0
  234. package/web-shell/assets/codeowners-Bp6g37R7.js +1 -0
  235. package/web-shell/assets/codeql-sacFqUAJ.js +1 -0
  236. package/web-shell/assets/coffee-dyiR41kL.js +1 -0
  237. package/web-shell/assets/common-lisp-C7gG9l05.js +1 -0
  238. package/web-shell/assets/coq-Dsg_Bt_b.js +1 -0
  239. package/web-shell/assets/cose-bilkent-S5V4N54A-DuN9j8Du.js +1 -0
  240. package/web-shell/assets/cpp-BksuvNSY.js +1 -0
  241. package/web-shell/assets/crystal-DtDmRg-F.js +1 -0
  242. package/web-shell/assets/csharp-D9R-vmeu.js +1 -0
  243. package/web-shell/assets/css-BPhBrDlE.js +1 -0
  244. package/web-shell/assets/csv-B0qRVHPH.js +1 -0
  245. package/web-shell/assets/cue-DtFQj3wx.js +1 -0
  246. package/web-shell/assets/cypher-m2LEI-9-.js +1 -0
  247. package/web-shell/assets/cytoscape.esm-CUqq0XTU.js +331 -0
  248. package/web-shell/assets/d-BoXegm-a.js +1 -0
  249. package/web-shell/assets/dagre-BM42HDAG-ByCWe45f.js +4 -0
  250. package/web-shell/assets/dark-plus-C3mMm8J8.js +1 -0
  251. package/web-shell/assets/dart-B9wLZaAG.js +1 -0
  252. package/web-shell/assets/dax-ClGRhx96.js +1 -0
  253. package/web-shell/assets/defaultLocale-DX6XiGOO.js +1 -0
  254. package/web-shell/assets/desktop-DEIpsLCJ.js +1 -0
  255. package/web-shell/assets/diagram-2AECGRRQ-eWyU_pKZ.js +43 -0
  256. package/web-shell/assets/diagram-5GNKFQAL-0Bfu3Fq5.js +10 -0
  257. package/web-shell/assets/diagram-KO2AKTUF-B6KBKkQP.js +3 -0
  258. package/web-shell/assets/diagram-LMA3HP47-TToDmeA_.js +24 -0
  259. package/web-shell/assets/diagram-OG6HWLK6-CQCkC2Yx.js +24 -0
  260. package/web-shell/assets/diff-BgYniUM_.js +1 -0
  261. package/web-shell/assets/docker-COcR7UxN.js +1 -0
  262. package/web-shell/assets/dotenv-BjQB5zDj.js +1 -0
  263. package/web-shell/assets/dracula-BzJJZx-M.js +1 -0
  264. package/web-shell/assets/dracula-soft-BXkSAIEj.js +1 -0
  265. package/web-shell/assets/dream-maker-C-nORZOA.js +1 -0
  266. package/web-shell/assets/edge-D5gP-w-T.js +1 -0
  267. package/web-shell/assets/elixir-CLiX3zqd.js +1 -0
  268. package/web-shell/assets/elm-CmHSxxaM.js +1 -0
  269. package/web-shell/assets/emacs-lisp-BX77sIaO.js +1 -0
  270. package/web-shell/assets/erDiagram-TEJ5UH35-Cm9ls1iB.js +85 -0
  271. package/web-shell/assets/erb-BYTLMnw6.js +1 -0
  272. package/web-shell/assets/erlang-B-DoSBHF.js +1 -0
  273. package/web-shell/assets/everforest-dark-BgDCqdQA.js +1 -0
  274. package/web-shell/assets/everforest-light-C8M2exoo.js +1 -0
  275. package/web-shell/assets/fennel-bCA53EVm.js +1 -0
  276. package/web-shell/assets/fish-w-ucz2PV.js +1 -0
  277. package/web-shell/assets/flowDiagram-I6XJVG4X-Dyoz80Pv.js +162 -0
  278. package/web-shell/assets/fluent-Dayu4EKP.js +1 -0
  279. package/web-shell/assets/fortran-fixed-form-TqA4NnZg.js +1 -0
  280. package/web-shell/assets/fortran-free-form-DKXYxT9g.js +1 -0
  281. package/web-shell/assets/fsharp-XplgxFYe.js +1 -0
  282. package/web-shell/assets/ganttDiagram-6RSMTGT7-Cfut9yaU.js +292 -0
  283. package/web-shell/assets/gdresource-BHYsBjWJ.js +1 -0
  284. package/web-shell/assets/gdscript-DfxzS6Rs.js +1 -0
  285. package/web-shell/assets/gdshader-SKMF96pI.js +1 -0
  286. package/web-shell/assets/genie-ajMbGru0.js +1 -0
  287. package/web-shell/assets/gherkin--30QC5Em.js +1 -0
  288. package/web-shell/assets/git-commit-i4q6IMui.js +1 -0
  289. package/web-shell/assets/git-rebase-B-v9cOL2.js +1 -0
  290. package/web-shell/assets/gitGraphDiagram-PVQCEYII-BCuJdlfD.js +106 -0
  291. package/web-shell/assets/github-dark-DHJKELXO.js +1 -0
  292. package/web-shell/assets/github-dark-default-Cuk6v7N8.js +1 -0
  293. package/web-shell/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  294. package/web-shell/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  295. package/web-shell/assets/github-light-DAi9KRSo.js +1 -0
  296. package/web-shell/assets/github-light-default-D7oLnXFd.js +1 -0
  297. package/web-shell/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  298. package/web-shell/assets/gleam-B430Bg39.js +1 -0
  299. package/web-shell/assets/glimmer-js-D-cwc0-E.js +1 -0
  300. package/web-shell/assets/glimmer-ts-pgjy16dm.js +1 -0
  301. package/web-shell/assets/glsl-DBO2IWDn.js +1 -0
  302. package/web-shell/assets/gnuplot-CM8KxXT1.js +1 -0
  303. package/web-shell/assets/go-B1SYOhNW.js +1 -0
  304. package/web-shell/assets/graph-qsFoMdT2.js +1 -0
  305. package/web-shell/assets/graphql-cDcHW_If.js +1 -0
  306. package/web-shell/assets/groovy-DkBy-JyN.js +1 -0
  307. package/web-shell/assets/hack-D1yCygmZ.js +1 -0
  308. package/web-shell/assets/haml-B2EZWmdv.js +1 -0
  309. package/web-shell/assets/handlebars-BQGss363.js +1 -0
  310. package/web-shell/assets/haskell-BILxekzW.js +1 -0
  311. package/web-shell/assets/haxe-C5wWYbrZ.js +1 -0
  312. package/web-shell/assets/hcl-HzYwdGDm.js +1 -0
  313. package/web-shell/assets/hjson-T-Tgc4AT.js +1 -0
  314. package/web-shell/assets/hlsl-ifBTmRxC.js +1 -0
  315. package/web-shell/assets/houston-DnULxvSX.js +1 -0
  316. package/web-shell/assets/html-C2L_23MC.js +1 -0
  317. package/web-shell/assets/html-derivative-CSfWNPLT.js +1 -0
  318. package/web-shell/assets/http-FRrOvY1W.js +1 -0
  319. package/web-shell/assets/hxml-TIA70rKU.js +1 -0
  320. package/web-shell/assets/hy-BMj5Y0dO.js +1 -0
  321. package/web-shell/assets/imba-bv_oIlVt.js +1 -0
  322. package/web-shell/assets/index-BDZiTAkl.css +1 -0
  323. package/web-shell/assets/index-DaebdpHq.js +516 -0
  324. package/web-shell/assets/infoDiagram-5YYISTIA-CXKxF2VL.js +2 -0
  325. package/web-shell/assets/ini-BjABl1g7.js +1 -0
  326. package/web-shell/assets/init-Gi6I4Gst.js +1 -0
  327. package/web-shell/assets/ishikawaDiagram-YF4QCWOH-DE7HWSU8.js +70 -0
  328. package/web-shell/assets/java-xI-RfyKK.js +1 -0
  329. package/web-shell/assets/javascript-ySlJ1b_l.js +1 -0
  330. package/web-shell/assets/jinja-DGy0s7-h.js +1 -0
  331. package/web-shell/assets/jison-BqZprYcd.js +1 -0
  332. package/web-shell/assets/journeyDiagram-JHISSGLW-D__YUfds.js +139 -0
  333. package/web-shell/assets/json-BQoSv7ci.js +1 -0
  334. package/web-shell/assets/json5-w8dY5SsB.js +1 -0
  335. package/web-shell/assets/jsonc-TU54ms6u.js +1 -0
  336. package/web-shell/assets/jsonl-DREVFZK8.js +1 -0
  337. package/web-shell/assets/jsonnet-BfivnA6A.js +1 -0
  338. package/web-shell/assets/jssm-P4WzXJd0.js +1 -0
  339. package/web-shell/assets/jsx-BAng5TT0.js +1 -0
  340. package/web-shell/assets/julia-BBuGR-5E.js +1 -0
  341. package/web-shell/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  342. package/web-shell/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  343. package/web-shell/assets/kanagawa-wave-DWedfzmr.js +1 -0
  344. package/web-shell/assets/kanban-definition-UN3LZRKU-D82R169M.js +89 -0
  345. package/web-shell/assets/kotlin-B5lbUyaz.js +1 -0
  346. package/web-shell/assets/kusto-mebxcVVE.js +1 -0
  347. package/web-shell/assets/laserwave-DUszq2jm.js +1 -0
  348. package/web-shell/assets/latex-C-cWTeAZ.js +1 -0
  349. package/web-shell/assets/layout-CNYaLpI5.js +1 -0
  350. package/web-shell/assets/lean-XBlWyCtg.js +1 -0
  351. package/web-shell/assets/less-BfCpw3nA.js +1 -0
  352. package/web-shell/assets/light-plus-B7mTdjB0.js +1 -0
  353. package/web-shell/assets/linear-DpyMbKqT.js +1 -0
  354. package/web-shell/assets/liquid-D3W5UaiH.js +1 -0
  355. package/web-shell/assets/log-Cc5clBb7.js +1 -0
  356. package/web-shell/assets/logo-IuBKFhSY.js +1 -0
  357. package/web-shell/assets/lua-CvWAzNxB.js +1 -0
  358. package/web-shell/assets/luau-Du5NY7AG.js +1 -0
  359. package/web-shell/assets/make-Bvotw-X0.js +1 -0
  360. package/web-shell/assets/markdown-UIAJJxZW.js +1 -0
  361. package/web-shell/assets/marko-z0MBrx5-.js +1 -0
  362. package/web-shell/assets/material-theme-D5KoaKCx.js +1 -0
  363. package/web-shell/assets/material-theme-darker-BfHTSMKl.js +1 -0
  364. package/web-shell/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  365. package/web-shell/assets/material-theme-ocean-CyktbL80.js +1 -0
  366. package/web-shell/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  367. package/web-shell/assets/matlab-D9-PGadD.js +1 -0
  368. package/web-shell/assets/mdc-DB_EDNY_.js +1 -0
  369. package/web-shell/assets/mdx-sdHcTMYB.js +1 -0
  370. package/web-shell/assets/mermaid-Ci6OQyBP.js +1 -0
  371. package/web-shell/assets/mermaid.core-D1KEFDhn.js +309 -0
  372. package/web-shell/assets/min-dark-CafNBF8u.js +1 -0
  373. package/web-shell/assets/min-light-CTRr51gU.js +1 -0
  374. package/web-shell/assets/mindmap-definition-RKZ34NQL-BwVUFGFE.js +96 -0
  375. package/web-shell/assets/mipsasm-BC5c_5Pe.js +1 -0
  376. package/web-shell/assets/mojo-Tz6hzZYG.js +1 -0
  377. package/web-shell/assets/monokai-D4h5O-jR.js +1 -0
  378. package/web-shell/assets/move-DB_GagMm.js +1 -0
  379. package/web-shell/assets/narrat-DLbgOhZU.js +1 -0
  380. package/web-shell/assets/nextflow-B0XVJmRM.js +1 -0
  381. package/web-shell/assets/nginx-D_VnBJ67.js +1 -0
  382. package/web-shell/assets/night-owl-C39BiMTA.js +1 -0
  383. package/web-shell/assets/nim-ZlGxZxc3.js +1 -0
  384. package/web-shell/assets/nix-shcSOmrb.js +1 -0
  385. package/web-shell/assets/nord-Ddv68eIx.js +1 -0
  386. package/web-shell/assets/nushell-D4Tzg5kh.js +1 -0
  387. package/web-shell/assets/objective-c-Deuh7S70.js +1 -0
  388. package/web-shell/assets/objective-cpp-BUEGK8hf.js +1 -0
  389. package/web-shell/assets/ocaml-BNioltXt.js +1 -0
  390. package/web-shell/assets/one-dark-pro-GBQ2dnAY.js +1 -0
  391. package/web-shell/assets/one-light-PoHY5YXO.js +1 -0
  392. package/web-shell/assets/ordinal-Cboi1Yqb.js +1 -0
  393. package/web-shell/assets/pascal-JqZropPD.js +1 -0
  394. package/web-shell/assets/perl-CHQXSrWU.js +1 -0
  395. package/web-shell/assets/php-B5ebYQev.js +1 -0
  396. package/web-shell/assets/pieDiagram-4H26LBE5-BO_qoEGx.js +30 -0
  397. package/web-shell/assets/plastic-3e1v2bzS.js +1 -0
  398. package/web-shell/assets/plsql-LKU2TuZ1.js +1 -0
  399. package/web-shell/assets/po-BFLt1xDp.js +1 -0
  400. package/web-shell/assets/poimandres-CS3Unz2-.js +1 -0
  401. package/web-shell/assets/polar-DKykz6zU.js +1 -0
  402. package/web-shell/assets/postcss-B3ZDOciz.js +1 -0
  403. package/web-shell/assets/powerquery-CSHBycmS.js +1 -0
  404. package/web-shell/assets/powershell-BIEUsx6d.js +1 -0
  405. package/web-shell/assets/prisma-B48N-Iqd.js +1 -0
  406. package/web-shell/assets/prolog-BY-TUvya.js +1 -0
  407. package/web-shell/assets/proto-zocC4JxJ.js +1 -0
  408. package/web-shell/assets/pug-CM9l7STV.js +1 -0
  409. package/web-shell/assets/puppet-Cza_XSSt.js +1 -0
  410. package/web-shell/assets/purescript-Bg-kzb6g.js +1 -0
  411. package/web-shell/assets/python-DhUJRlN_.js +1 -0
  412. package/web-shell/assets/qml-D8XfuvdV.js +1 -0
  413. package/web-shell/assets/qmldir-C8lEn-DE.js +1 -0
  414. package/web-shell/assets/qss-DhMKtDLN.js +1 -0
  415. package/web-shell/assets/quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js +7 -0
  416. package/web-shell/assets/r-CwjWoCRV.js +1 -0
  417. package/web-shell/assets/racket-CzouJOBO.js +1 -0
  418. package/web-shell/assets/raku-B1bQXN8T.js +1 -0
  419. package/web-shell/assets/razor-CNLDkMZG.js +1 -0
  420. package/web-shell/assets/red-bN70gL4F.js +1 -0
  421. package/web-shell/assets/reg-5LuOXUq_.js +1 -0
  422. package/web-shell/assets/regexp-DWJ3fJO_.js +1 -0
  423. package/web-shell/assets/rel-DJlmqQ1C.js +1 -0
  424. package/web-shell/assets/requirementDiagram-4Y6WPE33-BJPXejOA.js +84 -0
  425. package/web-shell/assets/riscv-QhoSD0DR.js +1 -0
  426. package/web-shell/assets/rose-pine-CmCqftbK.js +1 -0
  427. package/web-shell/assets/rose-pine-dawn-Ds-gbosJ.js +1 -0
  428. package/web-shell/assets/rose-pine-moon-CjDtw9vr.js +1 -0
  429. package/web-shell/assets/rst-4NLicBqY.js +1 -0
  430. package/web-shell/assets/ruby-DeZ3UC14.js +1 -0
  431. package/web-shell/assets/rust-Be6lgOlo.js +1 -0
  432. package/web-shell/assets/sankeyDiagram-5OEKKPKP-C1xeIL9i.js +40 -0
  433. package/web-shell/assets/sas-BmTFh92c.js +1 -0
  434. package/web-shell/assets/sass-BJ4Li9vH.js +1 -0
  435. package/web-shell/assets/scala-DQVVAn-B.js +1 -0
  436. package/web-shell/assets/scheme-BJGe-b2p.js +1 -0
  437. package/web-shell/assets/scss-C31hgJw-.js +1 -0
  438. package/web-shell/assets/sdbl-BLhTXw86.js +1 -0
  439. package/web-shell/assets/sequenceDiagram-3UESZ5HK-CSYKQUjf.js +162 -0
  440. package/web-shell/assets/shaderlab-B7qAK45m.js +1 -0
  441. package/web-shell/assets/shellscript-atvbtKCR.js +1 -0
  442. package/web-shell/assets/shellsession-C_rIy8kc.js +1 -0
  443. package/web-shell/assets/slack-dark-BthQWCQV.js +1 -0
  444. package/web-shell/assets/slack-ochin-DqwNpetd.js +1 -0
  445. package/web-shell/assets/smalltalk-DkLiglaE.js +1 -0
  446. package/web-shell/assets/snazzy-light-Bw305WKR.js +1 -0
  447. package/web-shell/assets/solarized-dark-DXbdFlpD.js +1 -0
  448. package/web-shell/assets/solarized-light-L9t79GZl.js +1 -0
  449. package/web-shell/assets/solidity-C1w2a3ep.js +1 -0
  450. package/web-shell/assets/soy-C-lX7w71.js +1 -0
  451. package/web-shell/assets/sparql-bYkjHRlG.js +1 -0
  452. package/web-shell/assets/splunk-Cf8iN4DR.js +1 -0
  453. package/web-shell/assets/sql-COK4E0Yg.js +1 -0
  454. package/web-shell/assets/ssh-config-BknIz3MU.js +1 -0
  455. package/web-shell/assets/stata-DorPZHa4.js +1 -0
  456. package/web-shell/assets/stateDiagram-AJRCARHV-d9hiHlAW.js +1 -0
  457. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +1 -0
  458. package/web-shell/assets/stylus-BeQkCIfX.js +1 -0
  459. package/web-shell/assets/svelte-MSaWC3Je.js +1 -0
  460. package/web-shell/assets/swift-BSxZ-RaX.js +1 -0
  461. package/web-shell/assets/synthwave-84-CbfX1IO0.js +1 -0
  462. package/web-shell/assets/system-verilog-C7L56vO4.js +1 -0
  463. package/web-shell/assets/systemd-CUnW07Te.js +1 -0
  464. package/web-shell/assets/talonscript-C1XDQQGZ.js +1 -0
  465. package/web-shell/assets/tasl-CQjiPCtT.js +1 -0
  466. package/web-shell/assets/tcl-DQ1-QYvQ.js +1 -0
  467. package/web-shell/assets/templ-dwX3ZSMB.js +1 -0
  468. package/web-shell/assets/terraform-BbSNqyBO.js +1 -0
  469. package/web-shell/assets/tex-rYs2v40G.js +1 -0
  470. package/web-shell/assets/timeline-definition-PNZ67QCA-BhCBkq8k.js +120 -0
  471. package/web-shell/assets/tokyo-night-DBQeEorK.js +1 -0
  472. package/web-shell/assets/toml-CB2ApiWb.js +1 -0
  473. package/web-shell/assets/ts-tags-CipyTH0X.js +1 -0
  474. package/web-shell/assets/tsv-B_m7g4N7.js +1 -0
  475. package/web-shell/assets/tsx-B6W0miNI.js +1 -0
  476. package/web-shell/assets/turtle-BMR_PYu6.js +1 -0
  477. package/web-shell/assets/twig-NC5TFiHP.js +1 -0
  478. package/web-shell/assets/typescript-Dj6nwHGl.js +1 -0
  479. package/web-shell/assets/typespec-BpWG_bgh.js +1 -0
  480. package/web-shell/assets/typst-BVUVsWT6.js +1 -0
  481. package/web-shell/assets/v-CAQ2eGtk.js +1 -0
  482. package/web-shell/assets/vala-BFOHcciG.js +1 -0
  483. package/web-shell/assets/vb-CdO5JTpU.js +1 -0
  484. package/web-shell/assets/vennDiagram-CIIHVFJN-DPPFWp_y.js +34 -0
  485. package/web-shell/assets/verilog-CJaU5se_.js +1 -0
  486. package/web-shell/assets/vesper-BEBZ7ncR.js +1 -0
  487. package/web-shell/assets/vhdl-DYoNaHQp.js +1 -0
  488. package/web-shell/assets/viml-m4uW47V2.js +1 -0
  489. package/web-shell/assets/vitesse-black-Bkuqu6BP.js +1 -0
  490. package/web-shell/assets/vitesse-dark-D0r3Knsf.js +1 -0
  491. package/web-shell/assets/vitesse-light-CVO1_9PV.js +1 -0
  492. package/web-shell/assets/vue-BuYVFjOK.js +1 -0
  493. package/web-shell/assets/vue-html-xdeiXROB.js +1 -0
  494. package/web-shell/assets/vyper-nyqBNV6O.js +1 -0
  495. package/web-shell/assets/wardley-L42UT6IY-CcOUIgXY.js +173 -0
  496. package/web-shell/assets/wardleyDiagram-YWT4CUSO-p7oR5X7r.js +78 -0
  497. package/web-shell/assets/wasm-C6j12Q_x.js +1 -0
  498. package/web-shell/assets/wasm-CG6Dc4jp.js +1 -0
  499. package/web-shell/assets/wenyan-7A4Fjokl.js +1 -0
  500. package/web-shell/assets/wgsl-CB0Krxn9.js +1 -0
  501. package/web-shell/assets/wikitext-DCE3LsBG.js +1 -0
  502. package/web-shell/assets/wolfram-C3FkfJm5.js +1 -0
  503. package/web-shell/assets/xml-e3z08dGr.js +1 -0
  504. package/web-shell/assets/xsl-Dd0NUgwM.js +1 -0
  505. package/web-shell/assets/xychartDiagram-2RQKCTM6-Dfr7-SEy.js +7 -0
  506. package/web-shell/assets/yaml-CVw76BM1.js +1 -0
  507. package/web-shell/assets/zenscript-HnGAYVZD.js +1 -0
  508. package/web-shell/assets/zig-BVz_zdnA.js +1 -0
  509. package/web-shell/index.html +23 -0
  510. package/chunks/chunk-C64WAJOC.js +0 -117
  511. package/chunks/contextCommand-HI2X2Y7I.js +0 -53
@@ -1,14 +1,15 @@
1
1
  ---
2
2
  name: loop
3
- description: Create a recurring loop that runs a prompt on a schedule. Usage - /loop 5m check the build, /loop check the PR every 30m, /loop run tests (defaults to 10m). /loop list to show jobs, /loop clear to cancel all.
4
- argument-hint: '[interval] <prompt> | list | clear'
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 — schedule a recurring prompt
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
- Otherwise, parse the input below into `[interval] <prompt…>` and schedule it with CronCreate.
21
+ ## Parsing
21
22
 
22
- ## Parsing (in priority order)
23
+ Parse the input after removing the `/loop` prefix:
23
24
 
24
- 1. **Leading token**: if the first whitespace-delimited token matches `^\d+[smhd]$` (e.g. `5m`, `2h`), that's the interval; the rest is the prompt.
25
- 2. **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`), extract that as the interval and strip it from the prompt. Only match when what follows "every" is a time expression — `check every PR` has no interval.
26
- 3. **Default**: otherwise, interval is `10m` and the entire input is the prompt.
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] <prompt>` and stop — do not call CronCreate.
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` (rule 1)
33
- - `check the deploy every 20m` → interval `20m`, prompt `check the deploy` (rule 2)
34
- - `run tests every 5 minutes` → interval `5m`, prompt `run tests` (rule 2)
35
- - `check the deploy` → interval `10m`, prompt `check the deploy` (rule 3)
36
- - `check every PR` → interval `10m`, prompt `check every PR` (rule 3 — "every" not followed by time)
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
- ## Interval cron
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 | Cron expression | Notes |
44
- | ----------------- | ---------------------- | ----------------------------------------- |
45
- | `Nm` where N 59 | `*/N * * * *` | every N minutes |
46
- | `Nm` where N 60 | `0 */H * * *` | round to hours (H = N/60, must divide 24) |
47
- | `Nh` where N 23 | `0 */N * * *` | every N hours |
48
- | `Nd` | `0 0 */N * *` | every N days at midnight local |
49
- | `Ns` | treat as `ceil(N/60)m` | cron minimum granularity is 1 minute |
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
- **If the interval doesn't cleanly divide its unit** (e.g. `7m` → `*/7 * * * *` gives uneven gaps at :56→:00; `90m` 1.5h which cron can't express), pick the nearest clean interval and tell the user what you rounded to before scheduling.
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
- ## Action
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's 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).
61
- 3. **Then immediately execute the parsed prompt now** don't wait for the first cron fire. If it's a slash command, invoke it via the Skill tool; otherwise act on it directly.
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.enableFollowupSuggestions` | boolean | Enable [followup suggestions](../features/followup-suggestions) that predict what you want to type next after the model responds. Suggestions appear as ghost text and can be accepted with Tab, Enter, or Right Arrow. | `false` |
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 | Default |
141
- | -------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
142
- | `model.name` | string | The Qwen model to use for conversations. | `undefined` |
143
- | `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited. | `-1` |
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. | `-1` |
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. | `-1` |
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.) | `N/A` |
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`. | `5` |
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`. | `3` |
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`). | `true` |
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`. | `50` |
152
- | `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `true` |
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. | `true` |
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. | `false` |
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. | `false` |
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). | `undefined` |
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 | Notes |
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. | Stores credentials, settings, memory, skills, and other global state. When set, project-level `.qwen/` directories are unaffected. An empty string is treated as unset. |
579
- | `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. |
580
- | `QWEN_TELEMETRY_ENABLED` | Set to `true` or `1` to enable telemetry. Any other value is treated as disabling it. | Overrides the `telemetry.enabled` setting. |
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. | Overrides the `telemetry.target` setting. |
582
- | `QWEN_TELEMETRY_OTLP_ENDPOINT` | Sets the OTLP endpoint for telemetry. | Overrides the `telemetry.otlpEndpoint` setting. |
583
- | `QWEN_TELEMETRY_OTLP_PROTOCOL` | Sets the OTLP protocol (`grpc` or `http`). | Overrides the `telemetry.otlpProtocol` setting. |
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. | Overrides the `telemetry.logPrompts` setting. |
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. | Overrides the `telemetry.includeSensitiveSpanAttributes` setting. ⚠️ Streams sensitive data to your OTLP backend. |
586
- | `QWEN_TELEMETRY_OUTFILE` | Sets the file path to write telemetry to. When set, overrides OTLP export. | Overrides the `telemetry.outfile` setting. |
587
- | `QWEN_SANDBOX` | Alternative to the `sandbox` setting in `settings.json`. | Accepts `true`, `false`, `docker`, `podman`, or a custom command string. |
588
- | `QWEN_SANDBOX_IMAGE` | Overrides sandbox image selection for Docker/Podman. | Takes precedence over `tools.sandboxImage`. |
589
- | `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`). |
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. | **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. |
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 value, or empty string) to force-enable, `0` 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. |
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. | 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. |
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. | This is useful for development and testing. |
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. | 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` |
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. | 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` |
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. | 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` |
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. | 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. |
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. | Off by default. Heap snapshots cost ~50 µs each (well below 1% of total startup) so most users should leave this alone. |
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. | 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` |
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