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

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 (115) hide show
  1. package/bundled/loop/SKILL.md +2 -1
  2. package/bundled/qc-helper/docs/common-workflow.md +4 -4
  3. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +13 -6
  5. package/bundled/qc-helper/docs/configuration/settings.md +90 -87
  6. package/bundled/qc-helper/docs/features/dual-output.md +37 -3
  7. package/bundled/qc-helper/docs/features/skills.md +29 -3
  8. package/bundled/qc-helper/docs/features/sub-agents.md +5 -4
  9. package/bundled/qc-helper/docs/qwen-serve.md +32 -23
  10. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +30 -30
  11. package/bundled/review/SKILL.md +3 -1
  12. package/bundled/simplify/SKILL.md +1 -1
  13. package/chunks/{agent-LOTJK6AH.js → agent-WK5GYOPC.js} +21 -20
  14. package/chunks/{agent-headless-TU3EPMYU.js → agent-headless-KZJALDQF.js} +21 -20
  15. package/chunks/{anthropicContentGenerator-2HBRNQ3B.js → anthropicContentGenerator-DCI26OQF.js} +4 -4
  16. package/chunks/{askUserQuestion-OGCMIBQM.js → askUserQuestion-NDNFGC35.js} +2 -2
  17. package/chunks/{ca-BARBRL6N.js → ca-RK4QPLIX.js} +18 -1
  18. package/chunks/{chunk-BIVG75CP.js → chunk-26QELEL2.js} +1 -1
  19. package/chunks/{chunk-LBP46COL.js → chunk-27STU35P.js} +83 -15
  20. package/chunks/{chunk-ZTZ4DDQE.js → chunk-3NRO6NHX.js} +2 -2
  21. package/chunks/{chunk-XV4HCEVI.js → chunk-6WPY6ES3.js} +41 -22
  22. package/chunks/{chunk-A7B4ISQP.js → chunk-B4ZF2KSI.js} +1 -1
  23. package/chunks/chunk-BJ5HQ23U.js +178 -0
  24. package/chunks/{chunk-PL3MVCWD.js → chunk-BW7CMDF3.js} +11 -11
  25. package/chunks/{chunk-OHEGWO4L.js → chunk-CPVI5J2L.js} +1 -1
  26. package/chunks/{chunk-LEJ42GNY.js → chunk-DYCU43TE.js} +6 -6
  27. package/chunks/{chunk-6YIUGZTC.js → chunk-E322ZT4P.js} +281 -132
  28. package/chunks/{chunk-SEGYWKIH.js → chunk-FIQECJTQ.js} +1 -1
  29. package/chunks/{chunk-HR7SV7AY.js → chunk-HA2UEYZP.js} +6 -2
  30. package/chunks/{chunk-2Y5SYSD3.js → chunk-IDYDPBBN.js} +3 -3
  31. package/chunks/{chunk-3HTIVKZE.js → chunk-IQHSD7K5.js} +1 -1
  32. package/chunks/{chunk-MFBBBTNY.js → chunk-JZFEL3RB.js} +1 -1
  33. package/chunks/{chunk-B7HXHOHU.js → chunk-LXYWINWF.js} +1 -1
  34. package/chunks/{chunk-IDX6COTE.js → chunk-LYRSMKLS.js} +2 -2
  35. package/chunks/{chunk-M6VTDSVR.js → chunk-LYSND7KR.js} +9 -4
  36. package/chunks/{chunk-EYENRK4D.js → chunk-NNIYWQIS.js} +1 -1
  37. package/chunks/chunk-OMX7CUOE.js +356 -0
  38. package/chunks/{chunk-R7ODSGTK.js → chunk-OT6JA3KQ.js} +2 -2
  39. package/chunks/{chunk-IWAYOW5Q.js → chunk-Q3NN2XUW.js} +6661 -4210
  40. package/chunks/{chunk-72LDN5PP.js → chunk-QP4R5FTG.js} +1 -1
  41. package/chunks/{chunk-7BCMOPIM.js → chunk-RLFLJVHU.js} +31 -12
  42. package/chunks/{chunk-3DHXZ6EV.js → chunk-SFRV6BGY.js} +6 -4
  43. package/chunks/{chunk-JTQAQBTV.js → chunk-VU6A2OBJ.js} +20 -6
  44. package/chunks/{chunk-HLPLOD42.js → chunk-VXHYMZXW.js} +1 -1
  45. package/chunks/{chunk-J5MDQKJL.js → chunk-WPTCDQN6.js} +2 -347
  46. package/chunks/{chunk-SNGELLWX.js → chunk-ZMIBJS45.js} +1 -1
  47. package/chunks/{chunk-XBY7E2FX.js → chunk-ZOFNJQNJ.js} +6 -4
  48. package/chunks/computer-use-4ELNIZMF.js +2052 -0
  49. package/chunks/{contextCommand-K347QT6O.js → contextCommand-E2V26QGD.js} +23 -22
  50. package/chunks/cron-create-7CXEAJ2K.js +184 -0
  51. package/chunks/{cron-delete-WKWSJZQA.js → cron-delete-2FQYYNQ6.js} +27 -4
  52. package/chunks/{cron-list-B52XEXAZ.js → cron-list-QCAJ73XE.js} +39 -6
  53. package/chunks/{de-YGKK2BC4.js → de-FGPM4KW5.js} +18 -1
  54. package/chunks/{dist-4LXD6L6X.js → dist-2UCAYOX7.js} +2 -2
  55. package/chunks/{dist-H6ONXVLG.js → dist-33LHH26D.js} +1 -1
  56. package/chunks/{dist-PK7DFCAW.js → dist-KF43SZZV.js} +1 -1
  57. package/chunks/{dist-KAZ3SEBX.js → dist-PF2IYSMD.js} +1 -1
  58. package/chunks/{edit-KU4PJGEX.js → edit-IC3ECG44.js} +23 -24
  59. package/chunks/{en-DHGYHIHX.js → en-VP6XPGEC.js} +5 -2
  60. package/chunks/{enter-worktree-PPYIDCWI.js → enter-worktree-ETQWM7BB.js} +21 -20
  61. package/chunks/{enterPlanMode-5CZDMCB4.js → enterPlanMode-VL3F45RF.js} +21 -20
  62. package/chunks/{exit-worktree-UY3CGHKC.js → exit-worktree-F5BJXBFB.js} +21 -20
  63. package/chunks/{exitPlanMode-3DN4QNSG.js → exitPlanMode-VOC7G5FJ.js} +71 -31
  64. package/chunks/{fr-JXBKPJKQ.js → fr-ATYBVCLT.js} +18 -1
  65. package/chunks/{geminiContentGenerator-7A6I2RWB.js → geminiContentGenerator-7D2QZ5FE.js} +4 -4
  66. package/chunks/{glob-OFNQSS52.js → glob-XTABUPPR.js} +21 -20
  67. package/chunks/{grep-6J2MSUM5.js → grep-MRCXYH2N.js} +30 -26
  68. package/chunks/{ja-TGPZSP2B.js → ja-W2QEA2OI.js} +18 -1
  69. package/chunks/{keychain-token-storage-6IU6ORQN.js → keychain-token-storage-QSTRHKKL.js} +2 -2
  70. package/chunks/{ls-V3O6A5PT.js → ls-XVGXRYWD.js} +3 -3
  71. package/chunks/{lsp-G2OCIFUA.js → lsp-S6SHPULC.js} +2 -2
  72. package/chunks/{monitor-FKLHV423.js → monitor-LNRRNJJB.js} +21 -20
  73. package/chunks/{notebook-edit-KTBYFKWG.js → notebook-edit-IS3UYVGM.js} +22 -21
  74. package/chunks/{openaiContentGenerator-L5KSWQY7.js → openaiContentGenerator-P772OZ6K.js} +11 -11
  75. package/chunks/{pt-TIBG6BIO.js → pt-ZKEWJFBW.js} +18 -1
  76. package/chunks/{qwenContentGenerator-PYOXLMBW.js → qwenContentGenerator-Y6YGZRHH.js} +23 -22
  77. package/chunks/{qwenOAuth2-2KCKWDCF.js → qwenOAuth2-KK433U33.js} +4 -4
  78. package/chunks/{read-file-JQVRK4NU.js → read-file-2JIJ646W.js} +8 -8
  79. package/chunks/{ripGrep-2L4LPNAJ.js → ripGrep-Z74CN4MW.js} +21 -20
  80. package/chunks/{ru-JBCHCK4L.js → ru-VEKTPJ74.js} +18 -1
  81. package/chunks/{scheduler-FGNXY4JQ.js → scheduler-KFG4TT3A.js} +21 -20
  82. package/chunks/{send-message-SZFWNOCL.js → send-message-SMNR5DBG.js} +2 -2
  83. package/chunks/{serve-N2IBLA3G.js → serve-XDZAE3KF.js} +998 -278
  84. package/chunks/{shell-PTEG6UX4.js → shell-BTAJJJHO.js} +21 -20
  85. package/chunks/{skill-X4NTK4NH.js → skill-LSM726DP.js} +10 -10
  86. package/chunks/{src-GLLQ3R5W.js → src-JMUZP4A4.js} +44 -26
  87. package/chunks/{syntheticOutput-IKAY5F6X.js → syntheticOutput-KMNF7YG6.js} +3 -3
  88. package/chunks/{task-create-MQICOJFV.js → task-create-LIJHK75G.js} +7 -6
  89. package/chunks/{task-list-RIHJCH32.js → task-list-S4GNSILM.js} +6 -5
  90. package/chunks/{task-stop-FWZRFANS.js → task-stop-3GBRYJHM.js} +2 -2
  91. package/chunks/{task-update-2LHPXOYM.js → task-update-F3UTVJMS.js} +7 -6
  92. package/chunks/{team-create-2E4PF4KN.js → team-create-S5ZBN464.js} +21 -20
  93. package/chunks/{team-delete-DAUDQS4J.js → team-delete-54434EB7.js} +6 -5
  94. package/chunks/{todoWrite-HTUACZES.js → todoWrite-4ENGSBUX.js} +4 -4
  95. package/chunks/{tool-search-KTVULRES.js → tool-search-NUOEJ4LF.js} +8 -8
  96. package/chunks/{web-fetch-CZ7LLKPE.js → web-fetch-RHZMF3MP.js} +4 -4
  97. package/chunks/{workflow-L2ZUUDT2.js → workflow-ZI3ZXNU6.js} +503 -49
  98. package/chunks/{write-file-ZEB2JDYH.js → write-file-MHQLLZWY.js} +22 -21
  99. package/chunks/{zh-7H5OQC4I.js → zh-OIXDDQHB.js} +5 -2
  100. package/chunks/{zh-TW-P4IDHD3M.js → zh-TW-6YFNCKTA.js} +5 -2
  101. package/cli-entry.js +19 -0
  102. package/cli.js +6645 -4971
  103. package/locales/ca.js +20 -2
  104. package/locales/de.js +21 -2
  105. package/locales/en.js +7 -4
  106. package/locales/fr.js +22 -2
  107. package/locales/ja.js +22 -2
  108. package/locales/pt.js +21 -2
  109. package/locales/ru.js +20 -2
  110. package/locales/zh-TW.js +6 -4
  111. package/locales/zh.js +6 -4
  112. package/package.json +4 -3
  113. package/chunks/chunk-SKBPNJEW.js +0 -45
  114. package/chunks/computer-use-3RH2DOM6.js +0 -825
  115. package/chunks/cron-create-YJL3KFWI.js +0 -140
