@qwen-code/qwen-code 0.15.12-preview.2 → 0.16.0-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 (79) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +30 -34
  2. package/bundled/qc-helper/docs/features/lsp.md +87 -10
  3. package/bundled/qc-helper/docs/qwen-serve.md +74 -24
  4. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +11 -11
  5. package/bundled/stuck/SKILL.md +124 -0
  6. package/chunks/{agent-UQY6A6OS.js → agent-ZNQPH67I.js} +15 -15
  7. package/chunks/{anthropicContentGenerator-4QE6LTVV.js → anthropicContentGenerator-ICBDZ6R2.js} +4 -4
  8. package/chunks/{askUserQuestion-QFSCBTUO.js → askUserQuestion-WQILGUSQ.js} +2 -2
  9. package/chunks/{ca-VQSV6JHA.js → ca-S3XJMT6P.js} +26 -0
  10. package/chunks/{chunk-SQNQIOD5.js → chunk-2B7UBDY5.js} +2 -2
  11. package/chunks/chunk-3MBY4GKN.js +350 -0
  12. package/chunks/{chunk-FSYKVGER.js → chunk-7QXHXMC6.js} +23 -7
  13. package/chunks/{chunk-PCL3EJGY.js → chunk-C3LHPHN2.js} +3924 -3683
  14. package/chunks/{chunk-UXW7MYAW.js → chunk-CW44BRRA.js} +1 -1
  15. package/chunks/{chunk-G27O2LD2.js → chunk-D5NTAHYL.js} +1 -1
  16. package/chunks/{chunk-CBVB66WY.js → chunk-EDYSNFEM.js} +1 -1
  17. package/chunks/{chunk-OCC4MZRS.js → chunk-F23NCRJ2.js} +1 -1
  18. package/chunks/{chunk-FYMSCRHM.js → chunk-FZIUV27X.js} +1 -1
  19. package/chunks/{chunk-SOIEFHIK.js → chunk-G7YTSRES.js} +1 -100
  20. package/chunks/{chunk-MXBWOU2L.js → chunk-JHMX4QTD.js} +15 -15
  21. package/chunks/{chunk-TPGOGCWM.js → chunk-JYQUJ5DS.js} +1 -1
  22. package/chunks/{chunk-FKVKVE6N.js → chunk-KXZ4TJB4.js} +1 -1
  23. package/chunks/{chunk-2WFU3IUH.js → chunk-MNPZ2WO6.js} +4864 -2303
  24. package/chunks/{chunk-BXNCPI75.js → chunk-NAID3ZWF.js} +2 -2
  25. package/chunks/{chunk-JMZQICAL.js → chunk-PPHYLJSS.js} +1 -1
  26. package/chunks/{chunk-CM2IESUE.js → chunk-PR4T27R7.js} +1 -1
  27. package/chunks/{chunk-CAWKL3UC.js → chunk-VTPOO6GV.js} +1 -1
  28. package/chunks/{chunk-GJXIKCKL.js → chunk-XP27SJMH.js} +76 -5
  29. package/chunks/{chunk-B7ZL7HUA.js → chunk-XVHR7ATJ.js} +1 -1
  30. package/chunks/{contextCommand-MQRG6RMG.js → contextCommand-IGBCEXI4.js} +16 -16
  31. package/chunks/{cron-create-WUTD5ZTH.js → cron-create-AVI3Q267.js} +2 -2
  32. package/chunks/{cron-delete-N3UQYCRA.js → cron-delete-ZCEGDXXV.js} +2 -2
  33. package/chunks/{cron-list-Z6RJJ4YH.js → cron-list-VN653OK5.js} +2 -2
  34. package/chunks/{de-M2IPQRBS.js → de-MNR4SMAI.js} +26 -0
  35. package/chunks/{edit-3KCBTA25.js → edit-74Q4AFHQ.js} +20 -16
  36. package/chunks/{en-N5GMPCVT.js → en-FIUWJSZR.js} +28 -0
  37. package/chunks/{enter-worktree-VWS5QZTU.js → enter-worktree-H72HXC7D.js} +15 -15
  38. package/chunks/{exit-worktree-RVXFWAPD.js → exit-worktree-FGIQO3S3.js} +15 -15
  39. package/chunks/{exitPlanMode-UL5DILDG.js → exitPlanMode-NBR2PK2D.js} +15 -15
  40. package/chunks/{fr-BTHRYEXO.js → fr-OFJFHLCR.js} +26 -0
  41. package/chunks/{geminiContentGenerator-O2OPGHJG.js → geminiContentGenerator-33RP4WKD.js} +3 -3
  42. package/chunks/{glob-57BSREPN.js → glob-WEE3CJL6.js} +15 -15
  43. package/chunks/{grep-XO5JOC7T.js → grep-DZKSBFZK.js} +15 -15
  44. package/chunks/{ja-D63TAEBO.js → ja-V6OQ6VL7.js} +26 -0
  45. package/chunks/{keychain-token-storage-DMFP5IJM.js → keychain-token-storage-335UOLJ6.js} +2 -2
  46. package/chunks/{ls-SUILOZZB.js → ls-6F3VSP6S.js} +3 -3
  47. package/chunks/{lsp-6TQBWVMZ.js → lsp-67Y7DJN5.js} +2 -2
  48. package/chunks/{monitor-BECPGO3K.js → monitor-EDZWEZVS.js} +33 -24
  49. package/chunks/{openaiContentGenerator-KEZQHIRM.js → openaiContentGenerator-5NQG3W64.js} +10 -10
  50. package/chunks/{pt-XUV7FSKC.js → pt-ZLE6SA4A.js} +26 -0
  51. package/chunks/{qwenContentGenerator-RPMRXTNH.js → qwenContentGenerator-4DPUUS6R.js} +17 -17
  52. package/chunks/{qwenOAuth2-JSQ7EPR3.js → qwenOAuth2-JE7H47TE.js} +3 -3
  53. package/chunks/{read-file-LGHEIQNH.js → read-file-CQOF7BQ2.js} +7 -7
  54. package/chunks/{ripGrep-6SFSXZ2G.js → ripGrep-KR5LKGTI.js} +15 -15
  55. package/chunks/{ru-7KHWMN3A.js → ru-A4OHIUNN.js} +26 -0
  56. package/chunks/{send-message-Q2JRAC3J.js → send-message-GB4AQZNC.js} +2 -2
  57. package/chunks/{serve-27O2AFE3.js → serve-GAD2PEST.js} +1299 -408
  58. package/chunks/{shell-J7K5KYCH.js → shell-E2HMCBGR.js} +15 -15
  59. package/chunks/{skill-2R7P4ATS.js → skill-KDZH6UZ6.js} +9 -9
  60. package/chunks/{src-CGEDVW67.js → src-LY4RU5AI.js} +96 -24
  61. package/chunks/{syntheticOutput-S4DRGMQM.js → syntheticOutput-HFL3DE7R.js} +3 -3
  62. package/chunks/{task-stop-7THHVAQS.js → task-stop-ZQF26RXS.js} +2 -2
  63. package/chunks/{todoWrite-WKUGUTPX.js → todoWrite-U4SC643O.js} +3 -3
  64. package/chunks/{tool-search-XOH3ZWVS.js → tool-search-U4XQVLFU.js} +7 -7
  65. package/chunks/{web-fetch-OZE6ZQUF.js → web-fetch-BRWZ4WSE.js} +4 -4
  66. package/chunks/{write-file-74NQ27Q2.js → write-file-NBLRMNGB.js} +20 -16
  67. package/chunks/{zh-TW-O36Q4V7E.js → zh-TW-552S24LR.js} +28 -0
  68. package/chunks/{zh-VGHU6XBB.js → zh-V32QONGV.js} +28 -0
  69. package/cli.js +8027 -5104
  70. package/locales/ca.js +40 -0
  71. package/locales/de.js +40 -0
  72. package/locales/en.js +43 -0
  73. package/locales/fr.js +41 -0
  74. package/locales/ja.js +39 -0
  75. package/locales/pt.js +39 -0
  76. package/locales/ru.js +39 -0
  77. package/locales/zh-TW.js +41 -0
  78. package/locales/zh.js +41 -0
  79. package/package.json +2 -2
