@qwen-code/qwen-code 0.18.0-preview.2 → 0.18.1

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 (143) hide show
  1. package/bundled/loop/SKILL.md +2 -1
  2. package/bundled/qc-helper/docs/_meta.ts +1 -0
  3. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +12 -5
  5. package/bundled/qc-helper/docs/configuration/settings.md +33 -32
  6. package/bundled/qc-helper/docs/features/approval-mode.md +10 -14
  7. package/bundled/qc-helper/docs/features/commands.md +33 -11
  8. package/bundled/qc-helper/docs/features/dual-output.md +37 -3
  9. package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
  10. package/bundled/qc-helper/docs/features/skills.md +29 -3
  11. package/bundled/qc-helper/docs/features/sub-agents.md +34 -12
  12. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +221 -0
  13. package/bundled/qc-helper/docs/qwen-serve.md +246 -28
  14. package/chunks/{agent-QB7TZ4HW.js → agent-XT7NHZ5H.js} +25 -24
  15. package/chunks/agent-headless-LNRE63ZL.js +51 -0
  16. package/chunks/{anthropicContentGenerator-M45EVVRM.js → anthropicContentGenerator-DCI26OQF.js} +7 -7
  17. package/chunks/{askUserQuestion-WM2KHM3K.js → askUserQuestion-ITYUTWLR.js} +45 -3
  18. package/chunks/{ca-BARBRL6N.js → ca-RK4QPLIX.js} +18 -1
  19. package/chunks/{chunk-CWV3SJZS.js → chunk-3NRO6NHX.js} +2 -2
  20. package/chunks/{chunk-BNESGOSJ.js → chunk-55ZMG67I.js} +1 -1
  21. package/chunks/{chunk-QCG6KPNM.js → chunk-6T7Y7USE.js} +18017 -11621
  22. package/chunks/{chunk-CNHFPN7T.js → chunk-7KPZFE5A.js} +1 -1
  23. package/chunks/{chunk-2ZTWI7KH.js → chunk-A2ZIEEGJ.js} +30 -22
  24. package/chunks/{chunk-JUGRPQAB.js → chunk-B4ZF2KSI.js} +1 -1
  25. package/chunks/chunk-BJ5HQ23U.js +178 -0
  26. package/chunks/{chunk-HXJE7VOG.js → chunk-BXYRCW2C.js} +1074 -144
  27. package/chunks/{chunk-ICOI4E4S.js → chunk-CPVI5J2L.js} +101 -23
  28. package/chunks/{chunk-HV3ZZ7G4.js → chunk-DHZREJTG.js} +2 -2
  29. package/chunks/{chunk-GX7VH5JQ.js → chunk-FIQECJTQ.js} +1 -1
  30. package/chunks/{chunk-SZOEIL6S.js → chunk-H6BD2ELD.js} +1 -0
  31. package/chunks/{chunk-JXAZUMDW.js → chunk-HA2UEYZP.js} +7 -4
  32. package/chunks/{chunk-USE2VQ5P.js → chunk-HED55F43.js} +26 -1
  33. package/chunks/{chunk-PAEBHDIO.js → chunk-HQUWWSSP.js} +1 -1
  34. package/chunks/{chunk-MVIVIPCU.js → chunk-IDYDPBBN.js} +361 -583
  35. package/chunks/{chunk-JVQOQ3OU.js → chunk-IQHSD7K5.js} +1 -1
  36. package/chunks/{chunk-NW5QBUYO.js → chunk-IS7UA4W3.js} +14 -14
  37. package/chunks/{chunk-UAMOBVVW.js → chunk-LXYWINWF.js} +1 -1
  38. package/chunks/{chunk-P4J26VDS.js → chunk-LYRSMKLS.js} +2 -2
  39. package/chunks/{chunk-Y7R6H6FT.js → chunk-LYSND7KR.js} +9 -4
  40. package/chunks/{chunk-LR62TEET.js → chunk-NNIYWQIS.js} +1 -1
  41. package/chunks/chunk-OMX7CUOE.js +356 -0
  42. package/chunks/{chunk-CNSMKPK6.js → chunk-QILTEBWS.js} +1 -1
  43. package/chunks/chunk-QQDPRDVW.js +25 -0
  44. package/chunks/{chunk-ZK4AMNIU.js → chunk-RON7LFNH.js} +1294 -314
  45. package/chunks/chunk-SFRV6BGY.js +243 -0
  46. package/chunks/{chunk-AVW55ZCO.js → chunk-WJ3SND6W.js} +37 -16
  47. package/chunks/{chunk-HGJPQK33.js → chunk-WPTCDQN6.js} +188 -534
  48. package/chunks/{chunk-7YKXFA3D.js → chunk-XZTNBSMW.js} +11 -11
  49. package/chunks/{chunk-C6WMLUNB.js → chunk-Y7KMDUEP.js} +1 -1
  50. package/chunks/{chunk-WFVXF3OM.js → chunk-Z2Z3GUXZ.js} +1 -0
  51. package/chunks/{chunk-KC6ZMJ5X.js → chunk-ZMIBJS45.js} +1 -1
  52. package/chunks/chunk-ZOFNJQNJ.js +607 -0
  53. package/chunks/computer-use-4YX3JGBV.js +2052 -0
  54. package/chunks/contextCommand-KS2H7MW5.js +53 -0
  55. package/chunks/cron-create-CAPUKK7I.js +184 -0
  56. package/chunks/{cron-delete-ZGUXWBTG.js → cron-delete-G3KAR26Q.js} +28 -5
  57. package/chunks/{cron-list-QNNZGMN3.js → cron-list-ZA4ZIUS5.js} +40 -7
  58. package/chunks/{de-YGKK2BC4.js → de-FGPM4KW5.js} +18 -1
  59. package/chunks/{devtools-IXE4UP72.js → devtools-FM6GJPYG.js} +1 -1
  60. package/chunks/{dist-ZMQ4TXD5.js → dist-7YWFWOCJ.js} +2 -2
  61. package/chunks/{dist-R2SXPG74.js → dist-VEGFONCF.js} +2 -2
  62. package/chunks/{dist-TE5QKMGR.js → dist-X4EXN7W6.js} +1 -1
  63. package/chunks/{dist-BXDUQ2QY.js → dist-YLS6NI7H.js} +1 -1
  64. package/chunks/{edit-6UBTS2J5.js → edit-2ARPEO4B.js} +26 -25
  65. package/chunks/{en-HSQQNQUB.js → en-VP6XPGEC.js} +9 -2
  66. package/chunks/{enter-worktree-NN7LIXCM.js → enter-worktree-IXNXNAW5.js} +25 -24
  67. package/chunks/enterPlanMode-TAKAGAYP.js +159 -0
  68. package/chunks/{exit-worktree-GGSS5KIE.js → exit-worktree-LHTRV7ML.js} +25 -24
  69. package/chunks/exitPlanMode-MK5UAITL.js +743 -0
  70. package/chunks/{fr-JXBKPJKQ.js → fr-ATYBVCLT.js} +18 -1
  71. package/chunks/{geminiContentGenerator-I4H2NLJG.js → geminiContentGenerator-HFJIGO77.js} +7 -7
  72. package/chunks/{getMachineId-bsd-F7GNPTER.js → getMachineId-bsd-4CASPIU4.js} +1 -1
  73. package/chunks/{getMachineId-darwin-T73DJL27.js → getMachineId-darwin-HPQPEMZR.js} +1 -1
  74. package/chunks/{getMachineId-linux-MKQTFPQM.js → getMachineId-linux-AUARKYHL.js} +1 -1
  75. package/chunks/{getMachineId-unsupported-MUR5KOQE.js → getMachineId-unsupported-S32ZDA2T.js} +1 -1
  76. package/chunks/{getMachineId-win-CDYFC6ZM.js → getMachineId-win-4EFLHYIJ.js} +1 -1
  77. package/chunks/{glob-OLCX57MD.js → glob-I2USLUSC.js} +25 -24
  78. package/chunks/{grep-7HXIMDOW.js → grep-WBIF7THR.js} +37 -30
  79. package/chunks/{ja-TGPZSP2B.js → ja-W2QEA2OI.js} +18 -1
  80. package/chunks/{keychain-token-storage-LB46DAEK.js → keychain-token-storage-QSTRHKKL.js} +3 -3
  81. package/chunks/{ls-6PEZUK6O.js → ls-2R5RHLX5.js} +4 -4
  82. package/chunks/{lsp-JZSJOVT7.js → lsp-XKH6ZIAN.js} +3 -3
  83. package/chunks/{monitor-SQO7MVAV.js → monitor-WU7UFATU.js} +25 -24
  84. package/chunks/{notebook-edit-72L3EBAL.js → notebook-edit-KUHYPXEM.js} +26 -25
  85. package/chunks/{openaiContentGenerator-FTR7CDWF.js → openaiContentGenerator-5PLHYJQL.js} +15 -15
  86. package/chunks/{pt-TIBG6BIO.js → pt-ZKEWJFBW.js} +18 -1
  87. package/chunks/{qwenContentGenerator-U5UFQ566.js → qwenContentGenerator-TSKW73KY.js} +27 -26
  88. package/chunks/{qwenOAuth2-EFSECGHF.js → qwenOAuth2-KK433U33.js} +6 -5
  89. package/chunks/{read-file-UA64EEQC.js → read-file-VIPF2PS6.js} +11 -11
  90. package/chunks/ripGrep-XLIZTYE7.js +49 -0
  91. package/chunks/{ru-JBCHCK4L.js → ru-VEKTPJ74.js} +18 -1
  92. package/chunks/{scheduler-VBASHOCA.js → scheduler-O66SLJGU.js} +25 -24
  93. package/chunks/{send-message-OYJZ5TPG.js → send-message-CTME7DXD.js} +3 -3
  94. package/chunks/{serve-A7E2OJDR.js → serve-BWOLYT62.js} +13164 -3840
  95. package/chunks/{shell-3NFOT6F5.js → shell-XE7UYKOO.js} +25 -24
  96. package/chunks/{skill-RA5YUREY.js → skill-RZWM6XMC.js} +64 -113
  97. package/chunks/{src-NFCMARMT.js → src-L5P7K4MH.js} +176 -44
  98. package/chunks/{syntheticOutput-DETQ2YM6.js → syntheticOutput-ZJGSU7OQ.js} +4 -4
  99. package/chunks/{task-create-Y3ZKTJIG.js → task-create-EE6JEM7G.js} +8 -7
  100. package/chunks/{task-list-ONXJ3I3A.js → task-list-EESYAC65.js} +7 -6
  101. package/chunks/{task-stop-UHDC4N5B.js → task-stop-XZVCFFYY.js} +3 -3
  102. package/chunks/{task-update-TCNOU3P5.js → task-update-EIO4HNE3.js} +21 -9
  103. package/chunks/{team-create-6SR4OVRG.js → team-create-R2H7Y3SG.js} +28 -26
  104. package/chunks/{team-delete-EJ4U4DDP.js → team-delete-A7LXPGV7.js} +9 -6
  105. package/chunks/{todoWrite-TEYDRS5L.js → todoWrite-VRKSGAWM.js} +5 -5
  106. package/chunks/{tool-search-OD435A3X.js → tool-search-USSQMTMS.js} +11 -11
  107. package/chunks/{web-fetch-6W67H5PO.js → web-fetch-GHAZUA54.js} +5 -5
  108. package/chunks/workflow-5LNNLNUR.js +1414 -0
  109. package/chunks/{write-file-475L5OPP.js → write-file-2I7HP24C.js} +26 -25
  110. package/chunks/{zh-VCLWO26Y.js → zh-OIXDDQHB.js} +10 -3
  111. package/chunks/{zh-TW-G3HFHVVT.js → zh-TW-6YFNCKTA.js} +10 -3
  112. package/cli-entry.js +19 -0
  113. package/cli.js +11064 -6628
  114. package/examples/starter/QWEN.md +30 -0
  115. package/examples/starter/README.md +59 -0
  116. package/examples/starter/agents/diary.md +86 -0
  117. package/examples/starter/commands/writing/polish.md +13 -0
  118. package/examples/starter/example.ts +64 -0
  119. package/examples/starter/package.json +18 -0
  120. package/examples/starter/qwen-extension.json +12 -0
  121. package/examples/starter/skills/synonyms/SKILL.md +48 -0
  122. package/examples/starter/tsconfig.json +13 -0
  123. package/fzfWorker.js +1083 -0
  124. package/locales/ca.js +20 -2
  125. package/locales/de.js +21 -2
  126. package/locales/en.js +13 -4
  127. package/locales/fr.js +22 -2
  128. package/locales/ja.js +22 -2
  129. package/locales/pt.js +21 -2
  130. package/locales/ru.js +20 -2
  131. package/locales/zh-TW.js +11 -4
  132. package/locales/zh.js +11 -4
  133. package/package.json +5 -3
  134. package/chunks/agent-headless-APVHH7QM.js +0 -50
  135. package/chunks/chunk-AJIR24J2.js +0 -59
  136. package/chunks/chunk-SKBPNJEW.js +0 -45
  137. package/chunks/chunk-XBFVXFB2.js +0 -216
  138. package/chunks/computer-use-B7VIUI7F.js +0 -825
  139. package/chunks/contextCommand-63RZ3O5R.js +0 -52
  140. package/chunks/cron-create-FI5LJVUS.js +0 -140
  141. package/chunks/exitPlanMode-H323NHB2.js +0 -235
  142. package/chunks/ripGrep-WSYCWZVK.js +0 -48
  143. package/chunks/workflow-62DHH4EO.js +0 -708