@@ -4,41 +4,42 @@ import {
4
4
  collectContextData,
5
5
  contextCommand,
6
6
  formatContextUsageText
7
- } from "./chunk-LEJ42GNY.js";
8
- import "./chunk-PL3MVCWD.js";
9
- import "./chunk-IWAYOW5Q.js";
7
+ } from "./chunk-DYCU43TE.js";
8
+ import "./chunk-BW7CMDF3.js";
9
+ import "./chunk-Q3NN2XUW.js";
10
10
  import "./chunk-K5PGHDBN.js";
11
- import "./chunk-SKBPNJEW.js";
12
- import "./chunk-HLPLOD42.js";
11
+ import "./chunk-VXHYMZXW.js";
13
12
  import "./chunk-O4PICXES.js";
14
13
  import "./chunk-TW522KN6.js";
15
- import "./chunk-3DHXZ6EV.js";
16
- import "./chunk-XBY7E2FX.js";
17
- import "./chunk-J5MDQKJL.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";
18
19
  import "./chunk-MLZQVCF3.js";
19
20
  import "./chunk-LD2XBG6Z.js";
20
- import "./chunk-OHEGWO4L.js";
21
- import "./chunk-SNGELLWX.js";
21
+ import "./chunk-CPVI5J2L.js";
22
+ import "./chunk-ZMIBJS45.js";
22
23
  import "./chunk-77WXWU44.js";