@@ -3,10 +3,10 @@
3
3
  import {
4
4
  TextTokenizer,
5
5
  isSupportedImageMimeType
6
- } from "./chunk-CAWKL3UC.js";
6
+ } from "./chunk-VTPOO6GV.js";
7
7
  import {
8
8
  createDebugLogger
9
- } from "./chunk-GJXIKCKL.js";
9
+ } from "./chunk-XP27SJMH.js";
10
10
  import {
11
11
  init_esbuild_shims
12
12
  } from "./chunk-A4BMJM77.js";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-OFEVLU4C.js";
6
6
  import {
7
7
  SchemaValidator
8
- } from "./chunk-FYMSCRHM.js";
8
+ } from "./chunk-FZIUV27X.js";
9
9
  import {
10
10
  init_esbuild_shims
11
11
  } from "./chunk-A4BMJM77.js";
@@ -4,7 +4,7 @@ import {
4
4
  QWEN_DIR,
5
5
  Storage,
6
6
  sanitizeCwd
7
- } from "./chunk-GJXIKCKL.js";
7
+ } from "./chunk-XP27SJMH.js";
8
8
  import {
9
9
  init_esbuild_shims
10
10
  } from "./chunk-A4BMJM77.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  createDebugLogger
5
- } from "./chunk-GJXIKCKL.js";
5
+ } from "./chunk-XP27SJMH.js";
6
6
  import {
7
7
  require_undici
8
8
  } from "./chunk-E7E2MFYM.js";
@@ -336,8 +336,8 @@ __name(sanitizeCwd, "sanitizeCwd");
336
336
  function isSubpath(parentPath, childPath) {
337
337
  const isWindows = os.platform() === "win32";
338
338
  const pathModule = isWindows ? path.win32 : path;
339
- const relative = pathModule.relative(parentPath, childPath);
340
- return !relative.startsWith(`..${pathModule.sep}`) && relative !== ".." && !pathModule.isAbsolute(relative);
339
+ const relative2 = pathModule.relative(parentPath, childPath);
340
+ return !relative2.startsWith(`..${pathModule.sep}`) && relative2 !== ".." && !pathModule.isAbsolute(relative2);
341
341
  }
342
342
  __name(isSubpath, "isSubpath");
343
343
  function isSubpaths(parentPath, childPath) {
@@ -443,6 +443,17 @@ var Storage = class _Storage {
443
443
  }
444
444
  return resolved;
445
445
  }