@@ -0,0 +1,53 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ collectContextData,
5
+ contextCommand,
6
+ formatContextUsageText
7
+ } from "./chunk-IS7UA4W3.js";
8
+ import "./chunk-XZTNBSMW.js";
9
+ import "./chunk-6T7Y7USE.js";
10
+ import "./chunk-K5PGHDBN.js";
11
+ import "./chunk-HQUWWSSP.js";
12
+ import "./chunk-O4PICXES.js";
13
+ import "./chunk-TW522KN6.js";
14
+ import "./chunk-BJ5HQ23U.js";
15
+ import "./chunk-SFRV6BGY.js";
16
+ import "./chunk-ZOFNJQNJ.js";
17
+ import "./chunk-WPTCDQN6.js";
18
+ import "./chunk-OMX7CUOE.js";
19
+ import "./chunk-MLZQVCF3.js";
20
+ import "./chunk-LD2XBG6Z.js";
21
+ import "./chunk-CPVI5J2L.js";
22
+ import "./chunk-ZMIBJS45.js";
23
+ import "./chunk-77WXWU44.js";
24
+ import "./chunk-B4ZF2KSI.js";
25
+ import "./chunk-RON7LFNH.js";
26
+ import "./chunk-3PJXIDKI.js";
27
+ import "./chunk-UWCTAVOD.js";
28
+ import "./chunk-OFEVLU4C.js";
29
+ import "./chunk-IQHSD7K5.js";
30
+ import "./chunk-LYRSMKLS.js";
31
+ import "./chunk-QILTEBWS.js";
32
+ import "./chunk-A2ZIEEGJ.js";
33
+ import "./chunk-IDYDPBBN.js";
34
+ import "./chunk-FIQECJTQ.js";
35
+ import "./chunk-64WXLC72.js";
36
+ import "./chunk-LXYWINWF.js";
37
+ import "./chunk-NNIYWQIS.js";
38
+ import "./chunk-LYSND7KR.js";
39
+ import "./chunk-55ZMG67I.js";
40
+ import "./chunk-H6BD2ELD.js";
41
+ import "./chunk-5IFG2VC4.js";
42
+ import "./chunk-HA2UEYZP.js";
43
+ import "./chunk-ZERZSAZL.js";
44
+ import "./chunk-QN5NZ3UQ.js";
45
+ import "./chunk-BR4QREVK.js";
46
+ import "./chunk-Z2Z3GUXZ.js";
47
+ import "./chunk-A4BMJM77.js";
48
+ import "./chunk-J2S4EL5Y.js";
49
+ export {
50
+ collectContextData,
51
+ contextCommand,
52
+ formatContextUsageText
53
+ };
@@ -0,0 +1,184 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ nextFireTime,
5
+ parseCron
6
+ } from "./chunk-O4PICXES.js";
7
+ import {
8
+ humanReadableCron
9
+ } from "./chunk-TW522KN6.js";
10
+ import {
11
+ CRON_TASKS_DISPLAY_PATH
12
+ } from "./chunk-BJ5HQ23U.js";
13
+ import "./chunk-OMX7CUOE.js";
14
+ import {
15
+ BaseDeclarativeTool,
16
+ BaseToolInvocation,
17
+ ToolDisplayNames,
18
+ ToolNames
19
+ } from "./chunk-A2ZIEEGJ.js";
20
+ import "./chunk-LXYWINWF.js";
21
+ import "./chunk-HA2UEYZP.js";
22
+ import "./chunk-Z2Z3GUXZ.js";
23
+ import {
24
+ init_esbuild_shims
25
+ } from "./chunk-A4BMJM77.js";
26
+ import {
27
+ __name
28
+ } from "./chunk-J2S4EL5Y.js";
29
+
30
+ // packages/core/src/tools/cron-create.ts
31
+ init_esbuild_shims();
32
+ var CronCreateInvocation = class extends BaseToolInvocation {
33
+ constructor(config, params) {
34
+ super(params);
35
+ this.config = config;
36
+ }
37
+ static {
38
+ __name(this, "CronCreateInvocation");
39
+ }
40
+ getDescription() {
41
+ return `${this.params.cron}: ${this.params.prompt}`;
42
+ }
43
+ /**
44
+ * The scheduled prompt fires against the agent at cron-trigger time
45
+ * and executes with full tool access. The CronCreateTool's L3 default
46
+ * must NOT be 'allow', because AUTO mode short-circuits at L4 when
47
+ * `finalPermission === 'allow'` — the classifier never runs and an
48
+ * arbitrary scheduled prompt is silently approved. `'ask'` routes
49
+ * the call through the classifier (or manual approval in DEFAULT).
50
+ */
51
+ async getDefaultPermission() {
52
+ return "ask";
53
+ }
54
+ async execute() {
55
+ const scheduler = this.config.getCronScheduler();
56
+ const recurring = this.params.recurring !== false;
57
+ const durable = this.params.durable === true;
58
+ try {
59
+ parseCron(this.params.cron);
60
+ nextFireTime(this.params.cron, /* @__PURE__ */ new Date());
61
+ const job = durable ? await scheduler.createDurable(
62
+ this.params.cron,
63
+ this.params.prompt,
64
+ recurring
65
+ ) : scheduler.create(this.params.cron, this.params.prompt, recurring);
66
+ const display = humanReadableCron(job.cronExpr);
67
+ const returnDisplay = `Scheduled ${job.id} (${display})${durable ? " [durable]" : ""}`;
68
+ const where = durable ? `Persisted to ${CRON_TASKS_DISPLAY_PATH}` : "Session-only (not written to disk, dies when Qwen Code exits)";
69
+ const llmContent = recurring ? `Scheduled recurring job ${job.id} (${job.cronExpr}). ${where}. Auto-expires after 7 days. Use CronDelete to cancel sooner.` : `Scheduled one-shot task ${job.id} (${job.cronExpr}). ${where}. It will fire once then auto-delete.`;
70
+ return { llmContent, returnDisplay };
71
+ } catch (error) {
72
+ const message = error instanceof Error ? error.message : String(error);
73
+ return {
74
+ llmContent: `Error creating cron job: ${message}`,
75
+ returnDisplay: message,
76
+ error: { message }
77
+ };
78
+ }
79
+ }
80
+ };
81
+ var CronCreateTool = class _CronCreateTool extends BaseDeclarativeTool {
82
+ constructor(config) {
83
+ super(
84
+ _CronCreateTool.Name,
85
+ ToolDisplayNames.CRON_CREATE,
86
+ `Schedule a prompt to be enqueued at a future time. Use for both recurring schedules and one-shot reminders.
87
+
88
+ Uses standard 5-field cron in the user's local timezone: minute hour day-of-month month day-of-week. "0 9 * * *" means 9am local \u2014 no timezone conversion needed.
89
+
90
+ ## One-shot tasks (recurring: false)
91
+
92
+ For "remind me at X" or "at <time>, do Y" requests \u2014 fire once then auto-delete.
93
+ Pin minute/hour/day-of-month/month to specific values:
94
+ "remind me at 2:30pm today to check the deploy" \u2192 cron: "30 14 <today_dom> <today_month> *", recurring: false
95
+ "tomorrow morning, run the smoke test" \u2192 cron: "57 8 <tomorrow_dom> <tomorrow_month> *", recurring: false
96
+
97
+ ## Recurring jobs (recurring: true, the default)
98
+
99
+ For "every N minutes" / "every hour" / "weekdays at 9am" requests:
100
+ "*/5 * * * *" (every 5 min), "0 * * * *" (hourly), "0 9 * * 1-5" (weekdays at 9am local)
101
+
102
+ ## Avoid the :00 and :30 minute marks when the task allows it
103
+
104
+ Every user who asks for "9am" gets \`0 9\`, and every user who asks for "hourly" gets \`0 *\` \u2014 which means requests from across the planet land on the API at the same instant. When the user's request is approximate, pick a minute that is NOT 0 or 30:
105
+ "every morning around 9" \u2192 "57 8 * * *" or "3 9 * * *" (not "0 9 * * *")
106
+ "hourly" \u2192 "7 * * * *" (not "0 * * * *")
107
+ "in an hour or so, remind me to..." \u2192 pick whatever minute you land on, don't round
108
+
109
+ Only use minute 0 or 30 when the user names that exact time and clearly means it ("at 9:00 sharp", "at half past", coordinating with a meeting). When in doubt, nudge a few minutes early or late \u2014 the user will not notice, and the fleet will.
110
+
111
+ ## Durability
112
+
113
+ By default (durable: false) the job lives only in this Qwen Code session \u2014 nothing is written to disk, and the job is gone when Qwen Code exits. Pass durable: true to write to ${CRON_TASKS_DISPLAY_PATH} so the job survives restarts. Only use durable: true when the user explicitly asks for persistence ("keep doing this every day", "set this up permanently"). Most "remind me in 5 minutes" requests should stay session-only.
114
+
115
+ ## Runtime behavior
116
+
117
+ Jobs only fire while the REPL is idle (not mid-query). The scheduler adds a small deterministic jitter on top of whatever you pick: recurring tasks fire up to 10% of their period late (max 15 min); one-shot tasks landing on :00 or :30 fire up to 90 s early. Picking an off-minute is still the bigger lever.
118
+
119
+ Recurring tasks auto-expire after 7 days \u2014 they fire one final time, then are deleted. This bounds how long a forgotten schedule keeps firing. Tell the user about the 7-day limit when scheduling recurring jobs.
120
+
121
+ Returns a job ID you can pass to CronDelete.`,
122
+ "other" /* Other */,
123
+ {
124
+ type: "object",
125
+ properties: {
126
+ cron: {
127
+ type: "string",
128
+ description: 'Standard 5-field cron expression in local time: "M H DoM Mon DoW" (e.g. "*/5 * * * *" = every 5 minutes, "30 14 28 2 *" = Feb 28 at 2:30pm local once).'
129
+ },
130
+ prompt: {
131
+ type: "string",
132
+ description: "The prompt to enqueue at each fire time."
133
+ },
134
+ recurring: {
135
+ type: "boolean",
136
+ description: 'true (default) = fire on every cron match until deleted or auto-expired after 7 days. false = fire once at the next match, then auto-delete. Use false for "remind me at X" one-shot requests with pinned minute/hour/dom/month.'
137
+ },
138
+ durable: {
139
+ type: "boolean",
140
+ description: `true = persist to ${CRON_TASKS_DISPLAY_PATH} and survive restarts. false (default) = in-memory only, dies when Qwen Code exits. Use true only when the user asks the task to survive across sessions.`
141
+ }
142
+ },
143
+ required: ["cron", "prompt"],
144
+ additionalProperties: false
145
+ },
146
+ true,
147
+ // isOutputMarkdown
148
+ false,
149
+ // canUpdateOutput
150
+ true,
151
+ // shouldDefer — scheduling is infrequent
152
+ false,
153
+ // alwaysLoad
154
+ "cron schedule reminder recurring timer"
155
+ );
156
+ this.config = config;
157
+ }
158
+ static {
159
+ __name(this, "CronCreateTool");
160
+ }
161
+ static Name = ToolNames.CRON_CREATE;
162
+ createInvocation(params) {
163
+ return new CronCreateInvocation(this.config, params);
164
+ }
165
+ /**
166
+ * Forward the prompt and cadence to the classifier. The scheduled
167
+ * prompt will be enqueued and executed against the agent at fire-time,
168
+ * so it must go through the same scrutiny as a direct command. Without
169
+ * this override the default projection returns `''` and the classifier
170
+ * sees `cron_create({})` — blind to what the agent will be asked to
171
+ * do in 8 hours.
172
+ */
173
+ toAutoClassifierInput(params) {
174
+ return {
175
+ cron: params.cron,
176
+ prompt: params.prompt,
177
+ recurring: params.recurring ?? true,
178
+ durable: params.durable ?? false
179
+ };
180
+ }
181
+ };
182
+ export {
183
+ CronCreateTool
184
+ };
@@ -1,13 +1,21 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ CRON_TASKS_DISPLAY_PATH,
5
+ removeCronTasks
6
+ } from "./chunk-BJ5HQ23U.js";
7
+ import "./chunk-OMX7CUOE.js";
3
8
  import {
4
9
  BaseDeclarativeTool,
5
10
  BaseToolInvocation,
6
11
  ToolDisplayNames,
7
12
  ToolNames
8
- } from "./chunk-2ZTWI7KH.js";
9
- import "./chunk-JXAZUMDW.js";
10
- import "./chunk-WFVXF3OM.js";
13
+ } from "./chunk-A2ZIEEGJ.js";
14
+ import "./chunk-LXYWINWF.js";
15
+ import {
16
+ getErrorMessage
17
+ } from "./chunk-HA2UEYZP.js";
18
+ import "./chunk-Z2Z3GUXZ.js";
11
19
  import {
12
20
  init_esbuild_shims
13
21
  } from "./chunk-A4BMJM77.js";