23
- import "./chunk-A7B4ISQP.js";
24
- import "./chunk-6YIUGZTC.js";
24
+ import "./chunk-B4ZF2KSI.js";
25
+ import "./chunk-E322ZT4P.js";
25
26
  import "./chunk-3PJXIDKI.js";
26
27
  import "./chunk-UWCTAVOD.js";
27
28
  import "./chunk-OFEVLU4C.js";
28
- import "./chunk-3HTIVKZE.js";
29
- import "./chunk-IDX6COTE.js";
30
- import "./chunk-BIVG75CP.js";
31
- import "./chunk-XV4HCEVI.js";
32
- import "./chunk-2Y5SYSD3.js";
33
- import "./chunk-SEGYWKIH.js";
29
+ import "./chunk-IQHSD7K5.js";
30
+ import "./chunk-LYRSMKLS.js";
31
+ import "./chunk-26QELEL2.js";
32
+ import "./chunk-6WPY6ES3.js";
33
+ import "./chunk-IDYDPBBN.js";
34
+ import "./chunk-FIQECJTQ.js";
34
35
  import "./chunk-64WXLC72.js";
35
- import "./chunk-B7HXHOHU.js";
36
- import "./chunk-EYENRK4D.js";
37
- import "./chunk-M6VTDSVR.js";
36
+ import "./chunk-LXYWINWF.js";
37
+ import "./chunk-NNIYWQIS.js";
38
+ import "./chunk-LYSND7KR.js";
38
39
  import "./chunk-55ZMG67I.js";