446
+ /**
447
+ * Sanitizes a session id for use as a plan filename.
448
+ *
449
+ * Plan files are keyed by session id, but the raw id is public SDK input.
450
+ * Strip directory separators and Windows-invalid filename characters so a
451
+ * hostile value cannot escape the plans directory.
452
+ */
453
+ static sanitizePlanSessionId(sessionId) {
454
+ const safeName = path2.basename(sessionId.replace(/\\/g, "/")).replace(/^\.+/g, "_").replace(/[<>:"|?*\x00-\x1F]/g, "_");
455
+ return safeName || "_";
456
+ }
446
457
  static resolveRuntimeBaseDir(dir, cwd) {
447
458
  if (!dir) {
448
459
  return null;
@@ -531,11 +542,71 @@ var Storage = class _Storage {
531
542
  static getGlobalIdeDir() {
532
543
  return path2.join(_Storage.getGlobalQwenDir(), IDE_DIR_NAME);
533
544
  }
534
- static getPlansDir() {
545
+ /**
546
+ * Resolves pathToResolve by realpathing its deepest existing ancestor and
547
+ * appending the not-yet-created remainder.
548
+ */
549
+ static resolvePathThroughExistingAncestor(pathToResolve) {
550
+ let candidate = pathToResolve;
551
+ while (true) {
552
+ try {
553
+ const realCandidate = fs2.realpathSync(candidate);
554
+ const remainder = path2.relative(candidate, pathToResolve);
555
+ return path2.join(realCandidate, remainder);
556
+ } catch (err) {
557
+ if (err.code !== "ENOENT") {
558
+ throw err;
559
+ }
560
+ const parent = path2.dirname(candidate);
561
+ if (parent === candidate) {
562
+ return pathToResolve;
563
+ }
564
+ candidate = parent;
565
+ }
566
+ }
567
+ }
568
+ /**
569
+ * Checks whether {@link childPath} resides within {@link parentPath},
570
+ * resolving symbolic links to prevent traversal bypass attacks.
571
+ */
572
+ static isPathWithinDirectory(childPath, parentPath) {
573
+ const realParent = _Storage.resolvePathThroughExistingAncestor(parentPath);
574
+ const realChild = _Storage.resolvePathThroughExistingAncestor(childPath);
575
+ const relativePath = path2.relative(realParent, realChild);
576
+ return relativePath === "" || !relativePath.startsWith("..") && !path2.isAbsolute(relativePath);
577
+ }
578
+ static assertPathWithinDirectory(childPath, parentPath, errorMessage) {
579
+ if (!_Storage.isPathWithinDirectory(childPath, parentPath)) {
580
+ throw new FatalConfigError(errorMessage);
581
+ }
582
+ }
583
+ static getPlansDir(projectRoot, plansDirectory) {
584
+ const configuredPlansDirectory = plansDirectory?.trim();
585
+ if (configuredPlansDirectory) {
586
+ if (!projectRoot) {
587
+ throw new FatalConfigError(
588
+ "projectRoot is required when plansDirectory is configured."
589
+ );
590
+ }
591
+ const resolvedProjectRoot = path2.resolve(projectRoot);
592
+ const resolvedPlansDirectory = _Storage.resolvePath(
593
+ configuredPlansDirectory,
594
+ resolvedProjectRoot
595
+ );
596
+ _Storage.assertPathWithinDirectory(
597
+ resolvedPlansDirectory,
598
+ resolvedProjectRoot,
599
+ `plansDirectory must resolve within the project root.`
600
+ );
601
+ return resolvedPlansDirectory;
602
+ }
535
603
  return path2.join(_Storage.getGlobalQwenDir(), PLANS_DIR_NAME);
536
604
  }
537
- static getPlanFilePath(sessionId) {
538
- return path2.join(_Storage.getPlansDir(), `${sessionId}.md`);
605
+ static getPlanFilePath(sessionId, projectRoot, plansDirectory) {
606
+ return path2.join(
607
+ _Storage.getPlansDir(projectRoot, plansDirectory),
608
+ `${_Storage.sanitizePlanSessionId(sessionId)}.md`
609
+ );
539
610
  }
540
611
  static getGlobalBinDir() {
541
612
  return path2.join(_Storage.getGlobalQwenDir(), BIN_DIR_NAME);
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  createDebugLogger
5
- } from "./chunk-GJXIKCKL.js";
5
+ } from "./chunk-XP27SJMH.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -4,34 +4,34 @@ import {
4
4
  collectContextData,
5
5
  contextCommand,
6
6
  formatContextUsageText
7
- } from "./chunk-MXBWOU2L.js";
7
+ } from "./chunk-JHMX4QTD.js";
8
8
  import "./chunk-Y6Z2O3WR.js";
9
- import "./chunk-2WFU3IUH.js";
9
+ import "./chunk-MNPZ2WO6.js";
10
10
  import "./chunk-5P5XGNYH.js";
11
11
  import "./chunk-K5PGHDBN.js";
12
12
  import "./chunk-O4PICXES.js";
13
13
  import "./chunk-TW522KN6.js";
14
14
  import "./chunk-MLZQVCF3.js";
15
- import "./chunk-JMZQICAL.js";
16
- import "./chunk-SOIEFHIK.js";
17
- import "./chunk-B7ZL7HUA.js";
15
+ import "./chunk-PPHYLJSS.js";
16
+ import "./chunk-G7YTSRES.js";
17
+ import "./chunk-XVHR7ATJ.js";
18
18
  import "./chunk-77WXWU44.js";
19
- import "./chunk-OCC4MZRS.js";
20
- import "./chunk-CAWKL3UC.js";
21
- import "./chunk-PCL3EJGY.js";
19
+ import "./chunk-F23NCRJ2.js";
20
+ import "./chunk-VTPOO6GV.js";
21
+ import "./chunk-C3LHPHN2.js";
22
22
  import "./chunk-SYCJMSIJ.js";
23
23
  import "./chunk-UWCTAVOD.js";
24
24
  import "./chunk-OFEVLU4C.js";
25
- import "./chunk-CM2IESUE.js";
26
- import "./chunk-UXW7MYAW.js";
27
- import "./chunk-G27O2LD2.js";
25
+ import "./chunk-PR4T27R7.js";
26
+ import "./chunk-CW44BRRA.js";
27
+ import "./chunk-D5NTAHYL.js";
28
28
  import "./chunk-T4VD6OJ4.js";
29
29
  import "./chunk-RDYWTWEM.js";
30
- import "./chunk-TPGOGCWM.js";
31
- import "./chunk-FYMSCRHM.js";
32
- import "./chunk-SQNQIOD5.js";
33
- import "./chunk-FKVKVE6N.js";
34
- import "./chunk-GJXIKCKL.js";
30
+ import "./chunk-JYQUJ5DS.js";
31
+ import "./chunk-FZIUV27X.js";
32
+ import "./chunk-2B7UBDY5.js";
33
+ import "./chunk-KXZ4TJB4.js";
34
+ import "./chunk-XP27SJMH.js";
35
35
  import "./chunk-E7E2MFYM.js";
36
36
  import "./chunk-ZERZSAZL.js";
37
37
  import "./chunk-QN5NZ3UQ.js";
@@ -11,8 +11,8 @@ import {
11
11
  BaseToolInvocation,
12
12
  ToolDisplayNames,
13
13
  ToolNames
14
- } from "./chunk-FYMSCRHM.js";
15
- import "./chunk-GJXIKCKL.js";
14
+ } from "./chunk-FZIUV27X.js";
15
+ import "./chunk-XP27SJMH.js";
16
16
  import "./chunk-QWSRH265.js";
17
17
  import {
18
18
  init_esbuild_shims
@@ -5,8 +5,8 @@ import {
5
5
  BaseToolInvocation,
6
6
  ToolDisplayNames,
7
7
  ToolNames
8
- } from "./chunk-FYMSCRHM.js";
9
- import "./chunk-GJXIKCKL.js";
8
+ } from "./chunk-FZIUV27X.js";
9
+ import "./chunk-XP27SJMH.js";
10
10
  import "./chunk-QWSRH265.js";
11
11
  import {
12
12
  init_esbuild_shims
@@ -8,8 +8,8 @@ import {
8
8
  BaseToolInvocation,
9
9
  ToolDisplayNames,
10
10
  ToolNames
11
- } from "./chunk-FYMSCRHM.js";
12
- import "./chunk-GJXIKCKL.js";
11
+ } from "./chunk-FZIUV27X.js";
12
+ import "./chunk-XP27SJMH.js";
13
13
  import "./chunk-QWSRH265.js";
14
14
  import {
15
15
  init_esbuild_shims
@@ -87,6 +87,32 @@ var de_default = {
87
87
  "Generate a one-line session recap now": "Jetzt eine einzeilige Sitzungszusammenfassung erstellen",
88
88
  "Rename the current conversation. --auto lets the fast model pick a title.": "Die aktuelle Unterhaltung umbenennen. Mit --auto l\xE4sst du das schnelle Modell einen Titel w\xE4hlen.",
89
89
  "Rewind conversation to a previous turn": "Die Unterhaltung auf einen fr\xFCheren Gespr\xE4chsschritt zur\xFCcksetzen",
90
+ "Rewind Conversation": "Unterhaltung zur\xFCckspulen",
91
+ "No user turns to rewind to.": "Keine Benutzerrunden zum Zur\xFCckspulen.",
92
+ "Rewind to: ": "Zur\xFCckspulen zu: ",
93
+ "Restore code and conversation": "Code und Unterhaltung wiederherstellen",
94
+ "Restore conversation only": "Nur Unterhaltung wiederherstellen",
95
+ "Restore code only": "Nur Code wiederherstellen",
96
+ "Never mind": "Egal",
97
+ "Computing file changes...": "Datei\xE4nderungen werden berechnet...",
98
+ "Restoring...": "Wiederherstellung l\xE4uft...",
99
+ "Restored {{count}} file(s).": "{{count}} Datei(en) wiederhergestellt.",
100
+ "Failed to restore files: {{error}}": "Fehler beim Wiederherstellen der Dateien: {{error}}",
101
+ "Rewind failed: {{error}}": "Zur\xFCckspulen fehlgeschlagen: {{error}}",
102
+ "Cannot rewind conversation: no active model client.": "Konversation kann nicht zur\xFCckgespult werden: kein aktiver Modell-Client.",
103
+ "Code restored, but conversation could not be rewound (no active client).": "Code wiederhergestellt, aber Konversation konnte nicht zur\xFCckgespult werden (kein aktiver Client).",
104
+ "Conversation rewound. Edit your prompt and press Enter to continue.": "Konversation zur\xFCckgespult. Bearbeite deinen Prompt und dr\xFCcke Enter, um fortzufahren.",
105
+ "Rewinding does not affect files edited manually or via shell commands.": "Das Zur\xFCckspulen wirkt sich nicht auf Dateien aus, die manuell oder per Shell-Befehl ge\xE4ndert wurden.",
106
+ "Cannot rewind to a turn that was compressed. Try a more recent turn.": "Zu einem komprimierten Turn kann nicht zur\xFCckgespult werden. Bitte einen aktuelleren Turn versuchen.",
107
+ "File restore is unavailable for this turn (no captured file changes, or this turn predates the current session).": "Datei-Wiederherstellung ist f\xFCr diesen Turn nicht verf\xFCgbar (keine erfassten Datei\xE4nderungen, oder dieser Turn liegt vor der aktuellen Sitzung).",
108
+ "(+{{insertions}} -{{deletions}} in {{count}} file)": "(+{{insertions}} -{{deletions}} in {{count}} Datei)",
109
+ "(+{{insertions}} -{{deletions}} in {{count}} files)": "(+{{insertions}} -{{deletions}} in {{count}} Dateien)",
110
+ "Failed to restore {{count}} file(s): {{files}}": "{{count}} Datei(en) konnten nicht wiederhergestellt werden: {{files}}",
111
+ "Cannot restore files: this turn was created before file checkpointing was enabled.": "Dateien k\xF6nnen nicht wiederhergestellt werden: Dieser Turn wurde erstellt, bevor Datei-Checkpointing aktiviert war.",
112
+ "No files needed to be restored.": "Keine Dateien mussten wiederhergestellt werden.",
113
+ "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to go back": "\u2191\u2193 navigieren \xB7 Enter ausw\xE4hlen \xB7 Esc zur\xFCck",
114
+ "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to cancel": "\u2191\u2193 navigieren \xB7 Enter ausw\xE4hlen \xB7 Esc abbrechen",
115
+ "Enter/Y to confirm \xB7 Esc/N to go back": "Enter/Y best\xE4tigen \xB7 Esc/N zur\xFCck",
90
116
  "change the theme": "Design \xE4ndern",
91
117
  "Select Theme": "Design ausw\xE4hlen",
92
118
  Preview: "Vorschau",
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  StructuredToolError,
5
5
  checkPriorRead
6
- } from "./chunk-CBVB66WY.js";
6
+ } from "./chunk-EDYSNFEM.js";
7
7
  import {
8
8
  CommitAttributionService,
9
9
  DEFAULT_DIFF_OPTIONS,
@@ -13,18 +13,18 @@ import {
13
13
  getDiffStat,
14
14
  needsUtf8Bom,
15
15
  safeLiteralReplace
16
- } from "./chunk-2WFU3IUH.js";
16
+ } from "./chunk-MNPZ2WO6.js";
17
17
  import "./chunk-5P5XGNYH.js";
18
18
  import "./chunk-K5PGHDBN.js";
19
19
  import "./chunk-O4PICXES.js";
20
20
  import "./chunk-TW522KN6.js";
21
21
  import "./chunk-MLZQVCF3.js";
22
- import "./chunk-JMZQICAL.js";
23
- import "./chunk-SOIEFHIK.js";
24
- import "./chunk-B7ZL7HUA.js";
22
+ import "./chunk-PPHYLJSS.js";
23
+ import "./chunk-G7YTSRES.js";
24
+ import "./chunk-XVHR7ATJ.js";
25
25
  import "./chunk-77WXWU44.js";
26
- import "./chunk-OCC4MZRS.js";
27
- import "./chunk-CAWKL3UC.js";
26
+ import "./chunk-F23NCRJ2.js";
27
+ import "./chunk-VTPOO6GV.js";
28
28
  import {
29
29
  FileOperationEvent,
30
30
  ReadFileTool,
@@ -32,32 +32,32 @@ import {
32
32
  getLanguageFromFilePath,
33
33
  getSpecificMimeType,
34
34
  logFileOperation
35
- } from "./chunk-PCL3EJGY.js";
35
+ } from "./chunk-C3LHPHN2.js";
36
36
  import "./chunk-SYCJMSIJ.js";
37
37
  import "./chunk-UWCTAVOD.js";
38
38
  import "./chunk-OFEVLU4C.js";
39
39
  import {
40
40
  isAutoMemPath
41
- } from "./chunk-CM2IESUE.js";
42
- import "./chunk-UXW7MYAW.js";
43
- import "./chunk-G27O2LD2.js";
41
+ } from "./chunk-PR4T27R7.js";
42
+ import "./chunk-CW44BRRA.js";
43
+ import "./chunk-D5NTAHYL.js";
44
44
  import "./chunk-T4VD6OJ4.js";
45
45
  import "./chunk-RDYWTWEM.js";
46
- import "./chunk-TPGOGCWM.js";
46
+ import "./chunk-JYQUJ5DS.js";
47
47
  import {
48
48
  BaseDeclarativeTool,
49
49
  ToolDisplayNames,
50
50
  ToolNames
51
- } from "./chunk-FYMSCRHM.js";
52
- import "./chunk-SQNQIOD5.js";
53
- import "./chunk-FKVKVE6N.js";
51
+ } from "./chunk-FZIUV27X.js";
52
+ import "./chunk-2B7UBDY5.js";
53
+ import "./chunk-KXZ4TJB4.js";
54
54
  import {
55
55
  createDebugLogger,
56
56
  isNodeError,
57
57
  makeRelative,
58
58
  shortenPath,
59
59
  unescapePath
60
- } from "./chunk-GJXIKCKL.js";
60
+ } from "./chunk-XP27SJMH.js";
61
61
  import "./chunk-E7E2MFYM.js";