@@ -30,7 +38,22 @@ var CronDeleteInvocation = class extends BaseToolInvocation {
30
38
  }
31
39
  async execute() {
32
40
  const scheduler = this.config.getCronScheduler();
33
- const deleted = scheduler.delete(this.params.id);
41
+ let deleted;
42
+ try {
43
+ deleted = await scheduler.delete(this.params.id);
44
+ if (!deleted) {
45
+ deleted = await removeCronTasks(this.config.getProjectRoot(), [
46
+ this.params.id
47
+ ]) > 0;
48
+ }
49
+ } catch (error) {
50
+ const message = `Failed to cancel job ${this.params.id}: ${getErrorMessage(error)}`;
51
+ return {
52
+ llmContent: message,
53
+ returnDisplay: message,
54
+ error: { message }
55
+ };
56
+ }
34
57
  if (deleted) {
35
58
  const llmContent = `Cancelled job ${this.params.id}.`;
36
59
  const returnDisplay = `Cancelled ${this.params.id}`;
@@ -50,7 +73,7 @@ var CronDeleteTool = class _CronDeleteTool extends BaseDeclarativeTool {
50
73
  super(
51
74
  _CronDeleteTool.Name,
52
75
  ToolDisplayNames.CRON_DELETE,
53
- "Cancel a cron job previously scheduled with CronCreate. Removes it from the in-memory session store.",
76
+ `Cancel a cron job previously scheduled with CronCreate. Removes it from the in-memory session store or from ${CRON_TASKS_DISPLAY_PATH} (durable jobs).`,
54
77
  "other" /* Other */,
55
78
  {
56
79
  type: "object",
@@ -3,14 +3,20 @@
3
3
  import {
4
4
  humanReadableCron
5
5
  } from "./chunk-TW522KN6.js";
6
+ import {
7
+ CRON_TASKS_DISPLAY_PATH,
8
+ readCronTasks
9
+ } from "./chunk-BJ5HQ23U.js";
10
+ import "./chunk-OMX7CUOE.js";
6
11
  import {
7
12
  BaseDeclarativeTool,
8
13
  BaseToolInvocation,
9
14
  ToolDisplayNames,
10
15
  ToolNames
11
- } from "./chunk-2ZTWI7KH.js";
12
- import "./chunk-JXAZUMDW.js";
13
- import "./chunk-WFVXF3OM.js";
16
+ } from "./chunk-A2ZIEEGJ.js";
17
+ import "./chunk-LXYWINWF.js";
18
+ import "./chunk-HA2UEYZP.js";
19
+ import "./chunk-Z2Z3GUXZ.js";
14
20
  import {
15
21
  init_esbuild_shims
16
22
  } from "./chunk-A4BMJM77.js";
@@ -33,18 +39,45 @@ var CronListInvocation = class extends BaseToolInvocation {
33
39
  }
34
40
  async execute() {
35
41
  const scheduler = this.config.getCronScheduler();
36
- const jobs = scheduler.list();
42
+ let fileTasks;
43
+ try {
44
+ fileTasks = await readCronTasks(this.config.getProjectRoot());
45
+ } catch (error) {
46
+ const message = error instanceof Error ? error.message : String(error);
47
+ return {
48
+ llmContent: `Error listing cron jobs: ${message}`,
49
+ returnDisplay: message,
50
+ error: { message }
51
+ };
52
+ }
53
+ const jobs = [
54
+ ...fileTasks.map((task) => ({
55
+ id: task.id,
56
+ cron: task.cron,
57
+ prompt: task.prompt,
58
+ recurring: task.recurring,
59
+ durable: true
60
+ })),
61
+ ...scheduler.list().filter((job) => !job.durable).map((job) => ({
62
+ id: job.id,
63
+ cron: job.cronExpr,
64
+ prompt: job.prompt,
65
+ recurring: job.recurring,
66
+ durable: false
67
+ }))
68
+ ];
37
69
  if (jobs.length === 0) {
38
70
  const result = "No active cron jobs.";
39
71
  return { llmContent: result, returnDisplay: result };
40
72
  }
41
73
  const llmLines = jobs.map((job) => {
42
74
  const type = job.recurring ? "recurring" : "one-shot";
43
- return `${job.id} \u2014 ${job.cronExpr} (${type}) [session-only]: ${job.prompt}`;
75
+ const durability = job.durable ? "durable" : "session-only";
76
+ return `${job.id} \u2014 ${job.cron} (${type}) [${durability}]: ${job.prompt}`;
44
77
  });
45
78
  const llmContent = llmLines.join("\n");
46
79
  const displayLines = jobs.map(
47
- (job) => `${job.id} ${humanReadableCron(job.cronExpr)}`
80
+ (job) => `${job.id} ${humanReadableCron(job.cron)} [${job.durable ? "durable" : "session-only"}]`
48
81
  );
49
82
  const returnDisplay = displayLines.join("\n");
50
83
  return { llmContent, returnDisplay };
@@ -55,7 +88,7 @@ var CronListTool = class _CronListTool extends BaseDeclarativeTool {
55
88
  super(
56
89
  _CronListTool.Name,
57
90
  ToolDisplayNames.CRON_LIST,
58
- "List all cron jobs scheduled via CronCreate in this session.",
91
+ `List all cron jobs scheduled via CronCreate, both session-only and durable (${CRON_TASKS_DISPLAY_PATH}).`,
59
92
  "other" /* Other */,
60
93
  {
61
94
  type: "object",
@@ -582,7 +582,6 @@ var de_default = {
582
582
  "Please provide a directive. Usage: /fork <directive>": "Bitte geben Sie eine Anweisung an. Verwendung: /fork <Anweisung>",
583
583
  "Cannot fork while a response or tool call is in progress. Wait for it to finish or resolve the pending tool call.": "W\xE4hrend eine Antwort oder ein Tool-Aufruf l\xE4uft, kann kein Hintergrund-Fork erstellt werden. Warten Sie, bis der Vorgang abgeschlossen ist, oder bearbeiten Sie den ausstehenden Tool-Aufruf.",
584
584
  "Cannot fork before the first conversation turn.": "Vor der ersten Gespr\xE4chsrunde kann kein Fork erstellt werden.",
585
- "The /fork command requires the fork feature gate. Set QWEN_CODE_ENABLE_FORK_SUBAGENT=1 to enable it.": "Der Befehl /fork erfordert das Fork-Feature-Gate. Setzen Sie QWEN_CODE_ENABLE_FORK_SUBAGENT=1, um es zu aktivieren.",
586
585
  "The agent tool is unavailable; cannot fork.": "Das Agent-Tool ist nicht verf\xFCgbar; Fork kann nicht gestartet werden.",
587
586
  "Failed to launch fork: {{error}}": "Fork konnte nicht gestartet werden: {{error}}",
588
587
  "User launched a background fork via /fork: {{directive}}": "Benutzer hat \xFCber /fork einen Hintergrund-Fork gestartet: {{directive}}",
@@ -1048,6 +1047,24 @@ var de_default = {
1048
1047
  "Found {{count}} TOML command file:": "{{count}} TOML-Befehlsdatei gefunden:",
1049
1048
  "Found {{count}} TOML command files:": "{{count}} TOML-Befehlsdateien gefunden:",
1050
1049
  "Current tasks": "Aktuelle Aufgaben",
1050
+ "Background tasks": "Hintergrundaufgaben",
1051
+ "No tasks currently running": "Derzeit laufen keine Aufgaben",
1052
+ "No entry to show.": "Kein Eintrag zum Anzeigen.",
1053
+ "needs approval": "wartet auf Genehmigung",
1054
+ "Background agent needs approval": "Hintergrund-Agent wartet auf Genehmigung",
1055
+ "Approve or deny the request above": "Genehmigen oder lehnen Sie die obige Anfrage ab",
1056
+ Running: "L\xE4uft",
1057
+ Paused: "Pausiert",
1058
+ Completed: "Abgeschlossen",
1059
+ Failed: "Fehlgeschlagen",
1060
+ Stopped: "Gestoppt",
1061
+ Shell: "Shell",
1062
+ Monitor: "Monitor",
1063
+ Command: "Befehl",
1064
+ Dream: "Dream",
1065
+ "[dream] memory consolidation": "[dream] Speicher-Konsolidierung",
1066
+ "[dream] memory consolidation (reviewing {{count}} session)": "[dream] Speicher-Konsolidierung (pr\xFCft {{count}} Sitzung)",
1067
+ "[dream] memory consolidation (reviewing {{count}} sessions)": "[dream] Speicher-Konsolidierung (pr\xFCft {{count}} Sitzungen)",
1051
1068
  "... and {{count}} more": "... und {{count}} weitere",
1052
1069
  "The TOML format is deprecated. Would you like to migrate them to Markdown format?": "Das TOML-Format ist veraltet. M\xF6chten Sie sie ins Markdown-Format migrieren?",
1053
1070
  "(Backups will be created and original files will be preserved)": "(Backups werden erstellt und Originaldateien werden beibehalten)",
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  wrapper_default
5
- } from "./chunk-SZOEIL6S.js";
5
+ } from "./chunk-H6BD2ELD.js";
6
6
  import "./chunk-5IFG2VC4.js";
7
7
  import {
8
8
  init_esbuild_shims
@@ -8,13 +8,13 @@ import {
8
8
  import "./chunk-7RYW5LQV.js";
9
9
  import {
10
10
  ChannelBase
11
- } from "./chunk-USE2VQ5P.js";
11
+ } from "./chunk-HED55F43.js";
12
12
  import "./chunk-UFC57OYT.js";
13
13
  import "./chunk-K5PGHDBN.js";
14
14
  import "./chunk-UWCTAVOD.js";
15
15
  import {
16
16
  wrapper_default
17
- } from "./chunk-SZOEIL6S.js";
17
+ } from "./chunk-H6BD2ELD.js";
18
18
  import "./chunk-5IFG2VC4.js";
19
19
  import "./chunk-QN5NZ3UQ.js";
20
20
  import "./chunk-BR4QREVK.js";
@@ -11,10 +11,10 @@ import {
11
11
  sendMessage,
12
12
  sendTyping,
13
13
  uploadToCdn
14
- } from "./chunk-C6WMLUNB.js";
14
+ } from "./chunk-Y7KMDUEP.js";
15
15
  import {
16
16
  ChannelBase
17
- } from "./chunk-USE2VQ5P.js";
17
+ } from "./chunk-HED55F43.js";
18
18
  import "./chunk-UFC57OYT.js";
19
19
  import "./chunk-K5PGHDBN.js";
20
20
  import {
@@ -11,7 +11,7 @@ import {
11
11
  import "./chunk-7RYW5LQV.js";
12
12
  import {
13
13
  ChannelBase
14
- } from "./chunk-USE2VQ5P.js";
14
+ } from "./chunk-HED55F43.js";
15
15
  import "./chunk-UFC57OYT.js";
16
16
  import "./chunk-K5PGHDBN.js";
17
17
  import {
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-KQIKOTQJ.js";
7
7
  import {
8
8
  ChannelBase
9
- } from "./chunk-USE2VQ5P.js";
9
+ } from "./chunk-HED55F43.js";
10
10
  import "./chunk-UFC57OYT.js";
11
11
  import "./chunk-K5PGHDBN.js";
12
12
  import {
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  StructuredToolError,
5
5
  checkPriorRead
6
- } from "./chunk-CNHFPN7T.js";
6
+ } from "./chunk-7KPZFE5A.js";
7
7
  import {
8
8
  CommitAttributionService,
9
9
  DEFAULT_DIFF_OPTIONS,
@@ -13,22 +13,22 @@ import {
13
13
  getDiffStat,
14
14
  needsUtf8Bom,
15
15
  safeLiteralReplace
16
- } from "./chunk-QCG6KPNM.js";
16
+ } from "./chunk-6T7Y7USE.js";
17
17
  import "./chunk-K5PGHDBN.js";
18
- import "./chunk-SKBPNJEW.js";
18
+ import "./chunk-HQUWWSSP.js";
19
19
  import "./chunk-O4PICXES.js";
20
20
  import "./chunk-TW522KN6.js";
21
- import "./chunk-AJIR24J2.js";
22
- import "./chunk-HGJPQK33.js";
23
- import "./chunk-XBFVXFB2.js";
21
+ import "./chunk-BJ5HQ23U.js";
22
+ import "./chunk-SFRV6BGY.js";
23
+ import "./chunk-ZOFNJQNJ.js";
24
+ import "./chunk-WPTCDQN6.js";
25
+ import "./chunk-OMX7CUOE.js";
24
26
  import "./chunk-MLZQVCF3.js";
25
- import "./chunk-PAEBHDIO.js";
26
27
  import "./chunk-LD2XBG6Z.js";
27
- import "./chunk-ICOI4E4S.js";
28
- import "./chunk-KC6ZMJ5X.js";
28
+ import "./chunk-CPVI5J2L.js";
29
+ import "./chunk-ZMIBJS45.js";
29
30
  import "./chunk-77WXWU44.js";
30
- import "./chunk-JUGRPQAB.js";
31
- import "./chunk-64WXLC72.js";
31
+ import "./chunk-B4ZF2KSI.js";
32
32
  import {
33
33
  FileOperationEvent,
34
34
  ReadFileTool,
@@ -36,27 +36,28 @@ import {
36
36
  getLanguageFromFilePath,
37
37
  getSpecificMimeType,
38
38
  logFileOperation
39
- } from "./chunk-ZK4AMNIU.js";
39
+ } from "./chunk-RON7LFNH.js";
40
40
  import "./chunk-3PJXIDKI.js";
41
41
  import "./chunk-UWCTAVOD.js";
42
42
  import "./chunk-OFEVLU4C.js";
43
43
  import {
44
44
  isAnyAutoMemPath
45
- } from "./chunk-JVQOQ3OU.js";
46
- import "./chunk-P4J26VDS.js";
47
- import "./chunk-CNSMKPK6.js";
45
+ } from "./chunk-IQHSD7K5.js";
46
+ import "./chunk-LYRSMKLS.js";
47
+ import "./chunk-QILTEBWS.js";
48
48
  import {
49
49
  BaseDeclarativeTool,
50
50
  ToolDisplayNames,
51
51
  ToolNames
52
- } from "./chunk-2ZTWI7KH.js";
53
- import "./chunk-MVIVIPCU.js";
54
- import "./chunk-GX7VH5JQ.js";
55
- import "./chunk-UAMOBVVW.js";
56
- import "./chunk-LR62TEET.js";
57
- import "./chunk-Y7R6H6FT.js";
58
- import "./chunk-BNESGOSJ.js";
59
- import "./chunk-SZOEIL6S.js";
52
+ } from "./chunk-A2ZIEEGJ.js";
53
+ import "./chunk-IDYDPBBN.js";
54
+ import "./chunk-FIQECJTQ.js";
55
+ import "./chunk-64WXLC72.js";
56
+ import "./chunk-LXYWINWF.js";
57
+ import "./chunk-NNIYWQIS.js";
58
+ import "./chunk-LYSND7KR.js";
59
+ import "./chunk-55ZMG67I.js";
60
+ import "./chunk-H6BD2ELD.js";
60
61
  import "./chunk-5IFG2VC4.js";
61
62
  import {
62
63
  createDebugLogger,
@@ -64,11 +65,11 @@ import {
64
65
  makeRelative,
65
66
  shortenPath,
66
67
  unescapePath
67
- } from "./chunk-JXAZUMDW.js";
68
+ } from "./chunk-HA2UEYZP.js";
68
69
  import "./chunk-ZERZSAZL.js";
69
70
  import "./chunk-QN5NZ3UQ.js";
70
71
  import "./chunk-BR4QREVK.js";
71
- import "./chunk-WFVXF3OM.js";
72
+ import "./chunk-Z2Z3GUXZ.js";
72
73
  import {
73
74
  init_esbuild_shims
74
75
  } from "./chunk-A4BMJM77.js";
@@ -99,6 +99,7 @@ var en_default = {
99
99
  "Analyzes the project and creates a tailored QWEN.md file.": "Analyzes the project and creates a tailored QWEN.md file.",
100
100
  "List available Qwen Code tools. Usage: /tools [desc]": "List available Qwen Code tools. Usage: /tools [desc]",
101
101
  "Open the skills panel (browse, search, toggle, pick).": "Open the skills panel (browse, search, toggle, pick).",
102
+ "Move this session to a new working directory": "Move this session to a new working directory",
102
103
  // SkillsManagerDialog (the panel `/skills` opens)
103
104
  "Manage Skills": "Manage Skills",
104
105
  "Skills configuration saved.": "Skills configuration saved.",
@@ -172,10 +173,11 @@ var en_default = {
172
173
  'Theme "{{themeName}}" not found in selected scope.': 'Theme "{{themeName}}" not found in selected scope.',
173
174
  "Clear conversation history and free up context": "Clear conversation history and free up context",
174
175
  "Compresses the context by replacing it with a summary.": "Compresses the context by replacing it with a summary.",
176
+ "Fast context compression without AI. Strips old tool outputs and thinking parts.": "Fast context compression without AI. Strips old tool outputs and thinking parts.",
175
177
  "open full Qwen Code documentation in your browser": "open full Qwen Code documentation in your browser",
176
178
  "Configuration not available.": "Configuration not available.",
177
179
  "Connect an LLM provider": "Connect an LLM provider",
178
- "Copy the last AI response to clipboard (/copy N for Nth-latest)": "Copy the last AI response to clipboard (/copy N for Nth-latest)",
180
+ "Copy to clipboard: reply, code (by lang), LaTeX, or Mermaid. N = Nth-latest message, index = block number": "Copy to clipboard: reply, code (by lang), LaTeX, or Mermaid. N = Nth-latest message, index = block number",
179
181
  "Show working-tree change stats versus HEAD": "Show working-tree change stats versus HEAD",
180
182
  "Could not determine current working directory.": "Could not determine current working directory.",
181
183
  "Failed to compute git diff stats": "Failed to compute git diff stats",
@@ -480,6 +482,7 @@ var en_default = {
480
482
  "Update all extensions.": "Update all extensions.",
481
483
  "The name of the extension to update.": "The name of the extension to update.",
482
484
  "Either an extension name or --all must be provided": "Either an extension name or --all must be provided",
485
+ "List installed extensions": "List installed extensions",
483
486
  "Lists installed extensions.": "Lists installed extensions.",
484
487
  "Path:": "Path:",
485
488
  "Source:": "Source:",
@@ -676,7 +679,6 @@ var en_default = {
676
679
  "Please provide a directive. Usage: /fork <directive>": "Please provide a directive. Usage: /fork <directive>",
677
680
  "Cannot fork while a response or tool call is in progress. Wait for it to finish or resolve the pending tool call.": "Cannot fork while a response or tool call is in progress. Wait for it to finish or resolve the pending tool call.",
678
681
  "Cannot fork before the first conversation turn.": "Cannot fork before the first conversation turn.",
679
- "The /fork command requires the fork feature gate. Set QWEN_CODE_ENABLE_FORK_SUBAGENT=1 to enable it.": "The /fork command requires the fork feature gate. Set QWEN_CODE_ENABLE_FORK_SUBAGENT=1 to enable it.",
680
682
  "The agent tool is unavailable; cannot fork.": "The agent tool is unavailable; cannot fork.",
681
683
  "Failed to launch fork: {{error}}": "Failed to launch fork: {{error}}",
682
684
  "the background agent could not be started.": "the background agent could not be started.",
@@ -733,6 +735,7 @@ var en_default = {
733
735
  "Usage: /forget <memory text to remove>": "Usage: /forget <memory text to remove>",
734
736
  "No managed auto-memory entries matched: {{query}}": "No managed auto-memory entries matched: {{query}}",
735
737
  "Consolidate managed auto-memory topic files.": "Consolidate managed auto-memory topic files.",
738
+ "Import MCP servers from Claude configs": "Import MCP servers from Claude configs",
736
739
  "Open MCP management dialog": "Open MCP management dialog",
737
740
  "Could not retrieve tool registry.": "Could not retrieve tool registry.",
738
741
  "Successfully authenticated and refreshed tools for '{{name}}'.": "Successfully authenticated and refreshed tools for '{{name}}'.",
@@ -1162,6 +1165,9 @@ var en_default = {
1162
1165
  "Background tasks": "Background tasks",
1163
1166
  "No tasks currently running": "No tasks currently running",
1164
1167
  "No entry to show.": "No entry to show.",
1168
+ "needs approval": "needs approval",
1169
+ "Background agent needs approval": "Background agent needs approval",
1170
+ "Approve or deny the request above": "Approve or deny the request above",
1165
1171
  Running: "Running",
1166
1172
  Paused: "Paused",
1167
1173
  Completed: "Completed",
@@ -1534,6 +1540,7 @@ var en_default = {
1534
1540
  "[{{label}}] failed: {{error}}": "[{{label}}] failed: {{error}}",
1535
1541
  "Loading suggestions...": "Loading suggestions...",
1536
1542
  "Show per-item context usage breakdown.": "Show per-item context usage breakdown.",
1543
+ "No compression needed.": "No compression needed.",
1537
1544
  // ============================================================================
1538
1545
  // Stats
1539
1546
  // ============================================================================