39
40
  import "./chunk-H6BD2ELD.js";
40
41
  import "./chunk-5IFG2VC4.js";
41
- import "./chunk-HR7SV7AY.js";
42
+ import "./chunk-HA2UEYZP.js";
42
43
  import "./chunk-ZERZSAZL.js";
43
44
  import "./chunk-QN5NZ3UQ.js";
44
45
  import "./chunk-BR4QREVK.js";
@@ -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-6WPY6ES3.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,12 +1,20 @@
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-XV4HCEVI.js";
9
- import "./chunk-HR7SV7AY.js";
13
+ } from "./chunk-6WPY6ES3.js";
14
+ import "./chunk-LXYWINWF.js";
15
+ import {
16
+ getErrorMessage
17
+ } from "./chunk-HA2UEYZP.js";
10
18
  import "./chunk-Z2Z3GUXZ.js";
11
19
  import {
12
20
  init_esbuild_shims
@@ -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,13 +3,19 @@
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-XV4HCEVI.js";
12
- import "./chunk-HR7SV7AY.js";
16
+ } from "./chunk-6WPY6ES3.js";
17
+ import "./chunk-LXYWINWF.js";
18
+ import "./chunk-HA2UEYZP.js";
13
19
  import "./chunk-Z2Z3GUXZ.js";