62
62
  import "./chunk-ZERZSAZL.js";
63
63
  import "./chunk-QN5NZ3UQ.js";
@@ -666,6 +666,10 @@ var EditToolInvocation = class {
666
666
  };
667
667
  }
668
668
  try {
669
+ try {
670
+ await this.config.getFileHistoryService().trackEdit(this.params.file_path);
671
+ } catch {
672
+ }
669
673
  if (!this.config.getFileReadCacheDisabled()) {
670
674
  const writeDecision = await checkPriorRead(
671
675
  this.config.getFileReadCache(),
@@ -110,6 +110,32 @@ var en_default = {
110
110
  "Generate a one-line session recap now": "Generate a one-line session recap now",
111
111
  "Rename the current conversation. --auto lets the fast model pick a title.": "Rename the current conversation. --auto lets the fast model pick a title.",
112
112
  "Rewind conversation to a previous turn": "Rewind conversation to a previous turn",
113
+ "Rewind Conversation": "Rewind Conversation",
114
+ "No user turns to rewind to.": "No user turns to rewind to.",
115
+ "Rewind to: ": "Rewind to: ",
116
+ "Restore code and conversation": "Restore code and conversation",
117
+ "Restore conversation only": "Restore conversation only",
118
+ "Restore code only": "Restore code only",
119
+ "Never mind": "Never mind",
120
+ "Computing file changes...": "Computing file changes...",
121
+ "Restoring...": "Restoring...",
122
+ "Restored {{count}} file(s).": "Restored {{count}} file(s).",
123
+ "Failed to restore files: {{error}}": "Failed to restore files: {{error}}",
124
+ "Rewind failed: {{error}}": "Rewind failed: {{error}}",
125
+ "Cannot rewind conversation: no active model client.": "Cannot rewind conversation: no active model client.",
126
+ "Code restored, but conversation could not be rewound (no active client).": "Code restored, but conversation could not be rewound (no active client).",
127
+ "Conversation rewound. Edit your prompt and press Enter to continue.": "Conversation rewound. Edit your prompt and press Enter to continue.",
128
+ "Rewinding does not affect files edited manually or via shell commands.": "Rewinding does not affect files edited manually or via shell commands.",
129
+ "Cannot rewind to a turn that was compressed. Try a more recent turn.": "Cannot rewind to a turn that was compressed. Try a more recent turn.",
130
+ "File restore is unavailable for this turn (no captured file changes, or this turn predates the current session).": "File restore is unavailable for this turn (no captured file changes, or this turn predates the current session).",
131
+ "(+{{insertions}} -{{deletions}} in {{count}} file)": "(+{{insertions}} -{{deletions}} in {{count}} file)",
132
+ "(+{{insertions}} -{{deletions}} in {{count}} files)": "(+{{insertions}} -{{deletions}} in {{count}} files)",
133
+ "Failed to restore {{count}} file(s): {{files}}": "Failed to restore {{count}} file(s): {{files}}",
134
+ "Cannot restore files: this turn was created before file checkpointing was enabled.": "Cannot restore files: this turn was created before file checkpointing was enabled.",
135
+ "No files needed to be restored.": "No files needed to be restored.",
136
+ "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to go back": "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to go back",
137
+ "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to cancel": "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to cancel",
138
+ "Enter/Y to confirm \xB7 Esc/N to go back": "Enter/Y to confirm \xB7 Esc/N to go back",
113
139
  "change the theme": "change the theme",
114
140
  "Select Theme": "Select Theme",
115
141
  Preview: "Preview",
@@ -1422,6 +1448,7 @@ var en_default = {
1422
1448
  "Hide tool output and thinking for a cleaner view (toggle with Ctrl+O).": "Hide tool output and thinking for a cleaner view (toggle with Ctrl+O).",
1423
1449
  "Press Ctrl+O to show full tool output": "Press Ctrl+O to show full tool output",
1424
1450
  "Switch to plan mode or exit plan mode": "Switch to plan mode or exit plan mode",
1451
+ "Set a goal \u2014 keep working until the condition is met": "Set a goal \u2014 keep working until the condition is met",
1425
1452
  "Exited plan mode. Previous approval mode restored.": "Exited plan mode. Previous approval mode restored.",
1426
1453
  "Enabled plan mode. The agent will analyze and plan without executing tools.": "Enabled plan mode. The agent will analyze and plan without executing tools.",
1427
1454
  'Already in plan mode. Use "/plan exit" to exit plan mode.': 'Already in plan mode. Use "/plan exit" to exit plan mode.',
@@ -1429,6 +1456,7 @@ var en_default = {
1429
1456
  "Set up Qwen Code's status line UI": "Set up Qwen Code's status line UI",
1430
1457
  // === Core: added from PR #3328 ===
1431
1458
  "Open the memory manager.": "Open the memory manager.",
1459
+ "Show current process memory diagnostics": "Show current process memory diagnostics",
1432
1460
  "Save a durable memory to the memory system.": "Save a durable memory to the memory system.",
1433
1461
  "Ask a quick side question without affecting the main conversation": "Ask a quick side question without affecting the main conversation",
1434
1462
  "Manage Arena sessions": "Manage Arena sessions",
@@ -3,39 +3,39 @@
3
3
  import {
4
4
  GitWorktreeService,
5
5
  writeWorktreeSessionMarker
6
- } from "./chunk-2WFU3IUH.js";
6
+ } from "./chunk-MNPZ2WO6.js";
7
7
  import "./chunk-5P5XGNYH.js";
8
8
  import "./chunk-K5PGHDBN.js";
9
9
  import "./chunk-O4PICXES.js";
10
10
  import "./chunk-TW522KN6.js";
11
11
  import "./chunk-MLZQVCF3.js";
12
- import "./chunk-JMZQICAL.js";
13
- import "./chunk-SOIEFHIK.js";
14
- import "./chunk-B7ZL7HUA.js";
12
+ import "./chunk-PPHYLJSS.js";
13
+ import "./chunk-G7YTSRES.js";
14
+ import "./chunk-XVHR7ATJ.js";
15
15
  import "./chunk-77WXWU44.js";
16
- import "./chunk-OCC4MZRS.js";
17
- import "./chunk-CAWKL3UC.js";
18
- import "./chunk-PCL3EJGY.js";
16
+ import "./chunk-F23NCRJ2.js";
17
+ import "./chunk-VTPOO6GV.js";
18
+ import "./chunk-C3LHPHN2.js";
19
19
  import "./chunk-SYCJMSIJ.js";
20
20
  import "./chunk-UWCTAVOD.js";
21
21
  import "./chunk-OFEVLU4C.js";
22
- import "./chunk-CM2IESUE.js";
23
- import "./chunk-UXW7MYAW.js";
24
- import "./chunk-G27O2LD2.js";
22
+ import "./chunk-PR4T27R7.js";
23
+ import "./chunk-CW44BRRA.js";
24
+ import "./chunk-D5NTAHYL.js";
25
25
  import "./chunk-T4VD6OJ4.js";
26
26
  import "./chunk-RDYWTWEM.js";
27
- import "./chunk-TPGOGCWM.js";
27
+ import "./chunk-JYQUJ5DS.js";
28
28
  import {
29
29
  BaseDeclarativeTool,
30
30
  BaseToolInvocation,
31
31
  ToolDisplayNames,
32
32
  ToolNames
33
- } from "./chunk-FYMSCRHM.js";
34
- import "./chunk-SQNQIOD5.js";
35
- import "./chunk-FKVKVE6N.js";
33
+ } from "./chunk-FZIUV27X.js";
34
+ import "./chunk-2B7UBDY5.js";
35
+ import "./chunk-KXZ4TJB4.js";
36
36
  import {
37
37
  createDebugLogger
38
- } from "./chunk-GJXIKCKL.js";
38
+ } from "./chunk-XP27SJMH.js";
39
39
  import "./chunk-E7E2MFYM.js";
40
40
  import "./chunk-ZERZSAZL.js";
41
41
  import "./chunk-QN5NZ3UQ.js";
@@ -4,40 +4,40 @@ import {
4
4
  GitWorktreeService,
5
5
  readWorktreeSessionMarker,
6
6
  worktreeBranchForSlug
7
- } from "./chunk-2WFU3IUH.js";
7
+ } from "./chunk-MNPZ2WO6.js";
8
8
  import "./chunk-5P5XGNYH.js";
9
9
  import "./chunk-K5PGHDBN.js";
10
10
  import "./chunk-O4PICXES.js";
11
11
  import "./chunk-TW522KN6.js";
12
12
  import "./chunk-MLZQVCF3.js";
13
- import "./chunk-JMZQICAL.js";
14
- import "./chunk-SOIEFHIK.js";
15
- import "./chunk-B7ZL7HUA.js";
13
+ import "./chunk-PPHYLJSS.js";
14
+ import "./chunk-G7YTSRES.js";
15
+ import "./chunk-XVHR7ATJ.js";
16
16
  import "./chunk-77WXWU44.js";
17
- import "./chunk-OCC4MZRS.js";
18
- import "./chunk-CAWKL3UC.js";
19
- import "./chunk-PCL3EJGY.js";
17
+ import "./chunk-F23NCRJ2.js";
18
+ import "./chunk-VTPOO6GV.js";
19
+ import "./chunk-C3LHPHN2.js";
20
20
  import "./chunk-SYCJMSIJ.js";
21
21
  import "./chunk-UWCTAVOD.js";
22
22
  import "./chunk-OFEVLU4C.js";
23
- import "./chunk-CM2IESUE.js";
24
- import "./chunk-UXW7MYAW.js";
25
- import "./chunk-G27O2LD2.js";
23
+ import "./chunk-PR4T27R7.js";
24
+ import "./chunk-CW44BRRA.js";
25
+ import "./chunk-D5NTAHYL.js";
26
26
  import "./chunk-T4VD6OJ4.js";
27
27
  import "./chunk-RDYWTWEM.js";
28
- import "./chunk-TPGOGCWM.js";
28
+ import "./chunk-JYQUJ5DS.js";
29
29
  import {
30
30
  BaseDeclarativeTool,
31
31
  BaseToolInvocation,
32
32
  ToolDisplayNames,
33
33
  ToolNames
34
- } from "./chunk-FYMSCRHM.js";
35
- import "./chunk-SQNQIOD5.js";
36
- import "./chunk-FKVKVE6N.js";
34
+ } from "./chunk-FZIUV27X.js";
35
+ import "./chunk-2B7UBDY5.js";
36
+ import "./chunk-KXZ4TJB4.js";
37
37
  import {
38
38
  createDebugLogger,
39
39
  isNodeError
40
- } from "./chunk-GJXIKCKL.js";
40
+ } from "./chunk-XP27SJMH.js";
41
41
  import "./chunk-E7E2MFYM.js";
