@mmmbuto/qwen-code-termux 0.6.1-termux → 0.6.3-termux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -5758,7 +5758,7 @@ var require_client_h1 = __commonJS({
5758
5758
  kResume,
5759
5759
  kHTTPContext
5760
5760
  } = require_symbols();
5761
- var constants4 = require_constants2();
5761
+ var constants5 = require_constants2();
5762
5762
  var EMPTY_BUF = Buffer.alloc(0);
5763
5763
  var FastBuffer = Buffer[Symbol.species];
5764
5764
  var addListener = util4.addListener;
@@ -5834,7 +5834,7 @@ var require_client_h1 = __commonJS({
5834
5834
  constructor(client, socket, { exports: exports3 }) {
5835
5835
  assert4(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
5836
5836
  this.llhttp = exports3;
5837
- this.ptr = this.llhttp.llhttp_alloc(constants4.TYPE.RESPONSE);
5837
+ this.ptr = this.llhttp.llhttp_alloc(constants5.TYPE.RESPONSE);
5838
5838
  this.client = client;
5839
5839
  this.socket = socket;
5840
5840
  this.timeout = null;
@@ -5929,19 +5929,19 @@ var require_client_h1 = __commonJS({
5929
5929
  currentBufferRef = null;
5930
5930
  }
5931
5931
  const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
5932
- if (ret === constants4.ERROR.PAUSED_UPGRADE) {
5932
+ if (ret === constants5.ERROR.PAUSED_UPGRADE) {
5933
5933
  this.onUpgrade(data.slice(offset));
5934
- } else if (ret === constants4.ERROR.PAUSED) {
5934
+ } else if (ret === constants5.ERROR.PAUSED) {
5935
5935
  this.paused = true;
5936
5936
  socket.unshift(data.slice(offset));
5937
- } else if (ret !== constants4.ERROR.OK) {
5937
+ } else if (ret !== constants5.ERROR.OK) {
5938
5938
  const ptr = llhttp.llhttp_get_error_reason(this.ptr);
5939
5939
  let message = "";
5940
5940
  if (ptr) {
5941
5941
  const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
5942
5942
  message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
5943
5943
  }
5944
- throw new HTTPParserError(message, constants4.ERROR[ret], data.slice(offset));
5944
+ throw new HTTPParserError(message, constants5.ERROR[ret], data.slice(offset));
5945
5945
  }
5946
5946
  } catch (err) {
5947
5947
  util4.destroy(socket, err);
@@ -6116,7 +6116,7 @@ var require_client_h1 = __commonJS({
6116
6116
  socket[kBlocking] = false;
6117
6117
  client[kResume]();
6118
6118
  }
6119
- return pause ? constants4.ERROR.PAUSED : 0;
6119
+ return pause ? constants5.ERROR.PAUSED : 0;
6120
6120
  }
6121
6121
  onBody(buf) {
6122
6122
  const { client, socket, statusCode, maxResponseSize } = this;
@@ -6138,7 +6138,7 @@ var require_client_h1 = __commonJS({
6138
6138
  }
6139
6139
  this.bytesRead += buf.length;
6140
6140
  if (request4.onData(buf) === false) {
6141
- return constants4.ERROR.PAUSED;
6141
+ return constants5.ERROR.PAUSED;
6142
6142
  }
6143
6143
  }
6144
6144
  onMessageComplete() {
@@ -6173,13 +6173,13 @@ var require_client_h1 = __commonJS({
6173
6173
  if (socket[kWriting]) {
6174
6174
  assert4(client[kRunning] === 0);
6175
6175
  util4.destroy(socket, new InformationalError("reset"));
6176
- return constants4.ERROR.PAUSED;
6176
+ return constants5.ERROR.PAUSED;
6177
6177
  } else if (!shouldKeepAlive) {
6178
6178
  util4.destroy(socket, new InformationalError("reset"));
6179
- return constants4.ERROR.PAUSED;
6179
+ return constants5.ERROR.PAUSED;
6180
6180
  } else if (socket[kReset2] && client[kRunning] === 0) {
6181
6181
  util4.destroy(socket, new InformationalError("reset"));
6182
- return constants4.ERROR.PAUSED;
6182
+ return constants5.ERROR.PAUSED;
6183
6183
  } else if (client[kPipelining] == null || client[kPipelining] === 1) {
6184
6184
  setImmediate(() => client[kResume]());
6185
6185
  } else {
@@ -58108,11 +58108,11 @@ var require_codegen = __commonJS({
58108
58108
  const rhs = this.rhs === void 0 ? "" : ` = ${this.rhs}`;
58109
58109
  return `${varKind} ${this.name}${rhs};` + _n;
58110
58110
  }
58111
- optimizeNames(names, constants4) {
58111
+ optimizeNames(names, constants5) {
58112
58112
  if (!names[this.name.str])
58113
58113
  return;
58114
58114
  if (this.rhs)
58115
- this.rhs = optimizeExpr(this.rhs, names, constants4);
58115
+ this.rhs = optimizeExpr(this.rhs, names, constants5);
58116
58116
  return this;
58117
58117
  }
58118
58118
  get names() {
@@ -58132,10 +58132,10 @@ var require_codegen = __commonJS({
58132
58132
  render({ _n }) {
58133
58133
  return `${this.lhs} = ${this.rhs};` + _n;
58134
58134
  }
58135
- optimizeNames(names, constants4) {
58135
+ optimizeNames(names, constants5) {
58136
58136
  if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)
58137
58137
  return;
58138
- this.rhs = optimizeExpr(this.rhs, names, constants4);
58138
+ this.rhs = optimizeExpr(this.rhs, names, constants5);
58139
58139
  return this;
58140
58140
  }
58141
58141
  get names() {
@@ -58211,8 +58211,8 @@ var require_codegen = __commonJS({
58211
58211
  optimizeNodes() {
58212
58212
  return `${this.code}` ? this : void 0;
58213
58213
  }
58214
- optimizeNames(names, constants4) {
58215
- this.code = optimizeExpr(this.code, names, constants4);
58214
+ optimizeNames(names, constants5) {
58215
+ this.code = optimizeExpr(this.code, names, constants5);
58216
58216
  return this;
58217
58217
  }
58218
58218
  get names() {
@@ -58244,12 +58244,12 @@ var require_codegen = __commonJS({
58244
58244
  }
58245
58245
  return nodes.length > 0 ? this : void 0;
58246
58246
  }
58247
- optimizeNames(names, constants4) {
58247
+ optimizeNames(names, constants5) {
58248
58248
  const { nodes } = this;
58249
58249
  let i3 = nodes.length;
58250
58250
  while (i3--) {
58251
58251
  const n3 = nodes[i3];
58252
- if (n3.optimizeNames(names, constants4))
58252
+ if (n3.optimizeNames(names, constants5))
58253
58253
  continue;
58254
58254
  subtractNames(names, n3.names);
58255
58255
  nodes.splice(i3, 1);
@@ -58314,12 +58314,12 @@ var require_codegen = __commonJS({
58314
58314
  return void 0;
58315
58315
  return this;
58316
58316
  }
58317
- optimizeNames(names, constants4) {
58317
+ optimizeNames(names, constants5) {
58318
58318
  var _a7;
58319
- this.else = (_a7 = this.else) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants4);
58320
- if (!(super.optimizeNames(names, constants4) || this.else))
58319
+ this.else = (_a7 = this.else) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants5);
58320
+ if (!(super.optimizeNames(names, constants5) || this.else))
58321
58321
  return;
58322
- this.condition = optimizeExpr(this.condition, names, constants4);
58322
+ this.condition = optimizeExpr(this.condition, names, constants5);
58323
58323
  return this;
58324
58324
  }
58325
58325
  get names() {
@@ -58348,10 +58348,10 @@ var require_codegen = __commonJS({
58348
58348
  render(opts) {
58349
58349
  return `for(${this.iteration})` + super.render(opts);
58350
58350
  }
58351
- optimizeNames(names, constants4) {
58352
- if (!super.optimizeNames(names, constants4))
58351
+ optimizeNames(names, constants5) {
58352
+ if (!super.optimizeNames(names, constants5))
58353
58353
  return;
58354
- this.iteration = optimizeExpr(this.iteration, names, constants4);
58354
+ this.iteration = optimizeExpr(this.iteration, names, constants5);
58355
58355
  return this;
58356
58356
  }
58357
58357
  get names() {
@@ -58393,10 +58393,10 @@ var require_codegen = __commonJS({
58393
58393
  render(opts) {
58394
58394
  return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);
58395
58395
  }
58396
- optimizeNames(names, constants4) {
58397
- if (!super.optimizeNames(names, constants4))
58396
+ optimizeNames(names, constants5) {
58397
+ if (!super.optimizeNames(names, constants5))
58398
58398
  return;
58399
- this.iterable = optimizeExpr(this.iterable, names, constants4);
58399
+ this.iterable = optimizeExpr(this.iterable, names, constants5);
58400
58400
  return this;
58401
58401
  }
58402
58402
  get names() {
@@ -58447,11 +58447,11 @@ var require_codegen = __commonJS({
58447
58447
  (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNodes();
58448
58448
  return this;
58449
58449
  }
58450
- optimizeNames(names, constants4) {
58450
+ optimizeNames(names, constants5) {
58451
58451
  var _a7, _b2;
58452
- super.optimizeNames(names, constants4);
58453
- (_a7 = this.catch) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants4);
58454
- (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNames(names, constants4);
58452
+ super.optimizeNames(names, constants5);
58453
+ (_a7 = this.catch) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants5);
58454
+ (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNames(names, constants5);
58455
58455
  return this;
58456
58456
  }
58457
58457
  get names() {
@@ -58763,7 +58763,7 @@ var require_codegen = __commonJS({
58763
58763
  return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;
58764
58764
  }
58765
58765
  __name(addExprNames, "addExprNames");
58766
- function optimizeExpr(expr, names, constants4) {
58766
+ function optimizeExpr(expr, names, constants5) {
58767
58767
  if (expr instanceof code_1.Name)
58768
58768
  return replaceName(expr);
58769
58769
  if (!canOptimize(expr))
@@ -58778,7 +58778,7 @@ var require_codegen = __commonJS({
58778
58778
  return items;
58779
58779
  }, []));
58780
58780
  function replaceName(n3) {
58781
- const c4 = constants4[n3.str];
58781
+ const c4 = constants5[n3.str];
58782
58782
  if (c4 === void 0 || names[n3.str] !== 1)
58783
58783
  return n3;
58784
58784
  delete names[n3.str];
@@ -58786,7 +58786,7 @@ var require_codegen = __commonJS({
58786
58786
  }
58787
58787
  __name(replaceName, "replaceName");
58788
58788
  function canOptimize(e4) {
58789
- return e4 instanceof code_1._Code && e4._items.some((c4) => c4 instanceof code_1.Name && names[c4.str] === 1 && constants4[c4.str] !== void 0);
58789
+ return e4 instanceof code_1._Code && e4._items.some((c4) => c4 instanceof code_1.Name && names[c4.str] === 1 && constants5[c4.str] !== void 0);
58790
58790
  }
58791
58791
  __name(canOptimize, "canOptimize");
58792
58792
  }
@@ -65154,11 +65154,11 @@ var require_codegen2 = __commonJS({
65154
65154
  const rhs = this.rhs === void 0 ? "" : ` = ${this.rhs}`;
65155
65155
  return `${varKind} ${this.name}${rhs};` + _n;
65156
65156
  }
65157
- optimizeNames(names, constants4) {
65157
+ optimizeNames(names, constants5) {
65158
65158
  if (!names[this.name.str])
65159
65159
  return;
65160
65160
  if (this.rhs)
65161
- this.rhs = optimizeExpr(this.rhs, names, constants4);
65161
+ this.rhs = optimizeExpr(this.rhs, names, constants5);
65162
65162
  return this;
65163
65163
  }
65164
65164
  get names() {
@@ -65178,10 +65178,10 @@ var require_codegen2 = __commonJS({
65178
65178
  render({ _n }) {
65179
65179
  return `${this.lhs} = ${this.rhs};` + _n;
65180
65180
  }
65181
- optimizeNames(names, constants4) {
65181
+ optimizeNames(names, constants5) {
65182
65182
  if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)
65183
65183
  return;
65184
- this.rhs = optimizeExpr(this.rhs, names, constants4);
65184
+ this.rhs = optimizeExpr(this.rhs, names, constants5);
65185
65185
  return this;
65186
65186
  }
65187
65187
  get names() {
@@ -65257,8 +65257,8 @@ var require_codegen2 = __commonJS({
65257
65257
  optimizeNodes() {
65258
65258
  return `${this.code}` ? this : void 0;
65259
65259
  }
65260
- optimizeNames(names, constants4) {
65261
- this.code = optimizeExpr(this.code, names, constants4);
65260
+ optimizeNames(names, constants5) {
65261
+ this.code = optimizeExpr(this.code, names, constants5);
65262
65262
  return this;
65263
65263
  }
65264
65264
  get names() {
@@ -65290,12 +65290,12 @@ var require_codegen2 = __commonJS({
65290
65290
  }
65291
65291
  return nodes.length > 0 ? this : void 0;
65292
65292
  }
65293
- optimizeNames(names, constants4) {
65293
+ optimizeNames(names, constants5) {
65294
65294
  const { nodes } = this;
65295
65295
  let i3 = nodes.length;
65296
65296
  while (i3--) {
65297
65297
  const n3 = nodes[i3];
65298
- if (n3.optimizeNames(names, constants4))
65298
+ if (n3.optimizeNames(names, constants5))
65299
65299
  continue;
65300
65300
  subtractNames(names, n3.names);
65301
65301
  nodes.splice(i3, 1);
@@ -65360,12 +65360,12 @@ var require_codegen2 = __commonJS({
65360
65360
  return void 0;
65361
65361
  return this;
65362
65362
  }
65363
- optimizeNames(names, constants4) {
65363
+ optimizeNames(names, constants5) {
65364
65364
  var _a7;
65365
- this.else = (_a7 = this.else) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants4);
65366
- if (!(super.optimizeNames(names, constants4) || this.else))
65365
+ this.else = (_a7 = this.else) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants5);
65366
+ if (!(super.optimizeNames(names, constants5) || this.else))
65367
65367
  return;
65368
- this.condition = optimizeExpr(this.condition, names, constants4);
65368
+ this.condition = optimizeExpr(this.condition, names, constants5);
65369
65369
  return this;
65370
65370
  }
65371
65371
  get names() {
@@ -65394,10 +65394,10 @@ var require_codegen2 = __commonJS({
65394
65394
  render(opts) {
65395
65395
  return `for(${this.iteration})` + super.render(opts);
65396
65396
  }
65397
- optimizeNames(names, constants4) {
65398
- if (!super.optimizeNames(names, constants4))
65397
+ optimizeNames(names, constants5) {
65398
+ if (!super.optimizeNames(names, constants5))
65399
65399
  return;
65400
- this.iteration = optimizeExpr(this.iteration, names, constants4);
65400
+ this.iteration = optimizeExpr(this.iteration, names, constants5);
65401
65401
  return this;
65402
65402
  }
65403
65403
  get names() {
@@ -65439,10 +65439,10 @@ var require_codegen2 = __commonJS({
65439
65439
  render(opts) {
65440
65440
  return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);
65441
65441
  }
65442
- optimizeNames(names, constants4) {
65443
- if (!super.optimizeNames(names, constants4))
65442
+ optimizeNames(names, constants5) {
65443
+ if (!super.optimizeNames(names, constants5))
65444
65444
  return;
65445
- this.iterable = optimizeExpr(this.iterable, names, constants4);
65445
+ this.iterable = optimizeExpr(this.iterable, names, constants5);
65446
65446
  return this;
65447
65447
  }
65448
65448
  get names() {
@@ -65493,11 +65493,11 @@ var require_codegen2 = __commonJS({
65493
65493
  (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNodes();
65494
65494
  return this;
65495
65495
  }
65496
- optimizeNames(names, constants4) {
65496
+ optimizeNames(names, constants5) {
65497
65497
  var _a7, _b2;
65498
- super.optimizeNames(names, constants4);
65499
- (_a7 = this.catch) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants4);
65500
- (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNames(names, constants4);
65498
+ super.optimizeNames(names, constants5);
65499
+ (_a7 = this.catch) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants5);
65500
+ (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNames(names, constants5);
65501
65501
  return this;
65502
65502
  }
65503
65503
  get names() {
@@ -65809,7 +65809,7 @@ var require_codegen2 = __commonJS({
65809
65809
  return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;
65810
65810
  }
65811
65811
  __name(addExprNames, "addExprNames");
65812
- function optimizeExpr(expr, names, constants4) {
65812
+ function optimizeExpr(expr, names, constants5) {
65813
65813
  if (expr instanceof code_1.Name)
65814
65814
  return replaceName(expr);
65815
65815
  if (!canOptimize(expr))
@@ -65824,7 +65824,7 @@ var require_codegen2 = __commonJS({
65824
65824
  return items;
65825
65825
  }, []));
65826
65826
  function replaceName(n3) {
65827
- const c4 = constants4[n3.str];
65827
+ const c4 = constants5[n3.str];
65828
65828
  if (c4 === void 0 || names[n3.str] !== 1)
65829
65829
  return n3;
65830
65830
  delete names[n3.str];
@@ -65832,7 +65832,7 @@ var require_codegen2 = __commonJS({
65832
65832
  }
65833
65833
  __name(replaceName, "replaceName");
65834
65834
  function canOptimize(e4) {
65835
- return e4 instanceof code_1._Code && e4._items.some((c4) => c4 instanceof code_1.Name && names[c4.str] === 1 && constants4[c4.str] !== void 0);
65835
+ return e4 instanceof code_1._Code && e4._items.some((c4) => c4 instanceof code_1.Name && names[c4.str] === 1 && constants5[c4.str] !== void 0);
65836
65836
  }
65837
65837
  __name(canOptimize, "canOptimize");
65838
65838
  }
@@ -70952,16 +70952,21 @@ var require_dist3 = __commonJS({
70952
70952
  });
70953
70953
 
70954
70954
  // packages/core/dist/src/utils/schemaValidator.js
70955
- function fixBooleanCasing(data) {
70955
+ function fixBooleanValues(data) {
70956
70956
  for (const key of Object.keys(data)) {
70957
70957
  if (!(key in data))
70958
70958
  continue;
70959
- if (typeof data[key] === "object") {
70960
- fixBooleanCasing(data[key]);
70961
- } else if (data[key] === "True")
70962
- data[key] = "true";
70963
- else if (data[key] === "False")
70964
- data[key] = "false";
70959
+ const value = data[key];
70960
+ if (typeof value === "object" && value !== null) {
70961
+ fixBooleanValues(value);
70962
+ } else if (typeof value === "string") {
70963
+ const lower3 = value.toLowerCase();
70964
+ if (lower3 === "true") {
70965
+ data[key] = true;
70966
+ } else if (lower3 === "false") {
70967
+ data[key] = false;
70968
+ }
70969
+ }
70965
70970
  }
70966
70971
  }
70967
70972
  var import_ajv, addFormats, AjvClass, ajValidator, addFormatsFunc, SchemaValidator;
@@ -71002,19 +71007,18 @@ var init_schemaValidator = __esm({
71002
71007
  return "Value of params must be an object";
71003
71008
  }
71004
71009
  const validate3 = ajValidator.compile(schema);
71005
- const valid = validate3(data);
71010
+ let valid = validate3(data);
71006
71011
  if (!valid && validate3.errors) {
71007
- fixBooleanCasing(data);
71008
- const validate4 = ajValidator.compile(schema);
71009
- const valid2 = validate4(data);
71010
- if (!valid2 && validate4.errors) {
71011
- return ajValidator.errorsText(validate4.errors, { dataVar: "params" });
71012
+ fixBooleanValues(data);
71013
+ valid = validate3(data);
71014
+ if (!valid && validate3.errors) {
71015
+ return ajValidator.errorsText(validate3.errors, { dataVar: "params" });
71012
71016
  }
71013
71017
  }
71014
71018
  return null;
71015
71019
  }
71016
71020
  };
71017
- __name(fixBooleanCasing, "fixBooleanCasing");
71021
+ __name(fixBooleanValues, "fixBooleanValues");
71018
71022
  }
71019
71023
  });
71020
71024
 
@@ -131340,6 +131344,7 @@ var init_converter = __esm({
131340
131344
  const totalTokens = usage2.total_tokens || 0;
131341
131345
  const extendedUsage = usage2;
131342
131346
  const cachedTokens = usage2.prompt_tokens_details?.cached_tokens ?? extendedUsage.cached_tokens ?? 0;
131347
+ const thinkingTokens = usage2.completion_tokens_details?.reasoning_tokens || 0;
131343
131348
  let finalPromptTokens = promptTokens;
131344
131349
  let finalCompletionTokens = completionTokens;
131345
131350
  if (totalTokens > 0 && promptTokens === 0 && completionTokens === 0) {
@@ -131350,7 +131355,8 @@ var init_converter = __esm({
131350
131355
  promptTokenCount: finalPromptTokens,
131351
131356
  candidatesTokenCount: finalCompletionTokens,
131352
131357
  totalTokenCount: totalTokens,
131353
- cachedContentTokenCount: cachedTokens
131358
+ cachedContentTokenCount: cachedTokens,
131359
+ thoughtsTokenCount: thinkingTokens
131354
131360
  };
131355
131361
  }
131356
131362
  return response;
@@ -131561,10 +131567,23 @@ var init_converter = __esm({
131561
131567
  if (message.role === "assistant" && merged.length > 0) {
131562
131568
  const lastMessage = merged[merged.length - 1];
131563
131569
  if (lastMessage.role === "assistant") {
131564
- const combinedContent = [
131565
- typeof lastMessage.content === "string" ? lastMessage.content : "",
131566
- typeof message.content === "string" ? message.content : ""
131567
- ].filter(Boolean).join("");
131570
+ const lastContent = lastMessage.content;
131571
+ const currentContent = message.content;
131572
+ const useArrayFormat = Array.isArray(lastContent) || Array.isArray(currentContent);
131573
+ let combinedContent;
131574
+ if (useArrayFormat) {
131575
+ const lastParts = Array.isArray(lastContent) ? lastContent : typeof lastContent === "string" && lastContent ? [{ type: "text", text: lastContent }] : [];
131576
+ const currentParts = Array.isArray(currentContent) ? currentContent : typeof currentContent === "string" && currentContent ? [{ type: "text", text: currentContent }] : [];
131577
+ combinedContent = [
131578
+ ...lastParts,
131579
+ ...currentParts
131580
+ ];
131581
+ } else {
131582
+ const lastText = typeof lastContent === "string" ? lastContent : "";
131583
+ const currentText = typeof currentContent === "string" ? currentContent : "";
131584
+ const mergedText = [lastText, currentText].filter(Boolean).join("");
131585
+ combinedContent = mergedText || null;
131586
+ }
131568
131587
  const lastToolCalls = "tool_calls" in lastMessage ? lastMessage.tool_calls || [] : [];
131569
131588
  const currentToolCalls = "tool_calls" in message ? message.tool_calls || [] : [];
131570
131589
  const combinedToolCalls = [...lastToolCalls, ...currentToolCalls];
@@ -139660,9 +139679,7 @@ var init_default = __esm({
139660
139679
  };
139661
139680
  }
139662
139681
  getDefaultGenerationConfig() {
139663
- return {
139664
- topP: 0.95
139665
- };
139682
+ return {};
139666
139683
  }
139667
139684
  };
139668
139685
  }
@@ -140382,13 +140399,7 @@ var init_pipeline = __esm({
140382
140399
  return params;
140383
140400
  }
140384
140401
  buildReasoningConfig() {
140385
- const reasoning = this.contentGeneratorConfig.reasoning;
140386
- if (reasoning === false) {
140387
- return {};
140388
- }
140389
- return {
140390
- reasoning_effort: reasoning?.effort ?? "medium"
140391
- };
140402
+ return {};
140392
140403
  }
140393
140404
  /**
140394
140405
  * Common error handling wrapper for execute methods
@@ -142950,10 +142961,111 @@ __export(qwenOAuth2_exports, {
142950
142961
  });
142951
142962
  import crypto5 from "crypto";
142952
142963
  import path9 from "node:path";
142953
- import { promises as fs13 } from "node:fs";
142964
+ import { promises as fs13, accessSync, constants } from "node:fs";
142954
142965
  import * as os7 from "os";
142966
+ import { execFileSync as execFileSync2 } from "node:child_process";
142955
142967
  import { EventEmitter as EventEmitter2 } from "events";
142956
142968
  import { randomUUID as randomUUID3 } from "node:crypto";
142969
+ function isTermux() {
142970
+ return process.platform === "android" || process.env["PREFIX"]?.includes("com.termux") || process.env["TERMUX_VERSION"] !== void 0;
142971
+ }
142972
+ function ensureSystemBinInPath(pathValue) {
142973
+ if (!pathValue)
142974
+ return pathValue;
142975
+ if (pathValue.includes("/system/bin"))
142976
+ return pathValue;
142977
+ return `${pathValue}:/system/bin`;
142978
+ }
142979
+ function resolveAndroidCommand(candidates) {
142980
+ for (const candidate of candidates) {
142981
+ try {
142982
+ accessSync(candidate, constants.X_OK);
142983
+ return candidate;
142984
+ } catch {
142985
+ }
142986
+ }
142987
+ return null;
142988
+ }
142989
+ function getAndroidUserId() {
142990
+ const candidates = ["cmd", "/system/bin/cmd"];
142991
+ const cmdPath = resolveAndroidCommand(candidates);
142992
+ if (!cmdPath)
142993
+ return void 0;
142994
+ try {
142995
+ const output = execFileSync2(cmdPath, ["activity", "get-current-user"], {
142996
+ stdio: ["ignore", "pipe", "ignore"],
142997
+ env: { ...process.env, PATH: ensureSystemBinInPath(process.env["PATH"]) }
142998
+ }).toString().trim();
142999
+ const match2 = output.match(/\d+/);
143000
+ return match2 ? match2[0] : void 0;
143001
+ } catch {
143002
+ return void 0;
143003
+ }
143004
+ }
143005
+ async function openBrowserUrl(url2) {
143006
+ if (isTermux()) {
143007
+ const possiblePaths = [
143008
+ "/data/data/com.termux/files/usr/bin/termux-open-url",
143009
+ "/usr/bin/termux-open-url",
143010
+ "termux-open-url"
143011
+ ];
143012
+ let termuxOpenUrl = "termux-open-url";
143013
+ for (const candidate of possiblePaths) {
143014
+ try {
143015
+ accessSync(candidate, constants.X_OK);
143016
+ termuxOpenUrl = candidate;
143017
+ break;
143018
+ } catch {
143019
+ }
143020
+ }
143021
+ const resolvedUserId = getAndroidUserId();
143022
+ const termuxApp = process.env["TERMUX_OPEN_URL_APP"];
143023
+ const args = termuxApp ? [url2, termuxApp] : [url2];
143024
+ const env7 = {
143025
+ ...process.env,
143026
+ PATH: ensureSystemBinInPath(process.env["PATH"]),
143027
+ ...resolvedUserId ? { TERMUX__USER_ID: resolvedUserId } : {}
143028
+ };
143029
+ try {
143030
+ console.debug(`Opening URL with: ${termuxOpenUrl}`);
143031
+ execFileSync2(termuxOpenUrl, args, {
143032
+ stdio: "ignore",
143033
+ env: env7
143034
+ });
143035
+ return;
143036
+ } catch (error2) {
143037
+ const rawUserId = resolvedUserId ?? process.env["TERMUX__USER_ID"] ?? "0";
143038
+ const userId = /^\d+$/.test(rawUserId) ? rawUserId : "0";
143039
+ try {
143040
+ const amCandidates = [
143041
+ "/data/data/com.termux/files/usr/bin/am",
143042
+ "/system/bin/am",
143043
+ "am"
143044
+ ];
143045
+ const amPath = resolveAndroidCommand(amCandidates) ?? "am";
143046
+ execFileSync2(amPath, [
143047
+ "start",
143048
+ "--user",
143049
+ userId,
143050
+ "-a",
143051
+ "android.intent.action.VIEW",
143052
+ "-d",
143053
+ url2
143054
+ ], {
143055
+ stdio: "ignore",
143056
+ env: env7
143057
+ });
143058
+ return;
143059
+ } catch (amError) {
143060
+ console.error(`Failed to open URL with termux-open-url: ${error2 instanceof Error ? error2.message : String(error2)}`);
143061
+ console.error(`Fallback 'am start' failed: ${amError instanceof Error ? amError.message : String(amError)}`);
143062
+ throw error2;
143063
+ }
143064
+ }
143065
+ } else {
143066
+ await open_default(url2);
143067
+ }
143068
+ }
142957
143069
  function generateCodeVerifier() {
142958
143070
  return crypto5.randomBytes(32).toString("base64url");
142959
143071
  }
@@ -143059,13 +143171,7 @@ ${deviceAuth.verification_uri_complete}
143059
143171
  }, "showFallbackMessage");
143060
143172
  if (!config2.isBrowserLaunchSuppressed()) {
143061
143173
  try {
143062
- const childProcess3 = await open_default(deviceAuth.verification_uri_complete);
143063
- if (childProcess3) {
143064
- childProcess3.on("error", () => {
143065
- console.debug("Failed to open browser. Visit this URL to authorize:");
143066
- showFallbackMessage();
143067
- });
143068
- }
143174
+ await openBrowserUrl(deviceAuth.verification_uri_complete);
143069
143175
  } catch (_err) {
143070
143176
  showFallbackMessage();
143071
143177
  }
@@ -143237,6 +143343,11 @@ var init_qwenOAuth2 = __esm({
143237
143343
  QWEN_OAUTH_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
143238
143344
  QWEN_DIR3 = ".qwen";
143239
143345
  QWEN_CREDENTIAL_FILENAME2 = "oauth_creds.json";
143346
+ __name(isTermux, "isTermux");
143347
+ __name(ensureSystemBinInPath, "ensureSystemBinInPath");
143348
+ __name(resolveAndroidCommand, "resolveAndroidCommand");
143349
+ __name(getAndroidUserId, "getAndroidUserId");
143350
+ __name(openBrowserUrl, "openBrowserUrl");
143240
143351
  __name(generateCodeVerifier, "generateCodeVerifier");
143241
143352
  __name(generateCodeChallenge, "generateCodeChallenge");
143242
143353
  __name(generatePKCEPair, "generatePKCEPair");
@@ -154897,7 +155008,7 @@ __export(geminiContentGenerator_exports, {
154897
155008
  createGeminiContentGenerator: () => createGeminiContentGenerator
154898
155009
  });
154899
155010
  function createGeminiContentGenerator(config2, gcConfig) {
154900
- const version2 = "0.6.1-termux";
155011
+ const version2 = "0.6.3-termux";
154901
155012
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
154902
155013
  const baseHeaders = {
154903
155014
  "User-Agent": userAgent2
@@ -169747,10 +169858,10 @@ var init_terminalSerializer = __esm({
169747
169858
  });
169748
169859
 
169749
169860
  // packages/core/dist/src/services/shellExecutionService.js
169750
- import { spawn as cpSpawn } from "node:child_process";
169861
+ import { spawn as cpSpawn, spawnSync as spawnSync2 } from "node:child_process";
169751
169862
  import { TextDecoder as TextDecoder2 } from "node:util";
169752
169863
  import os12 from "node:os";
169753
- var import_headless, Terminal, SIGKILL_TIMEOUT_MS, getFullBufferText, ShellExecutionService;
169864
+ var import_headless, Terminal, SIGKILL_TIMEOUT_MS, getFullBufferText, windowsStrategy, posixStrategy, getCleanupStrategy, ShellExecutionService;
169754
169865
  var init_shellExecutionService = __esm({
169755
169866
  "packages/core/dist/src/services/shellExecutionService.js"() {
169756
169867
  "use strict";
@@ -169773,11 +169884,58 @@ var init_shellExecutionService = __esm({
169773
169884
  }
169774
169885
  return lines.join("\n").trimEnd();
169775
169886
  }, "getFullBufferText");
169776
- ShellExecutionService = class {
169887
+ windowsStrategy = {
169888
+ killPty: /* @__PURE__ */ __name((_pid, pty) => {
169889
+ pty.ptyProcess.kill();
169890
+ }, "killPty"),
169891
+ killChildProcesses: /* @__PURE__ */ __name((pids) => {
169892
+ if (pids.size > 0) {
169893
+ try {
169894
+ const args = ["/f", "/t"];
169895
+ for (const pid of pids) {
169896
+ args.push("/pid", pid.toString());
169897
+ }
169898
+ spawnSync2("taskkill", args);
169899
+ } catch {
169900
+ }
169901
+ }
169902
+ }, "killChildProcesses")
169903
+ };
169904
+ posixStrategy = {
169905
+ killPty: /* @__PURE__ */ __name((pid, _pty) => {
169906
+ process.kill(-pid, "SIGKILL");
169907
+ }, "killPty"),
169908
+ killChildProcesses: /* @__PURE__ */ __name((pids) => {
169909
+ for (const pid of pids) {
169910
+ try {
169911
+ process.kill(-pid, "SIGKILL");
169912
+ } catch {
169913
+ }
169914
+ }
169915
+ }, "killChildProcesses")
169916
+ };
169917
+ getCleanupStrategy = /* @__PURE__ */ __name(() => os12.platform() === "win32" ? windowsStrategy : posixStrategy, "getCleanupStrategy");
169918
+ ShellExecutionService = class _ShellExecutionService {
169777
169919
  static {
169778
169920
  __name(this, "ShellExecutionService");
169779
169921
  }
169780
169922
  static activePtys = /* @__PURE__ */ new Map();
169923
+ static activeChildProcesses = /* @__PURE__ */ new Set();
169924
+ static cleanup() {
169925
+ const strategy = getCleanupStrategy();
169926
+ for (const [pid, pty] of this.activePtys) {
169927
+ try {
169928
+ strategy.killPty(pid, pty);
169929
+ } catch {
169930
+ }
169931
+ }
169932
+ strategy.killChildProcesses(this.activeChildProcesses);
169933
+ }
169934
+ static {
169935
+ process.on("exit", () => {
169936
+ _ShellExecutionService.cleanup();
169937
+ });
169938
+ }
169781
169939
  /**
169782
169940
  * Executes a shell command using `node-pty`, capturing all output and lifecycle events.
169783
169941
  *
@@ -169808,7 +169966,7 @@ var init_shellExecutionService = __esm({
169808
169966
  stdio: ["ignore", "pipe", "pipe"],
169809
169967
  windowsVerbatimArguments: true,
169810
169968
  shell: isWindows8 ? true : "bash",
169811
- detached: !isWindows8,
169969
+ detached: true,
169812
169970
  env: {
169813
169971
  ...process.env,
169814
169972
  QWEN_CODE: "1",
@@ -169904,9 +170062,12 @@ var init_shellExecutionService = __esm({
169904
170062
  }
169905
170063
  }, "abortHandler");
169906
170064
  abortSignal.addEventListener("abort", abortHandler, { once: true });
170065
+ if (child.pid) {
170066
+ this.activeChildProcesses.add(child.pid);
170067
+ }
169907
170068
  child.on("exit", (code2, signal) => {
169908
170069
  if (child.pid) {
169909
- this.activePtys.delete(child.pid);
170070
+ this.activeChildProcesses.delete(child.pid);
169910
170071
  }
169911
170072
  handleExit(code2, signal);
169912
170073
  });
@@ -169930,7 +170091,7 @@ var init_shellExecutionService = __esm({
169930
170091
  }
169931
170092
  __name(cleanup, "cleanup");
169932
170093
  });
169933
- return { pid: void 0, result };
170094
+ return { pid: child.pid, result };
169934
170095
  } catch (e4) {
169935
170096
  const error2 = e4;
169936
170097
  return {
@@ -170746,8 +170907,8 @@ var init_shellReadOnlyChecker = __esm({
170746
170907
 
170747
170908
  // packages/core/dist/src/utils/shell-utils.js
170748
170909
  import os13 from "node:os";
170749
- import { execFile as execFile6, execFileSync as execFileSync2 } from "node:child_process";
170750
- import { accessSync, constants as fsConstants2 } from "node:fs";
170910
+ import { execFile as execFile6, execFileSync as execFileSync3 } from "node:child_process";
170911
+ import { accessSync as accessSync2, constants as fsConstants2 } from "node:fs";
170751
170912
  function getShellConfiguration() {
170752
170913
  if (isWindows()) {
170753
170914
  const comSpec = process.env["ComSpec"] || "cmd.exe";
@@ -171003,7 +171164,7 @@ function resolveCommandPath(command2) {
171003
171164
  const checkArgs = [command2];
171004
171165
  let result = null;
171005
171166
  try {
171006
- result = execFileSync2(checkCommand, checkArgs, {
171167
+ result = execFileSync3(checkCommand, checkArgs, {
171007
171168
  encoding: "utf8",
171008
171169
  shell: false
171009
171170
  }).trim();
@@ -171016,7 +171177,7 @@ function resolveCommandPath(command2) {
171016
171177
  const checkArgs = ["-c", `command -v ${escapeShellArg(command2, "bash")}`];
171017
171178
  let result = null;
171018
171179
  try {
171019
- result = execFileSync2(shell2, checkArgs, {
171180
+ result = execFileSync3(shell2, checkArgs, {
171020
171181
  encoding: "utf8",
171021
171182
  shell: false
171022
171183
  }).trim();
@@ -171025,7 +171186,7 @@ function resolveCommandPath(command2) {
171025
171186
  }
171026
171187
  if (!result)
171027
171188
  return { path: null, error: void 0 };
171028
- accessSync(result, fsConstants2.X_OK);
171189
+ accessSync2(result, fsConstants2.X_OK);
171029
171190
  return { path: result, error: void 0 };
171030
171191
  }
171031
171192
  } catch (error2) {
@@ -171209,9 +171370,12 @@ var init_shell = __esm({
171209
171370
  const processedCommand = this.addCoAuthorToGitCommit(strippedCommand);
171210
171371
  const shouldRunInBackground = this.params.is_background;
171211
171372
  let finalCommand = processedCommand;
171212
- if (shouldRunInBackground && !finalCommand.trim().endsWith("&")) {
171373
+ if (!isWindows8 && shouldRunInBackground && !finalCommand.trim().endsWith("&")) {
171213
171374
  finalCommand = finalCommand.trim() + " &";
171214
171375
  }
171376
+ if (isWindows8 && shouldRunInBackground) {
171377
+ finalCommand = finalCommand.trim().replace(/&+$/, "").trim();
171378
+ }
171215
171379
  const commandToExecute = isWindows8 ? finalCommand : (() => {
171216
171380
  let command2 = finalCommand.trim();
171217
171381
  if (!command2.endsWith("&"))
@@ -171223,9 +171387,6 @@ var init_shell = __esm({
171223
171387
  let lastUpdateTime = Date.now();
171224
171388
  let isBinaryStream = false;
171225
171389
  const { result: resultPromise, pid } = await ShellExecutionService.execute(commandToExecute, cwd7, (event) => {
171226
- if (!updateOutput2) {
171227
- return;
171228
- }
171229
171390
  let shouldUpdate = false;
171230
171391
  switch (event.type) {
171231
171392
  case "data":
@@ -171250,7 +171411,7 @@ var init_shell = __esm({
171250
171411
  throw new Error("An unhandled ShellOutputEvent was found.");
171251
171412
  }
171252
171413
  }
171253
- if (shouldUpdate) {
171414
+ if (shouldUpdate && updateOutput2) {
171254
171415
  updateOutput2(typeof cumulativeOutput === "string" ? cumulativeOutput : { ansiOutput: cumulativeOutput });
171255
171416
  lastUpdateTime = Date.now();
171256
171417
  }
@@ -171258,6 +171419,14 @@ var init_shell = __esm({
171258
171419
  if (pid && setPidCallback) {
171259
171420
  setPidCallback(pid);
171260
171421
  }
171422
+ if (shouldRunInBackground) {
171423
+ const pidMsg = pid ? ` PID: ${pid}` : "";
171424
+ const killHint = isWindows8 ? " (Use taskkill /F /T /PID <pid> to stop)" : " (Use kill <pid> to stop)";
171425
+ return {
171426
+ llmContent: `Background command started.${pidMsg}${killHint}`,
171427
+ returnDisplay: `Background command started.${pidMsg}${killHint}`
171428
+ };
171429
+ }
171261
171430
  const result = await resultPromise;
171262
171431
  const backgroundPIDs = [];
171263
171432
  if (os14.platform() !== "win32") {
@@ -171911,7 +172080,7 @@ var init_coreToolScheduler = __esm({
171911
172080
  this.setToolCallOutcome(reqInfo.callId, ToolConfirmationOutcome.ProceedAlways);
171912
172081
  this.setStatusInternal(reqInfo.callId, "scheduled");
171913
172082
  } else {
171914
- const shouldAutoDeny = !this.config.isInteractive() && !this.config.getIdeMode() && !this.config.getExperimentalZedIntegration() && this.config.getInputFormat() !== InputFormat.STREAM_JSON;
172083
+ const shouldAutoDeny = !this.config.isInteractive() && !this.config.getExperimentalZedIntegration() && this.config.getInputFormat() !== InputFormat.STREAM_JSON;
171915
172084
  if (shouldAutoDeny) {
171916
172085
  const errorMessage = `Qwen Code requires permission to use "${reqInfo.name}", but that permission was declined.`;
171917
172086
  this.setStatusInternal(reqInfo.callId, "error", createErrorResponse(reqInfo, new Error(errorMessage), ToolErrorType.EXECUTION_DENIED));
@@ -202875,16 +203044,16 @@ var require_cross_spawn = __commonJS({
202875
203044
  return spawned;
202876
203045
  }
202877
203046
  __name(spawn11, "spawn");
202878
- function spawnSync5(command2, args, options2) {
203047
+ function spawnSync6(command2, args, options2) {
202879
203048
  const parsed = parse13(command2, args, options2);
202880
203049
  const result = cp2.spawnSync(parsed.command, parsed.args, parsed.options);
202881
203050
  result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
202882
203051
  return result;
202883
203052
  }
202884
- __name(spawnSync5, "spawnSync");
203053
+ __name(spawnSync6, "spawnSync");
202885
203054
  module2.exports = spawn11;
202886
203055
  module2.exports.spawn = spawn11;
202887
- module2.exports.sync = spawnSync5;
203056
+ module2.exports.sync = spawnSync6;
202888
203057
  module2.exports._parse = parse13;
202889
203058
  module2.exports._enoent = enoent;
202890
203059
  }
@@ -218986,6 +219155,10 @@ function shouldAttemptBrowserLaunch() {
218986
219155
  if (process.env["CI"] || process.env["DEBIAN_FRONTEND"] === "noninteractive") {
218987
219156
  return false;
218988
219157
  }
219158
+ const isTermux4 = process.platform === "android" || !!process.env["TERMUX_VERSION"] || !!(process.env["PREFIX"] && process.env["PREFIX"].includes("com.termux"));
219159
+ if (isTermux4) {
219160
+ return true;
219161
+ }
218989
219162
  const isSSH = !!process.env["SSH_CONNECTION"];
218990
219163
  if (process.platform === "linux") {
218991
219164
  const displayVariables = ["DISPLAY", "WAYLAND_DISPLAY", "MIR_SOCKET"];
@@ -223778,7 +223951,7 @@ var require_parse6 = __commonJS({
223778
223951
  "packages/core/node_modules/picomatch/lib/parse.js"(exports2, module2) {
223779
223952
  "use strict";
223780
223953
  init_esbuild_shims();
223781
- var constants4 = require_constants11();
223954
+ var constants5 = require_constants11();
223782
223955
  var utils = require_utils14();
223783
223956
  var {
223784
223957
  MAX_LENGTH,
@@ -223786,7 +223959,7 @@ var require_parse6 = __commonJS({
223786
223959
  REGEX_NON_SPECIAL_CHARS,
223787
223960
  REGEX_SPECIAL_CHARS_BACKREF,
223788
223961
  REPLACEMENTS
223789
- } = constants4;
223962
+ } = constants5;
223790
223963
  var expandRange = /* @__PURE__ */ __name((args, options2) => {
223791
223964
  if (typeof options2.expandRange === "function") {
223792
223965
  return options2.expandRange(...args, options2);
@@ -223817,8 +223990,8 @@ var require_parse6 = __commonJS({
223817
223990
  const bos = { type: "bos", value: "", output: opts.prepend || "" };
223818
223991
  const tokens = [bos];
223819
223992
  const capture = opts.capture ? "" : "?:";
223820
- const PLATFORM_CHARS = constants4.globChars(opts.windows);
223821
- const EXTGLOB_CHARS = constants4.extglobChars(PLATFORM_CHARS);
223993
+ const PLATFORM_CHARS = constants5.globChars(opts.windows);
223994
+ const EXTGLOB_CHARS = constants5.extglobChars(PLATFORM_CHARS);
223822
223995
  const {
223823
223996
  DOT_LITERAL,
223824
223997
  PLUS_LITERAL,
@@ -224491,7 +224664,7 @@ var require_parse6 = __commonJS({
224491
224664
  NO_DOTS_SLASH,
224492
224665
  STAR,
224493
224666
  START_ANCHOR
224494
- } = constants4.globChars(opts.windows);
224667
+ } = constants5.globChars(opts.windows);
224495
224668
  const nodot = opts.dot ? NO_DOTS : NO_DOT;
224496
224669
  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
224497
224670
  const capture = opts.capture ? "" : "?:";
@@ -224550,7 +224723,7 @@ var require_picomatch = __commonJS({
224550
224723
  var scan = require_scan();
224551
224724
  var parse13 = require_parse6();
224552
224725
  var utils = require_utils14();
224553
- var constants4 = require_constants11();
224726
+ var constants5 = require_constants11();
224554
224727
  var isObject4 = /* @__PURE__ */ __name((val) => val && typeof val === "object" && !Array.isArray(val), "isObject");
224555
224728
  var picomatch3 = /* @__PURE__ */ __name((glob2, options2, returnState = false) => {
224556
224729
  if (Array.isArray(glob2)) {
@@ -224678,7 +224851,7 @@ var require_picomatch = __commonJS({
224678
224851
  return /$^/;
224679
224852
  }
224680
224853
  };
224681
- picomatch3.constants = constants4;
224854
+ picomatch3.constants = constants5;
224682
224855
  module2.exports = picomatch3;
224683
224856
  }
224684
224857
  });
@@ -227413,6 +227586,7 @@ var init_src2 = __esm({
227413
227586
  init_fileUtils();
227414
227587
  init_retry();
227415
227588
  init_shell_utils();
227589
+ init_tool_utils();
227416
227590
  init_terminalSerializer();
227417
227591
  init_systemEncoding();
227418
227592
  init_textUtils();
@@ -281320,13 +281494,13 @@ var require_command_exists = __commonJS({
281320
281494
  var fs101 = __require("fs");
281321
281495
  var path112 = __require("path");
281322
281496
  var access7 = fs101.access;
281323
- var accessSync2 = fs101.accessSync;
281324
- var constants4 = fs101.constants || fs101;
281497
+ var accessSync3 = fs101.accessSync;
281498
+ var constants5 = fs101.constants || fs101;
281325
281499
  var isUsingWindows = process.platform == "win32";
281326
281500
  var fileNotExists = /* @__PURE__ */ __name(function(commandName, callback) {
281327
281501
  access7(
281328
281502
  commandName,
281329
- constants4.F_OK,
281503
+ constants5.F_OK,
281330
281504
  function(err) {
281331
281505
  callback(!err);
281332
281506
  }
@@ -281334,7 +281508,7 @@ var require_command_exists = __commonJS({
281334
281508
  }, "fileNotExists");
281335
281509
  var fileNotExistsSync = /* @__PURE__ */ __name(function(commandName) {
281336
281510
  try {
281337
- accessSync2(commandName, constants4.F_OK);
281511
+ accessSync3(commandName, constants5.F_OK);
281338
281512
  return false;
281339
281513
  } catch (e4) {
281340
281514
  return true;
@@ -281343,7 +281517,7 @@ var require_command_exists = __commonJS({
281343
281517
  var localExecutable = /* @__PURE__ */ __name(function(commandName, callback) {
281344
281518
  access7(
281345
281519
  commandName,
281346
- constants4.F_OK | constants4.X_OK,
281520
+ constants5.F_OK | constants5.X_OK,
281347
281521
  function(err) {
281348
281522
  callback(null, !err);
281349
281523
  }
@@ -281351,7 +281525,7 @@ var require_command_exists = __commonJS({
281351
281525
  }, "localExecutable");
281352
281526
  var localExecutableSync = /* @__PURE__ */ __name(function(commandName) {
281353
281527
  try {
281354
- accessSync2(commandName, constants4.F_OK | constants4.X_OK);
281528
+ accessSync3(commandName, constants5.F_OK | constants5.X_OK);
281355
281529
  return true;
281356
281530
  } catch (e4) {
281357
281531
  return false;
@@ -281886,11 +282060,11 @@ var require_codegen4 = __commonJS({
281886
282060
  const rhs = this.rhs === void 0 ? "" : ` = ${this.rhs}`;
281887
282061
  return `${varKind} ${this.name}${rhs};` + _n;
281888
282062
  }
281889
- optimizeNames(names, constants4) {
282063
+ optimizeNames(names, constants5) {
281890
282064
  if (!names[this.name.str])
281891
282065
  return;
281892
282066
  if (this.rhs)
281893
- this.rhs = optimizeExpr(this.rhs, names, constants4);
282067
+ this.rhs = optimizeExpr(this.rhs, names, constants5);
281894
282068
  return this;
281895
282069
  }
281896
282070
  get names() {
@@ -281910,10 +282084,10 @@ var require_codegen4 = __commonJS({
281910
282084
  render({ _n }) {
281911
282085
  return `${this.lhs} = ${this.rhs};` + _n;
281912
282086
  }
281913
- optimizeNames(names, constants4) {
282087
+ optimizeNames(names, constants5) {
281914
282088
  if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)
281915
282089
  return;
281916
- this.rhs = optimizeExpr(this.rhs, names, constants4);
282090
+ this.rhs = optimizeExpr(this.rhs, names, constants5);
281917
282091
  return this;
281918
282092
  }
281919
282093
  get names() {
@@ -281989,8 +282163,8 @@ var require_codegen4 = __commonJS({
281989
282163
  optimizeNodes() {
281990
282164
  return `${this.code}` ? this : void 0;
281991
282165
  }
281992
- optimizeNames(names, constants4) {
281993
- this.code = optimizeExpr(this.code, names, constants4);
282166
+ optimizeNames(names, constants5) {
282167
+ this.code = optimizeExpr(this.code, names, constants5);
281994
282168
  return this;
281995
282169
  }
281996
282170
  get names() {
@@ -282022,12 +282196,12 @@ var require_codegen4 = __commonJS({
282022
282196
  }
282023
282197
  return nodes.length > 0 ? this : void 0;
282024
282198
  }
282025
- optimizeNames(names, constants4) {
282199
+ optimizeNames(names, constants5) {
282026
282200
  const { nodes } = this;
282027
282201
  let i3 = nodes.length;
282028
282202
  while (i3--) {
282029
282203
  const n3 = nodes[i3];
282030
- if (n3.optimizeNames(names, constants4))
282204
+ if (n3.optimizeNames(names, constants5))
282031
282205
  continue;
282032
282206
  subtractNames(names, n3.names);
282033
282207
  nodes.splice(i3, 1);
@@ -282092,12 +282266,12 @@ var require_codegen4 = __commonJS({
282092
282266
  return void 0;
282093
282267
  return this;
282094
282268
  }
282095
- optimizeNames(names, constants4) {
282269
+ optimizeNames(names, constants5) {
282096
282270
  var _a7;
282097
- this.else = (_a7 = this.else) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants4);
282098
- if (!(super.optimizeNames(names, constants4) || this.else))
282271
+ this.else = (_a7 = this.else) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants5);
282272
+ if (!(super.optimizeNames(names, constants5) || this.else))
282099
282273
  return;
282100
- this.condition = optimizeExpr(this.condition, names, constants4);
282274
+ this.condition = optimizeExpr(this.condition, names, constants5);
282101
282275
  return this;
282102
282276
  }
282103
282277
  get names() {
@@ -282126,10 +282300,10 @@ var require_codegen4 = __commonJS({
282126
282300
  render(opts) {
282127
282301
  return `for(${this.iteration})` + super.render(opts);
282128
282302
  }
282129
- optimizeNames(names, constants4) {
282130
- if (!super.optimizeNames(names, constants4))
282303
+ optimizeNames(names, constants5) {
282304
+ if (!super.optimizeNames(names, constants5))
282131
282305
  return;
282132
- this.iteration = optimizeExpr(this.iteration, names, constants4);
282306
+ this.iteration = optimizeExpr(this.iteration, names, constants5);
282133
282307
  return this;
282134
282308
  }
282135
282309
  get names() {
@@ -282171,10 +282345,10 @@ var require_codegen4 = __commonJS({
282171
282345
  render(opts) {
282172
282346
  return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);
282173
282347
  }
282174
- optimizeNames(names, constants4) {
282175
- if (!super.optimizeNames(names, constants4))
282348
+ optimizeNames(names, constants5) {
282349
+ if (!super.optimizeNames(names, constants5))
282176
282350
  return;
282177
- this.iterable = optimizeExpr(this.iterable, names, constants4);
282351
+ this.iterable = optimizeExpr(this.iterable, names, constants5);
282178
282352
  return this;
282179
282353
  }
282180
282354
  get names() {
@@ -282225,11 +282399,11 @@ var require_codegen4 = __commonJS({
282225
282399
  (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNodes();
282226
282400
  return this;
282227
282401
  }
282228
- optimizeNames(names, constants4) {
282402
+ optimizeNames(names, constants5) {
282229
282403
  var _a7, _b2;
282230
- super.optimizeNames(names, constants4);
282231
- (_a7 = this.catch) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants4);
282232
- (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNames(names, constants4);
282404
+ super.optimizeNames(names, constants5);
282405
+ (_a7 = this.catch) === null || _a7 === void 0 ? void 0 : _a7.optimizeNames(names, constants5);
282406
+ (_b2 = this.finally) === null || _b2 === void 0 ? void 0 : _b2.optimizeNames(names, constants5);
282233
282407
  return this;
282234
282408
  }
282235
282409
  get names() {
@@ -282541,7 +282715,7 @@ var require_codegen4 = __commonJS({
282541
282715
  return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;
282542
282716
  }
282543
282717
  __name(addExprNames, "addExprNames");
282544
- function optimizeExpr(expr, names, constants4) {
282718
+ function optimizeExpr(expr, names, constants5) {
282545
282719
  if (expr instanceof code_1.Name)
282546
282720
  return replaceName(expr);
282547
282721
  if (!canOptimize(expr))
@@ -282556,7 +282730,7 @@ var require_codegen4 = __commonJS({
282556
282730
  return items;
282557
282731
  }, []));
282558
282732
  function replaceName(n3) {
282559
- const c4 = constants4[n3.str];
282733
+ const c4 = constants5[n3.str];
282560
282734
  if (c4 === void 0 || names[n3.str] !== 1)
282561
282735
  return n3;
282562
282736
  delete names[n3.str];
@@ -282564,7 +282738,7 @@ var require_codegen4 = __commonJS({
282564
282738
  }
282565
282739
  __name(replaceName, "replaceName");
282566
282740
  function canOptimize(e4) {
282567
- return e4 instanceof code_1._Code && e4._items.some((c4) => c4 instanceof code_1.Name && names[c4.str] === 1 && constants4[c4.str] !== void 0);
282741
+ return e4 instanceof code_1._Code && e4._items.some((c4) => c4 instanceof code_1.Name && names[c4.str] === 1 && constants5[c4.str] !== void 0);
282568
282742
  }
282569
282743
  __name(canOptimize, "canOptimize");
282570
282744
  }
@@ -287563,6 +287737,842 @@ var require_ajv3 = __commonJS({
287563
287737
  }
287564
287738
  });
287565
287739
 
287740
+ // packages/cli/src/i18n/locales/de.js
287741
+ var de_exports = {};
287742
+ __export(de_exports, {
287743
+ default: () => de_default
287744
+ });
287745
+ var de_default;
287746
+ var init_de = __esm({
287747
+ "packages/cli/src/i18n/locales/de.js"() {
287748
+ "use strict";
287749
+ init_esbuild_shims();
287750
+ de_default = {
287751
+ // ============================================================================
287752
+ // Help / UI Components
287753
+ // ============================================================================
287754
+ "Basics:": "Grundlagen:",
287755
+ "Add context": "Kontext hinzuf\xFCgen",
287756
+ "Use {{symbol}} to specify files for context (e.g., {{example}}) to target specific files or folders.": "Verwenden Sie {{symbol}}, um Dateien als Kontext anzugeben (z.B. {{example}}), um bestimmte Dateien oder Ordner auszuw\xE4hlen.",
287757
+ "@": "@",
287758
+ "@src/myFile.ts": "@src/myFile.ts",
287759
+ "Shell mode": "Shell-Modus",
287760
+ "YOLO mode": "YOLO-Modus",
287761
+ "plan mode": "Planungsmodus",
287762
+ "auto-accept edits": "\xC4nderungen automatisch akzeptieren",
287763
+ "Accepting edits": "\xC4nderungen werden akzeptiert",
287764
+ "(shift + tab to cycle)": "(Umschalt + Tab zum Wechseln)",
287765
+ "Execute shell commands via {{symbol}} (e.g., {{example1}}) or use natural language (e.g., {{example2}}).": "Shell-Befehle \xFCber {{symbol}} ausf\xFChren (z.B. {{example1}}) oder nat\xFCrliche Sprache verwenden (z.B. {{example2}}).",
287766
+ "!": "!",
287767
+ "!npm run start": "!npm run start",
287768
+ "start server": "Server starten",
287769
+ "Commands:": "Befehle:",
287770
+ "shell command": "Shell-Befehl",
287771
+ "Model Context Protocol command (from external servers)": "Model Context Protocol Befehl (von externen Servern)",
287772
+ "Keyboard Shortcuts:": "Tastenk\xFCrzel:",
287773
+ "Jump through words in the input": "W\xF6rter in der Eingabe \xFCberspringen",
287774
+ "Close dialogs, cancel requests, or quit application": "Dialoge schlie\xDFen, Anfragen abbrechen oder Anwendung beenden",
287775
+ "New line": "Neue Zeile",
287776
+ "New line (Alt+Enter works for certain linux distros)": "Neue Zeile (Alt+Enter funktioniert bei bestimmten Linux-Distributionen)",
287777
+ "Clear the screen": "Bildschirm l\xF6schen",
287778
+ "Open input in external editor": "Eingabe in externem Editor \xF6ffnen",
287779
+ "Send message": "Nachricht senden",
287780
+ "Initializing...": "Initialisierung...",
287781
+ "Connecting to MCP servers... ({{connected}}/{{total}})": "Verbindung zu MCP-Servern wird hergestellt... ({{connected}}/{{total}})",
287782
+ "Type your message or @path/to/file": "Nachricht eingeben oder @Pfad/zur/Datei",
287783
+ "Press 'i' for INSERT mode and 'Esc' for NORMAL mode.": "Dr\xFCcken Sie 'i' f\xFCr den EINF\xDCGE-Modus und 'Esc' f\xFCr den NORMAL-Modus.",
287784
+ "Cancel operation / Clear input (double press)": "Vorgang abbrechen / Eingabe l\xF6schen (doppelt dr\xFCcken)",
287785
+ "Cycle approval modes": "Genehmigungsmodi durchschalten",
287786
+ "Cycle through your prompt history": "Eingabeverlauf durchbl\xE4ttern",
287787
+ "For a full list of shortcuts, see {{docPath}}": "Eine vollst\xE4ndige Liste der Tastenk\xFCrzel finden Sie unter {{docPath}}",
287788
+ "docs/keyboard-shortcuts.md": "docs/keyboard-shortcuts.md",
287789
+ "for help on Qwen Code": "f\xFCr Hilfe zu Qwen Code",
287790
+ "show version info": "Versionsinformationen anzeigen",
287791
+ "submit a bug report": "Fehlerbericht einreichen",
287792
+ "About Qwen Code": "\xDCber Qwen Code",
287793
+ // ============================================================================
287794
+ // System Information Fields
287795
+ // ============================================================================
287796
+ "CLI Version": "CLI-Version",
287797
+ "Git Commit": "Git-Commit",
287798
+ Model: "Modell",
287799
+ Sandbox: "Sandbox",
287800
+ "OS Platform": "Betriebssystem",
287801
+ "OS Arch": "OS-Architektur",
287802
+ "OS Release": "OS-Version",
287803
+ "Node.js Version": "Node.js-Version",
287804
+ "NPM Version": "NPM-Version",
287805
+ "Session ID": "Sitzungs-ID",
287806
+ "Auth Method": "Authentifizierungsmethode",
287807
+ "Base URL": "Basis-URL",
287808
+ "Memory Usage": "Speichernutzung",
287809
+ "IDE Client": "IDE-Client",
287810
+ // ============================================================================
287811
+ // Commands - General
287812
+ // ============================================================================
287813
+ "Analyzes the project and creates a tailored QWEN.md file.": "Analysiert das Projekt und erstellt eine ma\xDFgeschneiderte QWEN.md-Datei.",
287814
+ "list available Qwen Code tools. Usage: /tools [desc]": "Verf\xFCgbare Qwen Code Werkzeuge auflisten. Verwendung: /tools [desc]",
287815
+ "Available Qwen Code CLI tools:": "Verf\xFCgbare Qwen Code CLI-Werkzeuge:",
287816
+ "No tools available": "Keine Werkzeuge verf\xFCgbar",
287817
+ "View or change the approval mode for tool usage": "Genehmigungsmodus f\xFCr Werkzeugnutzung anzeigen oder \xE4ndern",
287818
+ "View or change the language setting": "Spracheinstellung anzeigen oder \xE4ndern",
287819
+ "change the theme": "Design \xE4ndern",
287820
+ "Select Theme": "Design ausw\xE4hlen",
287821
+ Preview: "Vorschau",
287822
+ "(Use Enter to select, Tab to configure scope)": "(Enter zum Ausw\xE4hlen, Tab zum Konfigurieren des Bereichs)",
287823
+ "(Use Enter to apply scope, Tab to select theme)": "(Enter zum Anwenden des Bereichs, Tab zum Ausw\xE4hlen des Designs)",
287824
+ "Theme configuration unavailable due to NO_COLOR env variable.": "Design-Konfiguration aufgrund der NO_COLOR-Umgebungsvariable nicht verf\xFCgbar.",
287825
+ 'Theme "{{themeName}}" not found.': 'Design "{{themeName}}" nicht gefunden.',
287826
+ 'Theme "{{themeName}}" not found in selected scope.': 'Design "{{themeName}}" im ausgew\xE4hlten Bereich nicht gefunden.',
287827
+ "Clear conversation history and free up context": "Gespr\xE4chsverlauf l\xF6schen und Kontext freigeben",
287828
+ "Compresses the context by replacing it with a summary.": "Komprimiert den Kontext durch Ersetzen mit einer Zusammenfassung.",
287829
+ "open full Qwen Code documentation in your browser": "Vollst\xE4ndige Qwen Code Dokumentation im Browser \xF6ffnen",
287830
+ "Configuration not available.": "Konfiguration nicht verf\xFCgbar.",
287831
+ "change the auth method": "Authentifizierungsmethode \xE4ndern",
287832
+ "Copy the last result or code snippet to clipboard": "Letztes Ergebnis oder Codeausschnitt in die Zwischenablage kopieren",
287833
+ // ============================================================================
287834
+ // Commands - Agents
287835
+ // ============================================================================
287836
+ "Manage subagents for specialized task delegation.": "Unteragenten f\xFCr spezialisierte Aufgabendelegation verwalten.",
287837
+ "Manage existing subagents (view, edit, delete).": "Bestehende Unteragenten verwalten (anzeigen, bearbeiten, l\xF6schen).",
287838
+ "Create a new subagent with guided setup.": "Neuen Unteragenten mit gef\xFChrter Einrichtung erstellen.",
287839
+ // ============================================================================
287840
+ // Agents - Management Dialog
287841
+ // ============================================================================
287842
+ Agents: "Agenten",
287843
+ "Choose Action": "Aktion w\xE4hlen",
287844
+ "Edit {{name}}": "{{name}} bearbeiten",
287845
+ "Edit Tools: {{name}}": "Werkzeuge bearbeiten: {{name}}",
287846
+ "Edit Color: {{name}}": "Farbe bearbeiten: {{name}}",
287847
+ "Delete {{name}}": "{{name}} l\xF6schen",
287848
+ "Unknown Step": "Unbekannter Schritt",
287849
+ "Esc to close": "Esc zum Schlie\xDFen",
287850
+ "Enter to select, \u2191\u2193 to navigate, Esc to close": "Enter zum Ausw\xE4hlen, \u2191\u2193 zum Navigieren, Esc zum Schlie\xDFen",
287851
+ "Esc to go back": "Esc zum Zur\xFCckgehen",
287852
+ "Enter to confirm, Esc to cancel": "Enter zum Best\xE4tigen, Esc zum Abbrechen",
287853
+ "Enter to select, \u2191\u2193 to navigate, Esc to go back": "Enter zum Ausw\xE4hlen, \u2191\u2193 zum Navigieren, Esc zum Zur\xFCckgehen",
287854
+ "Invalid step: {{step}}": "Ung\xFCltiger Schritt: {{step}}",
287855
+ "No subagents found.": "Keine Unteragenten gefunden.",
287856
+ "Use '/agents create' to create your first subagent.": "Verwenden Sie '/agents create', um Ihren ersten Unteragenten zu erstellen.",
287857
+ "(built-in)": "(integriert)",
287858
+ "(overridden by project level agent)": "(\xFCberschrieben durch Projektagent)",
287859
+ "Project Level ({{path}})": "Projektebene ({{path}})",
287860
+ "User Level ({{path}})": "Benutzerebene ({{path}})",
287861
+ "Built-in Agents": "Integrierte Agenten",
287862
+ "Using: {{count}} agents": "Verwendet: {{count}} Agenten",
287863
+ "View Agent": "Agent anzeigen",
287864
+ "Edit Agent": "Agent bearbeiten",
287865
+ "Delete Agent": "Agent l\xF6schen",
287866
+ Back: "Zur\xFCck",
287867
+ "No agent selected": "Kein Agent ausgew\xE4hlt",
287868
+ "File Path: ": "Dateipfad: ",
287869
+ "Tools: ": "Werkzeuge: ",
287870
+ "Color: ": "Farbe: ",
287871
+ "Description:": "Beschreibung:",
287872
+ "System Prompt:": "System-Prompt:",
287873
+ "Open in editor": "Im Editor \xF6ffnen",
287874
+ "Edit tools": "Werkzeuge bearbeiten",
287875
+ "Edit color": "Farbe bearbeiten",
287876
+ "\u274C Error:": "\u274C Fehler:",
287877
+ 'Are you sure you want to delete agent "{{name}}"?': 'Sind Sie sicher, dass Sie den Agenten "{{name}}" l\xF6schen m\xF6chten?',
287878
+ // ============================================================================
287879
+ // Agents - Creation Wizard
287880
+ // ============================================================================
287881
+ "Project Level (.qwen/agents/)": "Projektebene (.qwen/agents/)",
287882
+ "User Level (~/.qwen/agents/)": "Benutzerebene (~/.qwen/agents/)",
287883
+ "\u2705 Subagent Created Successfully!": "\u2705 Unteragent erfolgreich erstellt!",
287884
+ 'Subagent "{{name}}" has been saved to {{level}} level.': 'Unteragent "{{name}}" wurde auf {{level}}-Ebene gespeichert.',
287885
+ "Name: ": "Name: ",
287886
+ "Location: ": "Speicherort: ",
287887
+ "\u274C Error saving subagent:": "\u274C Fehler beim Speichern des Unteragenten:",
287888
+ "Warnings:": "Warnungen:",
287889
+ 'Name "{{name}}" already exists at {{level}} level - will overwrite existing subagent': 'Name "{{name}}" existiert bereits auf {{level}}-Ebene - bestehender Unteragent wird \xFCberschrieben',
287890
+ 'Name "{{name}}" exists at user level - project level will take precedence': 'Name "{{name}}" existiert auf Benutzerebene - Projektebene hat Vorrang',
287891
+ 'Name "{{name}}" exists at project level - existing subagent will take precedence': 'Name "{{name}}" existiert auf Projektebene - bestehender Unteragent hat Vorrang',
287892
+ "Description is over {{length}} characters": "Beschreibung ist \xFCber {{length}} Zeichen",
287893
+ "System prompt is over {{length}} characters": "System-Prompt ist \xFCber {{length}} Zeichen",
287894
+ // Agents - Creation Wizard Steps
287895
+ "Step {{n}}: Choose Location": "Schritt {{n}}: Speicherort w\xE4hlen",
287896
+ "Step {{n}}: Choose Generation Method": "Schritt {{n}}: Generierungsmethode w\xE4hlen",
287897
+ "Generate with Qwen Code (Recommended)": "Mit Qwen Code generieren (Empfohlen)",
287898
+ "Manual Creation": "Manuelle Erstellung",
287899
+ "Describe what this subagent should do and when it should be used. (Be comprehensive for best results)": "Beschreiben Sie, was dieser Unteragent tun soll und wann er verwendet werden soll. (Ausf\xFChrliche Beschreibung f\xFCr beste Ergebnisse)",
287900
+ "e.g., Expert code reviewer that reviews code based on best practices...": "z.B. Experte f\xFCr Code-Reviews, der Code nach Best Practices \xFCberpr\xFCft...",
287901
+ "Generating subagent configuration...": "Unteragent-Konfiguration wird generiert...",
287902
+ "Failed to generate subagent: {{error}}": "Fehler beim Generieren des Unteragenten: {{error}}",
287903
+ "Step {{n}}: Describe Your Subagent": "Schritt {{n}}: Unteragent beschreiben",
287904
+ "Step {{n}}: Enter Subagent Name": "Schritt {{n}}: Unteragent-Name eingeben",
287905
+ "Step {{n}}: Enter System Prompt": "Schritt {{n}}: System-Prompt eingeben",
287906
+ "Step {{n}}: Enter Description": "Schritt {{n}}: Beschreibung eingeben",
287907
+ // Agents - Tool Selection
287908
+ "Step {{n}}: Select Tools": "Schritt {{n}}: Werkzeuge ausw\xE4hlen",
287909
+ "All Tools (Default)": "Alle Werkzeuge (Standard)",
287910
+ "All Tools": "Alle Werkzeuge",
287911
+ "Read-only Tools": "Nur-Lese-Werkzeuge",
287912
+ "Read & Edit Tools": "Lese- und Bearbeitungswerkzeuge",
287913
+ "Read & Edit & Execution Tools": "Lese-, Bearbeitungs- und Ausf\xFChrungswerkzeuge",
287914
+ "All tools selected, including MCP tools": "Alle Werkzeuge ausgew\xE4hlt, einschlie\xDFlich MCP-Werkzeuge",
287915
+ "Selected tools:": "Ausgew\xE4hlte Werkzeuge:",
287916
+ "Read-only tools:": "Nur-Lese-Werkzeuge:",
287917
+ "Edit tools:": "Bearbeitungswerkzeuge:",
287918
+ "Execution tools:": "Ausf\xFChrungswerkzeuge:",
287919
+ "Step {{n}}: Choose Background Color": "Schritt {{n}}: Hintergrundfarbe w\xE4hlen",
287920
+ "Step {{n}}: Confirm and Save": "Schritt {{n}}: Best\xE4tigen und Speichern",
287921
+ // Agents - Navigation & Instructions
287922
+ "Esc to cancel": "Esc zum Abbrechen",
287923
+ "Press Enter to save, e to save and edit, Esc to go back": "Enter zum Speichern, e zum Speichern und Bearbeiten, Esc zum Zur\xFCckgehen",
287924
+ "Press Enter to continue, {{navigation}}Esc to {{action}}": "Enter zum Fortfahren, {{navigation}}Esc zum {{action}}",
287925
+ cancel: "Abbrechen",
287926
+ "go back": "Zur\xFCckgehen",
287927
+ "\u2191\u2193 to navigate, ": "\u2191\u2193 zum Navigieren, ",
287928
+ "Enter a clear, unique name for this subagent.": "Geben Sie einen eindeutigen Namen f\xFCr diesen Unteragenten ein.",
287929
+ "e.g., Code Reviewer": "z.B. Code-Reviewer",
287930
+ "Name cannot be empty.": "Name darf nicht leer sein.",
287931
+ "Write the system prompt that defines this subagent's behavior. Be comprehensive for best results.": "Schreiben Sie den System-Prompt, der das Verhalten dieses Unteragenten definiert. Ausf\xFChrlich f\xFCr beste Ergebnisse.",
287932
+ "e.g., You are an expert code reviewer...": "z.B. Sie sind ein Experte f\xFCr Code-Reviews...",
287933
+ "System prompt cannot be empty.": "System-Prompt darf nicht leer sein.",
287934
+ "Describe when and how this subagent should be used.": "Beschreiben Sie, wann und wie dieser Unteragent verwendet werden soll.",
287935
+ "e.g., Reviews code for best practices and potential bugs.": "z.B. \xDCberpr\xFCft Code auf Best Practices und m\xF6gliche Fehler.",
287936
+ "Description cannot be empty.": "Beschreibung darf nicht leer sein.",
287937
+ "Failed to launch editor: {{error}}": "Fehler beim Starten des Editors: {{error}}",
287938
+ "Failed to save and edit subagent: {{error}}": "Fehler beim Speichern und Bearbeiten des Unteragenten: {{error}}",
287939
+ // ============================================================================
287940
+ // Commands - General (continued)
287941
+ // ============================================================================
287942
+ "View and edit Qwen Code settings": "Qwen Code Einstellungen anzeigen und bearbeiten",
287943
+ Settings: "Einstellungen",
287944
+ "(Use Enter to select{{tabText}})": "(Enter zum Ausw\xE4hlen{{tabText}})",
287945
+ ", Tab to change focus": ", Tab zum Fokuswechsel",
287946
+ "To see changes, Qwen Code must be restarted. Press r to exit and apply changes now.": "Um \xC4nderungen zu sehen, muss Qwen Code neu gestartet werden. Dr\xFCcken Sie r, um jetzt zu beenden und \xC4nderungen anzuwenden.",
287947
+ 'The command "/{{command}}" is not supported in non-interactive mode.': 'Der Befehl "/{{command}}" wird im nicht-interaktiven Modus nicht unterst\xFCtzt.',
287948
+ // ============================================================================
287949
+ // Settings Labels
287950
+ // ============================================================================
287951
+ "Vim Mode": "Vim-Modus",
287952
+ "Disable Auto Update": "Automatische Updates deaktivieren",
287953
+ "Enable Prompt Completion": "Eingabevervollst\xE4ndigung aktivieren",
287954
+ "Debug Keystroke Logging": "Debug-Protokollierung von Tastatureingaben",
287955
+ Language: "Sprache",
287956
+ "Output Format": "Ausgabeformat",
287957
+ "Hide Window Title": "Fenstertitel ausblenden",
287958
+ "Show Status in Title": "Status im Titel anzeigen",
287959
+ "Hide Tips": "Tipps ausblenden",
287960
+ "Hide Banner": "Banner ausblenden",
287961
+ "Hide Context Summary": "Kontextzusammenfassung ausblenden",
287962
+ "Hide CWD": "Arbeitsverzeichnis ausblenden",
287963
+ "Hide Sandbox Status": "Sandbox-Status ausblenden",
287964
+ "Hide Model Info": "Modellinformationen ausblenden",
287965
+ "Hide Footer": "Fu\xDFzeile ausblenden",
287966
+ "Show Memory Usage": "Speichernutzung anzeigen",
287967
+ "Show Line Numbers": "Zeilennummern anzeigen",
287968
+ "Show Citations": "Quellenangaben anzeigen",
287969
+ "Custom Witty Phrases": "Benutzerdefinierte Witzige Spr\xFCche",
287970
+ "Enable Welcome Back": "Willkommen-zur\xFCck aktivieren",
287971
+ "Disable Loading Phrases": "Ladespr\xFCche deaktivieren",
287972
+ "Screen Reader Mode": "Bildschirmleser-Modus",
287973
+ "IDE Mode": "IDE-Modus",
287974
+ "Max Session Turns": "Maximale Sitzungsrunden",
287975
+ "Skip Next Speaker Check": "N\xE4chste-Sprecher-Pr\xFCfung \xFCberspringen",
287976
+ "Skip Loop Detection": "Schleifenerkennung \xFCberspringen",
287977
+ "Skip Startup Context": "Startkontext \xFCberspringen",
287978
+ "Enable OpenAI Logging": "OpenAI-Protokollierung aktivieren",
287979
+ "OpenAI Logging Directory": "OpenAI-Protokollierungsverzeichnis",
287980
+ Timeout: "Zeitlimit",
287981
+ "Max Retries": "Maximale Wiederholungen",
287982
+ "Disable Cache Control": "Cache-Steuerung deaktivieren",
287983
+ "Memory Discovery Max Dirs": "Maximale Verzeichnisse f\xFCr Speichererkennung",
287984
+ "Load Memory From Include Directories": "Speicher aus Include-Verzeichnissen laden",
287985
+ "Respect .gitignore": ".gitignore beachten",
287986
+ "Respect .qwenignore": ".qwenignore beachten",
287987
+ "Enable Recursive File Search": "Rekursive Dateisuche aktivieren",
287988
+ "Disable Fuzzy Search": "Unscharfe Suche deaktivieren",
287989
+ "Enable Interactive Shell": "Interaktive Shell aktivieren",
287990
+ "Show Color": "Farbe anzeigen",
287991
+ "Auto Accept": "Automatisch akzeptieren",
287992
+ "Use Ripgrep": "Ripgrep verwenden",
287993
+ "Use Builtin Ripgrep": "Integriertes Ripgrep verwenden",
287994
+ "Enable Tool Output Truncation": "Werkzeugausgabe-K\xFCrzung aktivieren",
287995
+ "Tool Output Truncation Threshold": "Schwellenwert f\xFCr Werkzeugausgabe-K\xFCrzung",
287996
+ "Tool Output Truncation Lines": "Zeilen f\xFCr Werkzeugausgabe-K\xFCrzung",
287997
+ "Folder Trust": "Ordnervertrauen",
287998
+ "Vision Model Preview": "Vision-Modell-Vorschau",
287999
+ "Tool Schema Compliance": "Werkzeug-Schema-Konformit\xE4t",
288000
+ // Settings enum options
288001
+ "Auto (detect from system)": "Automatisch (vom System erkennen)",
288002
+ Text: "Text",
288003
+ JSON: "JSON",
288004
+ Plan: "Plan",
288005
+ Default: "Standard",
288006
+ "Auto Edit": "Automatisch bearbeiten",
288007
+ YOLO: "YOLO",
288008
+ "toggle vim mode on/off": "Vim-Modus ein-/ausschalten",
288009
+ "check session stats. Usage: /stats [model|tools]": "Sitzungsstatistiken pr\xFCfen. Verwendung: /stats [model|tools]",
288010
+ "Show model-specific usage statistics.": "Modellspezifische Nutzungsstatistiken anzeigen.",
288011
+ "Show tool-specific usage statistics.": "Werkzeugspezifische Nutzungsstatistiken anzeigen.",
288012
+ "exit the cli": "CLI beenden",
288013
+ "list configured MCP servers and tools, or authenticate with OAuth-enabled servers": "Konfigurierte MCP-Server und Werkzeuge auflisten oder mit OAuth-f\xE4higen Servern authentifizieren",
288014
+ "Manage workspace directories": "Arbeitsbereichsverzeichnisse verwalten",
288015
+ "Add directories to the workspace. Use comma to separate multiple paths": "Verzeichnisse zum Arbeitsbereich hinzuf\xFCgen. Komma zum Trennen mehrerer Pfade verwenden",
288016
+ "Show all directories in the workspace": "Alle Verzeichnisse im Arbeitsbereich anzeigen",
288017
+ "set external editor preference": "Externen Editor festlegen",
288018
+ "Manage extensions": "Erweiterungen verwalten",
288019
+ "List active extensions": "Aktive Erweiterungen auflisten",
288020
+ "Update extensions. Usage: update <extension-names>|--all": "Erweiterungen aktualisieren. Verwendung: update <Erweiterungsnamen>|--all",
288021
+ "manage IDE integration": "IDE-Integration verwalten",
288022
+ "check status of IDE integration": "Status der IDE-Integration pr\xFCfen",
288023
+ "install required IDE companion for {{ideName}}": "Erforderlichen IDE-Begleiter f\xFCr {{ideName}} installieren",
288024
+ "enable IDE integration": "IDE-Integration aktivieren",
288025
+ "disable IDE integration": "IDE-Integration deaktivieren",
288026
+ "IDE integration is not supported in your current environment. To use this feature, run Qwen Code in one of these supported IDEs: VS Code or VS Code forks.": "IDE-Integration wird in Ihrer aktuellen Umgebung nicht unterst\xFCtzt. Um diese Funktion zu nutzen, f\xFChren Sie Qwen Code in einer dieser unterst\xFCtzten IDEs aus: VS Code oder VS Code-Forks.",
288027
+ "Set up GitHub Actions": "GitHub Actions einrichten",
288028
+ "Configure terminal keybindings for multiline input (VS Code, Cursor, Windsurf, Trae)": "Terminal-Tastenbelegungen f\xFCr mehrzeilige Eingabe konfigurieren (VS Code, Cursor, Windsurf, Trae)",
288029
+ "Please restart your terminal for the changes to take effect.": "Bitte starten Sie Ihr Terminal neu, damit die \xC4nderungen wirksam werden.",
288030
+ "Failed to configure terminal: {{error}}": "Fehler beim Konfigurieren des Terminals: {{error}}",
288031
+ "Could not determine {{terminalName}} config path on Windows: APPDATA environment variable is not set.": "Konnte {{terminalName}}-Konfigurationspfad unter Windows nicht ermitteln: APPDATA-Umgebungsvariable ist nicht gesetzt.",
288032
+ "{{terminalName}} keybindings.json exists but is not a valid JSON array. Please fix the file manually or delete it to allow automatic configuration.": "{{terminalName}} keybindings.json existiert, ist aber kein g\xFCltiges JSON-Array. Bitte korrigieren Sie die Datei manuell oder l\xF6schen Sie sie, um automatische Konfiguration zu erm\xF6glichen.",
288033
+ "File: {{file}}": "Datei: {{file}}",
288034
+ "Failed to parse {{terminalName}} keybindings.json. The file contains invalid JSON. Please fix the file manually or delete it to allow automatic configuration.": "Fehler beim Parsen von {{terminalName}} keybindings.json. Die Datei enth\xE4lt ung\xFCltiges JSON. Bitte korrigieren Sie die Datei manuell oder l\xF6schen Sie sie, um automatische Konfiguration zu erm\xF6glichen.",
288035
+ "Error: {{error}}": "Fehler: {{error}}",
288036
+ "Shift+Enter binding already exists": "Umschalt+Enter-Belegung existiert bereits",
288037
+ "Ctrl+Enter binding already exists": "Strg+Enter-Belegung existiert bereits",
288038
+ "Existing keybindings detected. Will not modify to avoid conflicts.": "Bestehende Tastenbelegungen erkannt. Keine \xC4nderungen, um Konflikte zu vermeiden.",
288039
+ "Please check and modify manually if needed: {{file}}": "Bitte pr\xFCfen und bei Bedarf manuell \xE4ndern: {{file}}",
288040
+ "Added Shift+Enter and Ctrl+Enter keybindings to {{terminalName}}.": "Umschalt+Enter und Strg+Enter Tastenbelegungen zu {{terminalName}} hinzugef\xFCgt.",
288041
+ "Modified: {{file}}": "Ge\xE4ndert: {{file}}",
288042
+ "{{terminalName}} keybindings already configured.": "{{terminalName}}-Tastenbelegungen bereits konfiguriert.",
288043
+ "Failed to configure {{terminalName}}.": "Fehler beim Konfigurieren von {{terminalName}}.",
288044
+ "Your terminal is already configured for an optimal experience with multiline input (Shift+Enter and Ctrl+Enter).": "Ihr Terminal ist bereits f\xFCr optimale Erfahrung mit mehrzeiliger Eingabe konfiguriert (Umschalt+Enter und Strg+Enter).",
288045
+ "Could not detect terminal type. Supported terminals: VS Code, Cursor, Windsurf, and Trae.": "Terminal-Typ konnte nicht erkannt werden. Unterst\xFCtzte Terminals: VS Code, Cursor, Windsurf und Trae.",
288046
+ 'Terminal "{{terminal}}" is not supported yet.': 'Terminal "{{terminal}}" wird noch nicht unterst\xFCtzt.',
288047
+ // ============================================================================
288048
+ // Commands - Language
288049
+ // ============================================================================
288050
+ "Invalid language. Available: en-US, zh-CN": "Ung\xFCltige Sprache. Verf\xFCgbar: en-US, zh-CN",
288051
+ "Language subcommands do not accept additional arguments.": "Sprach-Unterbefehle akzeptieren keine zus\xE4tzlichen Argumente.",
288052
+ "Current UI language: {{lang}}": "Aktuelle UI-Sprache: {{lang}}",
288053
+ "Current LLM output language: {{lang}}": "Aktuelle LLM-Ausgabesprache: {{lang}}",
288054
+ "LLM output language not set": "LLM-Ausgabesprache nicht festgelegt",
288055
+ "Set UI language": "UI-Sprache festlegen",
288056
+ "Set LLM output language": "LLM-Ausgabesprache festlegen",
288057
+ "Usage: /language ui [zh-CN|en-US]": "Verwendung: /language ui [zh-CN|en-US]",
288058
+ "Usage: /language output <language>": "Verwendung: /language output <Sprache>",
288059
+ "Example: /language output \u4E2D\u6587": "Beispiel: /language output Deutsch",
288060
+ "Example: /language output English": "Beispiel: /language output English",
288061
+ "Example: /language output \u65E5\u672C\u8A9E": "Beispiel: /language output Japanisch",
288062
+ "UI language changed to {{lang}}": "UI-Sprache ge\xE4ndert zu {{lang}}",
288063
+ "LLM output language rule file generated at {{path}}": "LLM-Ausgabesprach-Regeldatei generiert unter {{path}}",
288064
+ "Please restart the application for the changes to take effect.": "Bitte starten Sie die Anwendung neu, damit die \xC4nderungen wirksam werden.",
288065
+ "Failed to generate LLM output language rule file: {{error}}": "Fehler beim Generieren der LLM-Ausgabesprach-Regeldatei: {{error}}",
288066
+ "Invalid command. Available subcommands:": "Ung\xFCltiger Befehl. Verf\xFCgbare Unterbefehle:",
288067
+ "Available subcommands:": "Verf\xFCgbare Unterbefehle:",
288068
+ "To request additional UI language packs, please open an issue on GitHub.": "Um zus\xE4tzliche UI-Sprachpakete anzufordern, \xF6ffnen Sie bitte ein Issue auf GitHub.",
288069
+ "Available options:": "Verf\xFCgbare Optionen:",
288070
+ " - zh-CN: Simplified Chinese": " - zh-CN: Vereinfachtes Chinesisch",
288071
+ " - en-US: English": " - en-US: Englisch",
288072
+ "Set UI language to Simplified Chinese (zh-CN)": "UI-Sprache auf Vereinfachtes Chinesisch (zh-CN) setzen",
288073
+ "Set UI language to English (en-US)": "UI-Sprache auf Englisch (en-US) setzen",
288074
+ // ============================================================================
288075
+ // Commands - Approval Mode
288076
+ // ============================================================================
288077
+ "Approval Mode": "Genehmigungsmodus",
288078
+ "Current approval mode: {{mode}}": "Aktueller Genehmigungsmodus: {{mode}}",
288079
+ "Available approval modes:": "Verf\xFCgbare Genehmigungsmodi:",
288080
+ "Approval mode changed to: {{mode}}": "Genehmigungsmodus ge\xE4ndert zu: {{mode}}",
288081
+ "Approval mode changed to: {{mode}} (saved to {{scope}} settings{{location}})": "Genehmigungsmodus ge\xE4ndert zu: {{mode}} (gespeichert in {{scope}} Einstellungen{{location}})",
288082
+ "Usage: /approval-mode <mode> [--session|--user|--project]": "Verwendung: /approval-mode <Modus> [--session|--user|--project]",
288083
+ "Scope subcommands do not accept additional arguments.": "Bereichs-Unterbefehle akzeptieren keine zus\xE4tzlichen Argumente.",
288084
+ "Plan mode - Analyze only, do not modify files or execute commands": "Planungsmodus - Nur analysieren, keine Dateien \xE4ndern oder Befehle ausf\xFChren",
288085
+ "Default mode - Require approval for file edits or shell commands": "Standardmodus - Genehmigung f\xFCr Dateibearbeitungen oder Shell-Befehle erforderlich",
288086
+ "Auto-edit mode - Automatically approve file edits": "Automatischer Bearbeitungsmodus - Dateibearbeitungen automatisch genehmigen",
288087
+ "YOLO mode - Automatically approve all tools": "YOLO-Modus - Alle Werkzeuge automatisch genehmigen",
288088
+ "{{mode}} mode": "{{mode}}-Modus",
288089
+ "Settings service is not available; unable to persist the approval mode.": "Einstellungsdienst nicht verf\xFCgbar; Genehmigungsmodus kann nicht gespeichert werden.",
288090
+ "Failed to save approval mode: {{error}}": "Fehler beim Speichern des Genehmigungsmodus: {{error}}",
288091
+ "Failed to change approval mode: {{error}}": "Fehler beim \xC4ndern des Genehmigungsmodus: {{error}}",
288092
+ "Apply to current session only (temporary)": "Nur auf aktuelle Sitzung anwenden (tempor\xE4r)",
288093
+ "Persist for this project/workspace": "F\xFCr dieses Projekt/Arbeitsbereich speichern",
288094
+ "Persist for this user on this machine": "F\xFCr diesen Benutzer auf diesem Computer speichern",
288095
+ "Analyze only, do not modify files or execute commands": "Nur analysieren, keine Dateien \xE4ndern oder Befehle ausf\xFChren",
288096
+ "Require approval for file edits or shell commands": "Genehmigung f\xFCr Dateibearbeitungen oder Shell-Befehle erforderlich",
288097
+ "Automatically approve file edits": "Dateibearbeitungen automatisch genehmigen",
288098
+ "Automatically approve all tools": "Alle Werkzeuge automatisch genehmigen",
288099
+ "Workspace approval mode exists and takes priority. User-level change will have no effect.": "Arbeitsbereich-Genehmigungsmodus existiert und hat Vorrang. Benutzerebene-\xC4nderung hat keine Wirkung.",
288100
+ "(Use Enter to select, Tab to change focus)": "(Enter zum Ausw\xE4hlen, Tab zum Fokuswechsel)",
288101
+ "Apply To": "Anwenden auf",
288102
+ "User Settings": "Benutzereinstellungen",
288103
+ "Workspace Settings": "Arbeitsbereich-Einstellungen",
288104
+ // ============================================================================
288105
+ // Commands - Memory
288106
+ // ============================================================================
288107
+ "Commands for interacting with memory.": "Befehle f\xFCr die Interaktion mit dem Speicher.",
288108
+ "Show the current memory contents.": "Aktuellen Speicherinhalt anzeigen.",
288109
+ "Show project-level memory contents.": "Projektebene-Speicherinhalt anzeigen.",
288110
+ "Show global memory contents.": "Globalen Speicherinhalt anzeigen.",
288111
+ "Add content to project-level memory.": "Inhalt zum Projektebene-Speicher hinzuf\xFCgen.",
288112
+ "Add content to global memory.": "Inhalt zum globalen Speicher hinzuf\xFCgen.",
288113
+ "Refresh the memory from the source.": "Speicher aus der Quelle aktualisieren.",
288114
+ "Usage: /memory add --project <text to remember>": "Verwendung: /memory add --project <zu merkender Text>",
288115
+ "Usage: /memory add --global <text to remember>": "Verwendung: /memory add --global <zu merkender Text>",
288116
+ 'Attempting to save to project memory: "{{text}}"': 'Versuche im Projektspeicher zu speichern: "{{text}}"',
288117
+ 'Attempting to save to global memory: "{{text}}"': 'Versuche im globalen Speicher zu speichern: "{{text}}"',
288118
+ "Current memory content from {{count}} file(s):": "Aktueller Speicherinhalt aus {{count}} Datei(en):",
288119
+ "Memory is currently empty.": "Speicher ist derzeit leer.",
288120
+ "Project memory file not found or is currently empty.": "Projektspeicherdatei nicht gefunden oder derzeit leer.",
288121
+ "Global memory file not found or is currently empty.": "Globale Speicherdatei nicht gefunden oder derzeit leer.",
288122
+ "Global memory is currently empty.": "Globaler Speicher ist derzeit leer.",
288123
+ "Global memory content:\n\n---\n{{content}}\n---": "Globaler Speicherinhalt:\n\n---\n{{content}}\n---",
288124
+ "Project memory content from {{path}}:\n\n---\n{{content}}\n---": "Projektspeicherinhalt von {{path}}:\n\n---\n{{content}}\n---",
288125
+ "Project memory is currently empty.": "Projektspeicher ist derzeit leer.",
288126
+ "Refreshing memory from source files...": "Speicher wird aus Quelldateien aktualisiert...",
288127
+ "Add content to the memory. Use --global for global memory or --project for project memory.": "Inhalt zum Speicher hinzuf\xFCgen. --global f\xFCr globalen Speicher oder --project f\xFCr Projektspeicher verwenden.",
288128
+ "Usage: /memory add [--global|--project] <text to remember>": "Verwendung: /memory add [--global|--project] <zu merkender Text>",
288129
+ 'Attempting to save to memory {{scope}}: "{{fact}}"': 'Versuche im Speicher {{scope}} zu speichern: "{{fact}}"',
288130
+ // ============================================================================
288131
+ // Commands - MCP
288132
+ // ============================================================================
288133
+ "Authenticate with an OAuth-enabled MCP server": "Mit einem OAuth-f\xE4higen MCP-Server authentifizieren",
288134
+ "List configured MCP servers and tools": "Konfigurierte MCP-Server und Werkzeuge auflisten",
288135
+ "Restarts MCP servers.": "MCP-Server neu starten.",
288136
+ "Config not loaded.": "Konfiguration nicht geladen.",
288137
+ "Could not retrieve tool registry.": "Werkzeugregister konnte nicht abgerufen werden.",
288138
+ "No MCP servers configured with OAuth authentication.": "Keine MCP-Server mit OAuth-Authentifizierung konfiguriert.",
288139
+ "MCP servers with OAuth authentication:": "MCP-Server mit OAuth-Authentifizierung:",
288140
+ "Use /mcp auth <server-name> to authenticate.": "Verwenden Sie /mcp auth <Servername> zur Authentifizierung.",
288141
+ "MCP server '{{name}}' not found.": "MCP-Server '{{name}}' nicht gefunden.",
288142
+ "Successfully authenticated and refreshed tools for '{{name}}'.": "Erfolgreich authentifiziert und Werkzeuge f\xFCr '{{name}}' aktualisiert.",
288143
+ "Failed to authenticate with MCP server '{{name}}': {{error}}": "Authentifizierung mit MCP-Server '{{name}}' fehlgeschlagen: {{error}}",
288144
+ "Re-discovering tools from '{{name}}'...": "Werkzeuge von '{{name}}' werden neu erkannt...",
288145
+ // ============================================================================
288146
+ // Commands - Chat
288147
+ // ============================================================================
288148
+ "Manage conversation history.": "Gespr\xE4chsverlauf verwalten.",
288149
+ "List saved conversation checkpoints": "Gespeicherte Gespr\xE4chspr\xFCfpunkte auflisten",
288150
+ "No saved conversation checkpoints found.": "Keine gespeicherten Gespr\xE4chspr\xFCfpunkte gefunden.",
288151
+ "List of saved conversations:": "Liste gespeicherter Gespr\xE4che:",
288152
+ "Note: Newest last, oldest first": "Hinweis: Neueste zuletzt, \xE4lteste zuerst",
288153
+ "Save the current conversation as a checkpoint. Usage: /chat save <tag>": "Aktuelles Gespr\xE4ch als Pr\xFCfpunkt speichern. Verwendung: /chat save <Tag>",
288154
+ "Missing tag. Usage: /chat save <tag>": "Tag fehlt. Verwendung: /chat save <Tag>",
288155
+ "Delete a conversation checkpoint. Usage: /chat delete <tag>": "Gespr\xE4chspr\xFCfpunkt l\xF6schen. Verwendung: /chat delete <Tag>",
288156
+ "Missing tag. Usage: /chat delete <tag>": "Tag fehlt. Verwendung: /chat delete <Tag>",
288157
+ "Conversation checkpoint '{{tag}}' has been deleted.": "Gespr\xE4chspr\xFCfpunkt '{{tag}}' wurde gel\xF6scht.",
288158
+ "Error: No checkpoint found with tag '{{tag}}'.": "Fehler: Kein Pr\xFCfpunkt mit Tag '{{tag}}' gefunden.",
288159
+ "Resume a conversation from a checkpoint. Usage: /chat resume <tag>": "Gespr\xE4ch von einem Pr\xFCfpunkt fortsetzen. Verwendung: /chat resume <Tag>",
288160
+ "Missing tag. Usage: /chat resume <tag>": "Tag fehlt. Verwendung: /chat resume <Tag>",
288161
+ "No saved checkpoint found with tag: {{tag}}.": "Kein gespeicherter Pr\xFCfpunkt mit Tag gefunden: {{tag}}.",
288162
+ "A checkpoint with the tag {{tag}} already exists. Do you want to overwrite it?": "Ein Pr\xFCfpunkt mit dem Tag {{tag}} existiert bereits. M\xF6chten Sie ihn \xFCberschreiben?",
288163
+ "No chat client available to save conversation.": "Kein Chat-Client verf\xFCgbar, um Gespr\xE4ch zu speichern.",
288164
+ "Conversation checkpoint saved with tag: {{tag}}.": "Gespr\xE4chspr\xFCfpunkt gespeichert mit Tag: {{tag}}.",
288165
+ "No conversation found to save.": "Kein Gespr\xE4ch zum Speichern gefunden.",
288166
+ "No chat client available to share conversation.": "Kein Chat-Client verf\xFCgbar, um Gespr\xE4ch zu teilen.",
288167
+ "Invalid file format. Only .md and .json are supported.": "Ung\xFCltiges Dateiformat. Nur .md und .json werden unterst\xFCtzt.",
288168
+ "Error sharing conversation: {{error}}": "Fehler beim Teilen des Gespr\xE4chs: {{error}}",
288169
+ "Conversation shared to {{filePath}}": "Gespr\xE4ch geteilt nach {{filePath}}",
288170
+ "No conversation found to share.": "Kein Gespr\xE4ch zum Teilen gefunden.",
288171
+ "Share the current conversation to a markdown or json file. Usage: /chat share <file>": "Aktuelles Gespr\xE4ch in eine Markdown- oder JSON-Datei teilen. Verwendung: /chat share <Datei>",
288172
+ // ============================================================================
288173
+ // Commands - Summary
288174
+ // ============================================================================
288175
+ "Generate a project summary and save it to .qwen/PROJECT_SUMMARY.md": "Projektzusammenfassung generieren und in .qwen/PROJECT_SUMMARY.md speichern",
288176
+ "No chat client available to generate summary.": "Kein Chat-Client verf\xFCgbar, um Zusammenfassung zu generieren.",
288177
+ "Already generating summary, wait for previous request to complete": "Zusammenfassung wird bereits generiert, warten Sie auf Abschluss der vorherigen Anfrage",
288178
+ "No conversation found to summarize.": "Kein Gespr\xE4ch zum Zusammenfassen gefunden.",
288179
+ "Failed to generate project context summary: {{error}}": "Fehler beim Generieren der Projektkontextzusammenfassung: {{error}}",
288180
+ "Saved project summary to {{filePathForDisplay}}.": "Projektzusammenfassung gespeichert unter {{filePathForDisplay}}.",
288181
+ "Saving project summary...": "Projektzusammenfassung wird gespeichert...",
288182
+ "Generating project summary...": "Projektzusammenfassung wird generiert...",
288183
+ "Failed to generate summary - no text content received from LLM response": "Fehler beim Generieren der Zusammenfassung - kein Textinhalt von LLM-Antwort erhalten",
288184
+ // ============================================================================
288185
+ // Commands - Model
288186
+ // ============================================================================
288187
+ "Switch the model for this session": "Modell f\xFCr diese Sitzung wechseln",
288188
+ "Content generator configuration not available.": "Inhaltsgenerator-Konfiguration nicht verf\xFCgbar.",
288189
+ "Authentication type not available.": "Authentifizierungstyp nicht verf\xFCgbar.",
288190
+ "No models available for the current authentication type ({{authType}}).": "Keine Modelle f\xFCr den aktuellen Authentifizierungstyp ({{authType}}) verf\xFCgbar.",
288191
+ // ============================================================================
288192
+ // Commands - Clear
288193
+ // ============================================================================
288194
+ "Starting a new session, resetting chat, and clearing terminal.": "Neue Sitzung wird gestartet, Chat wird zur\xFCckgesetzt und Terminal wird gel\xF6scht.",
288195
+ "Starting a new session and clearing.": "Neue Sitzung wird gestartet und gel\xF6scht.",
288196
+ // ============================================================================
288197
+ // Commands - Compress
288198
+ // ============================================================================
288199
+ "Already compressing, wait for previous request to complete": "Komprimierung l\xE4uft bereits, warten Sie auf Abschluss der vorherigen Anfrage",
288200
+ "Failed to compress chat history.": "Fehler beim Komprimieren des Chatverlaufs.",
288201
+ "Failed to compress chat history: {{error}}": "Fehler beim Komprimieren des Chatverlaufs: {{error}}",
288202
+ "Compressing chat history": "Chatverlauf wird komprimiert",
288203
+ "Chat history compressed from {{originalTokens}} to {{newTokens}} tokens.": "Chatverlauf komprimiert von {{originalTokens}} auf {{newTokens}} Token.",
288204
+ "Compression was not beneficial for this history size.": "Komprimierung war f\xFCr diese Verlaufsgr\xF6\xDFe nicht vorteilhaft.",
288205
+ "Chat history compression did not reduce size. This may indicate issues with the compression prompt.": "Chatverlauf-Komprimierung hat die Gr\xF6\xDFe nicht reduziert. Dies kann auf Probleme mit dem Komprimierungs-Prompt hindeuten.",
288206
+ "Could not compress chat history due to a token counting error.": "Chatverlauf konnte aufgrund eines Token-Z\xE4hlfehlers nicht komprimiert werden.",
288207
+ "Chat history is already compressed.": "Chatverlauf ist bereits komprimiert.",
288208
+ // ============================================================================
288209
+ // Commands - Directory
288210
+ // ============================================================================
288211
+ "Configuration is not available.": "Konfiguration ist nicht verf\xFCgbar.",
288212
+ "Please provide at least one path to add.": "Bitte geben Sie mindestens einen Pfad zum Hinzuf\xFCgen an.",
288213
+ "The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.": "Der Befehl /directory add wird in restriktiven Sandbox-Profilen nicht unterst\xFCtzt. Bitte verwenden Sie --include-directories beim Starten der Sitzung.",
288214
+ "Error adding '{{path}}': {{error}}": "Fehler beim Hinzuf\xFCgen von '{{path}}': {{error}}",
288215
+ "Successfully added QWEN.md files from the following directories if there are:\n- {{directories}}": "QWEN.md-Dateien aus folgenden Verzeichnissen erfolgreich hinzugef\xFCgt, falls vorhanden:\n- {{directories}}",
288216
+ "Error refreshing memory: {{error}}": "Fehler beim Aktualisieren des Speichers: {{error}}",
288217
+ "Successfully added directories:\n- {{directories}}": "Verzeichnisse erfolgreich hinzugef\xFCgt:\n- {{directories}}",
288218
+ "Current workspace directories:\n{{directories}}": "Aktuelle Arbeitsbereichsverzeichnisse:\n{{directories}}",
288219
+ // ============================================================================
288220
+ // Commands - Docs
288221
+ // ============================================================================
288222
+ "Please open the following URL in your browser to view the documentation:\n{{url}}": "Bitte \xF6ffnen Sie folgende URL in Ihrem Browser, um die Dokumentation anzusehen:\n{{url}}",
288223
+ "Opening documentation in your browser: {{url}}": "Dokumentation wird in Ihrem Browser ge\xF6ffnet: {{url}}",
288224
+ // ============================================================================
288225
+ // Dialogs - Tool Confirmation
288226
+ // ============================================================================
288227
+ "Do you want to proceed?": "M\xF6chten Sie fortfahren?",
288228
+ "Yes, allow once": "Ja, einmal erlauben",
288229
+ "Allow always": "Immer erlauben",
288230
+ No: "Nein",
288231
+ "No (esc)": "Nein (Esc)",
288232
+ "Yes, allow always for this session": "Ja, f\xFCr diese Sitzung immer erlauben",
288233
+ "Modify in progress:": "\xC4nderung in Bearbeitung:",
288234
+ "Save and close external editor to continue": "Speichern und externen Editor schlie\xDFen, um fortzufahren",
288235
+ "Apply this change?": "Diese \xC4nderung anwenden?",
288236
+ "Yes, allow always": "Ja, immer erlauben",
288237
+ "Modify with external editor": "Mit externem Editor bearbeiten",
288238
+ "No, suggest changes (esc)": "Nein, \xC4nderungen vorschlagen (Esc)",
288239
+ "Allow execution of: '{{command}}'?": "Ausf\xFChrung erlauben von: '{{command}}'?",
288240
+ "Yes, allow always ...": "Ja, immer erlauben ...",
288241
+ "Yes, and auto-accept edits": "Ja, und \xC4nderungen automatisch akzeptieren",
288242
+ "Yes, and manually approve edits": "Ja, und \xC4nderungen manuell genehmigen",
288243
+ "No, keep planning (esc)": "Nein, weiter planen (Esc)",
288244
+ "URLs to fetch:": "Abzurufende URLs:",
288245
+ "MCP Server: {{server}}": "MCP-Server: {{server}}",
288246
+ "Tool: {{tool}}": "Werkzeug: {{tool}}",
288247
+ 'Allow execution of MCP tool "{{tool}}" from server "{{server}}"?': 'Ausf\xFChrung des MCP-Werkzeugs "{{tool}}" von Server "{{server}}" erlauben?',
288248
+ 'Yes, always allow tool "{{tool}}" from server "{{server}}"': 'Ja, Werkzeug "{{tool}}" von Server "{{server}}" immer erlauben',
288249
+ 'Yes, always allow all tools from server "{{server}}"': 'Ja, alle Werkzeuge von Server "{{server}}" immer erlauben',
288250
+ // ============================================================================
288251
+ // Dialogs - Shell Confirmation
288252
+ // ============================================================================
288253
+ "Shell Command Execution": "Shell-Befehlsausf\xFChrung",
288254
+ "A custom command wants to run the following shell commands:": "Ein benutzerdefinierter Befehl m\xF6chte folgende Shell-Befehle ausf\xFChren:",
288255
+ // ============================================================================
288256
+ // Dialogs - Pro Quota
288257
+ // ============================================================================
288258
+ "Pro quota limit reached for {{model}}.": "Pro-Kontingentlimit f\xFCr {{model}} erreicht.",
288259
+ "Change auth (executes the /auth command)": "Authentifizierung \xE4ndern (f\xFChrt den /auth-Befehl aus)",
288260
+ "Continue with {{model}}": "Mit {{model}} fortfahren",
288261
+ // ============================================================================
288262
+ // Dialogs - Welcome Back
288263
+ // ============================================================================
288264
+ "Current Plan:": "Aktueller Plan:",
288265
+ "Progress: {{done}}/{{total}} tasks completed": "Fortschritt: {{done}}/{{total}} Aufgaben abgeschlossen",
288266
+ ", {{inProgress}} in progress": ", {{inProgress}} in Bearbeitung",
288267
+ "Pending Tasks:": "Ausstehende Aufgaben:",
288268
+ "What would you like to do?": "Was m\xF6chten Sie tun?",
288269
+ "Choose how to proceed with your session:": "W\xE4hlen Sie, wie Sie mit Ihrer Sitzung fortfahren m\xF6chten:",
288270
+ "Start new chat session": "Neue Chat-Sitzung starten",
288271
+ "Continue previous conversation": "Vorheriges Gespr\xE4ch fortsetzen",
288272
+ "\u{1F44B} Welcome back! (Last updated: {{timeAgo}})": "\u{1F44B} Willkommen zur\xFCck! (Zuletzt aktualisiert: {{timeAgo}})",
288273
+ "\u{1F3AF} Overall Goal:": "\u{1F3AF} Gesamtziel:",
288274
+ // ============================================================================
288275
+ // Dialogs - Auth
288276
+ // ============================================================================
288277
+ "Get started": "Loslegen",
288278
+ "How would you like to authenticate for this project?": "Wie m\xF6chten Sie sich f\xFCr dieses Projekt authentifizieren?",
288279
+ "OpenAI API key is required to use OpenAI authentication.": "OpenAI API-Schl\xFCssel ist f\xFCr die OpenAI-Authentifizierung erforderlich.",
288280
+ "You must select an auth method to proceed. Press Ctrl+C again to exit.": "Sie m\xFCssen eine Authentifizierungsmethode w\xE4hlen, um fortzufahren. Dr\xFCcken Sie erneut Strg+C zum Beenden.",
288281
+ "(Use Enter to Set Auth)": "(Enter zum Festlegen der Authentifizierung)",
288282
+ "Terms of Services and Privacy Notice for Qwen Code": "Nutzungsbedingungen und Datenschutzhinweis f\xFCr Qwen Code",
288283
+ "Qwen OAuth": "Qwen OAuth",
288284
+ OpenAI: "OpenAI",
288285
+ "Failed to login. Message: {{message}}": "Anmeldung fehlgeschlagen. Meldung: {{message}}",
288286
+ "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "Authentifizierung ist auf {{enforcedType}} festgelegt, aber Sie verwenden derzeit {{currentType}}.",
288287
+ "Qwen OAuth authentication timed out. Please try again.": "Qwen OAuth-Authentifizierung abgelaufen. Bitte versuchen Sie es erneut.",
288288
+ "Qwen OAuth authentication cancelled.": "Qwen OAuth-Authentifizierung abgebrochen.",
288289
+ "Qwen OAuth Authentication": "Qwen OAuth-Authentifizierung",
288290
+ "Please visit this URL to authorize:": "Bitte besuchen Sie diese URL zur Autorisierung:",
288291
+ "Or scan the QR code below:": "Oder scannen Sie den QR-Code unten:",
288292
+ "Waiting for authorization": "Warten auf Autorisierung",
288293
+ "Time remaining:": "Verbleibende Zeit:",
288294
+ "(Press ESC or CTRL+C to cancel)": "(ESC oder STRG+C zum Abbrechen dr\xFCcken)",
288295
+ "Qwen OAuth Authentication Timeout": "Qwen OAuth-Authentifizierung abgelaufen",
288296
+ "OAuth token expired (over {{seconds}} seconds). Please select authentication method again.": "OAuth-Token abgelaufen (\xFCber {{seconds}} Sekunden). Bitte w\xE4hlen Sie erneut eine Authentifizierungsmethode.",
288297
+ "Press any key to return to authentication type selection.": "Dr\xFCcken Sie eine beliebige Taste, um zur Authentifizierungstypauswahl zur\xFCckzukehren.",
288298
+ "Waiting for Qwen OAuth authentication...": "Warten auf Qwen OAuth-Authentifizierung...",
288299
+ "Note: Your existing API key in settings.json will not be cleared when using Qwen OAuth. You can switch back to OpenAI authentication later if needed.": "Hinweis: Ihr bestehender API-Schl\xFCssel in settings.json wird bei Verwendung von Qwen OAuth nicht gel\xF6scht. Sie k\xF6nnen sp\xE4ter bei Bedarf zur OpenAI-Authentifizierung zur\xFCckwechseln.",
288300
+ "Authentication timed out. Please try again.": "Authentifizierung abgelaufen. Bitte versuchen Sie es erneut.",
288301
+ "Waiting for auth... (Press ESC or CTRL+C to cancel)": "Warten auf Authentifizierung... (ESC oder STRG+C zum Abbrechen dr\xFCcken)",
288302
+ "Failed to authenticate. Message: {{message}}": "Authentifizierung fehlgeschlagen. Meldung: {{message}}",
288303
+ "Authenticated successfully with {{authType}} credentials.": "Erfolgreich mit {{authType}}-Anmeldedaten authentifiziert.",
288304
+ 'Invalid QWEN_DEFAULT_AUTH_TYPE value: "{{value}}". Valid values are: {{validValues}}': 'Ung\xFCltiger QWEN_DEFAULT_AUTH_TYPE-Wert: "{{value}}". G\xFCltige Werte sind: {{validValues}}',
288305
+ "OpenAI Configuration Required": "OpenAI-Konfiguration erforderlich",
288306
+ "Please enter your OpenAI configuration. You can get an API key from": "Bitte geben Sie Ihre OpenAI-Konfiguration ein. Sie k\xF6nnen einen API-Schl\xFCssel erhalten von",
288307
+ "API Key:": "API-Schl\xFCssel:",
288308
+ "Invalid credentials: {{errorMessage}}": "Ung\xFCltige Anmeldedaten: {{errorMessage}}",
288309
+ "Failed to validate credentials": "Anmeldedaten konnten nicht validiert werden",
288310
+ "Press Enter to continue, Tab/\u2191\u2193 to navigate, Esc to cancel": "Enter zum Fortfahren, Tab/\u2191\u2193 zum Navigieren, Esc zum Abbrechen",
288311
+ // ============================================================================
288312
+ // Dialogs - Model
288313
+ // ============================================================================
288314
+ "Select Model": "Modell ausw\xE4hlen",
288315
+ "(Press Esc to close)": "(Esc zum Schlie\xDFen dr\xFCcken)",
288316
+ "The latest Qwen Coder model from Alibaba Cloud ModelStudio (version: qwen3-coder-plus-2025-09-23)": "Das neueste Qwen Coder Modell von Alibaba Cloud ModelStudio (Version: qwen3-coder-plus-2025-09-23)",
288317
+ "The latest Qwen Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)": "Das neueste Qwen Vision Modell von Alibaba Cloud ModelStudio (Version: qwen3-vl-plus-2025-09-23)",
288318
+ // ============================================================================
288319
+ // Dialogs - Permissions
288320
+ // ============================================================================
288321
+ "Manage folder trust settings": "Ordnervertrauenseinstellungen verwalten",
288322
+ // ============================================================================
288323
+ // Status Bar
288324
+ // ============================================================================
288325
+ "Using:": "Verwendet:",
288326
+ "{{count}} open file": "{{count}} ge\xF6ffnete Datei",
288327
+ "{{count}} open files": "{{count}} ge\xF6ffnete Dateien",
288328
+ "(ctrl+g to view)": "(Strg+G zum Anzeigen)",
288329
+ "{{count}} {{name}} file": "{{count}} {{name}}-Datei",
288330
+ "{{count}} {{name}} files": "{{count}} {{name}}-Dateien",
288331
+ "{{count}} MCP server": "{{count}} MCP-Server",
288332
+ "{{count}} MCP servers": "{{count}} MCP-Server",
288333
+ "{{count}} Blocked": "{{count}} blockiert",
288334
+ "(ctrl+t to view)": "(Strg+T zum Anzeigen)",
288335
+ "(ctrl+t to toggle)": "(Strg+T zum Umschalten)",
288336
+ "Press Ctrl+C again to exit.": "Dr\xFCcken Sie erneut Strg+C zum Beenden.",
288337
+ "Press Ctrl+D again to exit.": "Dr\xFCcken Sie erneut Strg+D zum Beenden.",
288338
+ "Press Esc again to clear.": "Dr\xFCcken Sie erneut Esc zum L\xF6schen.",
288339
+ // ============================================================================
288340
+ // MCP Status
288341
+ // ============================================================================
288342
+ "No MCP servers configured.": "Keine MCP-Server konfiguriert.",
288343
+ "Please view MCP documentation in your browser:": "Bitte sehen Sie die MCP-Dokumentation in Ihrem Browser:",
288344
+ "or use the cli /docs command": "oder verwenden Sie den CLI-Befehl /docs",
288345
+ "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP-Server werden gestartet ({{count}} werden initialisiert)...",
288346
+ "Note: First startup may take longer. Tool availability will update automatically.": "Hinweis: Der erste Start kann l\xE4nger dauern. Werkzeugverf\xFCgbarkeit wird automatisch aktualisiert.",
288347
+ "Configured MCP servers:": "Konfigurierte MCP-Server:",
288348
+ Ready: "Bereit",
288349
+ "Starting... (first startup may take longer)": "Wird gestartet... (erster Start kann l\xE4nger dauern)",
288350
+ Disconnected: "Getrennt",
288351
+ "{{count}} tool": "{{count}} Werkzeug",
288352
+ "{{count}} tools": "{{count}} Werkzeuge",
288353
+ "{{count}} prompt": "{{count}} Prompt",
288354
+ "{{count}} prompts": "{{count}} Prompts",
288355
+ "(from {{extensionName}})": "(von {{extensionName}})",
288356
+ OAuth: "OAuth",
288357
+ "OAuth expired": "OAuth abgelaufen",
288358
+ "OAuth not authenticated": "OAuth nicht authentifiziert",
288359
+ "tools and prompts will appear when ready": "Werkzeuge und Prompts werden angezeigt, wenn bereit",
288360
+ "{{count}} tools cached": "{{count}} Werkzeuge zwischengespeichert",
288361
+ "Tools:": "Werkzeuge:",
288362
+ "Parameters:": "Parameter:",
288363
+ "Prompts:": "Prompts:",
288364
+ Blocked: "Blockiert",
288365
+ "\u{1F4A1} Tips:": "\u{1F4A1} Tipps:",
288366
+ Use: "Verwenden",
288367
+ "to show server and tool descriptions": "um Server- und Werkzeugbeschreibungen anzuzeigen",
288368
+ "to show tool parameter schemas": "um Werkzeug-Parameter-Schemas anzuzeigen",
288369
+ "to hide descriptions": "um Beschreibungen auszublenden",
288370
+ "to authenticate with OAuth-enabled servers": "um sich bei OAuth-f\xE4higen Servern zu authentifizieren",
288371
+ Press: "Dr\xFCcken Sie",
288372
+ "to toggle tool descriptions on/off": "um Werkzeugbeschreibungen ein-/auszuschalten",
288373
+ "Starting OAuth authentication for MCP server '{{name}}'...": "OAuth-Authentifizierung f\xFCr MCP-Server '{{name}}' wird gestartet...",
288374
+ "Restarting MCP servers...": "MCP-Server werden neu gestartet...",
288375
+ // ============================================================================
288376
+ // Startup Tips
288377
+ // ============================================================================
288378
+ "Tips for getting started:": "Tipps zum Einstieg:",
288379
+ "1. Ask questions, edit files, or run commands.": "1. Stellen Sie Fragen, bearbeiten Sie Dateien oder f\xFChren Sie Befehle aus.",
288380
+ "2. Be specific for the best results.": "2. Seien Sie spezifisch f\xFCr die besten Ergebnisse.",
288381
+ "files to customize your interactions with Qwen Code.": "Dateien, um Ihre Interaktionen mit Qwen Code anzupassen.",
288382
+ "for more information.": "f\xFCr weitere Informationen.",
288383
+ // ============================================================================
288384
+ // Exit Screen / Stats
288385
+ // ============================================================================
288386
+ "Agent powering down. Goodbye!": "Agent wird heruntergefahren. Auf Wiedersehen!",
288387
+ "To continue this session, run": "Um diese Sitzung fortzusetzen, f\xFChren Sie aus",
288388
+ "Interaction Summary": "Interaktionszusammenfassung",
288389
+ "Session ID:": "Sitzungs-ID:",
288390
+ "Tool Calls:": "Werkzeugaufrufe:",
288391
+ "Success Rate:": "Erfolgsrate:",
288392
+ "User Agreement:": "Benutzerzustimmung:",
288393
+ reviewed: "\xFCberpr\xFCft",
288394
+ "Code Changes:": "Code\xE4nderungen:",
288395
+ Performance: "Leistung",
288396
+ "Wall Time:": "Gesamtzeit:",
288397
+ "Agent Active:": "Agent aktiv:",
288398
+ "API Time:": "API-Zeit:",
288399
+ "Tool Time:": "Werkzeugzeit:",
288400
+ "Session Stats": "Sitzungsstatistiken",
288401
+ "Model Usage": "Modellnutzung",
288402
+ Reqs: "Anfragen",
288403
+ "Input Tokens": "Eingabe-Token",
288404
+ "Output Tokens": "Ausgabe-Token",
288405
+ "Savings Highlight:": "Einsparungen:",
288406
+ "of input tokens were served from the cache, reducing costs.": "der Eingabe-Token wurden aus dem Cache bedient, was die Kosten reduziert.",
288407
+ "Tip: For a full token breakdown, run `/stats model`.": "Tipp: F\xFCr eine vollst\xE4ndige Token-Aufschl\xFCsselung f\xFChren Sie `/stats model` aus.",
288408
+ "Model Stats For Nerds": "Modellstatistiken f\xFCr Nerds",
288409
+ "Tool Stats For Nerds": "Werkzeugstatistiken f\xFCr Nerds",
288410
+ Metric: "Metrik",
288411
+ API: "API",
288412
+ Requests: "Anfragen",
288413
+ Errors: "Fehler",
288414
+ "Avg Latency": "Durchschn. Latenz",
288415
+ Tokens: "Token",
288416
+ Total: "Gesamt",
288417
+ Prompt: "Prompt",
288418
+ Cached: "Zwischengespeichert",
288419
+ Thoughts: "Gedanken",
288420
+ Tool: "Werkzeug",
288421
+ Output: "Ausgabe",
288422
+ "No API calls have been made in this session.": "In dieser Sitzung wurden keine API-Aufrufe gemacht.",
288423
+ "Tool Name": "Werkzeugname",
288424
+ Calls: "Aufrufe",
288425
+ "Success Rate": "Erfolgsrate",
288426
+ "Avg Duration": "Durchschn. Dauer",
288427
+ "User Decision Summary": "Benutzerentscheidungs-Zusammenfassung",
288428
+ "Total Reviewed Suggestions:": "Insgesamt \xFCberpr\xFCfter Vorschl\xE4ge:",
288429
+ " \xBB Accepted:": " \xBB Akzeptiert:",
288430
+ " \xBB Rejected:": " \xBB Abgelehnt:",
288431
+ " \xBB Modified:": " \xBB Ge\xE4ndert:",
288432
+ " Overall Agreement Rate:": " Gesamtzustimmungsrate:",
288433
+ "No tool calls have been made in this session.": "In dieser Sitzung wurden keine Werkzeugaufrufe gemacht.",
288434
+ "Session start time is unavailable, cannot calculate stats.": "Sitzungsstartzeit nicht verf\xFCgbar, Statistiken k\xF6nnen nicht berechnet werden.",
288435
+ // ============================================================================
288436
+ // Loading Phrases
288437
+ // ============================================================================
288438
+ "Waiting for user confirmation...": "Warten auf Benutzerbest\xE4tigung...",
288439
+ "(esc to cancel, {{time}})": "(Esc zum Abbrechen, {{time}})",
288440
+ // ============================================================================
288441
+ // Loading Phrases
288442
+ // ============================================================================
288443
+ WITTY_LOADING_PHRASES: [
288444
+ "Auf gut Gl\xFCck!",
288445
+ "Genialit\xE4t wird ausgeliefert...",
288446
+ "Die Serifen werden aufgemalt...",
288447
+ "Durch den Schleimpilz navigieren...",
288448
+ "Die digitalen Geister werden befragt...",
288449
+ "Splines werden retikuliert...",
288450
+ "Die KI-Hamster werden aufgew\xE4rmt...",
288451
+ "Die Zaubermuschel wird befragt...",
288452
+ "Witzige Erwiderung wird generiert...",
288453
+ "Die Algorithmen werden poliert...",
288454
+ "Perfektion braucht Zeit (mein Code auch)...",
288455
+ "Frische Bytes werden gebr\xFCht...",
288456
+ "Elektronen werden gez\xE4hlt...",
288457
+ "Kognitive Prozessoren werden aktiviert...",
288458
+ "Auf Syntaxfehler im Universum wird gepr\xFCft...",
288459
+ "Einen Moment, Humor wird optimiert...",
288460
+ "Pointen werden gemischt...",
288461
+ "Neuronale Netze werden entwirrt...",
288462
+ "Brillanz wird kompiliert...",
288463
+ "wit.exe wird geladen...",
288464
+ "Die Wolke der Weisheit wird beschworen...",
288465
+ "Eine witzige Antwort wird vorbereitet...",
288466
+ "Einen Moment, ich debugge die Realit\xE4t...",
288467
+ "Die Optionen werden verwirrt...",
288468
+ "Kosmische Frequenzen werden eingestellt...",
288469
+ "Eine Antwort wird erstellt, die Ihrer Geduld w\xFCrdig ist...",
288470
+ "Die Einsen und Nullen werden kompiliert...",
288471
+ "Abh\xE4ngigkeiten werden aufgel\xF6st... und existenzielle Krisen...",
288472
+ "Erinnerungen werden defragmentiert... sowohl RAM als auch pers\xF6nliche...",
288473
+ "Das Humor-Modul wird neu gestartet...",
288474
+ "Das Wesentliche wird zwischengespeichert (haupts\xE4chlich Katzen-Memes)...",
288475
+ "F\xFCr l\xE4cherliche Geschwindigkeit wird optimiert",
288476
+ "Bits werden getauscht... sagen Sie es nicht den Bytes...",
288477
+ "Garbage Collection l\xE4uft... bin gleich zur\xFCck...",
288478
+ "Das Internet wird zusammengebaut...",
288479
+ "Kaffee wird in Code umgewandelt...",
288480
+ "Die Syntax der Realit\xE4t wird aktualisiert...",
288481
+ "Die Synapsen werden neu verdrahtet...",
288482
+ "Ein verlegtes Semikolon wird gesucht...",
288483
+ "Die Zahnr\xE4der werden geschmiert...",
288484
+ "Die Server werden vorgeheizt...",
288485
+ "Der Fluxkompensator wird kalibriert...",
288486
+ "Der Unwahrscheinlichkeitsantrieb wird aktiviert...",
288487
+ "Die Macht wird kanalisiert...",
288488
+ "Die Sterne werden f\xFCr optimale Antwort ausgerichtet...",
288489
+ "So sagen wir alle...",
288490
+ "Die n\xE4chste gro\xDFe Idee wird geladen...",
288491
+ "Einen Moment, ich bin in der Zone...",
288492
+ "Bereite mich vor, Sie mit Brillanz zu blenden...",
288493
+ "Einen Augenblick, ich poliere meinen Witz...",
288494
+ "Halten Sie durch, ich erschaffe ein Meisterwerk...",
288495
+ "Einen Moment, ich debugge das Universum...",
288496
+ "Einen Moment, ich richte die Pixel aus...",
288497
+ "Einen Moment, ich optimiere den Humor...",
288498
+ "Einen Moment, ich tune die Algorithmen...",
288499
+ "Warp-Geschwindigkeit aktiviert...",
288500
+ "Mehr Dilithium-Kristalle werden gesucht...",
288501
+ "Keine Panik...",
288502
+ "Dem wei\xDFen Kaninchen wird gefolgt...",
288503
+ "Die Wahrheit ist hier drin... irgendwo...",
288504
+ "Auf die Kassette wird gepustet...",
288505
+ "Ladevorgang... Machen Sie eine Fassrolle!",
288506
+ "Auf den Respawn wird gewartet...",
288507
+ "Der Kessel-Flug wird in weniger als 12 Parsec beendet...",
288508
+ "Der Kuchen ist keine L\xFCge, er l\xE4dt nur noch...",
288509
+ "Am Charaktererstellungsbildschirm wird herumgefummelt...",
288510
+ "Einen Moment, ich suche das richtige Meme...",
288511
+ "'A' wird zum Fortfahren gedr\xFCckt...",
288512
+ "Digitale Katzen werden geh\xFCtet...",
288513
+ "Die Pixel werden poliert...",
288514
+ "Ein passender Ladebildschirm-Witz wird gesucht...",
288515
+ "Ich lenke Sie mit diesem witzigen Spruch ab...",
288516
+ "Fast da... wahrscheinlich...",
288517
+ "Unsere Hamster arbeiten so schnell sie k\xF6nnen...",
288518
+ "Cloudy wird am Kopf gestreichelt...",
288519
+ "Die Katze wird gestreichelt...",
288520
+ "Meinen Chef rickrollen...",
288521
+ "Never gonna give you up, never gonna let you down...",
288522
+ "Auf den Bass wird geschlagen...",
288523
+ "Die Schnozbeeren werden probiert...",
288524
+ "I'm going the distance, I'm going for speed...",
288525
+ "Ist dies das wahre Leben? Ist dies nur Fantasie?...",
288526
+ "Ich habe ein gutes Gef\xFChl dabei...",
288527
+ "Den B\xE4ren wird gestupst...",
288528
+ "Recherche zu den neuesten Memes...",
288529
+ "\xDCberlege, wie ich das witziger machen kann...",
288530
+ "Hmmm... lassen Sie mich nachdenken...",
288531
+ "Wie nennt man einen Fisch ohne Augen? Ein Fsh...",
288532
+ "Warum ging der Computer zur Therapie? Er hatte zu viele Bytes...",
288533
+ "Warum m\xF6gen Programmierer keine Natur? Sie hat zu viele Bugs...",
288534
+ "Warum bevorzugen Programmierer den Dunkelmodus? Weil Licht Bugs anzieht...",
288535
+ "Warum ging der Entwickler pleite? Er hat seinen ganzen Cache aufgebraucht...",
288536
+ "Was kann man mit einem kaputten Bleistift machen? Nichts, er ist sinnlos...",
288537
+ "Perkussive Wartung wird angewendet...",
288538
+ "Die richtige USB-Ausrichtung wird gesucht...",
288539
+ "Es wird sichergestellt, dass der magische Rauch in den Kabeln bleibt...",
288540
+ "Versuche Vim zu beenden...",
288541
+ "Das Hamsterrad wird angeworfen...",
288542
+ "Das ist kein Bug, das ist ein undokumentiertes Feature...",
288543
+ "Engage.",
288544
+ "Ich komme wieder... mit einer Antwort.",
288545
+ "Mein anderer Prozess ist eine TARDIS...",
288546
+ "Mit dem Maschinengeist wird kommuniziert...",
288547
+ "Die Gedanken marinieren lassen...",
288548
+ "Gerade erinnert, wo ich meine Schl\xFCssel hingelegt habe...",
288549
+ "\xDCber die Kugel wird nachgedacht...",
288550
+ "Ich habe Dinge gesehen, die Sie nicht glauben w\xFCrden... wie einen Benutzer, der Lademeldungen liest.",
288551
+ "Nachdenklicher Blick wird initiiert...",
288552
+ "Was ist der Lieblingssnack eines Computers? Mikrochips.",
288553
+ "Warum tragen Java-Entwickler Brillen? Weil sie nicht C#.",
288554
+ "Der Laser wird aufgeladen... pew pew!",
288555
+ "Durch Null wird geteilt... nur Spa\xDF!",
288556
+ "Suche nach einem erwachsenen Aufseh... ich meine, Verarbeitung.",
288557
+ "Es piept und boopt.",
288558
+ "Pufferung... weil auch KIs einen Moment brauchen.",
288559
+ "Quantenteilchen werden f\xFCr schnellere Antwort verschr\xE4nkt...",
288560
+ "Das Chrom wird poliert... an den Algorithmen.",
288561
+ "Sind Sie nicht unterhalten? (Arbeite daran!)",
288562
+ "Die Code-Gremlins werden beschworen... zum Helfen, nat\xFCrlich.",
288563
+ "Warte nur auf das Einwahlton-Ende...",
288564
+ "Das Humor-O-Meter wird neu kalibriert.",
288565
+ "Mein anderer Ladebildschirm ist noch lustiger.",
288566
+ "Ziemlich sicher, dass irgendwo eine Katze \xFCber die Tastatur l\xE4uft...",
288567
+ "Verbessern... Verbessern... L\xE4dt noch.",
288568
+ "Das ist kein Bug, das ist ein Feature... dieses Ladebildschirms.",
288569
+ "Haben Sie versucht, es aus- und wieder einzuschalten? (Den Ladebildschirm, nicht mich.)",
288570
+ "Zus\xE4tzliche Pylonen werden gebaut..."
288571
+ ]
288572
+ };
288573
+ }
288574
+ });
288575
+
287566
288576
  // packages/cli/src/i18n/locales/en.js
287567
288577
  var en_exports = {};
287568
288578
  __export(en_exports, {
@@ -287641,6 +288651,8 @@ var init_en3 = __esm({
287641
288651
  "Available Qwen Code CLI tools:": "Available Qwen Code CLI tools:",
287642
288652
  "No tools available": "No tools available",
287643
288653
  "View or change the approval mode for tool usage": "View or change the approval mode for tool usage",
288654
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}',
288655
+ 'Approval mode set to "{{mode}}"': 'Approval mode set to "{{mode}}"',
287644
288656
  "View or change the language setting": "View or change the language setting",
287645
288657
  "change the theme": "change the theme",
287646
288658
  "Select Theme": "Select Theme",
@@ -288363,7 +289375,6 @@ var init_en3 = __esm({
288363
289375
  "Applying percussive maintenance...",
288364
289376
  "Searching for the correct USB orientation...",
288365
289377
  "Ensuring the magic smoke stays inside the wires...",
288366
- "Rewriting in Rust for no particular reason...",
288367
289378
  "Trying to exit Vim...",
288368
289379
  "Spinning up the hamster wheel...",
288369
289380
  "That's not a bug, it's an undocumented feature...",
@@ -288478,6 +289489,8 @@ var init_ru = __esm({
288478
289489
  "Available Qwen Code CLI tools:": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B Qwen Code CLI:",
288479
289490
  "No tools available": "\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432",
288480
289491
  "View or change the approval mode for tool usage": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0440\u0435\u0436\u0438\u043C\u0430 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432",
289492
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': '\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F "{{arg}}". \u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0440\u0435\u0436\u0438\u043C\u044B: {{modes}}',
289493
+ 'Approval mode set to "{{mode}}"': '\u0420\u0435\u0436\u0438\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u043D\u0430 "{{mode}}"',
288481
289494
  "View or change the language setting": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u044F\u0437\u044B\u043A\u0430",
288482
289495
  "change the theme": "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0442\u0435\u043C\u044B",
288483
289496
  "Select Theme": "\u0412\u044B\u0431\u043E\u0440 \u0442\u0435\u043C\u044B",
@@ -289201,7 +290214,6 @@ var init_ru = __esm({
289201
290214
  "\u041F\u0440\u043E\u0432\u043E\u0436\u0443 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 \u043C\u0435\u0442\u043E\u0434\u043E\u043C \u0442\u044B\u043A\u0430...",
289202
290215
  "\u0418\u0449\u0435\u043C, \u043A\u0430\u043A\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u043E\u0439 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C \u0444\u043B\u0435\u0448\u043A\u0443...",
289203
290216
  "\u0421\u043B\u0435\u0434\u0438\u043C, \u0447\u0442\u043E\u0431\u044B \u0432\u043E\u043B\u0448\u0435\u0431\u043D\u044B\u0439 \u0434\u044B\u043C \u043D\u0435 \u0432\u044B\u0448\u0435\u043B \u0438\u0437 \u043F\u0440\u043E\u0432\u043E\u0434\u043E\u0432...",
289204
- "\u041F\u0435\u0440\u0435\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u043C \u0432\u0441\u0451 \u043D\u0430 Rust \u0431\u0435\u0437 \u043E\u0441\u043E\u0431\u043E\u0439 \u043F\u0440\u0438\u0447\u0438\u043D\u044B...",
289205
290217
  "\u041F\u044B\u0442\u0430\u0435\u043C\u0441\u044F \u0432\u044B\u0439\u0442\u0438 \u0438\u0437 Vim...",
289206
290218
  "\u0420\u0430\u0441\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0435\u043C \u043A\u043E\u043B\u0435\u0441\u043E \u0434\u043B\u044F \u0445\u043E\u043C\u044F\u043A\u0430...",
289207
290219
  "\u042D\u0442\u043E \u043D\u0435 \u0431\u0430\u0433, \u0430 \u0444\u0438\u0447\u0430...",
@@ -289316,6 +290328,8 @@ var init_zh = __esm({
289316
290328
  "Available Qwen Code CLI tools:": "\u53EF\u7528\u7684 Qwen Code CLI \u5DE5\u5177\uFF1A",
289317
290329
  "No tools available": "\u6CA1\u6709\u53EF\u7528\u5DE5\u5177",
289318
290330
  "View or change the approval mode for tool usage": "\u67E5\u770B\u6216\u66F4\u6539\u5DE5\u5177\u4F7F\u7528\u7684\u5BA1\u6279\u6A21\u5F0F",
290331
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': '\u65E0\u6548\u7684\u5BA1\u6279\u6A21\u5F0F "{{arg}}"\u3002\u6709\u6548\u6A21\u5F0F\uFF1A{{modes}}',
290332
+ 'Approval mode set to "{{mode}}"': '\u5BA1\u6279\u6A21\u5F0F\u5DF2\u8BBE\u7F6E\u4E3A "{{mode}}"',
289319
290333
  "View or change the language setting": "\u67E5\u770B\u6216\u66F4\u6539\u8BED\u8A00\u8BBE\u7F6E",
289320
290334
  "change the theme": "\u66F4\u6539\u4E3B\u9898",
289321
290335
  "Select Theme": "\u9009\u62E9\u4E3B\u9898",
@@ -295667,7 +296681,7 @@ var require_client_h12 = __commonJS({
295667
296681
  kResume,
295668
296682
  kHTTPContext
295669
296683
  } = require_symbols6();
295670
- var constants4 = require_constants15();
296684
+ var constants5 = require_constants15();
295671
296685
  var EMPTY_BUF = Buffer.alloc(0);
295672
296686
  var FastBuffer = Buffer[Symbol.species];
295673
296687
  var addListener = util4.addListener;
@@ -295743,7 +296757,7 @@ var require_client_h12 = __commonJS({
295743
296757
  constructor(client, socket, { exports: exports3 }) {
295744
296758
  assert4(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
295745
296759
  this.llhttp = exports3;
295746
- this.ptr = this.llhttp.llhttp_alloc(constants4.TYPE.RESPONSE);
296760
+ this.ptr = this.llhttp.llhttp_alloc(constants5.TYPE.RESPONSE);
295747
296761
  this.client = client;
295748
296762
  this.socket = socket;
295749
296763
  this.timeout = null;
@@ -295838,19 +296852,19 @@ var require_client_h12 = __commonJS({
295838
296852
  currentBufferRef = null;
295839
296853
  }
295840
296854
  const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
295841
- if (ret === constants4.ERROR.PAUSED_UPGRADE) {
296855
+ if (ret === constants5.ERROR.PAUSED_UPGRADE) {
295842
296856
  this.onUpgrade(data.slice(offset));
295843
- } else if (ret === constants4.ERROR.PAUSED) {
296857
+ } else if (ret === constants5.ERROR.PAUSED) {
295844
296858
  this.paused = true;
295845
296859
  socket.unshift(data.slice(offset));
295846
- } else if (ret !== constants4.ERROR.OK) {
296860
+ } else if (ret !== constants5.ERROR.OK) {
295847
296861
  const ptr = llhttp.llhttp_get_error_reason(this.ptr);
295848
296862
  let message = "";
295849
296863
  if (ptr) {
295850
296864
  const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
295851
296865
  message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
295852
296866
  }
295853
- throw new HTTPParserError(message, constants4.ERROR[ret], data.slice(offset));
296867
+ throw new HTTPParserError(message, constants5.ERROR[ret], data.slice(offset));
295854
296868
  }
295855
296869
  } catch (err) {
295856
296870
  util4.destroy(socket, err);
@@ -296025,7 +297039,7 @@ var require_client_h12 = __commonJS({
296025
297039
  socket[kBlocking] = false;
296026
297040
  client[kResume]();
296027
297041
  }
296028
- return pause ? constants4.ERROR.PAUSED : 0;
297042
+ return pause ? constants5.ERROR.PAUSED : 0;
296029
297043
  }
296030
297044
  onBody(buf) {
296031
297045
  const { client, socket, statusCode, maxResponseSize } = this;
@@ -296047,7 +297061,7 @@ var require_client_h12 = __commonJS({
296047
297061
  }
296048
297062
  this.bytesRead += buf.length;
296049
297063
  if (request4.onData(buf) === false) {
296050
- return constants4.ERROR.PAUSED;
297064
+ return constants5.ERROR.PAUSED;
296051
297065
  }
296052
297066
  }
296053
297067
  onMessageComplete() {
@@ -296082,13 +297096,13 @@ var require_client_h12 = __commonJS({
296082
297096
  if (socket[kWriting]) {
296083
297097
  assert4(client[kRunning] === 0);
296084
297098
  util4.destroy(socket, new InformationalError("reset"));
296085
- return constants4.ERROR.PAUSED;
297099
+ return constants5.ERROR.PAUSED;
296086
297100
  } else if (!shouldKeepAlive) {
296087
297101
  util4.destroy(socket, new InformationalError("reset"));
296088
- return constants4.ERROR.PAUSED;
297102
+ return constants5.ERROR.PAUSED;
296089
297103
  } else if (socket[kReset2] && client[kRunning] === 0) {
296090
297104
  util4.destroy(socket, new InformationalError("reset"));
296091
- return constants4.ERROR.PAUSED;
297105
+ return constants5.ERROR.PAUSED;
296092
297106
  } else if (client[kPipelining] == null || client[kPipelining] === 1) {
296093
297107
  setImmediate(() => client[kResume]());
296094
297108
  } else {
@@ -328326,7 +329340,7 @@ var require_src43 = __commonJS({
328326
329340
  var require_polyfills = __commonJS({
328327
329341
  "node_modules/graceful-fs/polyfills.js"(exports2, module2) {
328328
329342
  init_esbuild_shims();
328329
- var constants4 = __require("constants");
329343
+ var constants5 = __require("constants");
328330
329344
  var origCwd = process.cwd;
328331
329345
  var cwd7 = null;
328332
329346
  var platform15 = process.env.GRACEFUL_FS_PLATFORM || process.platform;
@@ -328350,7 +329364,7 @@ var require_polyfills = __commonJS({
328350
329364
  var chdir;
328351
329365
  module2.exports = patch;
328352
329366
  function patch(fs101) {
328353
- if (constants4.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
329367
+ if (constants5.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
328354
329368
  patchLchmod(fs101);
328355
329369
  }
328356
329370
  if (!fs101.lutimes) {
@@ -328454,7 +329468,7 @@ var require_polyfills = __commonJS({
328454
329468
  fs102.lchmod = function(path112, mode, callback) {
328455
329469
  fs102.open(
328456
329470
  path112,
328457
- constants4.O_WRONLY | constants4.O_SYMLINK,
329471
+ constants5.O_WRONLY | constants5.O_SYMLINK,
328458
329472
  mode,
328459
329473
  function(err, fd) {
328460
329474
  if (err) {
@@ -328470,7 +329484,7 @@ var require_polyfills = __commonJS({
328470
329484
  );
328471
329485
  };
328472
329486
  fs102.lchmodSync = function(path112, mode) {
328473
- var fd = fs102.openSync(path112, constants4.O_WRONLY | constants4.O_SYMLINK, mode);
329487
+ var fd = fs102.openSync(path112, constants5.O_WRONLY | constants5.O_SYMLINK, mode);
328474
329488
  var threw = true;
328475
329489
  var ret;
328476
329490
  try {
@@ -328491,9 +329505,9 @@ var require_polyfills = __commonJS({
328491
329505
  }
328492
329506
  __name(patchLchmod, "patchLchmod");
328493
329507
  function patchLutimes(fs102) {
328494
- if (constants4.hasOwnProperty("O_SYMLINK") && fs102.futimes) {
329508
+ if (constants5.hasOwnProperty("O_SYMLINK") && fs102.futimes) {
328495
329509
  fs102.lutimes = function(path112, at2, mt2, cb) {
328496
- fs102.open(path112, constants4.O_SYMLINK, function(er2, fd) {
329510
+ fs102.open(path112, constants5.O_SYMLINK, function(er2, fd) {
328497
329511
  if (er2) {
328498
329512
  if (cb) cb(er2);
328499
329513
  return;
@@ -328506,7 +329520,7 @@ var require_polyfills = __commonJS({
328506
329520
  });
328507
329521
  };
328508
329522
  fs102.lutimesSync = function(path112, at2, mt2) {
328509
- var fd = fs102.openSync(path112, constants4.O_SYMLINK);
329523
+ var fd = fs102.openSync(path112, constants5.O_SYMLINK);
328510
329524
  var ret;
328511
329525
  var threw = true;
328512
329526
  try {
@@ -329902,7 +330916,7 @@ var require_rc = __commonJS({
329902
330916
  var require_polyfills2 = __commonJS({
329903
330917
  "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs/polyfills.js"(exports2, module2) {
329904
330918
  init_esbuild_shims();
329905
- var constants4 = __require("constants");
330919
+ var constants5 = __require("constants");
329906
330920
  var origCwd = process.cwd;
329907
330921
  var cwd7 = null;
329908
330922
  var platform15 = process.env.GRACEFUL_FS_PLATFORM || process.platform;
@@ -329926,7 +330940,7 @@ var require_polyfills2 = __commonJS({
329926
330940
  var chdir;
329927
330941
  module2.exports = patch;
329928
330942
  function patch(fs101) {
329929
- if (constants4.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
330943
+ if (constants5.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
329930
330944
  patchLchmod(fs101);
329931
330945
  }
329932
330946
  if (!fs101.lutimes) {
@@ -330030,7 +331044,7 @@ var require_polyfills2 = __commonJS({
330030
331044
  fs102.lchmod = function(path112, mode, callback) {
330031
331045
  fs102.open(
330032
331046
  path112,
330033
- constants4.O_WRONLY | constants4.O_SYMLINK,
331047
+ constants5.O_WRONLY | constants5.O_SYMLINK,
330034
331048
  mode,
330035
331049
  function(err, fd) {
330036
331050
  if (err) {
@@ -330046,7 +331060,7 @@ var require_polyfills2 = __commonJS({
330046
331060
  );
330047
331061
  };
330048
331062
  fs102.lchmodSync = function(path112, mode) {
330049
- var fd = fs102.openSync(path112, constants4.O_WRONLY | constants4.O_SYMLINK, mode);
331063
+ var fd = fs102.openSync(path112, constants5.O_WRONLY | constants5.O_SYMLINK, mode);
330050
331064
  var threw = true;
330051
331065
  var ret;
330052
331066
  try {
@@ -330067,9 +331081,9 @@ var require_polyfills2 = __commonJS({
330067
331081
  }
330068
331082
  __name(patchLchmod, "patchLchmod");
330069
331083
  function patchLutimes(fs102) {
330070
- if (constants4.hasOwnProperty("O_SYMLINK") && fs102.futimes) {
331084
+ if (constants5.hasOwnProperty("O_SYMLINK") && fs102.futimes) {
330071
331085
  fs102.lutimes = function(path112, at2, mt2, cb) {
330072
- fs102.open(path112, constants4.O_SYMLINK, function(er2, fd) {
331086
+ fs102.open(path112, constants5.O_SYMLINK, function(er2, fd) {
330073
331087
  if (er2) {
330074
331088
  if (cb) cb(er2);
330075
331089
  return;
@@ -330082,7 +331096,7 @@ var require_polyfills2 = __commonJS({
330082
331096
  });
330083
331097
  };
330084
331098
  fs102.lutimesSync = function(path112, at2, mt2) {
330085
- var fd = fs102.openSync(path112, constants4.O_SYMLINK);
331099
+ var fd = fs102.openSync(path112, constants5.O_SYMLINK);
330086
331100
  var ret;
330087
331101
  var threw = true;
330088
331102
  try {
@@ -333456,7 +334470,7 @@ var require_semver3 = __commonJS({
333456
334470
  "use strict";
333457
334471
  init_esbuild_shims();
333458
334472
  var internalRe = require_re();
333459
- var constants4 = require_constants13();
334473
+ var constants5 = require_constants13();
333460
334474
  var SemVer = require_semver2();
333461
334475
  var identifiers = require_identifiers();
333462
334476
  var parse13 = require_parse8();
@@ -333538,8 +334552,8 @@ var require_semver3 = __commonJS({
333538
334552
  re: internalRe.re,
333539
334553
  src: internalRe.src,
333540
334554
  tokens: internalRe.t,
333541
- SEMVER_SPEC_VERSION: constants4.SEMVER_SPEC_VERSION,
333542
- RELEASE_TYPES: constants4.RELEASE_TYPES,
334555
+ SEMVER_SPEC_VERSION: constants5.SEMVER_SPEC_VERSION,
334556
+ RELEASE_TYPES: constants5.RELEASE_TYPES,
333543
334557
  compareIdentifiers: identifiers.compareIdentifiers,
333544
334558
  rcompareIdentifiers: identifiers.rcompareIdentifiers
333545
334559
  };
@@ -336029,7 +337043,7 @@ var Wrap = /* @__PURE__ */ function(Wrap2) {
336029
337043
  Wrap2[Wrap2["WrapReverse"] = 2] = "WrapReverse";
336030
337044
  return Wrap2;
336031
337045
  }({});
336032
- var constants2 = {
337046
+ var constants3 = {
336033
337047
  ALIGN_AUTO: Align.Auto,
336034
337048
  ALIGN_FLEX_START: Align.FlexStart,
336035
337049
  ALIGN_CENTER: Align.Center,
@@ -336103,7 +337117,7 @@ var constants2 = {
336103
337117
  WRAP_WRAP: Wrap.Wrap,
336104
337118
  WRAP_WRAP_REVERSE: Wrap.WrapReverse
336105
337119
  };
336106
- var YGEnums_default = constants2;
337120
+ var YGEnums_default = constants3;
336107
337121
 
336108
337122
  // node_modules/yoga-layout/dist/src/wrapAssembly.js
336109
337123
  function wrapAssembly(lib) {
@@ -341825,7 +342839,8 @@ var SETTINGS_SCHEMA = {
341825
342839
  { value: "auto", label: "Auto (detect from system)" },
341826
342840
  { value: "en", label: "English" },
341827
342841
  { value: "zh", label: "\u4E2D\u6587 (Chinese)" },
341828
- { value: "ru", label: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439 (Russian)" }
342842
+ { value: "ru", label: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439 (Russian)" },
342843
+ { value: "de", label: "Deutsch (German)" }
341829
342844
  ]
341830
342845
  },
341831
342846
  terminalBell: {
@@ -343045,7 +344060,18 @@ function handleError(error2, config2, customErrorCode) {
343045
344060
  }
343046
344061
  }
343047
344062
  __name(handleError, "handleError");
343048
- function handleToolError(toolName, toolError, config2, _errorCode, resultDisplay) {
344063
+ function handleToolError(toolName, toolError, config2, errorCode, resultDisplay) {
344064
+ const isExecutionDenied = errorCode === ToolErrorType.EXECUTION_DENIED;
344065
+ const isNonInteractive = !config2.isInteractive();
344066
+ const isTextMode = config2.getOutputFormat() === OutputFormat.TEXT;
344067
+ if (isExecutionDenied && isNonInteractive && isTextMode) {
344068
+ const warningMessage = `Warning: Tool "${toolName}" requires user approval but cannot execute in non-interactive mode.
344069
+ To enable automatic tool execution, use the -y flag (YOLO mode):
344070
+ Example: qwen -p 'your prompt' -y
344071
+
344072
+ `;
344073
+ process.stderr.write(warningMessage);
344074
+ }
343049
344075
  if (config2.getDebugMode()) {
343050
344076
  console.error(
343051
344077
  `Error executing tool ${toolName}: ${resultDisplay || toolError.message}`
@@ -343747,7 +344773,7 @@ import * as realZlib2 from "zlib";
343747
344773
  init_esbuild_shims();
343748
344774
  import realZlib from "zlib";
343749
344775
  var realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 };
343750
- var constants3 = Object.freeze(Object.assign(/* @__PURE__ */ Object.create(null), {
344776
+ var constants4 = Object.freeze(Object.assign(/* @__PURE__ */ Object.create(null), {
343751
344777
  Z_NO_FLUSH: 0,
343752
344778
  Z_PARTIAL_FLUSH: 1,
343753
344779
  Z_SYNC_FLUSH: 2,
@@ -344039,9 +345065,9 @@ var Zlib = class extends ZlibBase {
344039
345065
  #strategy;
344040
345066
  constructor(opts, mode) {
344041
345067
  opts = opts || {};
344042
- opts.flush = opts.flush || constants3.Z_NO_FLUSH;
344043
- opts.finishFlush = opts.finishFlush || constants3.Z_FINISH;
344044
- opts.fullFlushFlag = constants3.Z_FULL_FLUSH;
345068
+ opts.flush = opts.flush || constants4.Z_NO_FLUSH;
345069
+ opts.finishFlush = opts.finishFlush || constants4.Z_FINISH;
345070
+ opts.fullFlushFlag = constants4.Z_FULL_FLUSH;
344045
345071
  super(opts, mode);
344046
345072
  this.#level = opts.level;
344047
345073
  this.#strategy = opts.strategy;
@@ -344054,7 +345080,7 @@ var Zlib = class extends ZlibBase {
344054
345080
  if (!this.handle.params)
344055
345081
  throw new Error("not supported in this implementation");
344056
345082
  if (this.#level !== level || this.#strategy !== strategy) {
344057
- this.flush(constants3.Z_SYNC_FLUSH);
345083
+ this.flush(constants4.Z_SYNC_FLUSH);
344058
345084
  assert2(this.handle, "zlib binding closed");
344059
345085
  const origFlush = this.handle.flush;
344060
345086
  this.handle.flush = (flushFlag, cb) => {
@@ -344109,9 +345135,9 @@ var Brotli = class extends ZlibBase {
344109
345135
  }
344110
345136
  constructor(opts, mode) {
344111
345137
  opts = opts || {};
344112
- opts.flush = opts.flush || constants3.BROTLI_OPERATION_PROCESS;
344113
- opts.finishFlush = opts.finishFlush || constants3.BROTLI_OPERATION_FINISH;
344114
- opts.fullFlushFlag = constants3.BROTLI_OPERATION_FLUSH;
345138
+ opts.flush = opts.flush || constants4.BROTLI_OPERATION_PROCESS;
345139
+ opts.finishFlush = opts.finishFlush || constants4.BROTLI_OPERATION_FINISH;
345140
+ opts.fullFlushFlag = constants4.BROTLI_OPERATION_FLUSH;
344115
345141
  super(opts, mode);
344116
345142
  }
344117
345143
  };
@@ -344137,9 +345163,9 @@ var Zstd = class extends ZlibBase {
344137
345163
  }
344138
345164
  constructor(opts, mode) {
344139
345165
  opts = opts || {};
344140
- opts.flush = opts.flush || constants3.ZSTD_e_continue;
344141
- opts.finishFlush = opts.finishFlush || constants3.ZSTD_e_end;
344142
- opts.fullFlushFlag = constants3.ZSTD_e_flush;
345166
+ opts.flush = opts.flush || constants4.ZSTD_e_continue;
345167
+ opts.finishFlush = opts.finishFlush || constants4.ZSTD_e_end;
345168
+ opts.fullFlushFlag = constants4.ZSTD_e_flush;
344143
345169
  super(opts, mode);
344144
345170
  }
344145
345171
  };
@@ -349331,6 +350357,7 @@ function getMergeStrategyForPath(path112) {
349331
350357
  }
349332
350358
  __name(getMergeStrategyForPath, "getMergeStrategyForPath");
349333
350359
  var SETTINGS_DIRECTORY_NAME2 = ".qwen";
350360
+ var LEGACY_SETTINGS_FILENAME = "config.json";
349334
350361
  var USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
349335
350362
  var USER_SETTINGS_DIR2 = path72.dirname(USER_SETTINGS_PATH);
349336
350363
  var DEFAULT_EXCLUDED_ENV_VARS = ["DEBUG", "DEBUG_MODE"];
@@ -349412,6 +350439,10 @@ var MIGRATION_MAP = {
349412
350439
  vlmSwitchMode: "experimental.vlmSwitchMode",
349413
350440
  visionModelPreview: "experimental.visionModelPreview"
349414
350441
  };
350442
+ function isTermux2() {
350443
+ return process25.platform === "android" || !!process25.env["TERMUX_VERSION"] || !!(process25.env["PREFIX"] && process25.env["PREFIX"].includes("com.termux"));
350444
+ }
350445
+ __name(isTermux2, "isTermux");
349415
350446
  function getSystemSettingsPath() {
349416
350447
  if (process25.env["QWEN_CODE_SYSTEM_SETTINGS_PATH"]) {
349417
350448
  return process25.env["QWEN_CODE_SYSTEM_SETTINGS_PATH"];
@@ -349731,6 +350762,11 @@ function loadSettings(workspaceDir = process25.cwd()) {
349731
350762
  const systemSettingsPath = getSystemSettingsPath();
349732
350763
  const systemDefaultsPath = getSystemDefaultsPath();
349733
350764
  const migratedInMemorScopes = /* @__PURE__ */ new Set();
350765
+ const legacyUserSettingsPath = path72.join(
350766
+ homedir13(),
350767
+ SETTINGS_DIRECTORY_NAME2,
350768
+ LEGACY_SETTINGS_FILENAME
350769
+ );
349734
350770
  const resolvedWorkspaceDir = path72.resolve(workspaceDir);
349735
350771
  const resolvedHomeDir = path72.resolve(homedir13());
349736
350772
  let realWorkspaceDir = resolvedWorkspaceDir;
@@ -349742,15 +350778,29 @@ function loadSettings(workspaceDir = process25.cwd()) {
349742
350778
  const workspaceSettingsPath = new Storage(
349743
350779
  workspaceDir
349744
350780
  ).getWorkspaceSettingsPath();
349745
- const loadAndMigrate = /* @__PURE__ */ __name((filePath, scope) => {
350781
+ const legacyWorkspaceSettingsPath = path72.join(
350782
+ workspaceDir,
350783
+ SETTINGS_DIRECTORY_NAME2,
350784
+ LEGACY_SETTINGS_FILENAME
350785
+ );
350786
+ let warnedLegacySettings = false;
350787
+ const loadAndMigrate = /* @__PURE__ */ __name((filePath, scope, legacyFilePath) => {
349746
350788
  try {
349747
- if (fs70.existsSync(filePath)) {
349748
- const content = fs70.readFileSync(filePath, "utf-8");
350789
+ let sourcePath = filePath;
350790
+ let usingLegacy = false;
350791
+ if (!fs70.existsSync(sourcePath) && legacyFilePath) {
350792
+ if (fs70.existsSync(legacyFilePath)) {
350793
+ sourcePath = legacyFilePath;
350794
+ usingLegacy = true;
350795
+ }
350796
+ }
350797
+ if (fs70.existsSync(sourcePath)) {
350798
+ const content = fs70.readFileSync(sourcePath, "utf-8");
349749
350799
  const rawSettings = JSON.parse((0, import_strip_json_comments2.default)(content));
349750
350800
  if (typeof rawSettings !== "object" || rawSettings === null || Array.isArray(rawSettings)) {
349751
350801
  settingsErrors.push({
349752
350802
  message: "Settings file is not a valid JSON object.",
349753
- path: filePath
350803
+ path: sourcePath
349754
350804
  });
349755
350805
  return { settings: {} };
349756
350806
  }
@@ -349760,12 +350810,20 @@ function loadSettings(workspaceDir = process25.cwd()) {
349760
350810
  if (migratedSettings) {
349761
350811
  if (MIGRATE_V2_OVERWRITE) {
349762
350812
  try {
349763
- fs70.renameSync(filePath, `${filePath}.orig`);
349764
- fs70.writeFileSync(
349765
- filePath,
349766
- JSON.stringify(migratedSettings, null, 2),
349767
- "utf-8"
349768
- );
350813
+ if (!usingLegacy) {
350814
+ fs70.renameSync(sourcePath, `${sourcePath}.orig`);
350815
+ fs70.writeFileSync(
350816
+ sourcePath,
350817
+ JSON.stringify(migratedSettings, null, 2),
350818
+ "utf-8"
350819
+ );
350820
+ } else {
350821
+ fs70.writeFileSync(
350822
+ filePath,
350823
+ JSON.stringify(migratedSettings, null, 2),
350824
+ "utf-8"
350825
+ );
350826
+ }
349769
350827
  } catch (e4) {
349770
350828
  console.error(
349771
350829
  `Error migrating settings file on disk: ${getErrorMessage(
@@ -349782,8 +350840,9 @@ function loadSettings(workspaceDir = process25.cwd()) {
349782
350840
  settingsObject[SETTINGS_VERSION_KEY] = SETTINGS_VERSION;
349783
350841
  if (MIGRATE_V2_OVERWRITE) {
349784
350842
  try {
350843
+ const targetPath = usingLegacy && sourcePath !== filePath ? filePath : sourcePath;
349785
350844
  fs70.writeFileSync(
349786
- filePath,
350845
+ targetPath,
349787
350846
  JSON.stringify(settingsObject, null, 2),
349788
350847
  "utf-8"
349789
350848
  );
@@ -349794,6 +350853,27 @@ function loadSettings(workspaceDir = process25.cwd()) {
349794
350853
  }
349795
350854
  }
349796
350855
  }
350856
+ if (usingLegacy && !warnedLegacySettings) {
350857
+ console.warn(
350858
+ `Loaded legacy settings from ${sourcePath}. Please migrate to ${filePath}.`
350859
+ );
350860
+ warnedLegacySettings = true;
350861
+ }
350862
+ if (usingLegacy && MIGRATE_V2_OVERWRITE) {
350863
+ try {
350864
+ fs70.writeFileSync(
350865
+ filePath,
350866
+ JSON.stringify(settingsObject, null, 2),
350867
+ "utf-8"
350868
+ );
350869
+ } catch (e4) {
350870
+ console.error(
350871
+ `Error writing migrated settings to ${filePath}: ${getErrorMessage(
350872
+ e4
350873
+ )}`
350874
+ );
350875
+ }
350876
+ }
349797
350877
  return { settings: settingsObject, rawJson: content };
349798
350878
  }
349799
350879
  } catch (error2) {
@@ -349809,7 +350889,11 @@ function loadSettings(workspaceDir = process25.cwd()) {
349809
350889
  systemDefaultsPath,
349810
350890
  "SystemDefaults" /* SystemDefaults */
349811
350891
  );
349812
- const userResult = loadAndMigrate(USER_SETTINGS_PATH, "User" /* User */);
350892
+ const userResult = loadAndMigrate(
350893
+ USER_SETTINGS_PATH,
350894
+ "User" /* User */,
350895
+ legacyUserSettingsPath
350896
+ );
349813
350897
  let workspaceResult = {
349814
350898
  settings: {},
349815
350899
  rawJson: void 0
@@ -349817,7 +350901,8 @@ function loadSettings(workspaceDir = process25.cwd()) {
349817
350901
  if (realWorkspaceDir !== realHomeDir) {
349818
350902
  workspaceResult = loadAndMigrate(
349819
350903
  workspaceSettingsPath,
349820
- "Workspace" /* Workspace */
350904
+ "Workspace" /* Workspace */,
350905
+ legacyWorkspaceSettingsPath
349821
350906
  );
349822
350907
  }
349823
350908
  const systemOriginalSettings = structuredClone(systemResult.settings);
@@ -349830,6 +350915,39 @@ function loadSettings(workspaceDir = process25.cwd()) {
349830
350915
  systemDefaultSettings = resolveEnvVarsInObject(systemDefaultsResult.settings);
349831
350916
  userSettings = resolveEnvVarsInObject(userResult.settings);
349832
350917
  workspaceSettings = resolveEnvVarsInObject(workspaceResult.settings);
350918
+ if (isTermux2()) {
350919
+ const hasHideBannerSetting = [
350920
+ systemSettings.ui?.hideBanner,
350921
+ systemDefaultSettings.ui?.hideBanner,
350922
+ userSettings.ui?.hideBanner,
350923
+ workspaceSettings.ui?.hideBanner
350924
+ ].some((value) => typeof value === "boolean");
350925
+ if (!hasHideBannerSetting) {
350926
+ systemDefaultSettings = {
350927
+ ...systemDefaultSettings,
350928
+ ui: {
350929
+ ...systemDefaultSettings.ui ?? {},
350930
+ hideBanner: true
350931
+ }
350932
+ };
350933
+ }
350934
+ const hasUseRipgrepSetting = [
350935
+ systemSettings.tools?.useRipgrep,
350936
+ systemDefaultSettings.tools?.useRipgrep,
350937
+ userSettings.tools?.useRipgrep,
350938
+ workspaceSettings.tools?.useRipgrep
350939
+ ].some((value) => typeof value === "boolean");
350940
+ if (!hasUseRipgrepSetting) {
350941
+ systemDefaultSettings = {
350942
+ ...systemDefaultSettings,
350943
+ tools: {
350944
+ ...systemDefaultSettings.tools ?? {},
350945
+ useRipgrep: false,
350946
+ useBuiltinRipgrep: false
350947
+ }
350948
+ };
350949
+ }
350950
+ }
349833
350951
  if (userSettings.ui?.theme === "VS") {
349834
350952
  userSettings.ui.theme = DefaultLight.name;
349835
350953
  } else if (userSettings.ui?.theme === "VS2015") {
@@ -355880,7 +356998,7 @@ __name(getPackageJson, "getPackageJson");
355880
356998
  // packages/cli/src/utils/version.ts
355881
356999
  async function getCliVersion() {
355882
357000
  const pkgJson = await getPackageJson();
355883
- return "0.6.1-termux";
357001
+ return "0.6.3-termux";
355884
357002
  }
355885
357003
  __name(getCliVersion, "getCliVersion");
355886
357004
 
@@ -359978,9 +361096,13 @@ async function parseArguments(settings) {
359978
361096
  type: "boolean",
359979
361097
  description: "Enables checkpointing of file edits",
359980
361098
  default: false
359981
- }).option("experimental-acp", {
361099
+ }).option("acp", {
359982
361100
  type: "boolean",
359983
361101
  description: "Starts the agent in ACP mode"
361102
+ }).option("experimental-acp", {
361103
+ type: "boolean",
361104
+ description: "Starts the agent in ACP mode (deprecated, use --acp instead)",
361105
+ hidden: true
359984
361106
  }).option("experimental-skills", {
359985
361107
  type: "boolean",
359986
361108
  description: "Enable experimental Skills feature",
@@ -360176,7 +361298,15 @@ async function parseArguments(settings) {
360176
361298
  }
360177
361299
  }
360178
361300
  result["query"] = q2 || void 0;
360179
- if (result["experimentalAcp"] && !result["channel"]) {
361301
+ if (result["experimentalAcp"]) {
361302
+ console.warn(
361303
+ "\x1B[33m\u26A0 Warning: --experimental-acp is deprecated and will be removed in a future release. Please use --acp instead.\x1B[0m"
361304
+ );
361305
+ if (!result["acp"]) {
361306
+ result["acp"] = true;
361307
+ }
361308
+ }
361309
+ if ((result["acp"] || result["experimentalAcp"]) && !result["channel"]) {
360180
361310
  result["channel"] = "ACP";
360181
361311
  }
360182
361312
  return result;
@@ -360316,14 +361446,36 @@ async function loadCliConfig(settings, extensions, extensionEnablementManager, a
360316
361446
  interactive = false;
360317
361447
  }
360318
361448
  const extraExcludes = [];
361449
+ const resolvedCoreTools = argv.coreTools || settings.tools?.core || [];
361450
+ const resolvedAllowedTools = argv.allowedTools || settings.tools?.allowed || [];
361451
+ const isExplicitlyEnabled = /* @__PURE__ */ __name((toolName) => {
361452
+ if (resolvedCoreTools.length > 0) {
361453
+ if (isToolEnabled(toolName, resolvedCoreTools, [])) {
361454
+ return true;
361455
+ }
361456
+ }
361457
+ if (resolvedAllowedTools.length > 0) {
361458
+ if (isToolEnabled(toolName, resolvedAllowedTools, [])) {
361459
+ return true;
361460
+ }
361461
+ }
361462
+ return false;
361463
+ }, "isExplicitlyEnabled");
361464
+ const excludeUnlessExplicit = /* @__PURE__ */ __name((toolName) => {
361465
+ if (!isExplicitlyEnabled(toolName)) {
361466
+ extraExcludes.push(toolName);
361467
+ }
361468
+ }, "excludeUnlessExplicit");
360319
361469
  if (!interactive && !argv.experimentalAcp && inputFormat !== InputFormat.STREAM_JSON) {
360320
361470
  switch (approvalMode) {
360321
361471
  case ApprovalMode.PLAN:
360322
361472
  case ApprovalMode.DEFAULT:
360323
- extraExcludes.push(ShellTool.Name, EditTool.Name, WriteFileTool.Name);
361473
+ excludeUnlessExplicit(ShellTool.Name);
361474
+ excludeUnlessExplicit(EditTool.Name);
361475
+ excludeUnlessExplicit(WriteFileTool.Name);
360324
361476
  break;
360325
361477
  case ApprovalMode.AUTO_EDIT:
360326
- extraExcludes.push(ShellTool.Name);
361478
+ excludeUnlessExplicit(ShellTool.Name);
360327
361479
  break;
360328
361480
  case ApprovalMode.YOLO:
360329
361481
  break;
@@ -360427,7 +361579,7 @@ async function loadCliConfig(settings, extensions, extensionEnablementManager, a
360427
361579
  extensionContextFilePaths,
360428
361580
  sessionTokenLimit: settings.model?.sessionTokenLimit ?? -1,
360429
361581
  maxSessionTurns: argv.maxSessionTurns ?? settings.model?.maxSessionTurns ?? -1,
360430
- experimentalZedIntegration: argv.experimentalAcp || false,
361582
+ experimentalZedIntegration: argv.acp || argv.experimentalAcp || false,
360431
361583
  experimentalSkills: argv.experimentalSkills || false,
360432
361584
  listExtensions: argv.listExtensions || false,
360433
361585
  extensions: allExtensions,
@@ -363017,6 +364169,7 @@ __name(getLanguageNameFromLocale, "getLanguageNameFromLocale");
363017
364169
 
363018
364170
  // import("./locales/**/*.js") in packages/cli/src/i18n/index.ts
363019
364171
  var globImport_locales_js = __glob({
364172
+ "./locales/de.js": () => Promise.resolve().then(() => (init_de(), de_exports)),
363020
364173
  "./locales/en.js": () => Promise.resolve().then(() => (init_en3(), en_exports)),
363021
364174
  "./locales/ru.js": () => Promise.resolve().then(() => (init_ru(), ru_exports)),
363022
364175
  "./locales/zh.js": () => Promise.resolve().then(() => (init_zh(), zh_exports))
@@ -363928,7 +365081,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
363928
365081
 
363929
365082
  // packages/cli/src/generated/git-commit.ts
363930
365083
  init_esbuild_shims();
363931
- var GIT_COMMIT_INFO2 = "685fde88";
365084
+ var GIT_COMMIT_INFO2 = "168aa3f6";
363932
365085
 
363933
365086
  // packages/cli/src/utils/systemInfo.ts
363934
365087
  async function getNpmVersion() {
@@ -364062,16 +365215,56 @@ var agentsCommand = {
364062
365215
 
364063
365216
  // packages/cli/src/ui/commands/approvalModeCommand.ts
364064
365217
  init_esbuild_shims();
365218
+ function parseApprovalModeArg(arg) {
365219
+ const trimmed2 = arg.trim().toLowerCase();
365220
+ if (!trimmed2) {
365221
+ return void 0;
365222
+ }
365223
+ return APPROVAL_MODES.find((mode) => mode.toLowerCase() === trimmed2);
365224
+ }
365225
+ __name(parseApprovalModeArg, "parseApprovalModeArg");
364065
365226
  var approvalModeCommand = {
364066
365227
  name: "approval-mode",
364067
365228
  get description() {
364068
365229
  return t4("View or change the approval mode for tool usage");
364069
365230
  },
364070
365231
  kind: "built-in" /* BUILT_IN */,
364071
- action: /* @__PURE__ */ __name(async (_context, _args) => ({
364072
- type: "dialog",
364073
- dialog: "approval-mode"
364074
- }), "action")
365232
+ action: /* @__PURE__ */ __name(async (context2, args) => {
365233
+ const mode = parseApprovalModeArg(args);
365234
+ if (!args.trim()) {
365235
+ return {
365236
+ type: "dialog",
365237
+ dialog: "approval-mode"
365238
+ };
365239
+ }
365240
+ if (!mode) {
365241
+ return {
365242
+ type: "message",
365243
+ messageType: "error",
365244
+ content: t4('Invalid approval mode "{{arg}}". Valid modes: {{modes}}', {
365245
+ arg: args.trim(),
365246
+ modes: APPROVAL_MODES.join(", ")
365247
+ })
365248
+ };
365249
+ }
365250
+ const { config: config2 } = context2.services;
365251
+ if (config2) {
365252
+ try {
365253
+ config2.setApprovalMode(mode);
365254
+ } catch (e4) {
365255
+ return {
365256
+ type: "message",
365257
+ messageType: "error",
365258
+ content: e4.message
365259
+ };
365260
+ }
365261
+ }
365262
+ return {
365263
+ type: "message",
365264
+ messageType: "info",
365265
+ content: t4('Approval mode set to "{{mode}}"', { mode })
365266
+ };
365267
+ }, "action")
364075
365268
  };
364076
365269
 
364077
365270
  // packages/cli/src/ui/commands/authCommand.ts
@@ -364997,11 +366190,23 @@ var ideCommand = /* @__PURE__ */ __name(async () => {
364997
366190
  kind: "built-in" /* BUILT_IN */,
364998
366191
  action: /* @__PURE__ */ __name(async (context2) => {
364999
366192
  const installer = getIdeInstaller(currentIDE);
366193
+ const isSandBox = !!process.env["SANDBOX"];
366194
+ if (isSandBox) {
366195
+ context2.ui.addItem(
366196
+ {
366197
+ type: "info",
366198
+ text: `IDE integration needs to be installed on the host. If you have already installed it, you can directly connect the ide`
366199
+ },
366200
+ Date.now()
366201
+ );
366202
+ return;
366203
+ }
365000
366204
  if (!installer) {
366205
+ const ideName = ideClient.getDetectedIdeDisplayName();
365001
366206
  context2.ui.addItem(
365002
366207
  {
365003
366208
  type: "error",
365004
- text: `No installer is available for ${ideClient.getDetectedIdeDisplayName()}. Please install the '${QWEN_CODE_COMPANION_EXTENSION_NAME}' extension manually from the marketplace.`
366209
+ text: `Automatic installation is not supported for ${ideName}. Please install the '${QWEN_CODE_COMPANION_EXTENSION_NAME}' extension manually from the marketplace.`
365005
366210
  },
365006
366211
  Date.now()
365007
366212
  );
@@ -367332,15 +368537,28 @@ var ShellProcessor = class {
367332
368537
  const command2 = injection.resolvedCommand;
367333
368538
  if (!command2) continue;
367334
368539
  const { allAllowed, disallowedCommands, blockReason, isHardDenial } = checkCommandPermissions(command2, config2, sessionShellAllowlist);
368540
+ const allowedTools = config2.getAllowedTools() || [];
368541
+ const invocation = {
368542
+ params: { command: command2 }
368543
+ };
368544
+ const isAllowedBySettings = doesToolInvocationMatch(
368545
+ "run_shell_command",
368546
+ invocation,
368547
+ allowedTools
368548
+ );
367335
368549
  if (!allAllowed) {
367336
368550
  if (isHardDenial) {
367337
368551
  throw new Error(
367338
368552
  `${this.commandName} cannot be run. Blocked command: "${command2}". Reason: ${blockReason || "Blocked by configuration."}`
367339
368553
  );
367340
368554
  }
367341
- if (config2.getApprovalMode() !== ApprovalMode.YOLO) {
367342
- disallowedCommands.forEach((uc) => commandsToConfirm.add(uc));
368555
+ if (isAllowedBySettings) {
368556
+ continue;
367343
368557
  }
368558
+ if (config2.getApprovalMode() === ApprovalMode.YOLO) {
368559
+ continue;
368560
+ }
368561
+ disallowedCommands.forEach((uc) => commandsToConfirm.add(uc));
367344
368562
  }
367345
368563
  }
367346
368564
  if (commandsToConfirm.size > 0) {
@@ -368677,7 +369895,14 @@ ${event.value}`, null);
368677
369895
  */
368678
369896
  appendThinking(state, subject, description, parentToolUseId) {
368679
369897
  const actualParentToolUseId = parentToolUseId ?? null;
368680
- const fragment = [subject?.trim(), description?.trim()].filter((value) => value && value.length > 0).join(": ");
369898
+ const parts = [];
369899
+ if (subject && subject.length > 0) {
369900
+ parts.push(subject);
369901
+ }
369902
+ if (description && description.length > 0) {
369903
+ parts.push(description);
369904
+ }
369905
+ const fragment = parts.join(": ");
368681
369906
  if (!fragment) {
368682
369907
  return;
368683
369908
  }
@@ -369778,6 +371003,7 @@ async function runNonInteractive(config2, settings, input, prompt_id, options2 =
369778
371003
  );
369779
371004
  process.stderr.write(`${errorText}
369780
371005
  `);
371006
+ throw new Error(errorText);
369781
371007
  }
369782
371008
  }
369783
371009
  }
@@ -369798,15 +371024,23 @@ async function runNonInteractive(config2, settings, input, prompt_id, options2 =
369798
371024
  adapter
369799
371025
  ) : void 0;
369800
371026
  const taskToolProgressHandler = taskToolProgress?.handler;
371027
+ const nonTaskOutputHandler = !isTaskTool && !adapter ? (callId, outputChunk) => {
371028
+ if (typeof outputChunk === "string") {
371029
+ process.stdout.write(outputChunk);
371030
+ } else if (outputChunk && typeof outputChunk === "object" && "ansiOutput" in outputChunk) {
371031
+ process.stdout.write(String(outputChunk.ansiOutput));
371032
+ }
371033
+ } : void 0;
371034
+ const outputUpdateHandler = taskToolProgressHandler || nonTaskOutputHandler;
369801
371035
  const toolResponse = await executeToolCall(
369802
371036
  config2,
369803
371037
  finalRequestInfo,
369804
371038
  abortController.signal,
369805
- isTaskTool && taskToolProgressHandler ? {
369806
- outputUpdateHandler: taskToolProgressHandler,
369807
- onToolCallsUpdate: toolCallUpdateCallback
369808
- } : toolCallUpdateCallback ? {
369809
- onToolCallsUpdate: toolCallUpdateCallback
371039
+ outputUpdateHandler || toolCallUpdateCallback ? {
371040
+ ...outputUpdateHandler && { outputUpdateHandler },
371041
+ ...toolCallUpdateCallback && {
371042
+ onToolCallsUpdate: toolCallUpdateCallback
371043
+ }
369810
371044
  } : void 0
369811
371045
  );
369812
371046
  if (toolResponse.error) {
@@ -389046,7 +390280,7 @@ var import_chalk5 = __toESM(require_source(), 1);
389046
390280
  // packages/cli/src/ui/components/shared/text-buffer.ts
389047
390281
  init_esbuild_shims();
389048
390282
  var import_react46 = __toESM(require_react(), 1);
389049
- import { spawnSync as spawnSync3 } from "node:child_process";
390283
+ import { spawnSync as spawnSync4 } from "node:child_process";
389050
390284
  import fs83 from "node:fs";
389051
390285
  import os32 from "node:os";
389052
390286
  import pathMod from "node:path";
@@ -390887,7 +392121,7 @@ function useTextBuffer({
390887
392121
  const wasRaw = stdin?.isRaw ?? false;
390888
392122
  try {
390889
392123
  setRawMode?.(false);
390890
- const { status, error: error2 } = spawnSync3(editor, [filePath], {
392124
+ const { status, error: error2 } = spawnSync4(editor, [filePath], {
390891
392125
  stdio: "inherit"
390892
392126
  });
390893
392127
  if (error2) throw error2;
@@ -391590,7 +392824,7 @@ var import_react52 = __toESM(require_react(), 1);
391590
392824
  // packages/cli/src/ui/hooks/useLaunchEditor.ts
391591
392825
  init_esbuild_shims();
391592
392826
  var import_react51 = __toESM(require_react(), 1);
391593
- import { spawnSync as spawnSync4 } from "child_process";
392827
+ import { spawnSync as spawnSync5 } from "child_process";
391594
392828
  function getEditorCommand(preferredEditor) {
391595
392829
  if (preferredEditor) {
391596
392830
  return preferredEditor;
@@ -391625,7 +392859,7 @@ function useLaunchEditor() {
391625
392859
  const wasRaw = stdin?.isRaw ?? false;
391626
392860
  try {
391627
392861
  setRawMode?.(false);
391628
- const { status, error: error2 } = spawnSync4(editorCommand2, editorArgs, {
392862
+ const { status, error: error2 } = spawnSync5(editorCommand2, editorArgs, {
391629
392863
  stdio: "inherit"
391630
392864
  });
391631
392865
  if (error2) throw error2;
@@ -395527,7 +396761,9 @@ var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
395527
396761
  var Notifications = /* @__PURE__ */ __name(() => {
395528
396762
  const { startupWarnings } = useAppContext();
395529
396763
  const { initError, streamingState, updateInfo } = useUIState();
395530
- const showStartupWarnings = startupWarnings.length > 0;
396764
+ const settings = useSettings();
396765
+ const config2 = useConfig();
396766
+ const showStartupWarnings = !settings.merged.ui?.hideBanner && !config2.getScreenReader() && startupWarnings.length > 0;
395531
396767
  const showInitError = initError && streamingState !== "responding" /* Responding */;
395532
396768
  if (!showStartupWarnings && !showInitError && !updateInfo) {
395533
396769
  return null;
@@ -395934,6 +397170,7 @@ function IdeIntegrationNudge({
395934
397170
  { isActive: true }
395935
397171
  );
395936
397172
  const { displayName: ideName } = ide;
397173
+ const isInSandbox = !!process.env["SANDBOX"];
395937
397174
  const isExtensionPreInstalled = !!process.env["QWEN_CODE_IDE_SERVER_PORT"] && !!process.env["QWEN_CODE_IDE_WORKSPACE_PATH"];
395938
397175
  const OPTIONS = [
395939
397176
  {
@@ -395961,7 +397198,7 @@ function IdeIntegrationNudge({
395961
397198
  key: "No, don't ask again"
395962
397199
  }
395963
397200
  ];
395964
- const installText = isExtensionPreInstalled ? `If you select Yes, the CLI will have access to your open files and display diffs directly in ${ideName ?? "your editor"}.` : `If you select Yes, we'll install an extension that allows the CLI to access your open files and display diffs directly in ${ideName ?? "your editor"}.`;
397201
+ const installText = isInSandbox ? `Note: In sandbox environments, IDE integration requires manual setup on the host system. If you select Yes, you'll receive instructions on how to set this up.` : isExtensionPreInstalled ? `If you select Yes, the CLI will connect to your ${ideName ?? "editor"} and have access to your open files and display diffs directly.` : `If you select Yes, we'll install an extension that allows the CLI to access your open files and display diffs directly in ${ideName ?? "your editor"}.`;
395965
397202
  return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
395966
397203
  Box_default,
395967
397204
  {
@@ -411169,7 +412406,11 @@ ${queuedText}` : queuedText;
411169
412406
  const handleIdePromptComplete = (0, import_react134.useCallback)(
411170
412407
  (result) => {
411171
412408
  if (result.userSelection === "yes") {
411172
- handleSlashCommand2("/ide install");
412409
+ if (result.isExtensionPreInstalled) {
412410
+ handleSlashCommand2("/ide enable");
412411
+ } else {
412412
+ handleSlashCommand2("/ide install");
412413
+ }
411173
412414
  settings.setValue("User" /* User */, "ide.hasSeenNudge", true);
411174
412415
  } else if (result.userSelection === "dismiss") {
411175
412416
  settings.setValue("User" /* User */, "ide.hasSeenNudge", true);
@@ -412508,6 +413749,11 @@ init_esbuild_shims();
412508
413749
  import fs99 from "node:fs/promises";
412509
413750
  import * as os41 from "node:os";
412510
413751
  import path110 from "node:path";
413752
+ function isTermux3() {
413753
+ return process.platform === "android" || !!process.env["TERMUX_VERSION"] || !!(process.env["PREFIX"] && process.env["PREFIX"].includes("com.termux"));
413754
+ }
413755
+ __name(isTermux3, "isTermux");
413756
+ var IS_TERMUX = isTermux3();
412511
413757
  var homeDirectoryCheck = {
412512
413758
  id: "home-directory",
412513
413759
  check: /* @__PURE__ */ __name(async (options2) => {
@@ -412543,6 +413789,9 @@ var rootDirectoryCheck = {
412543
413789
  var ripgrepAvailabilityCheck = {
412544
413790
  id: "ripgrep-availability",
412545
413791
  check: /* @__PURE__ */ __name(async (options2) => {
413792
+ if (IS_TERMUX) {
413793
+ return null;
413794
+ }
412546
413795
  if (!options2.useRipgrep) {
412547
413796
  return null;
412548
413797
  }
@@ -412558,7 +413807,7 @@ var ripgrepAvailabilityCheck = {
412558
413807
  }, "check")
412559
413808
  };
412560
413809
  var WARNING_CHECKS = [
412561
- homeDirectoryCheck,
413810
+ ...IS_TERMUX ? [] : [homeDirectoryCheck],
412562
413811
  rootDirectoryCheck,
412563
413812
  ripgrepAvailabilityCheck
412564
413813
  ];
@@ -412701,19 +413950,26 @@ async function showResumeSessionPicker(cwd7 = process.cwd()) {
412701
413950
  return new Promise((resolve25) => {
412702
413951
  let selectedId;
412703
413952
  const { unmount, waitUntilExit } = render_default(
412704
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(KeypressProvider, { kittyProtocolEnabled: false, children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
412705
- StandalonePickerScreen,
413953
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
413954
+ KeypressProvider,
412706
413955
  {
412707
- sessionService,
412708
- onSelect: (id) => {
412709
- selectedId = id;
412710
- },
412711
- onCancel: () => {
412712
- selectedId = void 0;
412713
- },
412714
- currentBranch: getGitBranch(cwd7)
413956
+ kittyProtocolEnabled: false,
413957
+ pasteWorkaround: process.platform === "win32" || parseInt(process.versions.node.split(".")[0], 10) < 20,
413958
+ children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
413959
+ StandalonePickerScreen,
413960
+ {
413961
+ sessionService,
413962
+ onSelect: (id) => {
413963
+ selectedId = id;
413964
+ },
413965
+ onCancel: () => {
413966
+ selectedId = void 0;
413967
+ },
413968
+ currentBranch: getGitBranch(cwd7)
413969
+ }
413970
+ )
412715
413971
  }
412716
- ) }),
413972
+ ),
412717
413973
  {
412718
413974
  exitOnCtrlC: false
412719
413975
  }
@@ -415043,7 +416299,7 @@ var GeminiAgent = class {
415043
416299
  name: APPROVAL_MODE_INFO[mode].name,
415044
416300
  description: APPROVAL_MODE_INFO[mode].description
415045
416301
  }));
415046
- const version2 = "0.6.1-termux";
416302
+ const version2 = "0.6.3-termux";
415047
416303
  return {
415048
416304
  protocolVersion: PROTOCOL_VERSION,
415049
416305
  agentInfo: {
@@ -415358,13 +416614,15 @@ async function startInteractiveUI(config2, settings, startupWarnings, workspaceR
415358
416614
  isScreenReaderEnabled: config2.getScreenReader()
415359
416615
  }
415360
416616
  );
415361
- checkForUpdates().then((info) => {
415362
- handleAutoUpdate(info, settings, config2.getProjectRoot());
415363
- }).catch((err) => {
415364
- if (config2.getDebugMode()) {
415365
- console.error("Update check failed:", err);
415366
- }
415367
- });
416617
+ if (!settings.merged.general?.disableUpdateNag) {
416618
+ checkForUpdates().then((info) => {
416619
+ handleAutoUpdate(info, settings, config2.getProjectRoot());
416620
+ }).catch((err) => {
416621
+ if (config2.getDebugMode()) {
416622
+ console.error("Update check failed:", err);
416623
+ }
416624
+ });
416625
+ }
415368
416626
  registerCleanup(() => instance.unmount());
415369
416627
  }
415370
416628
  __name(startInteractiveUI, "startInteractiveUI");
@@ -415501,7 +416759,7 @@ ${finalArgs[promptIndex + 1]}`;
415501
416759
  return runAcpAgent(config2, settings, extensions, argv);
415502
416760
  }
415503
416761
  let input = config2.getQuestion();
415504
- const startupWarnings = [
416762
+ let startupWarnings = [
415505
416763
  ...await getStartupWarnings(),
415506
416764
  ...await getUserStartupWarnings({
415507
416765
  workspaceRoot: process.cwd(),
@@ -415509,6 +416767,9 @@ ${finalArgs[promptIndex + 1]}`;
415509
416767
  useBuiltinRipgrep: settings.merged.tools?.useBuiltinRipgrep ?? true
415510
416768
  })
415511
416769
  ];
416770
+ if (settings.merged.ui?.hideBanner || config2.getScreenReader()) {
416771
+ startupWarnings = [];
416772
+ }
415512
416773
  if (config2.isInteractive()) {
415513
416774
  await kittyProtocolDetectionComplete;
415514
416775
  await startInteractiveUI(
@@ -415619,6 +416880,11 @@ main().catch((error2) => {
415619
416880
  * Copyright 2025 Qwen Team
415620
416881
  * SPDX-License-Identifier: Apache-2.0
415621
416882
  */
416883
+ /**
416884
+ * @license
416885
+ * Copyright 2026 Google LLC
416886
+ * SPDX-License-Identifier: Apache-2.0
416887
+ */
415622
416888
  /**
415623
416889
  * @license
415624
416890
  * Copyright 2025 Qwen team