14
20
  import {
15
21
  init_esbuild_shims
@@ -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)",
@@ -11,10 +11,10 @@ import {
11
11
  sendMessage,
12
12
  sendTyping,
13
13
  uploadToCdn
14
- } from "./chunk-72LDN5PP.js";
14
+ } from "./chunk-QP4R5FTG.js";
15
15
  import {
16
16
  ChannelBase
17
- } from "./chunk-JTQAQBTV.js";
17
+ } from "./chunk-VU6A2OBJ.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-JTQAQBTV.js";
14
+ } from "./chunk-VU6A2OBJ.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-JTQAQBTV.js";
9
+ } from "./chunk-VU6A2OBJ.js";
10
10
  import "./chunk-UFC57OYT.js";
11
11
  import "./chunk-K5PGHDBN.js";
12
12
  import {
@@ -8,7 +8,7 @@ import {
8
8
  import "./chunk-7RYW5LQV.js";
9
9
  import {
10
10
  ChannelBase
11
- } from "./chunk-JTQAQBTV.js";
11
+ } from "./chunk-VU6A2OBJ.js";
12
12
  import "./chunk-UFC57OYT.js";
13
13
  import "./chunk-K5PGHDBN.js";
14
14
  import "./chunk-UWCTAVOD.js";
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  StructuredToolError,
5
5
  checkPriorRead
6
- } from "./chunk-MFBBBTNY.js";
6
+ } from "./chunk-JZFEL3RB.js";
7
7
  import {
8
8
  CommitAttributionService,
9
9
  DEFAULT_DIFF_OPTIONS,
@@ -13,21 +13,22 @@ import {
13
13
  getDiffStat,
14
14
  needsUtf8Bom,
15
15
  safeLiteralReplace
16
- } from "./chunk-IWAYOW5Q.js";
16
+ } from "./chunk-Q3NN2XUW.js";
17
17
  import "./chunk-K5PGHDBN.js";
18
- import "./chunk-SKBPNJEW.js";
19
- import "./chunk-HLPLOD42.js";
18
+ import "./chunk-VXHYMZXW.js";
20
19
  import "./chunk-O4PICXES.js";
21
20
  import "./chunk-TW522KN6.js";
22
- import "./chunk-3DHXZ6EV.js";
23
- import "./chunk-XBY7E2FX.js";
24
- import "./chunk-J5MDQKJL.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";
25
26
  import "./chunk-MLZQVCF3.js";
26
27
  import "./chunk-LD2XBG6Z.js";
27
- import "./chunk-OHEGWO4L.js";
28
- import "./chunk-SNGELLWX.js";
28
+ import "./chunk-CPVI5J2L.js";
29
+ import "./chunk-ZMIBJS45.js";
29
30
  import "./chunk-77WXWU44.js";
30
- import "./chunk-A7B4ISQP.js";
31
+ import "./chunk-B4ZF2KSI.js";
31
32
  import {
32
33
  FileOperationEvent,
33
34
  ReadFileTool,
@@ -35,26 +36,26 @@ import {
35
36
  getLanguageFromFilePath,
36
37
  getSpecificMimeType,
37
38
  logFileOperation
38
- } from "./chunk-6YIUGZTC.js";
39
+ } from "./chunk-E322ZT4P.js";
39
40
  import "./chunk-3PJXIDKI.js";
40
41
  import "./chunk-UWCTAVOD.js";
41
42
  import "./chunk-OFEVLU4C.js";
42
43
  import {
43
44
  isAnyAutoMemPath
44
- } from "./chunk-3HTIVKZE.js";
45
- import "./chunk-IDX6COTE.js";
46
- import "./chunk-BIVG75CP.js";
45
+ } from "./chunk-IQHSD7K5.js";
46
+ import "./chunk-LYRSMKLS.js";
47
+ import "./chunk-26QELEL2.js";
47
48
  import {
48
49
  BaseDeclarativeTool,
49
50
  ToolDisplayNames,
50
51
  ToolNames
51
- } from "./chunk-XV4HCEVI.js";
52
- import "./chunk-2Y5SYSD3.js";
53
- import "./chunk-SEGYWKIH.js";
52
+ } from "./chunk-6WPY6ES3.js";
53
+ import "./chunk-IDYDPBBN.js";
54
+ import "./chunk-FIQECJTQ.js";
54
55
  import "./chunk-64WXLC72.js";