42
42
  import "./chunk-ZERZSAZL.js";
43
43
  import "./chunk-QN5NZ3UQ.js";
@@ -1,38 +1,38 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import "./chunk-2WFU3IUH.js";
3
+ import "./chunk-MNPZ2WO6.js";
4
4
  import "./chunk-5P5XGNYH.js";
5
5
  import "./chunk-K5PGHDBN.js";
6
6
  import "./chunk-O4PICXES.js";
7
7
  import "./chunk-TW522KN6.js";
8
8
  import "./chunk-MLZQVCF3.js";
9
- import "./chunk-JMZQICAL.js";
10
- import "./chunk-SOIEFHIK.js";
11
- import "./chunk-B7ZL7HUA.js";
9
+ import "./chunk-PPHYLJSS.js";
10
+ import "./chunk-G7YTSRES.js";
11
+ import "./chunk-XVHR7ATJ.js";
12
12
  import "./chunk-77WXWU44.js";
13
- import "./chunk-OCC4MZRS.js";
14
- import "./chunk-CAWKL3UC.js";
15
- import "./chunk-PCL3EJGY.js";
13
+ import "./chunk-F23NCRJ2.js";
14
+ import "./chunk-VTPOO6GV.js";
15
+ import "./chunk-C3LHPHN2.js";
16
16
  import "./chunk-SYCJMSIJ.js";