55
- import "./chunk-B7HXHOHU.js";
56
- import "./chunk-EYENRK4D.js";
57
- import "./chunk-M6VTDSVR.js";
56
+ import "./chunk-LXYWINWF.js";
57
+ import "./chunk-NNIYWQIS.js";
58
+ import "./chunk-LYSND7KR.js";
58
59
  import "./chunk-55ZMG67I.js";
59
60
  import "./chunk-H6BD2ELD.js";
60
61
  import "./chunk-5IFG2VC4.js";
@@ -64,7 +65,7 @@ import {
64
65
  makeRelative,
65
66
  shortenPath,
66
67
  unescapePath
67
- } from "./chunk-HR7SV7AY.js";
68
+ } from "./chunk-HA2UEYZP.js";
68
69
  import "./chunk-ZERZSAZL.js";
69
70
  import "./chunk-QN5NZ3UQ.js";
70
71
  import "./chunk-BR4QREVK.js";
@@ -631,12 +632,10 @@ var EditToolInvocation = class {
631
632
  if (this.params.old_string === "") {
632
633
  return `Create ${shortenPath(relativePath)}`;
633
634
  }
634
- const oldStringSnippet = this.params.old_string.split("\n")[0].substring(0, 30) + (this.params.old_string.length > 30 ? "..." : "");
635
- const newStringSnippet = this.params.new_string.split("\n")[0].substring(0, 30) + (this.params.new_string.length > 30 ? "..." : "");
636
635
  if (this.params.old_string === this.params.new_string) {
637
636
  return `No file changes to ${shortenPath(relativePath)}`;
638
637
  }
639
- return `${shortenPath(relativePath)}: ${oldStringSnippet} => ${newStringSnippet}`;
638
+ return shortenPath(relativePath);
640
639
  }
641
640
  /**
642
641
  * Executes the edit operation with the given parameters.
@@ -177,7 +177,7 @@ var en_default = {
177
177
  "open full Qwen Code documentation in your browser": "open full Qwen Code documentation in your browser",
178
178
  "Configuration not available.": "Configuration not available.",
179
179
  "Connect an LLM provider": "Connect an LLM provider",
180
- "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",
181
181
  "Show working-tree change stats versus HEAD": "Show working-tree change stats versus HEAD",
182
182
  "Could not determine current working directory.": "Could not determine current working directory.",
183
183
  "Failed to compute git diff stats": "Failed to compute git diff stats",
@@ -679,7 +679,6 @@ var en_default = {
679
679
  "Please provide a directive. Usage: /fork <directive>": "Please provide a directive. Usage: /fork <directive>",
680
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.",
681
681
  "Cannot fork before the first conversation turn.": "Cannot fork before the first conversation turn.",
682
- "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.",
683
682
  "The agent tool is unavailable; cannot fork.": "The agent tool is unavailable; cannot fork.",
684
683
  "Failed to launch fork: {{error}}": "Failed to launch fork: {{error}}",
685
684
  "the background agent could not be started.": "the background agent could not be started.",
@@ -736,6 +735,7 @@ var en_default = {
736
735
  "Usage: /forget <memory text to remove>": "Usage: /forget <memory text to remove>",
737
736
  "No managed auto-memory entries matched: {{query}}": "No managed auto-memory entries matched: {{query}}",
738
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",
739
739
  "Open MCP management dialog": "Open MCP management dialog",
740
740
  "Could not retrieve tool registry.": "Could not retrieve tool registry.",
741
741
  "Successfully authenticated and refreshed tools for '{{name}}'.": "Successfully authenticated and refreshed tools for '{{name}}'.",
@@ -1165,6 +1165,9 @@ var en_default = {
1165
1165
  "Background tasks": "Background tasks",
1166
1166
  "No tasks currently running": "No tasks currently running",
1167
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",
1168
1171
  Running: "Running",
1169
1172
  Paused: "Paused",
1170
1173
  Completed: "Completed",