17
17
  import "./chunk-UWCTAVOD.js";
18
18
  import "./chunk-OFEVLU4C.js";
19
- import "./chunk-CM2IESUE.js";
20
- import "./chunk-UXW7MYAW.js";
21
- import "./chunk-G27O2LD2.js";
19
+ import "./chunk-PR4T27R7.js";
20
+ import "./chunk-CW44BRRA.js";
21
+ import "./chunk-D5NTAHYL.js";
22
22
  import "./chunk-T4VD6OJ4.js";
23
23
  import "./chunk-RDYWTWEM.js";
24
- import "./chunk-TPGOGCWM.js";
24
+ import "./chunk-JYQUJ5DS.js";
25
25
  import {
26
26
  BaseDeclarativeTool,
27
27
  BaseToolInvocation,
28
28
  ToolDisplayNames,
29
29
  ToolNames
30
- } from "./chunk-FYMSCRHM.js";
31
- import "./chunk-SQNQIOD5.js";
32
- import "./chunk-FKVKVE6N.js";
30
+ } from "./chunk-FZIUV27X.js";
31
+ import "./chunk-2B7UBDY5.js";
32
+ import "./chunk-KXZ4TJB4.js";
33
33
  import {
34
34
  createDebugLogger
35
- } from "./chunk-GJXIKCKL.js";
35
+ } from "./chunk-XP27SJMH.js";
36
36
  import "./chunk-E7E2MFYM.js";
37
37
  import "./chunk-ZERZSAZL.js";
38
38
  import "./chunk-QN5NZ3UQ.js";
@@ -106,6 +106,32 @@ var fr_default = {
106
106
  "Generate a one-line session recap now": "G\xE9n\xE9rer maintenant un r\xE9capitulatif de session en une ligne",
107
107
  "Rename the current conversation. --auto lets the fast model pick a title.": "Renommer la conversation en cours. --auto laisse le mod\xE8le rapide choisir un titre.",
108
108
  "Rewind conversation to a previous turn": "Revenir \xE0 un tour pr\xE9c\xE9dent de la conversation",
109
+ "Rewind Conversation": "Rembobiner la conversation",
110
+ "No user turns to rewind to.": "Aucun tour utilisateur vers lequel rembobiner.",
111
+ "Rewind to: ": "Rembobiner vers : ",
112
+ "Restore code and conversation": "Restaurer le code et la conversation",
113
+ "Restore conversation only": "Restaurer la conversation uniquement",
114
+ "Restore code only": "Restaurer le code uniquement",
115
+ "Never mind": "Annuler",
116
+ "Computing file changes...": "Calcul des modifications de fichiers...",
117
+ "Restoring...": "Restauration en cours...",
118
+ "Restored {{count}} file(s).": "{{count}} fichier(s) restaur\xE9(s).",
119
+ "Failed to restore files: {{error}}": "\xC9chec de la restauration des fichiers : {{error}}",
120
+ "Rewind failed: {{error}}": "\xC9chec du retour en arri\xE8re : {{error}}",
121
+ "Cannot rewind conversation: no active model client.": "Impossible de revenir en arri\xE8re sur la conversation : aucun client de mod\xE8le actif.",
122
+ "Code restored, but conversation could not be rewound (no active client).": "Code restaur\xE9, mais la conversation n\u2019a pas pu \xEAtre ramen\xE9e en arri\xE8re (aucun client actif).",
123
+ "Conversation rewound. Edit your prompt and press Enter to continue.": "Conversation ramen\xE9e en arri\xE8re. Modifiez votre invite et appuyez sur Entr\xE9e pour continuer.",
124
+ "Rewinding does not affect files edited manually or via shell commands.": "Le retour en arri\xE8re n\u2019affecte pas les fichiers \xE9dit\xE9s manuellement ou via des commandes shell.",
125
+ "Cannot rewind to a turn that was compressed. Try a more recent turn.": "Impossible de revenir \xE0 un tour qui a \xE9t\xE9 compress\xE9. Essayez un tour plus r\xE9cent.",
126
+ "File restore is unavailable for this turn (no captured file changes, or this turn predates the current session).": "La restauration des fichiers est indisponible pour ce tour (aucune modification captur\xE9e, ou ce tour est ant\xE9rieur \xE0 la session actuelle).",
127
+ "(+{{insertions}} -{{deletions}} in {{count}} file)": "(+{{insertions}} -{{deletions}} dans {{count}} fichier)",
128
+ "(+{{insertions}} -{{deletions}} in {{count}} files)": "(+{{insertions}} -{{deletions}} dans {{count}} fichiers)",
129
+ "Failed to restore {{count}} file(s): {{files}}": "\xC9chec de la restauration de {{count}} fichier(s) : {{files}}",
130
+ "Cannot restore files: this turn was created before file checkpointing was enabled.": "Impossible de restaurer les fichiers : ce tour a \xE9t\xE9 cr\xE9\xE9 avant l'activation des points de contr\xF4le de fichiers.",
131
+ "No files needed to be restored.": "Aucun fichier n'a eu besoin d'\xEAtre restaur\xE9.",
132
+ "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to go back": "\u2191\u2193 naviguer \xB7 Enter s\xE9lectionner \xB7 Esc retour",
133
+ "\u2191\u2193 to navigate \xB7 Enter to select \xB7 Esc to cancel": "\u2191\u2193 naviguer \xB7 Enter s\xE9lectionner \xB7 Esc annuler",
134
+ "Enter/Y to confirm \xB7 Esc/N to go back": "Enter/Y confirmer \xB7 Esc/N retour",
109
135
  "change the theme": "changer le th\xE8me",
110
136
  "Select Theme": "S\xE9lectionner un th\xE8me",
111
137
  Preview: "Aper\xE7u",
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  InstallationManager
5
- } from "./chunk-G27O2LD2.js";
5
+ } from "./chunk-D5NTAHYL.js";
6
6
  import {
7
7
  GoogleGenAI
8
8
  } from "./chunk-T4VD6OJ4.js";
9
9
  import "./chunk-RDYWTWEM.js";
10
- import "./chunk-GJXIKCKL.js";
10
+ import "./chunk-XP27SJMH.js";
11
11
  import "./chunk-QWSRH265.js";
12
12
  import {
13
13
  init_esbuild_shims
@@ -210,7 +210,7 @@ var GeminiContentGenerator = class {
210
210
 
211
211
  // packages/core/src/core/geminiContentGenerator/index.ts
212
212
  function createGeminiContentGenerator(config, gcConfig) {
213
- const version = "0.15.12-preview.2";
213
+ const version = "0.16.0-preview.0";
214
214
  const userAgent = config.userAgent || `QwenCode/${version} (${process.platform}; ${process.arch})`;
215
215
  const baseHeaders = {
216
216
  "User-Agent": userAgent